/*
AJAX Basic - update a div element with a difrent page
--------------------------------------------------------------------------------------------------------

V1.03 - 23/02/10 AC
- modifyed to action javascript if not requesting a parent page

V1.02 - 23/02/10 AC
- modifyed to allow a iframe to send to parent

V1.01 - 23/02/10 AC
- modifyed to class based

V1.0 - 23/02/10 AC
- new file for simple AJAX requests


--Make an AJAX request a max of 1 item of Data--
	fAJAX_Update('[requested file]', '[elemnt to update]', [name of post], [value to post]);

--Make an AJAX request using Get Data [WARNING: max limit for url is 2084 charectors]--
	fAJAX_UpdateGet('[requested file]', '[elemnt to update]', [form to pass]);

--Make an AJAX request using Post Data--
	fAJAX_UpdatePost('[requested file]', '[elemnt to update]', [form to pass]);

*/

function AJAX() {
	this.xmlhttp;
	this.gvelement = "";
	
	this.fAJAX_Update = fAJAX_Update;
	this.fAJAX_UpdateCom = fAJAX_UpdateCom;
	this.fAJAX_UpdateGet = fAJAX_UpdateGet;
	this.fAJAX_UpdatePost = fAJAX_UpdatePost;
	
	this.GetXmlHttpObject = GetXmlHttpObject;
}

function fAJAX_Update(vfile, velement, vPostName, vPostValue, bParent){
	//sends AJAX request with 1 item of data
	this.gvelement=velement; //set global element id to update
	this.xmlhttp=this.GetXmlHttpObject();
	var pointer = this;
	if (this.xmlhttp==null) {alert ("Browser does not support Request"); return; }
	
	var url="";
	if(url!=""){url=url+"&";}
	url=url + vPostName + "=" + vPostValue +"";
	url=vfile+"?"+url;
	
	this.xmlhttp.onreadystatechange = function (){
			if (pointer.xmlhttp.readyState==4){
				if(bParent){
					parent.document.getElementById(pointer.gvelement).innerHTML=pointer.xmlhttp.responseText;
				}else{
					document.getElementById(pointer.gvelement).innerHTML=pointer.xmlhttp.responseText;
					
					var responseText = pointer.xmlhttp.responseText;
					var ScriptFragment = '(?:<script.*?>)((\n|.)*?)(?:</script>)';
		   
					var match    = new RegExp(ScriptFragment, 'img');
					var scripts  = responseText.match(match);
					
					if(scripts) {
						var js = '';
						for(var s = 0; s < scripts.length; s++) {
							var match = new RegExp(ScriptFragment, 'im');
							js += scripts[s].match(match)[1];
						}
						eval(js);
					}
				}
			}
		}
	this.xmlhttp.open("GET",url,true);
	this.xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	this.xmlhttp.send(null);
}

function fAJAX_UpdateCom(vfile, velement, vValues, bParent){
	//sends AJAX request with a comma seperated values sent via GET [WARNING: max limit for url is 2084 charectors]
	this.gvelement=velement; //set global element id to update
	if(this.gvelement){
		this.xmlhttp=this.GetXmlHttpObject();
		var pointer = this;
		if (this.xmlhttp==null) {alert ("Browser does not support Request"); return; }
		
		var url="";
		var elem = vValues.split(',');
		for(var i = 0; i < elem.length; i++){
			if(url!=""){
				url=url+"&";
			}
			var details = elem[i].split('=');
			if(details.length==2){
				url=url + details[0] + "=" + encodeURIComponent(details[1])+"";
			}
		} 
		url=vfile+"?"+url;
		this.xmlhttp.onreadystatechange = function (){
				if (pointer.xmlhttp.readyState==4){
					if(bParent){
						parent.document.getElementById(pointer.gvelement).innerHTML=pointer.xmlhttp.responseText;
					}else{
						document.getElementById(pointer.gvelement).innerHTML=pointer.xmlhttp.responseText;
						
						var responseText = pointer.xmlhttp.responseText;
						var ScriptFragment = '(?:<script.*?>)((\n|.)*?)(?:</script>)';
			   
						var match    = new RegExp(ScriptFragment, 'img');
						var scripts  = responseText.match(match);
						
						if(scripts) {
							var js = '';
							for(var s = 0; s < scripts.length; s++) {
								var match = new RegExp(ScriptFragment, 'im');
								js += scripts[s].match(match)[1];
							}
							eval(js);
						}
					}
				}
			}
		this.xmlhttp.open("GET",url,true);
		this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
		this.xmlhttp.send(null);
	}
}

function fAJAX_UpdateGet(vfile, velement, vform, bParent){
	//sends AJAX request with a form sent via GET [WARNING: max limit for url is 2084 charectors]
	this.gvelement=velement; //set global element id to update
	this.xmlhttp=this.GetXmlHttpObject();
	var pointer = this;
	if (this.xmlhttp==null) {alert ("Browser does not support Request"); return; }
	
	var url="";
	var elem = document.getElementById(vform).elements;
	for(var i = 0; i < elem.length; i++){
		if(url!=""){
			url=url+"&";
		}
		url=url + elem[i].name + "=" + encodeURIComponent(elem[i].value)+"";
	} 
	url=vfile+"?"+url;
	this.xmlhttp.onreadystatechange = function (){
			if (pointer.xmlhttp.readyState==4){
				if(bParent){
					parent.document.getElementById(pointer.gvelement).innerHTML=pointer.xmlhttp.responseText;
				}else{
					document.getElementById(pointer.gvelement).innerHTML=pointer.xmlhttp.responseText;
					
					var responseText = pointer.xmlhttp.responseText;
					var ScriptFragment = '(?:<script.*?>)((\n|.)*?)(?:</script>)';
		   
					var match    = new RegExp(ScriptFragment, 'img');
					var scripts  = responseText.match(match);
					
					if(scripts) {
						var js = '';
						for(var s = 0; s < scripts.length; s++) {
							var match = new RegExp(ScriptFragment, 'im');
							js += scripts[s].match(match)[1];
						}
						eval(js);
					}
				}
			}
		}
	this.xmlhttp.open("GET",url,true);
	this.xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	this.xmlhttp.send(null);
}


function fAJAX_UpdatePost(vfile, velement, vform, bParent){
	//sends AJAX request with a form sent via POST
	this.gvelement=velement; //set global element id to update
	this.xmlhttp=this.GetXmlHttpObject();
	var pointer = this;
	if (this.xmlhttp==null) {alert ("Browser does not support Request"); return; }
	
	var param="";
	if(document.getElementById(vform) != null){
		var elem = document.getElementById(vform).elements;
		for(var i = 0; i < elem.length; i++){
			if(param!=""){
				param=param+"&";
			}
			param=param + elem[i].name + "=" + encodeURIComponent(elem[i].value)+"";
		} 
	}
	
	this.xmlhttp.onreadystatechange = function (){
			if (pointer.xmlhttp.readyState==4){
				if(bParent){
					parent.document.getElementById(pointer.gvelement).innerHTML=pointer.xmlhttp.responseText;
				}else{
					document.getElementById(pointer.gvelement).innerHTML=pointer.xmlhttp.responseText;
					
					var responseText = pointer.xmlhttp.responseText;
					var ScriptFragment = '(?:<script.*?>)((\n|.)*?)(?:</script>)';
		   
					var match    = new RegExp(ScriptFragment, 'img');
					var scripts  = responseText.match(match);
					
					if(scripts) {
						var js = '';
						for(var s = 0; s < scripts.length; s++) {
							var match = new RegExp(ScriptFragment, 'im');
							js += scripts[s].match(match)[1];
						}
						eval(js);
					}
				}
			}
		}
	
	this.xmlhttp.open("POST",vfile,true);
	this.xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	this.xmlhttp.send(param);
}

function GetXmlHttpObject(){
	if (window.XMLHttpRequest) { return new XMLHttpRequest();}  // code for IE7+, Firefox, Chrome, Opera, Safari}
	if (window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); }// code for IE6, IE5 }
	return null;
}
