var ajaxCallOn = 0;
var ajaxCallOff = 0;
var ajaxCallCnt = 0;
	
var maintainanceArr = new Array();

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.session = 0;
	this.sessionVar = 'sess_auth';
	this.phpFile = _globalDocRoot + "inc/json.data.php";
	this.incModule = '';
	this.noLayer = 1;
	
	this.AjaxPostSQL = AjaxPostSQL;
	this.decCnt = decCnt;
	this.maintainance = maintainance;
	
}
function decCnt(){
	ajaxCallCnt--;
}
function AjaxPostSQL(){
	ajaxCallCnt++;
	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){
		queryStr += '&' + key + '='  + encodeStr(this.vars[key]);
	}
	if(this.session) {
		queryStr += '&session=1';
		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) {
			str += key + "\n";
		}
		Ajax.onreadystatechange = function(){
			var loadingObj = document.getElementById(callObj.statusDiv);
			if (Ajax.readyState == 4 && Ajax.status == 200) {
				var dtStatus = handleAjax(Ajax, callObj);
				if(dtStatus === false){
					return false;
				}
				if(ajaxCallCnt){
					ajaxCallCnt--;
				}
				if(loadingObj){
					if(ajaxCallCnt == 0) {
						if(callObj.noLayer == 1){
							hideStatus(loadingObj.id, 'Done.');
						}
					}
				}
				if(callObj.gotoAferStatus)
					eval(callObj.gotoAferStatus + '()');
			}else if(Ajax.readyState == 1){
				if(loadingObj){
					var bodyObj = document.getElementsByTagName('BODY')[0];
					if(callObj.noLayer == 1){
						showStatus(loadingObj.id, 'Communicating with the server. Please wait...');
					}
				}
			}else if(Ajax.readyState < 4){
				if(loadingObj){
					if(callObj.noLayer == 1){
						showStatus(loadingObj.id, 'Loading data. Please wait...');
					}
				}
			}else{
				var statusLostObj = document.getElementById('statusLost');
				if(statusLostObj){
					statusLostObj.style.visibility = 'visible';
					statusLostObj.style.display = 'block';
				}
			}
		}
		Ajax.send(queryStr);
	}
	catch(e){
		// alert('Error: Unable to contact the server.');
	}
}
function handleAjax(Ajax, callObj){
 	if(Ajax.responseText.indexOf('META HTTP-EQUIV=') > 0) {
	 	if(location.href.indexOf('index.php')<0){
		 	parent.parent.location.href = 'index.php';
		}
		return false;
 	}
	if( (Ajax.responseText.indexOf('Warning: ') >=0 && Ajax.responseText.indexOf('.php on line') >=0) ||
		(Ajax.responseText.indexOf('Fatal error') >=0 && Ajax.responseText.indexOf('on line') >=0) ||
		(Ajax.responseText.indexOf('Parse error') >=0 && Ajax.responseText.indexOf('on line') >=0) ){
	 	
	 	var re = /<[^>]*>/g;
	 	var matches = Ajax.responseText.replace(re,'');
 		alert('These is some err Char: ' + matches);
		ajaxCallOn = 0;
		ajaxCallOff = 0;
		ajaxCallCnt = 0;
		hideStatus(callObj.statusDiv, 'Done.');
		return false;
 	}
	if(Ajax.responseText) {
		var myDataObj = eval('(' + Ajax.responseText + ')');
		if(myDataObj['error']){
			hideStatus(callObj.statusDiv, 'Done.');
			var evalStr = getMainHref();
			if(pageDynName){
				backUpObj = callObj;
				if(pageName != pageDynName){				
					eval(evalStr + "loggedOffModule = '" + parent.pageDynName + '.frame_' + pageDynName + "'");
				}else{
					eval(evalStr + "loggedOffModule = '" + pageDynName + "'");
				}
				openLoginPage(evalStr);
				
				
			}else if(parent.pageDynName){
				eval(evalStr + "loggedOffModule = '" + parent.pageDynName + "'");
				openLoginPage(evalStr);
				parent.moduleClose(pageName);				
			}else{
				openLoginPage(evalStr);
				parent.moduleClose(pageName);
			}
		}
	} else {
 		alert("No data");
		ajaxCallOn = 0;
		ajaxCallOff = 0;
		ajaxCallCnt = 0;
		hideStatus(callObj.statusDiv, 'Done.');
		return false;
	}
	eval(callObj.gotoFunction + '('+Ajax.responseText+', callObj.fnVars)');
}
function openLoginPage(evalStr){
	eval(evalStr + "location.hash = 'login'");
}
function empty(){
	ajaxCallOff++;
}
function maintainance(){
	if(maintainanceArr[location.href] != 1) {
		maintainanceArr[location.href] = 1;
		alert('Sorry! Data cannot be saved at this moment. Maintainance program is running in one of the branches.');
	}
	hideStatus();
}
function resetMaintainance(){
	maintainanceArr[location.href] = 0;
}
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"; 
		}
	}
}
function findPosX(obj){
	var curleft = 0;
	if (obj.offsetParent){
		while (obj.offsetParent){
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}else if (obj.x){
		curleft += obj.x;
	}
	return curleft;
}

function findPosY(obj){
	var curtop = 0;
	if (obj.offsetParent){
		while (obj.offsetParent){
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}else if (obj.x){
		curtop += obj.x;
	}
	return curtop;
}
function hideStatus(divId, err){
	var loadingObj = document.getElementById(divId);
	if(loadingObj) {
		loadingObj.style.visibility = 'hidden';
		loadingObj.style.cursor = 'default';
		loadingObj.childNodes[1].innerHTML = err;
	}
}
function showStatus(divId, err){
	var loadingObj = document.getElementById(divId);
	if(loadingObj) {
		loadingObj.style.visibility = 'visible';
		loadingObj.style.cursor = (err != '') ? 'wait' : 'default';
		loadingObj.childNodes[1].innerHTML = err;
	}
}
function inArray(skey, arr){
	for(key in arr){
		if(arr[key] == skey){
			return key;
		}
	}
	return -1;
}

