/*	Ajax Get, Post & Submit with History/Script Support
	Author: OscarMedina
	http://ajaxdotjs.oscarmedinax.com
	Version 8.4 1/03/2008 2:43am
	Monterrey, N.L. Mexico	*/

/*   Start Config Area   */
var loadimg = ''; // Url to image loading (blank for none)
var supporthist = false; // Support History (true/false) [Safari not supported]
var supportscript = false; // Support Scripts in responses (true/false)
/*    End Config Area   */

var divid;
var accept = true;
var historial = true;

// Create XHTML Http Object
if(navigator.appName == "Microsoft Internet Explorer"){
	var request = new ActiveXObject("Microsoft.XMLHTTP");
}else{
	var request = new XMLHttpRequest();
}

// Get Function
function get(elements, action, div, un){
	if(accept){
		divid = div;

		if(supporthist){
			if(elements.indexOf('run=true&') < 0){	
				if(historial && !un){
					add2history(elements,action,div);	
				}else{
					historial = true;
				}
				return;
			}
		}
		
		request.open('GET', action+'?'+elements+'&refresh='+new Date().getTime(), true);
		request.onreadystatechange = output; 
		request.send('');
		accept = false;
	}
}

// Post Function
function post(elements, action, div){
	if(accept){
		divid = div;
		request.open('POST', action, true);
		request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		request.onreadystatechange = output; 
		request.send(elements+'&refresh='+new Date().getTime());
		accept = false;
	}
}

// Ajax Submit
function ajaxsubmit(form,target){

	var count = document.forms[form].elements.length;
	var method = document.forms[form].method;
	var action = document.forms[form].action;
	var elements = '';
	
	for (i=0; i<count; i++)  {
		var element = document.forms[form].elements[i];
		if(i>0){elements += '&';}
		if(element.type == "checkbox"){
			elements += (element.name+'='+element.checked);			
		}else if(element.type == "radio"){
			if(element.checked == true){
				elements += (element.name+'='+element.value);
			}else{
				elements = elements.substr(0,(elements.length-1));				
			}
		}else{
			elements += (element.name+'='+element.value);
		}
	}
	
	if(method.toLowerCase() == "get"){
		get(elements,action,target);
	}else{
		post(elements,action,target);
	}
}

// Response
function output(){
	if(request.readyState == 1){ // While Processing
		if(loadimg != ''){
			document.getElementById(divid).innerHTML = "<center><img src='"+loadimg+"'></center>";
		}
	}
	
	if(request.readyState == 4){ // When Processed
		if(supportscript){
			if(request.responseText.indexOf('<script>') > -1){
				var script=request.responseText.split('<script>');
				var actual;
				for(var i = 1; i < script.length; i++){
					actual = script[i].split('</script>');
					eval(actual[0]);		
				}
			}
		}
		
		document.getElementById(divid).innerHTML = request.responseText;
		accept = true;
	}
}

// Ajax History
function add2history(elements,action,div){
	document.getElementById('history').src = 'history.php?elements='+elements.replace(/&/g,";")+'&action='+action+'&div='+div;
}

function addhist(){
	var body = document.getElementsByTagName("body")[0];
	var iframe = document.createElement("iframe");
	iframe.setAttribute("id", "history");
	body.appendChild(iframe);
	document.getElementById('history').style.display = 'none';
}

if(supporthist){
	window.onload = addhist;
}
