/*

Don't Steal Shit.

AJAX Request & Response (rr) Functions
Note:
	Global Variables are defined as rr_*
	Local Request Variables are defined as request*
	Local General Variables are defined as variable*

*/

var rr_request		= new Array();
var rr_error		= new Array();
var rr_eid			= new Array();
var rr_messages		= new Array();
var rr_oldContent	= new Array();
var rr_this			= this;

rr_messages['error']	= "There was an error processing your request.";
rr_messages['timeout']	= "Error: The request timed out.";
rr_messages['loading']	= "Loading, Please Wait...";

if ( typeof(DOMParser) == 'undefined' ) {
	DOMParser = function() {};
	DOMParser.prototype.parseFromString = function (str,contentType) {
		if ( typeof(ActiveXObject) != 'undefined' ) {
			var xmldata = new ActiveXObject('MSXML.DomDocument');
			xmldata.async = false;
			xmldata.loadXML(str);
			return xmldata;
		} else if ( typeof(XMLHttpRequest) != 'undefined' ) {
			var xmldata = new XMLHttpRequest;
			if ( !contentType ) contentType = 'application/xml';
			xmldata.open('GET', 'data:'+contentType+';charset=utf-8,'+encodeURIComponent(str), false);
			if ( xmldata.overrideMimeType ) xmldata.overrideMimeType(contentType);
			xmldata.send(null);
			return xmldata.responseXML;
		}
	}
}

function rr_findElementById(variableElementId) {
	if ( document.getElementById ) { return document.getElementById(variableElementId); }
	if ( document.all ) { return eval('document.all.'+variableElementId); }
	if ( document.layers ) { return eval('document.'+variableElementId); }
	return false;
}

function rr_variableArrayToString(variableArray,variableParentArrayString) {
	var variableString = "";
	for ( i in variableArray ) {
		if ( variableArray[i].constructor.toString().indexOf("Array") > -1 ) {
			if ( variableParentArrayString == null ) { variableParentArrayString = i+"["; }
				else { variableParentArrayString += i+"["; }
			variableString += rr_variableArrayToString(variableArray[i],variableParentArrayString);
		} else {
			if ( variableParentArrayString == null ) {
				variableString += i+"="+variableArray[i]+"&";
			} else {
				variableString += variableParentArrayString+i+"]="+variableArray[i]+"&";
			}
		}
	}
	if ( variableParentArrayString == null ) { variableString = variableString.substring(0,variableString.length-1); }
	return variableString;
}

function rr_getFormElements(variableFormId) {
	if ( rr_findElementById(variableFormId) ) {
		var variableValuesArray = new Array();
		var variableTextarea	= rr_findElementById(variableFormId).getElementsByTag('textarea');
		var variableInput		= rr_findElementById(variableFormId).getElementsByTag('input');
		var variableSelect		= rr_findElementById(variableFormId).getElementsByTag('select');
		if ( variableTextarea.length > 0 ) {
			for ( var i in variableTextarea ) {
				if ( variableTextarea[i].disabled != true ) {
					variableValuesArray[variableTextarea[i].name] = encodeURIComponent(variableTextarea[i].innerHTML);
				}
			}
		}
		if ( variableInput.length > 0 ) {
			for ( var i in variableInput ) {
				if ( variableInput[i].disabled != true ) {
					if ( variableInput[i].type == 'checkbox' ) {
						if ( variableValuesArray[variableInput[i].name] == "undefined" ) { variableValuesArray[variableInput[i].name] = new Array(); }
						if ( variableInput[i].selected == true ) {
							variableValuesArray[variableInput[i].name][variableValuesArray[variableInput[i].name].length] = variableInput[i].value;
						}
					} else if ( variableInput[i].type == 'radio' ) {
						if ( variableInput[i].selected == true ) {
							variableValuesArray[variableInput[i].name] = variableInput[i].value;
						}
					} else {
						variableValuesArray[variableInput[i].name] = encodeURIComponent(variableInput[i].value);
					}
				}
			}
		}
		if ( variableSelect.length > 0 ) {
			for ( var i in variableSelect ) {
				if ( variableSelect[i].disabled != true && variableSelect[i].selectedIndex > -1 ) {
					if ( variableSelect[i].multiple == true ) {
						if ( variableValuesArray[variableSelect[i].name] == "undefined" ) { variableValuesArray[variableSelect[i].name] = new Array(); }
						for ( var j in variableSelect[i].options ) {
							if ( variableSelect[i].options[j].selected == true ) {
								variableValuesArray[variableSelect[i].name][j] = encodeURIComponent(variableSelect[i].options[j].value);
							}
						}
					} else {
						variableValuesArray[variableSelect[i].name] = encodeURIComponent(variableSelect[i].options[variableSelect[i].selectedIndex].value);
					}
				}
			}
		}
		return variableValuesArray;
	} else {
		return false;
	}
}

function rr_updatePage(requestId,variableContent) {
	if ( rr_findElementById(rr_this.rr_eid[requestId]) ) {
		rr_findElementById(rr_this.rr_eid[requestId]).innerHTML = variableContent;
		return true;
	} else {
		return false;
	}
}

function rr_clearRequest(requestId) {
	rr_this.rr_request[requestId].abort();
	rr_this.rr_request[requestId]	= null;
	rr_this.rr_error[requestId]		= null;
	rr_this.rr_eid[requestId]		= null;
	return requestId;
}

function rr_nextAvailableRequestId() {
	var requestPointer;
	if ( rr_this.rr_request.length > 0 ) {
		for ( i in rr_this.rr_request ) {
			requestPointer = i;
		}
	} else {
		requestPointer = -1;
	}
	requestPointer = parseInt(requestPointer);
	return (requestPointer+1);
}

function rr_setRequest(requestId) {
	var requestError, requestBool = true;
	try {
		rr_this.rr_request[requestId] = new XMLHttpRequest();
	} catch ( requestError ) {
		try {
			rr_this.rr_request[requestId] = new ActiveXObject("Microsoft.XMLHTTP");
		} catch ( requestError ) {
			try {
				rr_this.rr_request[requestId] = new ActiveXObject("Msxml2.XMLHTTP");
			} catch ( requestError ) {
				requestBool = false;
				rr_updatePage(requestId,rr_this.rr_messages['error']);
			}
		}
	}
	rr_this.rr_error[requestId] = requestError;
	return requestBool;
}

function rr_sendRequest(requestId,requestType,requestURI,requestVariables,requestAsync,onRSCFunction) {
	var requestFullURI, requestBool = true, requestVariableString = null;
	requestFullURI = requestURI;
	if ( onRSCFunction == undefined ) {
		rr_this.rr_request[requestId].onreadystatechange = function() {
			if ( rr_this != undefined ) {
				if ( rr_this.rr_request[requestId].readyState == 4 ) {
					if ( rr_this.rr_request[requestId].responseText == "FALSE" ) {
						rr_updatePage(requestId,rr_this.rr_oldContent[requestId]);
					} else {
						rr_updatePage(requestId,rr_this.rr_request[requestId].responseText);
					}
					rr_clearRequest(requestId);
				} else {
					rr_updatePage(requestId,rr_this.rr_messages['loading']);
				}
			}
		};
	} else {
		rr_this.rr_request[requestId].onreadystatechange = onRSCFunction;
	}
	if ( requestType == "GET" ) {
		requestType		= "GET";
		requestFullURI += "?"+rr_variableArrayToString(requestVariables,null);
	} else if ( requestType == "POST" ) {
		requestType				= "POST";
		requestVariableString	= rr_variableArrayToString(requestVariables,null);
	} else {
		requestType				= "POST";
		requestVariableString	= rr_variableArrayToString(requestVariables,null);
	}
	if ( typeof(requestAsync) != "boolean" ) { requestAsync = true; }
	rr_this.rr_request[requestId].open(requestType,requestFullURI,requestAsync); // true = async | false = sync (wait/freeze)
	rr_this.rr_request[requestId].setRequestHeader('If-Modified-Since', 'Wed, 15 Nov 1995 00:00:00 GMT');
	rr_this.rr_request[requestId].setRequestHeader("Content-type","application/x-www-form-urlencoded");
	rr_this.rr_request[requestId].send(requestVariableString);
	return requestBool;
}

function rr_doRequest(variableElementId,requestType,requestURI,requestVariables,requestAsync,onRSCFunction) { // requestVariables = Array ( key => value )
	var requestId;
	requestId							= rr_nextAvailableRequestId();
	rr_this.rr_eid[requestId]			= variableElementId;
	rr_this.rr_request[requestId]		= null;
	rr_this.rr_error[requestId]			= "";
	if ( _gei(variableElementId) ) {
		rr_this.rr_oldContent[requestId]	= _gei(variableElementId).innerHTML;
		if ( rr_setRequest(requestId) ) {
			if ( rr_sendRequest(requestId,requestType,requestURI,requestVariables,requestAsync,onRSCFunction) ) {
				return requestId;
			}
		}
	}
	return false;
}

function rr_xml2Array(oXml,sTag,oArray) {
	if ( typeof(sTag) == "string" ) {
		if ( oXml.getElementsByTagName(sTag) ) { var oTag = oXml.getElementsByTag(sTag).item(0); }
	} else {
		if ( sTag ) { var oTag = sTag; }
	}
	if ( oTag ) {
		if ( oTag.childNodes.length > 0 ) {
			for ( var i in oTag.childNodes ) {
				if ( oTag.childNodes[i].nodeType == 1 && oTag.childNodes[i].firstChild ) {
					if ( oTag.childNodes[i].childNodes.length == 1 ) {
						oArray[oTag.childNodes[i].tagName] = oTag.childNodes[i].firstChild.nodeValue;
					} else {
						oArray[oTag.childNodes[i].tagName] = [];
						rr_xml2Array(oXml,oTag.childNodes[i],oArray);
					}
				}
			}
		} else {
			oArray = oTag.innerHTML;
		}
	}
	return oArray;
}
