/**
*
*
* class Ajax
*
* @author		Bruno Rovito [x4421]
* @copyright 	2007-06-05
*
* @requirements	JSON.js
* sample usage:
	function handleAjaxResponse(pIdInnerHtml, pJsonObject){
		if (pJsonObject == null){ // there was a problem with the json object (see Ajax.js)
			document.getElementById(pIdInnerHtml).innerHTML = "DÃ©solÃ©, la requÃªte ne peut Ãªtre traitÃ©e."
		}else{
			document.getElementById(pIdInnerHtml).innerHTML = pJsonObject.msg;	
		}	
	}; // handleAjaxResponse()
	new Ajax().getData("divFeedback", "_InProg_Ajax_PageCalledTest.asp", 2, "handleAjaxResponse");
*
**/



// Ne plus utiliser cet objet AJAX car il entre en conflit avec MyTools qui est utilisé par la console Embedded
function Ajaxx(){
	
	/**
	* Vars
	*/
	this.RETURN_TYPE = new Array("text","javascript","json");
	
	/**
	* constructor() = creates the Ajax object
	*/
	this.constructor = function(){ 
		var tmp = "";
		var e, ee, eee;
		try {
			tmp =  new ActiveXObject('Msxml2.XMLHTTP');
		} catch(e) {
			try {
				tmp =  new ActiveXObject('Microsoft.XMLHTTP');
			} catch(ee) {
				try {
					tmp =  new XMLHttpRequest();
					if (tmp.overrideMimeType) {
                		tmp.overrideMimeType('text/xml'); 
            		}
				} catch(eee) {
					tmp =  false;
				}
			}
		}
		return tmp;
	};// this.constructor



	/**
	*
	* API
	*
	* getData() 	= returns responseText of ajax object according to what type of data we are expecting (see: this.RETURN_TYPE)
	* 
	*
	* @param 		pIdInnerHtml 	= the id of the div(or span,or td, etc) that will hold the data returned by the ajax object's responseText. If it is not needed/wanted the param should be set to null
	* @param		pUrlToCall		= the page called by the ajax/HttpRequest object
	* @param		pReturnType 	= one of the return types availbale in the array this.RETURN_TYPE (see above)
	* @param		pOutputFunction	= the name of a function, passed as a string, that will handle the contents of the ajax object's responseText. The param is optional. In some cases, an output function is not needed/wanted (i.e. if this.RETURN_TYPE[pReturntype] = "javascript" ), and so the param should be set to null
	*
	*
	**/
	this.getData = function(pIdInnerHtml/*string*/, pUrlToCall/*string*/, pReturnType/*int*/,pOutputFunction /*string*/,paramsStats, isStats){
		var data = null;
		var oAjax = this.constructor();
		var oThis = this;
		var _q =  (pUrlToCall.indexOf("?")== -1) ? "?" : "&" ;
		var _sNoCacheUrl = pUrlToCall + _q + Math.random()+new Date();
		
		// ATTENTION, mettre le "true" Ã  "false" brise le tout en FIREFOX!
		oAjax.open("GET", _sNoCacheUrl, true); 
		
		oAjax.onreadystatechange = function() {
			if (oAjax.readyState == 4) { // loading complete
				if (oAjax.status == 200) { // server response: 200  means "file found/all kosher"// only works when viewing via a server, use 0 when testing without
					 if (oThis.RETURN_TYPE[pReturnType]!=undefined && oThis.RETURN_TYPE[pReturnType]!=null) {
						if (oThis.RETURN_TYPE[pReturnType]=="text"){ 
							if ( (pIdInnerHtml!=null) && (pOutputFunction==null) ){


								document.getElementById(pIdInnerHtml).innerHTML = oAjax.responseText;
								
//								alert(document.getElementById(pIdInnerHtml).innerHTML);
								
								//**********************************************************************
								// ajoutÃ© pour rÃ©gler le problÃ¨me de l'execution du javascript en ajax
								// les javascript sont dans des div avec class="javascript"
								// on les cherches et on fait un eval de ce qui est dedans.
								
								var _a = getElementsByClassName("javascript");
								window.srcAV_aInstancesId = new Array();
								window.srcAV_aInstances = new Array();
								for (var i=0; i<_a.length; i++) {
									_a[i].innerHTML = eval(_a[i].innerHTML);
									//srcAV_loadScript();
								}
								//requestIn

								// PATCH POUR ROTTERDAM DANS LES RUBRIQUES!
								var _b = getElementsByClassName("javascript_rotterdam");
								var variablebidon;
								for (i=0; i<_b.length; i++){
									variablebidon = setTimeout("doPause();", 7000);
									//srcAV_loadScript();
								}
								
								//**********************************************************************/
								//**********************************************************************/
								
								
								// Faire les stats
								if (isStats) setStats(paramsStats);

								// Section Blogue, simuler le anchor s'il y a lieu
								if (findValue(paramsStats, "focus") == 'formulairepost') goto("formulairePost");
								if (findValue(paramsStats, "focus") == 'commentaire')	goto("commentaire");


							}else if ( (pIdInnerHtml==null) && (pOutputFunction!=null) ){
								// be careful with quotation marks within oAjax.responseText !
								eval(pOutputFunction + "(\"" + oAjax.responseText + "\")");
							}else if ( (pIdInnerHtml!=null) && (pOutputFunction!=null) ){
								// be careful with quotation marks within oAjax.responseText !
								eval(pOutputFunction + "('" + pIdInnerHtml + "',\"" + oAjax.responseText+ "\")");
							}else{
								return false;
							}
						}else if (oThis.RETURN_TYPE[pReturnType]=="javascript"){ 
							if ( (pIdInnerHtml!=null) && (pOutputFunction==null) ) {
								document.getElementById(pIdInnerHtml).innerHTML = "";
								eval(oAjax.responseText); 
								if (isStats) setStats(paramsStats);
							}else if ( (pIdInnerHtml==null) && (pOutputFunction!=null) ){
								// not available
							}else if ( (pIdInnerHtml!=null) && (pOutputFunction!=null) ){
								// not available
							}else{

								// ICI SE TROUVE LE AJAX QUI AFFICHE LA PAGE D'UNE RUBRIQUE!!!
								eval(oAjax.responseText); 
								// ATTENTION pour les stats : dans la ligne ci-haut, il y a un autre appel Ã  AJAX et c'est avec ses paramÃ¨tres Ã  lui qu'il faut "caller" les stats
							}
						}else if (oThis.RETURN_TYPE[pReturnType]=="json"){
							if ( (pIdInnerHtml!=null) && (pOutputFunction==null) ){
								var data = JSON.parse(oAjax.responseText);
								document.getElementById(pIdInnerHtml).innerHTML = data;
							}else if ( (pIdInnerHtml==null) && (pOutputFunction!=null) ) {
								if (!JSON.parse(oAjax.responseText)){ // there is a  json syntax error
									eval(pOutputFunction + "(null)");
								}else{ // we have a json object !
									eval(pOutputFunction + "(" + oAjax.responseText + ")");
								}
							}else if ( (pIdInnerHtml!=null) && (pOutputFunction!=null) ){
								if (!JSON.parse(oAjax.responseText)){ // there is a  json syntax error
									eval(pOutputFunction + "('"+pIdInnerHtml+"',null)");
								}else{ // we have a json object !
									eval(pOutputFunction + "('" + pIdInnerHtml + "'," + oAjax.responseText +")");
								}
							}else{
								return false;
							}
						}
					 }else{
						alert("Erreur: objet Ajax"); 
					 }
				}
//				else{
					//alert("erreur");
//					if (pIdInnerHtml!=null){
//						document.getElementById(pIdInnerHtml).innerHTML  = "Erreur: RequÃªte AJAX ne peut Ãªtre traitÃ©e.";
//					}
//				}
			}else if (oAjax.readyState == 1){ // loading
				 //alert("TÃ©lÃ©chargement en cours...");
				 if (pIdInnerHtml!=null){
//					document.getElementById(pIdInnerHtml).innerHTML  = "T&eacute;l&eacute;chargement en cours...."; 
				 }
			}
		}
		oAjax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		oAjax.send(data);
	};// this.getData()
	
}; // Ajax()


								function getElementsByClassName(className, tag, elm){
									var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
									var tag = tag || "*";
									var elm = elm || document;
									var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
									var returnElements = [];
									var current;
									var length = elements.length;
									for(var i=0; i<length; i++){
										current = elements[i];
										if(testClass.test(current.className)){
											returnElements.push(current);
										}
									}
									return returnElements;
								}
