var xmlHttp; 
var arrProcessHistory = new Array(0);

function oyXMLRPCProvider(showLoading, doNOTrequestTwice){
	var url = null;	
	var msg = null;
	var req = null;

	var oThis = this;

	this.createPacket = null;

	//get the caller function details
	myCallerName = oyXMLRPCProvider.caller.toString().match(/function (\w*)/)[1];
	myCallerArgCount = oyXMLRPCProvider.caller.arguments.callee.arguments.length;
	var strArguments = "";


	if(myCallerArgCount>0){
		for(var argCount = 0; argCount < myCallerArgCount; argCount++){
			strArguments += "#SA#" + oyXMLRPCProvider.caller.arguments.callee.arguments[argCount] + "#SA#";
			if(argCount+1<myCallerArgCount){strArguments += ",";}
		}
	}
	var strFunction = myCallerName + "(" + strArguments + ")";

	//pespese ayni requestlerin gonderilmesini engellemek adina boyle bisi yapildi.
	//eger ki pespese ayni isi yapmasi gereken methodlarimzi war veya olacak ise bu fonksiyon showLoading gibi bir parametre daha alabilir ve duruma gore doTheJob parametresini true'ya cekebilir.
	//push caller and arguments to my array if necessary

	var doTheJob = true;
	if(doNOTrequestTwice!=null && doNOTrequestTwice==true && arrProcessHistory[arrProcessHistory.length - 1]==strFunction){
		doTheJob = false;
	}else{
		arrProcessHistory.push(strFunction);
	}

	// internal callback function for the browser; it is called when a state of a request object changes
	var internalRequestComplete = function() {
		var STATE_COMPLETED = 4;
		var STATUS_200 = 200;
		if (req.readyState == STATE_COMPLETED) {
			if (req.status == STATUS_200) {
				if(showLoading==null || showLoading){loading("none");}
				if(oThis.onComplete){
					respText = req.responseText;

					if(respText!=null && respText.length>0){
						try{
							oThis.onComplete(respText);
						}catch(e){
							if(e.description == null){
								dbg("XMLRPCProvider error<br>CallerName : " + myCallerName + "<br>Err : " + e.message + "<br>And the responseText iz : " + respText);
							}else{
								dbg("XMLRPCProvider error<br>CallerName : " + myCallerName + "<br>Err : " + e.description + "<br>And the responseText iz : " + respText);
							}
						}
					}else{
						dbg("XMLRPCProvider error : responseText is null!!!");
					}
				}				 
			}else{
				dbg("response status is " + req.status);
			}
		}
	}	

	//  call this function to submit new request
	this.submit = function(_url){
		if(doTheJob){
			if(showLoading==null || showLoading){loading("");}
			url = _url;	
			
			msg = "";
			if(oThis.createPacket) {
				msg = oThis.createPacket();
			}

		    if (window.XMLHttpRequest) {
		    	// branch for native XMLHttpRequest object
		        req = new XMLHttpRequest();
		        req.onreadystatechange = internalRequestComplete;
		        req.open("POST", url, true);
		    	req.setRequestHeader("Pragma","no-cache");
	   	    	req.setRequestHeader("Cache-control","no-cache");
				req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				req.setRequestHeader("Content-length", msg.length);
				req.setRequestHeader("Connection", "close");
	        	req.send(msg);	
		    } else { 
		    	// branch for IE/Windows ActiveX version
		    	if (window.ActiveXObject) {	    		
			        req = new ActiveXObject("Microsoft.XMLHTTP");
			        if (req) {
			            req.onreadystatechange = internalRequestComplete;
			            req.open("POST", url, true);
				    	req.setRequestHeader("Pragma","no-cache");
			   	    	req.setRequestHeader("Cache-control","no-cache");
						req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
						req.setRequestHeader("Content-length", msg.length);
						req.setRequestHeader("Connection", "close");
			        	req.send(msg);
			        } 
			    } 
		    }
		}else{
			dbg("doTheJob iz false");
		}
	}
	// user can override this;  this function is called when response is received without errors
	this.onComplete = function(responseText){
	}
}

function loading(strDisplayValue){
	try{document.getElementById("loading").style.display = strDisplayValue;}
	catch(e){}
}

function dbg(debugStr){
	try{document.getElementById("debug").innerHTML = "<pre>" + debugStr + "</pre>" + document.getElementById("debug").innerHTML;}
	catch(e){}
}

function flip(elementId){
	try{
		var myElement = document.getElementById(elementId);

		if(myElement){
			if(myElement.style.display == ""){
				myElement.style.display = "none";
				
				//show flash banners
				var homepageFlashBanner = document.getElementById("trFlashBanner");
				if(homepageFlashBanner)homepageFlashBanner.style.visibility = "visible";
			}else{
				myElement.style.display = "";
				if(myElement.id == "msgLayer"){
					var w = myElement.style.width;
					var h = myElement.style.height
					w = w.replace("px","");
					h = h.replace("px","");
					myElement.style.left=getCenterXCoordinateWindow(w);
					myElement.screenX = getCenterXCoordinateWindow(w);
					myElement.style.top =getCenterYCoordinateWindow(h);
					myElement.screenY = getCenterYCoordinateWindow(h);	
									
				}
			}
		}
	}
	catch(e){}
}


