/*
L'idee est de creer un objet parametrable au maximum
A quoi sert l'Ajax???
Faire une requete serveur en arriere plan et re-injecter le resultat
dans la page courante
un appel

Il ne faut pas oublier les avantages du javascript,
on peut ajouter des propriete a un objet de maniere 
simple
*/

var hD="0123456789ABCDEF";
function d2h(d) {
var h = hD.substr(d&15,1);
while(d>15) {d>>=4;h=hD.substr(d&15,1)+h;}
return h;
}
function h2d(h) {return parseInt(h,16);}

//Back button Control
/*
// Vars
var ie = (window.navigator.appName == "Microsoft Internet Explorer") ? true : false;
var  block = "true";
var blockMessage;
 
// Settings
setEventByObject(window, "unload", exitme);
 
 
 
// Listen to event
function setEventByObject(object, event, func){
 if (!ie){
 object.addEventListener(event, func, false);
 } else {
 object.attachEvent("on" + event, func);
 }
}
 
// if first call to the page then move forward once
function jumpforward(){
 if(window.location.href.indexOf("jumpforward")!=-1 &&  block != "false") { 
   history.forward();
   block = "false";
 }
}
 
// Set alert message
function SetAlertMessage(AlertMessage) {
 blockMessage = AlertMessage;
}
 

// Action on event fire
function exitme(){
 jumpforward();
 if(block == "true") {
 
  if(window.location.href.indexOf("?")==-1) {
  window.location.href += "?jumpforward";
 } else if (window.location.href.indexOf("jumpforward")==-1){
  window.location.href += "&jumpforward";
 }
 //alert(blockMessage);
 }
 
}
 

SetAlertMessage("Don't touch the back button")
*/
//End Back button Control




function createRequestObject() {
	var ro;
	var browser = navigator.appName;
	if(browser == "Microsoft Internet Explorer"){
		ro = new ActiveXObject("Microsoft.XMLHTTP");
	}else{
		ro = new XMLHttpRequest(); 
		if (ro.overrideMimeType) {
               ro.overrideMimeType('text/xml');
            }
	}
	return ro;
}


function AjaxArray(){
	this.values = new Array();
	var i;
	for (i=0;i<arguments.length ;i++ )
	{
		this.values.push(arguments[i]);
	}

	this.add = function(value){this.values.push(value);}

}
AjaxArray.prototype.type="AjaxArray";

function AjaxString(str){
	this.value=str;
}
AjaxString.prototype.type="AjaxString";


function AjaxObj()
{
	//this.div_result="";
	this.handle=null;
	this.setHandle = function(fhandle){
		this.handle=fhandle;
	}
}

/****************************************************/
/*               Variables de classe                */
/****************************************************/
AjaxObj.prototype.http=null; //on met en place le canal http
AjaxObj.prototype.sendRequest=function(processPage, params, values, method){
		var processLink="";
		//alert(processPage);
		if (params.type && values.type && values.type==params.type){
			if (params.type=="AjaxArray" && params.values.length == values.values.length){
				processLink = processPage+ "?" + params.values[0] + "=" + values.values[0];
				for (i =1;i<params.values.length;i++ )
				{
					processLink += "&" + params.values[i]+"=" + values.values[i];
				}
			}else if (params.type=="AjaxString"){
				processLink = processPage+ "?" + params.value + "=" + values.value;
			}else{
				alert("Tableaux de tailles differentes");
				return;
			}
			if(processLink.indexOf("?") >-1){
				processLink = processLink + "&AjaxReadyPage=true"
			}
			else{
				processLink = processLink + "?AjaxReadyPage=true"
			}
		}
		else if(params=="" && values==""){
			processLink = processPage;
			if(processLink.indexOf("?") >-1){
				processLink = processLink + "&AjaxReadyPage=true"
			}
			else{
				processLink = processLink + "?AjaxReadyPage=true"
			}
		}
		else{
			alert("parametres incompatibles");
			return;
		}
		//alert(processLink);
		if (processLink !=""){

			if(processLink.indexOf("?") >-1){
				processLink += "&ms=" + new Date().getTime();
			}
			else{
				processLink += "?ms=" + new Date().getTime();
			}
			

			//alert(processLink);
			this.http = createRequestObject();
			if (this.handle == null){
				alert("Handle Function not defined");
				return;
			}
			else{
				//alert('je rentre ' + this.handle + " " +processLink );
				if (method && method == 'post')
				{
					//alert("prepare for post");
					//alert(processLink);
					this.http.open('POST', processPage,true);
					this.http.onreadystatechange = this.handle;
					//this.http.preserveWhiteSpace = true;			
					this.http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
					var escaped_url = processLink.substr(processLink.indexOf('?')+1);
					var protected_params='';
					for (i=0;i<escaped_url.length ;i++ )
					{
						protected_params += d2h(escaped_url.charCodeAt(i)) + '|';
						//processLink.substr(processLink.indexOf('?')+1).replace(/ /g,"+")
					}
					//alert(protected_params);
					this.http.send('pp=' + protected_params);


				}
				else if (method && method == 'post2'){
					this.http.open('POST', processPage,true);
					this.http.onreadystatechange = this.handle;
					//this.http.preserveWhiteSpace = true;			
					this.http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
					this.http.send(processLink.substr(processLink.indexOf('?')+1));
				}else{
					//alert(processLink);
					this.http.open('GET', processLink,true);
					this.http.onreadystatechange = this.handle;
					this.http.send(null);
				}
			}

		}else{
			alert("Appel mal forme");
		}
	}


//Fonction d'affectation des proprietes
AjaxObj.prototype.setProperty=function(property, value){
	this[property]=value;
}
//nous allons regarder tt les element du form
AjaxObj.prototype.SendFormAjax=function(idform)
{
		//var msg="";
		var param_name_array = new AjaxArray();
		var param_value_array = new AjaxArray();
		for(i=0; i< document.getElementById(idform).elements.length;i++){

			if (document.getElementById(idform).elements[i].type == "checkbox"){
				if(document.getElementById(idform).elements[i].checked){
					param_name_array.add(document.getElementById(idform).elements[i].name);
					param_value_array.add(document.getElementById(idform).elements[i].value);

				}
			}else if(document.getElementById(idform).elements[i].name != ""){
				param_name_array.add(document.getElementById(idform).elements[i].name);
				param_value_array.add(document.getElementById(idform).elements[i].value);
			}
		//	msg += document.getElementById(idform).elements[i].name + "("+ document.getElementById(idform).elements[i].type+") "+ " = " + document.getElementById('recherche_form').elements[i].value + "\n";
		}
		//alert(msg);
		//return;
		//imgLoading('period_table');
		//displayPlan_AO.sendRequest("plan_year.asp", param_name_array, param_value_array);
		//alert(param_name_array);
		this.setProperty("param_name_array",param_name_array);
		this.setProperty("param_value_array",param_value_array);
}