/****************************************************************************
 *	Copyright (C) 2007 FunnyFoxGroup. All Rights Reserved.
 *	The following is Sample Code and is subject to all restrictions on
 *	such code as contained in the End User License Agreement accompanying
 *	this product.
 ****************************************************************************/
 



CEngine.s_iConnNum = 0;

CEngine.prototype.sys_sOption;
CEngine.prototype.sys_sAct;
CEngine.prototype.sys_sTask;

CEngine.prototype.sys_sPrevOption;
CEngine.prototype.sys_sPrevAct;
CEngine.prototype.sys_sPrevTask;

CEngine.prototype.sys_sUrl;
CEngine.prototype.sys_sMethod;
CEngine.prototype.sys_sResponseType; // text | xml

CEngine.prototype.sys_sQueryUrl;

CEngine.prototype.m_aConn;
CEngine.prototype.m_oParam;

CEngine.prototype.m_bEnableChangeAppPath;
CEngine.prototype.m_bDisplayAppPath;

CEngine.prototype.m_oToolbarObject;

CEngine.prototype.m_sSection;

CEngine.prototype.m_sLanguage;
CEngine.prototype.m_sLayout;

CEngine.prototype.m_sIncPath;
CEngine.prototype.m_sAbsPath;

CEngine.prototype.m_sIncPath;
CEngine.prototype.m_sSitePath;
CEngine.prototype.m_sAbsPath;

CEngine.prototype.m_sCompPath;
CEngine.prototype.m_sCompClassPath;
CEngine.prototype.m_sAbsCompPath;
CEngine.prototype.m_sAbsCompClassPath;

CEngine.prototype.m_iPrivilegeCode;
CEngine.prototype.m_iPrivilegeMessage;


function CEngine( ) {
	this.sys_sOption = arguments[0];
	this.sys_sAct = arguments[1];
	this.sys_sTask = arguments[2];
	
	this.sys_sPrevOption = arguments[0];
	this.sys_sPrevAct = arguments[1];
	this.sys_sPrevTask = arguments[2];
	
	this.m_sSection = arguments[3];
	this.m_sIncPath = arguments[4];
	
	this.sys_sUrl = "index.php";
	this.sys_sMethod = "POST";
	this.sys_sResponseType = "text";
	
	this.sys_sQueryUrl = "index.php";
	
	this.m_aConn = new Array( );
	this.m_oParam = new Object( );
	
	this.m_bEnableChangeAppPath = true;
	
	this.setCompPath();
	
}


CEngine.prototype.setSysInfo = function( ) {
	
	this.sys_sPrevOption = this.sys_sOption;
	this.sys_sPrevAct = this.sys_sAct;
	this.sys_sPrevTask = this.sys_sTask;
	
	this.sys_sOption = arguments[0];
	this.sys_sAct = arguments[1];
	this.sys_sTask = arguments[2];
	
	this.sys_sUrl = "index.php";
	this.sys_sMethod = "POST";
	this.sys_sResponseType = "text";
	
	this.sys_sQueryUrl = "index.php";
	
	this.setCompPath();
	
}


CEngine.prototype.setPrivilege = function( code, msg ) {
	this.m_iPrivilegeCode = parseInt( code );
	this.m_sPrivilegeMessage = msg;
}


CEngine.prototype.setDisplayAppPath = function( ) {
	this.m_bDisplayAppPath = arguments[0];
}


CEngine.prototype.setSitePath = function( ) {
	this.m_sSitePath = arguments[0];
	if( this.m_sSection == 'front' ) {
		this.m_sAbsPath = this.m_sSitePath;
	}
	else {
		this.m_sAbsPath = this.m_sSitePath + 'administrator/';	
	}
	
	this.setCompPath();
}


CEngine.prototype.setCompPath = function( ) {
	this.m_sCompPath = this.m_sIncPath + 'components/comp_' + this.sys_sOption + '/';
	this.m_sCompClassPath = this.m_sCompPath + '/classes/';
	
	this.m_sAbsCompPath = this.m_sSitePath + 'components/comp_' + this.sys_sOption + '/';
	this.m_sAbsCompClassPath = this.m_sAbsCompPath + '/classes/';
}


CEngine.prototype.setLanguage = function( ) {
	this.m_sLanguage = arguments[0];
}


CEngine.prototype.setLayout = function( ) {
	this.m_sLayout = arguments[0];
}


CEngine.prototype.setQueryUrl = function( ) { 
	this.sys_sQueryUrl = arguments[0];
}


CEngine.prototype.setUrl = function( ) { 
	this.sys_sUrl = arguments[0];
}


CEngine.prototype.setOption = function( ) { 
	this.sys_sOption = arguments[0];
	this.setCompPath();
}


CEngine.prototype.setAct = function( ) { 
	this.sys_sAct = arguments[0];
}


CEngine.prototype.setTask = function( ) { 
	this.sys_sPrevTask = this.sys_sTask;
	this.sys_sTask = arguments[0];
}


CEngine.prototype.setResponseType = function( ) { 
	this.sys_sResponseType = arguments[0];
}


CEngine.prototype.setParam = function( p_oObject ) {
	this.m_oParam = p_oObject;
}


CEngine.prototype.setToolbar = function( p_oToolbarObject ) {
	this.m_oToolbarObject = p_oToolbarObject;
	loadToolbar( "" );
	this.getToolbar( );
}


CEngine.prototype.getToolbar = function( ) {
	if( this.m_oToolbarObject && this.m_oToolbarObject.m_aProp ) {
		var aTask = this.m_oToolbarObject.m_aProp;
		for( var iC = 0; iC < aTask.length; iC += 2 ) {
			if( this.sys_sTask == aTask[iC] ) {
				this.drawToolbar( aTask[iC + 1] );
				break;
			}	
		}
		
	} else {
		loadToolbar( "" );
	}
}


CEngine.prototype.drawToolbar = function( p_aButton ) {
	var sHtml = "";
	var sPath = "images/toolbar/";
	var sHead = "";
	
	for( var iC = 0; iC < p_aButton.length; iC++ ) {
		if( iC > 6 ) break;
		var aTemp = p_aButton[iC];
		var sTaskTitle = aTemp[0];
		var sTaskName = aTemp[1];
		if( aTemp.length > 1 ) {
			var sCallback = aTemp[1];
		} 
		
		
		var sName1 = "b_" + sTaskName + ".jpg";
		var sName2 = "b_" + sTaskName + "H.jpg";
		
		var obj = 'toolbar_' + sTaskName;
		var objH = 'toolbar_' + sTaskName + 'H';
		var sGetImg = "var imgToolbar = document.getElementById('img_" + sTaskName + "' );";
		var sImgCallback = "onmouseover = \"" + sGetImg + " imgToolbar.src = " + objH + ".src;\" onmouseout = \"" + sGetImg + " imgToolbar.src = " + obj + ".src;\" ";
		sHtml += "<div id=\"btn_" + sTaskName + "\" style=\"padding:4px 6px 4px 2px; cursor:pointer;\" align = \"center\" " + sImgCallback + ">";
		sHtml += "<img id=\"img_" + sTaskName + "\" src=\"" + sPath + sName1 + "\"  border=\"0\" vspace=\"0\" hspace=\"0\" />";
		sHtml += "<div class = \"toolbarBtn\" align = \"center\">" + sTaskTitle + "</div>";
		sHtml += "</div>";
		
	}
	
	loadToolbar( sHtml );
}


CEngine.prototype.doAsyncTask = function( ) {
	var oCore = new Object( );
	
	switch( arguments.length  ) {
		case 2:
			p_oCore = arguments[0];
			p_sCallback = arguments[1];
			
			if( p_oCore instanceof Object ) {
				
				if( p_oCore.sys_sOption ) {
					oCore.sys_sOption = p_oCore.sys_sOption;
					this.sys_sPrevOption = this.sys_sOption;
					this.sys_sOption = p_oCore.sys_sOption;
				}
				else oCore.sys_sOption = this.sys_sOption;
				
				if( p_oCore.sys_sAct ) {
					oCore.sys_sAct = p_oCore.sys_sAct;
					this.sys_sPrevAct = this.sys_sAct;
					this.sys_sAct = p_oCore.sys_sAct;
				}
				else oCore.sys_sAct = this.sys_sAct;
				
				if( p_oCore.sys_sTask ) {
					oCore.sys_sTask = p_oCore.sys_sTask;
					this.sys_sPrevTask = this.sys_sTask;
					this.sys_sTask = p_oCore.sys_sTask;
				}
				else {
					oCore.sys_sTask = this.sys_sTask;
				}	
				
			} else {
				oCore.sys_sOption = this.sys_sOption;
				oCore.sys_sAct = this.sys_sAct;
				oCore.sys_sTask = p_oCore;
				this.sys_sPrevTask = this.sys_sTask;
				this.sys_sTask = p_oCore;	
			}
			break;
			
		case 4:
			p_sCallback = arguments[3];
			
			oCore.sys_sOption = arguments[0];
			oCore.sys_sAct = arguments[1];
			oCore.sys_sTask = arguments[2];
			
			this.sys_sPrevOption = this.sys_sOption;
			this.sys_sPrevAct = this.sys_sAct;
			this.sys_sPrevTask = this.sys_sTask;
			
			this.sys_sOption = arguments[0];
			this.sys_sAct = arguments[1];
			this.sys_sTask = arguments[2];
			break;
	}
	
	oCore.sys_sPrevTask = this.sys_sPrevTask;
	
	var sCoreObj = JSON.stringify( oCore );
	var sParamObj = JSON.stringify( this.m_oParam );
	
	/* XmlHttpRequest */
	this.m_aConn[CEngine.s_iConnNum] = new CXmlHttpContainer( );
	var sMethod = this.sys_sMethod;
	var sResponseType = this.sys_sResponseType;
	var sUrl = this.m_sAbsPath + this.sys_sUrl;
	
	var sQuery = "bAjax=true&sResponseType=" + sResponseType + "&sCoreObj=" + sCoreObj + "&sParamObj=" + sParamObj;
	
	if( p_sCallback ) sCallback = p_sCallback;
	else sCallback = "defaultCallback";
	
	this.m_aConn[CEngine.s_iConnNum].registerCallback( "onreadystatechange", sCallback );
	this.m_aConn[CEngine.s_iConnNum].sendRequest( sMethod, sUrl, sQuery );
	
	if( this.m_bEnableChangeAppPath )
		this.changeAppPath( );
	
	this.setCompPath();
	
	CEngine.s_iConnNum++;
	
	var iIndex = CEngine.s_iConnNum - 1;
	return this.m_aConn[iIndex];
}


CEngine.prototype.doAsyncTaskImp = function( ) {
	var oCore = new Object( );
	switch( arguments.length  ) {
		case 2:
			p_oCore = arguments[0];
			p_sCallback = arguments[1];
			
			if( p_oCore instanceof Object ) {
				
				if( p_oCore.sys_sOption ) {
					oCore.sys_sOption = p_oCore.sys_sOption;
					this.sys_sPrevOption = this.sys_sOption;
					this.sys_sOption = p_oCore.sys_sOption;
				}
				else oCore.sys_sOption = this.sys_sOption;
				
				if( p_oCore.sys_sAct ) {
					oCore.sys_sAct = p_oCore.sys_sAct;
					this.sys_sPrevAct = this.sys_sAct;
					this.sys_sAct = p_oCore.sys_sAct;
				}
				else oCore.sys_sAct = this.sys_sAct;
				
				if( p_oCore.sys_sTask ) {
					oCore.sys_sTask = p_oCore.sys_sTask;
					this.sys_sPrevTask = this.sys_sTask;
					this.sys_sTask = p_oCore.sys_sTask;
				}
				else {
					oCore.sys_sTask = this.sys_sTask;
				}	
				
			} else {
				oCore.sys_sOption = this.sys_sOption;
				oCore.sys_sAct = this.sys_sAct;
				oCore.sys_sTask = p_oCore;
				this.sys_sPrevTask = this.sys_sTask;
				this.sys_sTask = p_oCore;	
			}
			break;
			
		case 4:
			p_sCallback = arguments[3];
			
			oCore.sys_sOption = arguments[0];
			oCore.sys_sAct = arguments[1];
			oCore.sys_sTask = arguments[2];
			
			this.sys_sPrevOption = this.sys_sOption;
			this.sys_sPrevAct = this.sys_sAct;
			this.sys_sPrevTask = this.sys_sTask;
			
			this.sys_sOption = arguments[0];
			this.sys_sAct = arguments[1];
			this.sys_sTask = arguments[2];
			break;
	}
	
	
	oCore.sys_sPrevTask = this.sys_sPrevTask;
	
	var sCoreObj = JSON.stringify( oCore );
	var sParamObj = JSON.stringify( this.m_oParam );
	
	//Thiendv fix bug with character '&' on Json 15/09/2008
	sParamObj	=	sParamObj.replace("&","|#|");
	//End
	
	/* XmlHttpRequest */
	this.m_aConn[CEngine.s_iConnNum] = new CXmlHttpContainer( );
	var sMethod = this.sys_sMethod;
	var sResponseType = this.sys_sResponseType;
	var sUrl = this.m_sAbsPath + this.sys_sUrl;
	
	var sQuery = "bAjax=true&sResponseType=" + sResponseType + "&sCoreObj=" + sCoreObj + "&sParamObj=" + sParamObj; 
	
	this.m_aConn[CEngine.s_iConnNum].iOnreadystatechangeCallback( p_sCallback );
	this.m_aConn[CEngine.s_iConnNum].sendRequest( sMethod, sUrl, sQuery );
	
	if( this.m_bEnableChangeAppPath )
		this.changeAppPath( );
	
	this.setCompPath();
	
	CEngine.s_iConnNum++;
	
	var iIndex = CEngine.s_iConnNum - 1;
	return this.m_aConn[iIndex];
}


CEngine.prototype.doSyncTask = function( ) { 
	
	switch( arguments.length ) {
		case 1:
			var p_sTask = arguments[0];
			var oForm = document.getElementById( 'mainForm' );
			oForm.sys_sOption.value = this.sys_sOption;
			oForm.sys_sAct.value = this.sys_sAct;
			oForm.sys_sTask.value = p_sTask;
			break;
		case 2:
			var p_sFormId = arguments[0];
			var p_sTask = arguments[1];
			var oForm = document.getElementById( p_sFormId );
			oForm.sys_sOption.value = this.sys_sOption;
			oForm.sys_sAct.value = this.sys_sAct;
			oForm.sys_sTask.value = p_sTask;
			break;
		case 3:
			var p_sFormId = arguments[0]; 
			var p_sOption = arguments[1];
			var p_sTask = arguments[2];
			var oForm = document.getElementById( p_sFormId );
//			oForm.sys_sOption.value = p_sOption; alert( 'form op: ' + oForm.sys_sOption.value );
//			oForm.sys_sAct.value = this.sys_sAct; alert( 'form act: ' + oForm.sys_sAct.value );
//			oForm.sys_sTask.value = p_sTask; alert( 'form task: ' + oForm.sys_sTask.value );
			break;
		case 4:
			var p_sFormId = arguments[0];
			var p_sOption = arguments[1];
			var p_sAct = arguments[2];
			var p_sTask = arguments[3];
			var oForm = document.getElementById( p_sFormId );
			oForm.sys_sOption.value = p_sOption;
			oForm.sys_sAct.value = p_sAct;
			oForm.sys_sTask.value = p_sTask;
			break;
	}
	
	this.setCompPath();
	
	oForm.submit( );
}


CEngine.prototype.doQueryTask = function( ) {
	
	var sUrl = this.m_sAbsPath + this.sys_sQueryUrl;
	
	var p_sFile = sUrl + '?';
	
	switch( arguments.length ) {
		case 1:
			var p_sOption = this.sys_sOption;
			var p_sAct = this.sys_sAct;
			var p_sTask = arguments[0];
			var p_sQuery = '';
			break;
		case 2:
			var p_sOption = this.sys_sOption;
			var p_sAct = this.sys_sAct;
			var p_sTask = arguments[0];
			var p_sQuery = arguments[1];
			break;
		case 3:
			var p_sOption = arguments[0];
			var p_sAct = this.sys_sAct;
			var p_sTask = arguments[1];
			var p_sQuery = arguments[2];
			break;
		case 4:
			var p_sOption = arguments[0];
			var p_sAct = arguments[1];
			var p_sTask = arguments[2];
			var p_sQuery = arguments[3];
			break;
	}
	
	this.setCompPath();
	
	if( p_sQuery != '' ) p_sQuery = '&' + p_sQuery;
	document.location.href = p_sFile + 'sys_sOption=' + p_sOption + '&sys_sAct=' + p_sAct + '&sys_sTask=' + p_sTask + p_sQuery;
	
}


CEngine.prototype.include = function( src ) {
	var path = this.m_sAbsCompPath + 'js/';
	
	include( path + src );
}


CEngine.prototype.enableChangeAppPath = function( bEnabled ) {
	this.m_bEnableChangeAppPath = bEnabled;	
}


CEngine.prototype.changeAppPath = function( ) {
	if( this.m_sSection == 'front' ) return;
	
	var oDiv = document.getElementById( "appPathDiv" );
	var path = this.m_sAbsPath;
	var sHtml = "<img src=\"" + path + "images/menubar/comp.png\" title=\"Option\" alt=\"Option\" /><span class=\"appPathOption\">" + this.sys_sOption + "</span>";
	sHtml += "<img src=\"" + path + "images/menubar/act.png\" title=\"Activity\" alt=\"Activity\" /><span class=\"appPathAct\">" + this.sys_sAct + "</span>";
	sHtml += "<img src=\"" + path + "images/menubar/task.png\" title=\"Task\" alt=\"Task\" /><span class=\"appPathTask\">" + this.sys_sTask + "</span>";
	oDiv.innerHTML = sHtml;	
}


CEngine.prototype.changeAppTitle = function( appTit ) {
	if( this.m_sSection == 'front' ) return;
	
	var oDiv = document.getElementById( "appTitleContentDiv" );
	oDiv.innerHTML = appTit;	
}


CEngine.prototype.changePageTitle = function( pageTit ) {
	document.title = pageTit;
}


CEngine.prototype.clear = function( ) {
	if( this.m_aConn ) {
		for( var iC = 0; iC < this.m_aConn.length; iC++ ) {
			if( this.m_aConn[iC] ) this.m_aConn[iC].clear( );
		}
		//delete this.m_aConn;
	}
}