function encodeStr(str){
	if(isNaN(str) && !isArray(str)) {
		str = str.replace(/&/g, '##AND##');		
		str = str.replace(/\+/g, '##ADD##');		
		str = str.replace('=', '##EQUAL##');
		str = str.replace('?', '##QUESTION##');
		str = str.replace('%', '##PERCENT##');
	}
	return str;
}
function decodeStr(str){
	str = str.replace('##ADD##', '+');
	str = str.replace('##AND##', '&');
	str = str.replace('##EQUAL##', '=');
	str = str.replace('##QUESTION##', '?');
	str = str.replace('##PERCENT##', '%');
	return str;
}
function AjaxInit(){
	var AjaxObj = false;
	if(window.XMLHttpRequest){
		AjaxObj = new XMLHttpRequest();
	}else if(window.ActiveXObject){
		AjaxObj=new ActiveXObject("Msxml2.XMLHTTP");
		if (!AjaxObj){
			AjaxObj=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return(AjaxObj);
}
function ajaxVars(){
	this.vars = new Array();
	this.vars['sqlDB'] = '0';
	this.fnVars = new Array();
	this.dbVars = new Array();
	this.sendMethod = 'POST';
	this.gotoFunction = '';
	this.gotoAferStatus = '';
	this.xmlData = '';	
	this.statusDiv = 'loadingDiv';
	this.AjaxPostSQL = AjaxPostSQL;
	this.session = 1;
	this.sessionVar = 'sess_auth';
	this.phpFile = _gDOC_ROOT + "inc/json.data.php";
	this.incModule = '';
	this.noLayer = 1;
}

function AjaxPostSQL(){
	var pageUrl = this.phpFile;
	if(pageUrl.indexOf('?') < 0) {
		pageUrl += '?';
	}else{
		pageUrl += '&';
	}

	pageUrl += 'random=' + Math.random();
	
	var queryStr = '&dbVars=' + this.dbVars;
	for(key in this.vars) {
		if(typeof(this.vars[key]) == 'string') {
			queryStr += '&' + key + '='  + encodeStr(this.vars[key]);
		}else if(typeof(this.vars[key]) == 'number') {
			queryStr += '&' + key + '='  + encodeStr(this.vars[key]);
		}
	}
	if(this.session) queryStr += '&sessionVar='  + this.sessionVar;
	if(this.incModule) queryStr += '&incModule='  + this.incModule;
	if(this.sendMethod == 'GET') pageUrl += queryStr;
	
	var Ajax = AjaxInit();
	try{
		var callObj = this;
		Ajax.open(this.sendMethod, pageUrl, true);
		Ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
		str = '';
		for(key in Ajax) {
			if(typeof(key) != 'object') {
				str += key + "\n";
			}
		}
		Ajax.onreadystatechange = function(){
			var loadingObj = document.getElementById(callObj.statusDiv);
			
			if (Ajax.readyState == 4 && Ajax.status == 200) {
				//alert(Ajax.responseText);
				var dtStatus = handleAjax(Ajax, callObj);
				if(dtStatus === false) return false;
			}else if(Ajax.readyState == 1){
			}else if(Ajax.readyState < 4){
			}else{
				if (Ajax.responseText.indexOf('500 Internal Server Error')<0) { 
					//connection lost to the server
					// if (document.getElementById('inetDiv') && (inetConnect == true)) {
						// showHideDiv('inetDiv',1);
						// inetConnect = false;
						// setTimeout('chkNetConnect()',1000);
					// }
				}else{
					//alert("Looks like you have entered some text which our server doesnt find proper.\nCan you forward your text to our server team to find out which words in your text is a problem.");
				}
			}
		}
		Ajax.send(queryStr);
	}
	catch(e){
		// alert('Error: Unable to contact the server.');
	}
}
function handleAjax(Ajax, callObj){
 	if( (Ajax.responseText.indexOf('Fatal error')) >= 0 && (Ajax.responseText.indexOf('on line')) || 
		 (Ajax.responseText.indexOf('Parse error')) >= 0 && (Ajax.responseText.indexOf('on line')) ){
	 	
	 	var re = /<[^>]*>/g;
	 	var matches = Ajax.responseText.replace(re,'');
 		if (_debugMode==1) alert(matches, 300);
		return false;
 	}
	if(Ajax.responseText) {
		var myDataObj = eval('(' + Ajax.responseText + ')');
	} else {
		return false;
	}
	if(callObj.session && myDataObj['error']){
		return false;
	}else if(myDataObj['error']){
 		if (_debugMode==1) alert(myDataObj['error'], 300);
		return false;
	}
	eval(callObj.gotoFunction + '('+Ajax.responseText+', callObj.fnVars)');
}
function isArray(obj) {
	if (obj.constructor.toString().indexOf('Array') == -1)
		return false; 
	else 
		return true; 
}
function showHideDiv(id, status){
	var divObj = document.getElementById(id);
	if(divObj) {
		if(status) {
			divObj.style.visibility = "visible"; 
			divObj.style.display = "block"; 
		}else{
			divObj.style.visibility = "hidden"; 
			divObj.style.display = "none"; 
		}
	}
}