//easy, quick ways of referencing specific items in the DOM models
var d = document;
var w = window;
var n = navigator;


//the follwing are variables to determine the users browser for special ways of handling the differences
//internet explorer browser
var ie = (n.appName.indexOf('Microsoft') != -1);
//internet explorer version 6
var ie6 = (ie && n.appVersion.indexOf('MSIE 6.0') != -1);
//internet explorer version 7
var ie7 = (ie && n.appVersion.indexOf('MSIE 7.0') != -1);
//internet explorer prior to version 6
var iep = (ie && !ie6 && !ie7);

//opera
var op = (n.appName.indexOf('Opera') != -1);

//netscape based browser
var ns = (n.appName.indexOf('Netscape') != -1);
//safari
var sf = (ns && n.appVersion.indexOf('Safari') != -1);
//windows firefox (or gecko-based windows browser)
var ff_win = (ns && !sf && !op && n.appVersion.indexOf('Windows') != -1);
//macintoch firefox (or gecko-based macintosh browser)
var ff_mac = (ns && !sf && !op && n.appVersion.indexOf('Macintosh') != -1);
//linux firefox (or gecko-based linux browser)
var ff_lin = (ns && !sf && !op && n.appVersion.indexOf('X11') != -1);
//
function AJAXGetRequest(requestObj, url, stateChangeFunction){
	eval(requestObj + ' = createRequest()');
	eval(requestObj + '.onreadystatechange = stateChangeFunction');
	eval(requestObj + '.open("GET", url, true)');
	eval(requestObj + '.send(null)');
}

function AJAXPostRequest(requestObj, url, form_name, stateChangeFunction){
	var parameters = buildPostParameterString(form_name);
	eval(requestObj + ' = createRequest();');
	eval(requestObj + '.onreadystatechange = stateChangeFunction');
	eval(requestObj + '.open("POST", url, true)');
	eval(requestObj + '.setRequestHeader("Content-type", "application/x-www-form-urlencoded")');
    eval(requestObj + '.setRequestHeader("Content-length", parameters.length)');
    eval(requestObj + '.setRequestHeader("Connection", "close")');
	eval(requestObj + '.send(parameters)');
}

function createRequest(){
	var requestObj;
	
	if (window.XMLHttpRequest){
		requestObj = new XMLHttpRequest();
		if (requestObj.overrideMimeType) 
			requestObj.overrideMimeType('application/xml');
	} 
	else if (window.ActiveXObject){
		try{
			requestObj = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e){
			try{
				requestObj = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) {}
		}
	}
	
	return requestObj;
}

function buildPostParameterString(form_name){
	eval('form = document.' + form_name);
	var text = '';

	for(var i=0; i < form.elements.length; i++){
		switch(form.elements[i].type){
			case 'text':
			case 'textarea':
			case 'hidden':
			case 'password':
				text += (text ? '&' : '') + form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value);
				break;
			
			case 'select-one':
			case 'select-multiple':
				for(var j=0; j < form.elements[i].length; j++){
					if(form.elements[i].options[j].selected)
						text += (text ? '&' : '') + encodeURIComponent(form.elements[i].name) + "=" + encodeURIComponent(form.elements[i].options[j].value);
				}
				break;
			
			case 'checkbox':
			case 'radio':
				if(form.elements[i].checked)
					text += (text ? '&' : '') + form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value);
				break;
		}
	}

	return text;
}

// Function to clean up the unicode html entities like ' and & and return them as their characters
function cleanUnicodeEntities(string)
{
	var re = new RegExp(/&#(\d+);/g);
	var m;
	while(m = re.exec(string))
		string = string.replace(string.substring(m.index,m.index+m.length+3),String.fromCharCode(string.substring(m.index+2,m.index+m.length+2)));
	
	return string;
}

//a quicker reference to document.getElementById()
function gEBI(id){
	return d.getElementById(id);
}