/*
V.1.0
Last Modified: March 14, 2007
Created by A.Katz, March 14, 2007

This file consists of 3 classes:
 - myAjaxLib	- Common functions used by "myAjax" classes
 - myAjax		- Send Simple Ajax Request
 - myAjaxSubmit	- Submit Form Ajax Request
 
============================================================================================
========================== EXAMPLE =========================================================
============================================================================================

    SIMPLE AJAX REQUEST:
	--------------------	
	var oAjax = new myAjax();
	oAjax.Send("aaa.asp?param1=gettest");
	alert(oAjax.Response());	
	
	
	SUBMIT FORM AJAX REQUEST
	------------------------	
	var oAjax = new myAjaxSubmit();
	oAjax.Send(oForm,"aaa.asp");
	alert(oAjax.Response());

/*
============================================================================================
========================== myAjaxLib - Common Functions ====================================
============================================================================================
*/

// ============================= CONSTANTS =================================================

var _DEBUD_MODE = false;

var _scriptFolder = "/scripts/";

// =========================================================================================

function myAjaxLib(url) {
	this.trim = trim;
	this.getXMLHttpRequestObject = getXMLHttpRequestObject;
	this.ShowDebug = ShowDebug;
	this.Response = Response;

	function getXMLHttpRequestObject(){
		var retVal = null;
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
		 	retVal = new XMLHttpRequest();
			 if (retVal.overrideMimeType) {
				// set type accordingly to anticipated content type
				//http_request.overrideMimeType('text/xml');
				retVal.overrideMimeType('text/html');
			 }
		} else if (window.ActiveXObject) { // IE
		 try {
			retVal = new ActiveXObject("Msxml2.XMLHTTP");
		 } catch (e) {
			try {
			   retVal = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		 }
		}
		return retVal;
	}
	
	function ShowDebug(http_request,requestUrl,strPostParams){
		
		 //return;
		if (!_DEBUD_MODE) return;
		
		var wDebug = window.open(_scriptFolder + "debug.html","wDebug");
		wDebug.document.body.innerHTML = "";
		
		var now = new Date();
		var currentTime = now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds();
		
		var strHTML = "<span style='font-family: Arial; font-size: 12px;'>";				
		strHTML+= currentTime + "<br>";	
		strHTML+="<b style='color:red'>Ajax Debug mode</b><br>";
		strHTML+="HTTP Status: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b style='color:red'>" + http_request.status + "</b><br>";
		strHTML+="Request URL: &nbsp;&nbsp;&nbsp;" +  requestUrl  + "<br>";
		//strHTML+="All Response Headers: " + _http_request.getAllResponseHeaders + "<br>";
		if(strPostParams.length>0){
		  strHTML+="Sended POST Parameters: &nbsp;&nbsp;" +  strPostParams  + "<br>";
		}
		strHTML+="<br>Response Text: <hr size=1>" +  http_request.responseText;
		strHTML+= "</span>";
		wDebug.document.body.innerHTML = strHTML;
		//wDebug.focus();
		
	}	

	function trim(str)
	{
	   return str.replace(/^\s*|\s*$/g,"");
	}
	
	function Response(inError,inResponse)
	{
	      inError = 0;
		var retVal = inResponse;
		switch (inError) {
			case 1:
				retVal = "Cannot proceed with the request. The Input Form wasn't found.";
			break;
			
			case 404: case 500:
			   retVal = "There was a problem with the request. HTTP Status: " + inError;
			break;
		 }  		
		
		return trim(retVal)	
	}	
}

/*
============================================================================================
========================== AJAX SIMPLE REQUEST =============================================
============================================================================================
*/
var url="bwireless.taf?"


function findPos(obj) {
	//find coordinates of a DIV
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function exFetch(url) {
	//return "#" + url
	now = new Date() //break cache
	//$('lastAjax').innerHTML = url +"|"+element
	var resp
	new Ajax.Request(url+'&now='+now, {method:'get',asynchronous:false,evalScripts:true,onSuccess:function(transport){resp=transport.responseText}});
	//new Ajax.Request(url+'&_UserReference='+globalKeyRef+'&now='+now, {method:'get',asynchronous:false,evalScripts:true,onSuccess:function(transport){ resp= transport.responseText}});
	return resp
}

function XmyAjax(url) {
	var _myAjaxLib = new myAjaxLib();
	var _http_request = _myAjaxLib.getXMLHttpRequestObject();
	var _url = "";
    var _Error = 0;
	var _Response = "";
	
	this.Send = Send;
	this.Error = function(){ return _Error };
	this.Response = function(){  return _myAjaxLib.Response(_Error,_Response) };
	
	//if ( arguments.length > 0 )
	if(url != null){
	    _url = url;
		makeRequest(url);
	}

	function Send(url) {
		_url = url;
		makeRequest(url);
	 }
	 	
	function makeRequest(url) {
		 url = urlNoCache(url);
		_http_request.onreadystatechange = ajax_response;
		_http_request.open("GET", url, false);
		_http_request.send(null);
	}
	
	function urlNoCache(url){
		if(url.indexOf("?")==-1){
		  url+= "?";
		}else{
		  url+= "&";
		} 
		 url+= "tmpc=" + tmpCache();
		 return url;
	}
	
	function tmpCache(){
	   var now = new Date();
	   return now.getHours() + "_" + now.getMinutes() + "_" + now.getSeconds();
	}
	
	function ajax_response() {
		if (_http_request.readyState == 4) {
			if (_http_request.status == 200) {
				_Response = _http_request.responseText;
			} else {
				_Error = _http_request.status;
			}
			_myAjaxLib.ShowDebug(_http_request,_url,'');
		}
	}

}

function myAjax(url) {

	//this.Send = Send;
	this.Error = function(){ return _Error };
	//this.Response = function(){   };

	this.Send = function(url) {
		this.Response = function() { return( exFetch(url)) }
		
	}
}

/*
============================================================================================
====================== END AJAX SIMPLE REQUEST =============================================
============================================================================================
*/

/*
============================================================================================
========================== AJAX SUBMIT =====================================================
============================================================================================
*/
function saveForm(formData,url) {
	var resp
	//x = prompt('',url) //debug URL
	new Ajax.Request(url, {
	method: 'post',
	asynchronous:false,
	parameters:Form.serialize(formData),
	evalScripts:true,
	onFailure: function(transport){ alert("ERROR:"+transport.statusText+"<br />"+transport.responseText) },
	onSuccess:function(transport){resp=transport.responseText}
	});
	return resp
}

function myAjaxSubmit(oForm,url) {		
	this.Send = function(oForm,url) {

		this.Response = function() { return( saveForm(oForm,url)) }		
	}
	
	this.Error=function() {}

}


function XmyAjaxSubmit() {

	var _myAjaxLib = new myAjaxLib();
	var _http_request = _myAjaxLib.getXMLHttpRequestObject();
	var _url = "";
    var _Error = 0;
	var _Response = "";
	var _strPostParams = ""
	
	this.Send = Send;
	this.Error = function(){ return _Error };
	this.Response = function(){  return _myAjaxLib.Response(_Error,_Response) };	
 
	function Send(oForm,url) {
		_url = url;
		if (oForm==null) {
			 _Error = 1;
		}else{
			var strParams = strFormParams(oForm);
			_strPostParams = strParams;
			makeRequestSubmit(url,strParams);
		}
	 }

	function makeRequestSubmit(url,strParams) {
		_http_request.onreadystatechange = ajax_response;
		_http_request.open("POST", url, false);
	
		_http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		_http_request.setRequestHeader("Content-length", strParams.length);
		_http_request.setRequestHeader("Connection", "close");
		//_http_request.setRequestHeader("ttt", encodeURI(document.myform.mytextarea1.value));
		_http_request.send(strParams);
	}
	
	function ajax_response() {
		if (_http_request.readyState == 4) {
			if (_http_request.status == 200) {
				_Response = _http_request.responseText;
			} else {
				_Error =  _http_request.status;
			}
			_myAjaxLib.ShowDebug(_http_request,_url,_strPostParams);
		}
	}
	
	function strFormParams(oForm){
		var retVal = ""; //"?";
		for (i=0; i<oForm.length; i++) {
			//alert("type: " + document.myform.elements[i].type + 
			//       "\r\nname: " + document.myform.elements[i].name + 
			//       "\r\nvalue: " + document.myform.elements[i].value);
			var oInpt = oForm.elements[i]
	
			switch (oInpt.type.toLowerCase()) {
				case "hidden": case "textarea": case "text":
					retVal+=combainParam(oInpt.name,oInpt.value);
				break;
							 
				case "select-one": case "select-multiple":
					for (j=0; j<oInpt.options.length; j++) {
					  if(oInpt.options[j].selected){
						 retVal+=combainParam(oInpt.name,oInpt.options[j].value);
					  }
					 }
				break;
							 
				case "radio": case "checkbox":
					if (oInpt.checked) retVal+=combainParam(oInpt.name,oInpt.value);
				break;
			 }    
		 }  
		retVal = encodeURI(retVal); 
		return retVal;
	
	 }
	 
	  function combainParam(inptName,inptValue){
		  //encodeURI, escape
	   var retVal = inptName + "=" + (inptValue)  + "&";
	   return retVal;
	 }

}

/*
============================================================================================
======================= END AJAX SUBMIT ====================================================
============================================================================================
*/
