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 restoreOpac() {
	$('container').style.opacity = "1";
	$('footer').style.opacity = "1";
}

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 = "400";
			element.style.width = WIDTH + "px";
			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(element,{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 ];
}
