(function(){
  var methods = {
    defaultValueActsAsHint: function(element){
      element = $(element);
      element._default = element.value;
      
      return element.observe('focus', function(){
        if(element._default != element.value) return;
        element.removeClassName('hint').value = '';
      }).observe('blur', function(){
        if(element.value.strip() != '') return;
        element.addClassName('hint').value = element._default;
      }).addClassName('hint');
    }
  };
   
  $w('input textarea').each(function(tag){ Element.addMethods(tag, methods) });
})();

function confirmNav(url) {
	if(confirm("This action is irreversible. Do you wish to continue?")) {
		if(url != "" && url != "undefined" && url != null) {
			window.location = url;
		}
		else return true;
	}
}

function popup(targetDiv, file, callBack) {
	new Ajax.Request(file, {
		method: 'get',
		onSuccess: function(transport) { 
			// $('loading-indicator').style.display = "none";
			if(transport.responseText.length == 0) {
				return;
			}
			
			setOpac();
			
			var scroll = getScrollXY();
			
			var element = Builder.node('div', {classname:'ajax_target', id:targetDiv});
			element.innerHTML = transport.responseText;
			
			WIDTH = "700";
			element.style.width = WIDTH + "px";
			element.style.position = "absolute";
			element.style.top = (scroll[1] + 100) + "px";
			element.style.left = scroll[0] + (document.body.clientWidth / 2) - (WIDTH / 2) + "px";
			element.style.display = "none";
			element.style.zIndex = 99;
			
			// $('ajax').style.width = window.innerWidth + "px";
			// $('ajax').style.height = window.innerHeight + "px";
			// $('ajax').style.border = "1px solid";
			// $('ajax').style.backgroundColor = "#000000";
			// $('ajax').style.position = "absolute";
			// $('ajax').style.left = "0px";
			// $('ajax').style.top = "0px";
			// $('ajax').style.opacity = "0";
			$('ajax').appendChild(element);
			Effect.Appear(targetDiv,{duration:.3});
			
			if(callBack) {
				callBack();
			}
		}
	});
}

function closePopup(divName) {
	var div = $(divName);
	if(div) {
		div.parentNode.removeChild(div);
		restoreOpac();
	}
}

function xml(xmlString) {
	var parser;
	var xmlDoc;
	try {
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(xmlString);
	}
	catch(e) {
		try {
			parser = new DOMParser();
			xmlDoc = parser.parseFromString(xmlString,"text/xml");
		}
		catch(e) {
			alert(e.message);
			return false;
		}
	}
	
	return xmlDoc;
}

function makeRequest(url, targetDiv) {
	var httpRequest;
	
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
		httpRequest = new XMLHttpRequest();
		if (httpRequest.overrideMimeType) {
			httpRequest.overrideMimeType('text/xml');
			// See note below about this line
		}
	} 
	else if (window.ActiveXObject) { // IE
		try {
			httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) {
			try {
				httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (e) {}
		}
	}

	if (!httpRequest) {
		alert('Giving up :( Cannot create an XMLHTTP instance');
		return false;
	}
	httpRequest.onreadystatechange = function() { 
		if(targetDiv == "undefined" || targetDiv == null)
			alertContents(httpRequest); 
		else {
			assignContents(httpRequest, targetDiv);
		}
	};
	httpRequest.open('GET', url, true);
	httpRequest.send('');
}

function makePostRequest(url, parameters, callback) {
	http_request = false;
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			// set type accordingly to anticipated content type
			//http_request.overrideMimeType('text/xml');
			http_request.overrideMimeType('text/html');
		}
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
	if (!http_request) {
		alert("Cannot create XMLHTTP instance");
		return false;
	}
	
	if(callback) {
		http_request.onreadystatechange = function() {
			if(http_request.readyState == 4) {
				callback(http_request);
			}
		}
	}
	else {
		http_request.onreadystatechange = function() {
			assignContents(http_request, "" + Math.random());
		}
	}
	http_request.open('POST', url, true);
	http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	http_request.setRequestHeader("Content-length", parameters.length);
	http_request.setRequestHeader("Connection", "close");
	http_request.send(parameters);
}

function getFormValues(fobj, valFunc) {
	var str = "";
	var valueArr = null;
	var val = "";
	var cmd = "";
	for(var i = 0;i < fobj.elements.length;i++) {
		// alert(fobj.elements[i].type);
		switch(fobj.elements[i].type) {
			case "hidden":
				str += fobj.elements[i].name +
					"=" + escape(fobj.elements[i].value) + "&";
				break;
			case "textarea":
				if(valFunc) {
					//use single quotes for argument so that the value of
					//fobj.elements[i].value is treated as a string not a literal
					cmd = valFunc + "(" + 'fobj.elements[i].value' + ")";
					val = eval(cmd)
				}
				str += fobj.elements[i].name +
					"=" + escape(fobj.elements[i].value) + "&";
				break;
			case "text":
				if(valFunc) {
					//use single quotes for argument so that the value of
					//fobj.elements[i].value is treated as a string not a literal
					cmd = valFunc + "(" + 'fobj.elements[i].value' + ")";
					val = eval(cmd)
				}
				str += fobj.elements[i].name +
					"=" + escape(fobj.elements[i].value) + "&";
				break;
			case "select-one":
				str += fobj.elements[i].name +
                	"=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&";
				break;
			case "radio":
				if(fobj.elements[i].checked) {
					str += fobj.elements[i].name +
						"=" + escape(fobj.elements[i].value) + "&";
				}
				break;
		}
	}
	str = str.substr(0,(str.length - 1));
	return str;
}

function alertContents(httpRequest) {
	if (httpRequest.readyState == 4) {
		if (httpRequest.status == 200) {
			doAjaxAlert(httpRequest.responseText);
		} else {
			alert("There was a problem with the request.");
		}
	}
}

function setOpac() {
	// $('loading-indicator').style.display = "";
	$('wrapper').onclick = function() { return false; }
	$('wrapper').morph('opacity:.25;', { duration: .3 });
}

function restoreOpac() {
	// $('loading-indicator').style.display = "none";
	$('wrapper').onclick = function() { }
	$('wrapper').morph('opacity:1;', { duration: .3 });
}

function assignContents(httpRequest, targetDiv) {
	if (httpRequest.readyState == 4) {
		var scroll = getScrollXY();
		
		// elem = document.getElementById(targetDiv);
		
		if (httpRequest.status == 200) {
			element = Builder.node('div',{classname:'ajax_target', id:targetDiv});
			element.innerHTML = httpRequest.responseText;
			
			WIDTH = "600";
			element.style.width = WIDTH;
			element.style.position = "absolute";
			element.style.top = (scroll[1] + 100) + "px";
			element.style.left = (document.body.clientWidth / 2) - (WIDTH / 2) + "px";
			element.style.display = "none";
			element.style.zIndex = 1000;
			
			new Draggable(element);
			$('ajaxTargets').appendChild(element);
			Effect.Appear(targetDiv,{duration:.3});
			// $(targetDiv).style.display = "";
			
			$('container').style.opacity = ".3";
			$('footer').style.opacity = ".3";
		} else {
			elem.innerHTML = "There was a problem with the request.";
		}
	}
}

function doAjaxAlert(contents) {
	makeRequest('/ajaxAlert/?ajax&contents=' + contents, 'alertDiv');
	Effect.Fade('semi_transparent',{duration:.3});
}

function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}
