/**
 * @category  DeWeM
 * @author    DeWeM Team <admin@dewem.com>
 * @copyright	Copyright (C) 2011 dewem.com, All rights reserved.
 * @license		GNU General Public License version 3; see LICENSE.txt or http://www.gnu.org/licenses/gpl-3.0.html
 * @link      http://www.dewem.com 
 * THIS PROGRAM IS DISTRIBUTED "AS IS";. NO WARRANTY OF ANY KIND IS 
 *	EXPRESSED OR IMPLIED. YOU USE AT YOUR OWN RISK. I WILL NOT BE LIABLE FOR DATA 
 *	LOSS, DAMAGES, HACKING, SPAMMING, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS 
 *	WHILE USING OR MISUSING THIS SOFTWARE. 
 */

var httpDewem = createRequestObjectDewem();
var ajaxDewemQueryString = '';
var dewemCkeditorsArr = Array();
if (dewemWysiwygInstalled){
	CKEDITOR.config.resize_enabled = false;
	CKEDITOR.config.DocType = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
	CKEDITOR.config.endtags = true;
}

function createRequestObjectDewem(){
    var obj;
    
    if(window.ActiveXObject){
        try {
			obj = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				obj = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
    }else if(window.XMLHttpRequest){
        obj = new XMLHttpRequest();
    }
    
    if (!obj){
		alert("We are sorry but you are using an outdated browser. To view this site you must update your browser.");
		return false;
	} else {
		return obj;
	}
}

function sendReqDewem(serverFileName, variableNames, variableValues, postParamsString) {
	var paramString = '';
	
	var variableNamesArr = variableNames.split(',');
	var variableValuesArr = variableValues.split(',');
	
	for(var i=0; i<variableNamesArr.length; i++) {
		paramString += variableNamesArr[i]+'='+encodeURIComponent(variableValuesArr[i])+'&'; //encodeURIComponent(
	}
	paramString = paramString.substring(0, (paramString.length-1));
	showHourGlassDewem();		
	if (paramString.length == 0) {
	   	httpDewem.open('post', serverFileName);
	}else {
		httpDewem.open('post', serverFileName+'?'+paramString);
		ajaxDewemQueryString = paramString;
	}
	if (!postParamsString){
		var lengthPostParamsString = 0;
	}else{
		var lengthPostParamsString = postParamsString.length;
	}
	//Send the proper header information along with the request
	httpDewem.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	httpDewem.setRequestHeader("Content-length", lengthPostParamsString);
	httpDewem.setRequestHeader("Connection", "close");
	
    httpDewem.onreadystatechange = handleResponseDewem;
    httpDewem.send(postParamsString);
}

function handleResponseDewem() {
	if(httpDewem.readyState == 4 && httpDewem.status == 200){
		var responseText = httpDewem.responseText;
		responseText = responseText.replace(/dewemPercentage/g, '%');
		responseText = responseText.replace(/dewemSpace/g, ' ');
		responseText = responseText.replace(/dewemComma/g, ',');
		responseText = responseText.replace(/dewemNumberSign/g, '#');
		responseText = responseText.replace(/dewemSlash/g, '/');
		responseText = responseText.replace(/dwmColon/g, ':');
		//alert(responseText);
		
		var responseArray = new Array();
		responseArray = responseText.split('dewemAjaxResponseSeparator');
		try{
			var responseArrLength = responseArray.length;
			var errsText = responseArray[responseArrLength-1];
			errsText = errsText.replace(/dewemQuote/g, '&quot;');
			errsText = errsText.replace(/dewemSingleQuote/g, '&#39;');
			document.getElementById('outStandardErrorDewem').innerHTML = 'Dynamic Request Result:<br/>'+errsText;
			if (responseArray[0] == 'deleteDewem' ){
				eval(responseArray[1]);
			}else if(responseArray[0] == 'dewemExceptionOccured' ){
				//it must only no ajax error here to throw
				eval(document.getElementById('exceptionScriptDewem').innerHTML);
			}else if(responseArray[0] == 'dewemRedirectResponseMarker' ){
				window.location.href = responseArray[1];
			}else{
				handleDewemOutElement(responseArray);
			}
			if (responseArrLength > 3){
				var divDesktop = document.getElementById('DesktopDewem');
				var innerOfDesktop = responseArray[2].replace(/dewemQuote/g, '&quot;').replace(/dewemSingleQuote/g, '&#39;');
				innerOfDesktop = innerOfDesktop.replace(/<body/g, '<b_dy').replace(/<\/body/g, '</b_dy');
				divDesktop.innerHTML = innerOfDesktop.replace(/<head/g, '<h_ad').replace(/<\/head/g, '</h_ad');
				var divCodeSource = document.getElementById('CodeSourceDewem');
				divCodeSource.innerHTML = responseArray[2].replace(/dewemQuote/g, '"').replace(/dewemSingleQuote/g, "'").htmlEntities();
			}
			if (responseArray[0] == 'MenuDewem'){
				hideHourGlassDewem();
				return;
			}
			var methodNameDewem = getParameterDewem('phpMethodName', ajaxDewemQueryString);
			if (methodNameDewem == 'getWysiwygVal' || methodNameDewem == 'saveWysiwyg'){
				var editorName = responseArray[0]+'_AreaToEdit';
				dewemCkeditorsArr[editorName] = CKEDITOR.replace( editorName );
			}
			setHiddenAttributesToBodyDewem();
		}catch(err){
			document.getElementById('outStandardErrorDewem').innerHTML = 'Catched Error in ajax.js: '+err.message
				+'; typename: '+err.name+'; Dynamic Request Result:<br/>'+responseText;
		}
		hideHourGlassDewem();
    }

}
