﻿
var ajax_debug_mode = false ;
function AJAX_DEBUG(text) {
	if (ajax_debug_mode)
		alert( text ) ;
}

function XMLHTTPObject() {
	var xmlhttp;

	if (window.ActiveXObject) {
		// Instantiate the latest Microsoft ActiveX Objects
		if (_XML_ActiveX) {
			xmlhttp = new ActiveXObject(_XML_ActiveX);
		} else {
			// loops through the various versions of XMLHTTP to ensure we're using the latest
			var versions = ["MSXML2.XMLHTTP", "Microsoft.XMLHTTP", 
			"Msxml2.XMLHTTP.7.0", "Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", 
			"Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0"];

			for (var i = 0; i < versions.length ; i++) {
				try {
					// Try and create the ActiveXObject for Internet Explorer, if it doesn't work, try again.
					xmlhttp = new ActiveXObject(versions[i]);
					if (xmlhttp) {
						var _XML_ActiveX = versions[i];
						break;
					}
				}
				catch (e) {
				// TRAP
				} ;
			}
		;
		}
	} // Well if there is no ActiveXObject available it must be firefox, opera, or something else

	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp = false;
		}
	}

	return xmlhttp;
}

var f = true;
function AJAX_ACTIONS(url, Action, div, Event, AllowReAjax) {
	if ( f ) {
		f = AllowReAjax ;
		var xmlhttp = XMLHTTPObject() ;

		xmlhttp.open(Action, url, true)
		xmlhttp.onreadystatechange=function() {
			AJAX_LOAD_PAGE(xmlhttp, div, Event)
		}

		var sendf = Event + "=1" ;
		if ( Action == "POST" ) {
			var fields = new Array();

			//loop through form elements and retrieve field NAMEs and Values
			for (var x = 1; x < eval("document.forms[0].elements.length"); x++){
				// join them into a string.
				if ( document.forms[0].elements[x].type == "select-multiple" )
				{
					var tempSelectedValues = "" ;
					for ( var k=0; k<=document.forms[0].elements[x].options.length-1; k++ )
					{
						if ( document.forms[0].elements[x].options[k].selected )
							tempSelectedValues += document.forms[0].elements[x].options[k].value + "," ;
					}
					eval("fields.push(document.forms[0].elements[x].id+'='+tempSelectedValues)");
				}
				else if ( document.forms[0].elements[x].type == "checkbox" )
				{
					if ( document.forms[0].elements[x].checked )
						eval("fields.push(document.forms[0].elements[x].id+'=1')");
					else
						eval("fields.push(document.forms[0].elements[x].id+'=0')");
				}
				else if ( document.forms[0].elements[x].type == "radio" )
				{
					if ( document.forms[0].elements[x].checked )
						eval("fields.push(document.forms[0].elements[x].id+'=1')");
					else
						eval("fields.push(document.forms[0].elements[x].id+'=0')");
				}
				else
				{
					if ( document.forms[0].elements[x].type != "button" )
					{
						var elValue = "";
						if ( document.forms[0].elements[x].value != null )
						{
							elValue = document.forms[0].elements[x].value;
							elValue = replaceAll(elValue, '&', '%26');
							elValue = replaceAll(elValue, '+', '%2b');
						}
						eval("fields.push(document.forms[0].elements[x].id + '=' + elValue )");
					}
				}
			}

			//sendf looks like "username=myusername&password=mypass"
			if ( document.forms[0].elements.length > 1 )
			{
				sendf += "&" + fields.join('&');
				AJAX_DEBUG(sendf) ;
			}

			xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		}

		xmlhttp.send(sendf) ;

		AJAX_PRE_LOAD_PAGE(div, AllowReAjax) ;
	}
}

function AJAX_PRE_LOAD_PAGE(div, AllowReAjax){
	if ( div != null )
	{
//		div.innerHTML = '<img src="../Images/system/loading.gif" alt="" />';
		div.innerHTML = '<center><font class="formlabel">Loading data...</font></center>' ;
		div.style.display = "block" ;
	}

	if ( !AllowReAjax )
	{
		EnableDisablePage(true) ;
	}
}

function AJAX_LOAD_PAGE(xmlhttp, div, Event){
	if (xmlhttp.readyState == 4) {
		Error = false ;

		if ( xmlhttp.status==200 || window.location.href.indexOf("http") == -1 ) {
			Error = false ;
			results = "";
			AJAX_DEBUG( div ) ;
			AJAX_DEBUG( xmlhttp.responseText ) ;
			results = xmlhttp.responseText; // xmlhttp.responseXML;
			if ( div != null )
			{
				div.innerHTML = results;
			}
		} else {
			Error = true ;
			results = "";
			results += "<table width='100%' border='0' cellpadding='2' cellspacing='1'><tr><td class='formlabel' align='center'>" ;
			results += "An unknown error has occured";
			results += "</td></tr></table>" ;
			if ( div != null )
				div.innerHTML = results;
		}

		f = true; // re activate the AJAX function


		if ( Event.indexOf("insert") >=0 ) { ShowMessages(results, Event); }
		if ( Event.indexOf("update") >=0 ) { ShowMessages(results, Event); }
		if ( Event.indexOf("delete") >=0 ) { ShowMessages(results, Event); }
		if ( Event.indexOf("relations") >=0 ) { ShowRelations(results, Event); }
		if ( Event.indexOf("execute") >=0 ) { ShowExecuteMessages(results, Event); }

		EnableDisablePage(false) ;
	}
}

function replaceAll( str, from, to )
{
	var idx = str.indexOf( from );

	while ( idx > -1 )
	{
		str = str.replace( from, to ); 
		idx = str.indexOf( from );
	}

	return str;
}

function EnableDisablePage(action)
{
	myDocumentElements = document.getElementsByTagName("select") ;

	for( j=0; j<myDocumentElements.length; j++ )
	{
		myDocumentElements.item(j).disabled = action;
	}
}