// + XHRConnection
// + V1.4
function XHRConnection() {

	// + ----------------------------------------------------------------------------------
	var conn = false;
	var debug = true;
	var errorConn = null; // code function default
	var errorHTTP = new Array(39);
	var fileError = new Array();
	var datas = new String();
	var areaId = new String();
	var xmlObj; // Objet XML
	var xmlLoad; // Type de comportement au chargement du XML


	// + ----------------------------------------------------------------------------------
	try {
		conn = new XMLHttpRequest();
	}
	catch (error) {
		if (debug) {fileError.push('Erreur lors de la tentative de création de l\'objet new XMLHttpRequest() ' + error);}
		try {
			conn = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (error) {
			if (debug) {fileError.push('Erreur lors de la tentative de création de l\'objet new ActiveXObject("Microsoft.XMLHTTP") ' + error);}
			try {
				conn = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (error) {
				if (debug) {fileError.push('Erreur lors de la tentative de création de l\'objet new ActiveXObject("Msxml2.XMLHTTP") ' + error);}
				conn = false;
			}
		}
	}


	// + ----------------------------------------------------------------------------------
	// + getDumpError
	// + Affiche les erreurs dans un tableau graphique
	// + ----------------------------------------------------------------------------------
	this.getDumpError = function(version) {
		return this.var_dump(fileError,version);
	}


	// + ----------------------------------------------------------------------------------
	// + var_dump
	// + Dump un tableau Array() - fonction analogue à var_dump en PHP, mais plus simple
	// + ----------------------------------------------------------------------------------
	this.var_dump = function(tab,version) {
		switch(version) {
			case 0: var tabul = "\t"; var rline = "\n"; break;
			case 1: var tabul = "&nbsp;&nbsp;&nbsp;&nbsp;"; var rline = "<br />"; break;
		}

		var indent = tabul;
		var i = 0;
		var elements = "";

		for (var elt in tab) {
			elements += (i ? "," + rline + " " : " ") + indent + "[" + elt + "] : ";
			switch (typeof tab[elt]) {
				case "string" :
					elements += "\"" + tab[elt] + "\""; break;
				case "number" :
					elements += tab[elt]; break;
				case "object" :
					if (tab[elt] == null) elements += "*null*";
					else if (tab[elt]) elements += var_dump(tab[elt], indent); break;
				case "undefined" :
					elements += "*undefined*"; break;
				default : elements += tab[elt];
			}
			i++;
		}
		return "Array(" + (i-1) + ")" +tabul +"{" + rline + elements + rline +  "}";
	}


	// + ----------------------------------------------------------------------------------
	// + setDebugOff
	// + Désactive l'affichage des exceptions
	// + ----------------------------------------------------------------------------------
	this.setDebugOff = function() {
		debug = false;
	};

	// + ----------------------------------------------------------------------------------
	// + setDebugOn
	// + Active l'affichage des exceptions
	// + ----------------------------------------------------------------------------------
	this.setDebugOn = function() {
		debug = true;
	};

	// + ----------------------------------------------------------------------------------
	// + resetData
	// + Permet de vider la pile des données
	// + ----------------------------------------------------------------------------------
	this.resetData = function() {
		datas = new String();
		datas = '';
	};

	// + ----------------------------------------------------------------------------------
	// + appendData
	// + Permet d'empiler dans une url des données afin de les envoyer
	// + ----------------------------------------------------------------------------------
	this.appendData = function(pfield, pvalue) {
		datas += (datas.length == 0) ? pfield+ "=" + escape(pvalue) : "&" + pfield + "=" + escape(pvalue);
	};

	// + ----------------------------------------------------------------------------------
	// + setRefreshArea
	// + Indique quel elment identifié par id est valorise lorsque l'objet XHR recoit une réponse
	// + ----------------------------------------------------------------------------------
	this.setRefreshArea = function(id) {
		areaId = id;
	};

	// + ----------------------------------------------------------------------------------
	// + createXMLObject
	// + Méthode permettant de créer un objet DOM, retourne la réfrence
	// + Inspiré de: http://www.quirksmode.org/dom/importxml.html
	// + ----------------------------------------------------------------------------------
	this.createXMLObject = function() {
		try {
			 	xmlDoc = document.implementation.createDocument("", "", null);
				xmlLoad = 'onload';
		}
		catch (error) {
			try {
				xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
				xmlLoad = 'onreadystatechange ';
			}
			catch (error) {
				if (debug) {fileError.push('Erreur lors de la tentative de création de l\'objet XML\n\n');}
				return false;
			}
		}
		return xmlDoc;
	}

	// + ----------------------------------------------------------------------------------
	// + Permet de définir l'objet XML qui doit être valorisé lorsque l'objet XHR reoit une réponse
	// + ----------------------------------------------------------------------------------
	this.setXMLObject = function(obj) {
		if (obj == undefined) {
				if (debug) {fileError.push('Paramètre manquant lors de l\'appel de la méthode setXMLObject');}
				return false;
		}
		try {
			//xmlObj = this.createXMLObject();
			xmlObj = obj;
		}
		catch (error) {
				if (debug) {fileError.push('Erreur lors de l\'affectation de l\'objet XML dans la méthode setXMLObject');}
		}
	}

	// + ----------------------------------------------------------------------------------
	// + loadXML
	// + Charge un fichier XML
	// + Entrées
	// + 	xml			String		Le fichier XML à charger
	// + ----------------------------------------------------------------------------------
	this.loadXML = function(xml, callBack) {
		if (!conn) return false;
		// Chargement pour alimenter un objet DOM
		if (xmlObj && xml) {
			if (typeof callBack == "function") {
				if (xmlLoad == 'onload') {
					xmlObj.onload = function() {
						callBack(xmlObj);
					}
				}
				else {
					xmlObj.onreadystatechange = function() {
						if (xmlObj.readyState == 4) callBack(xmlObj)
					}
				}
			}
			xmlObj.load(xml);
			return;
		}
	}

	this.nodeCleanXML = function(c){
		if(!c.data.replace(/\s/g,''))
			c.parentNode.removeChild(c);
	}


	this.cleanXML = function(d){
		var bal=d.getElementsByTagName('*');

		for(i=0;i<bal.length;i++){
			a=bal[i].previousSibling;
			if(a && a.nodeType==3)
				go(a);
			b=bal[i].nextSibling;
			if(b && b.nodeType==3)
				go(b);
		}
		return d;
	}

	// + ----------------------------------------------------------------------------------
	// + sendAndLoad
	// + Connexion à la page désirée avec envoie des données, puis mise en attente de la réponse
	// + Entrées
	// + 	Url			String		L'url de la page à laquelle l'objet doit se connecter
	// + 	httpMode	String		La méthode de communication HTTP : GET, HEAD ou POST
	// + 	callBack	Objet		Le nom de la fonction de callback ou rien mettre
	// + ----------------------------------------------------------------------------------
	this.sendAndLoad = function(url, httpMode, callBack) {
		httpMode = httpMode.toUpperCase();

		conn.onreadystatechange = function() {

			if (conn.readyState == 1) {
				fileError.push('1 = (loading) début du transfert des données');

			} else if (conn.readyState == 2) {
				fileError.push('2 = (loaded) données transférées - Status conn = ' + conn.status);
				errorConn=conn.status;

			} else if (conn.readyState == 3) {
				if (conn.status == 200) {
					fileError.push('3 = (interactive) les données reçues ne sont pas accessibles - Status conn = ' + conn.status);
				} else {
					fileError.push('3 = (interactive) les données reçues sont accessibles en partie - Status conn = ' + conn.status);
				}

			} else if (conn.readyState == 4 && conn.status == 200) {
				if (typeof callBack == "function") { // Si une fonction de callBack a été définie
					fileError.push('4 = (complete)');
					callBack(conn);
					return;
				}
				else if (areaId.length > 0){ // Si une zone destinée à récupérer le résultat a été définie
					try {
						document.getElementById(areaId).innerHTML = conn.responseText;
					}
					catch(error) {
						if (debug) {fileError.push('Echec, ' + areaId + ' n\'est pas un objet valide'); }
					}
				return;
				}
			}
		};

 		switch(httpMode) {

			case "GET":
				try {
					url = (datas.length > 0) ? url + "?" + datas : url;
					conn.open("GET", url);
					conn.send(null);
					fileError.push('Open & Send function / methode GET');
				}
				catch(error) {
					if (debug) {fileError.push('Echec lors de la transaction avec ' + url + ' via la méthode GET');}
					return false;
				}
			break;

			case "POST":
				try {
					conn.open("POST", url);
					conn.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
					conn.send(datas);
				}
				catch(error) {
					if (debug) {fileError.push('Echec lors de la transaction avec ' + url + ' via la mthode POST');}
					return false;
				}
			break;

			default :
				return false;
			break;
		}

		try {
			return conn.status;
		}
		catch(e) {
			return errorConn;
		}
	}



	this.sendAndLoad_v2 = function(url, httpMode, callBack) {

 		httpMode = httpMode.toUpperCase();
			conn.onreadystatechange = function(){
				if(conn.readyState == 4 && conn.status == 200){ //alert(conn.responseText); // debug

					if (typeof callBack == "function") { // Si une fonction de callBack a été définie
						fileError.push('4 = (complete) Version GET');
						callBack(conn);
						return;
					}
				}
			}
			url = (datas.length > 0) ? url + "?" + datas : url;
			conn.open("GET",url,true);
			conn.send(null); //alert(url);
	}
	return this;
}

function ow(id) {

		window.open('/members/presentation.php?id='+id, 'fenster1', 'width=800, height=600, toolbar=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=no');
		
}

var rundivs = false;
var funcdivs = null;
var rundpic = false;
var funcpic = null;
var lastrdmobjectid = 0;

function beginrto() {	
	
	rundivs = true;
	rundpic = true;
	
	funcpic = setInterval("requestnewpicture(null);", 10000);
	funcdivs = setInterval("movedivs();", 12000);
	
}

function requestnewpicture(modus) {
	
	var XHR = new XHRConnection();
	var url  = "/offer/search/returnrandomobject.php";
	
	if (modus != null) {
		
		clearInterval(funcpic);
		XHR.appendData("mode",modus);
		XHR.appendData("lastid",lastrdmobjectid);
		
	}
	
	rXHR = XHR.sendAndLoad_v2(url, "GET",callback_gettopoffer);
	
}

function movedivs() {
	
	var ids = new Array('gw_kn_news','gw_kn_market');
	var icount = 1;
	
	if (rundivs == true) {
	
		for (var i in ids) {
			
			if (document.getElementById(ids[i]).style.display != 'none') {
				
				var newid = (icount < ids.length) ? icount : 0;
				
				document.getElementById(ids[i]).style.display = 'none';
				document.getElementById(ids[i]+'_navi').style.background = 'url(http://www.immopro24.eu/_img/in/bg_norm2.jpg) repeat-x bottom';
				document.getElementById(ids[i]+'_navi').style.borderBottom = '1px solid #40647B';
				document.getElementById(ids[i]+'_lt').style.color = '#40647B';
				document.getElementById(ids[newid]).style.display = 'block';
				document.getElementById(ids[newid]+'_navi').style.background = 'url(http://www.immopro24.eu/_img/in/bg_norm.jpg) repeat-x top';
				document.getElementById(ids[newid]+'_navi').style.borderBottom = '1px solid #FFF';
				document.getElementById(ids[newid]+'_lt').style.color = '#7A1D42';
				
				break;
				
			}
			
			icount++;
			
		}
		
	}
	
}

function callback_gettopoffer(obj) {
	
	var objects = obj.responseText;
	var object_array = objects.split('|');
	
	document.getElementById('rto_link').href = object_array[0];
	document.getElementById('rto_link').title = object_array[1];
	document.getElementById('rto_img').src = object_array[2];
	document.getElementById('rto_img').alt = object_array[1];
	document.getElementById('rto_img').title = object_array[1];
	document.getElementById('rto_text').innerHTML = object_array[3];
	lastrdmobjectid = object_array[4];
	
}

function scl(tt) {
	
	var XHR = new XHRConnection();
	var url  = "/tracking.php";	
	XHR.appendData("track",tt);
	rXHR = XHR.sendAndLoad_v2(url, "GET",scl_done);
	
}

function scl_done() {
	
	return true;
	
}

function vw(vid) {
		
	var ids = new Array('gw_kn_news','gw_kn_market');
		
	for (var i in ids) {
			
		document.getElementById(ids[i]).style.display = 'none';
		document.getElementById(ids[i]+'_navi').style.background = 'url(http://www.immopro24.eu/_img/in/bg_norm2.jpg) repeat-x bottom';
		document.getElementById(ids[i]+'_navi').style.borderBottom = '1px solid #40647B';
		document.getElementById(ids[i]+'_lt').style.color = '#40647B';
			
	}
	
	rundivs = false;
	clearInterval(funcdivs);
		
	document.getElementById(vid).style.display = 'block';
	document.getElementById(vid+'_navi').style.background = 'url(http://www.immopro24.eu/_img/in/bg_norm.jpg) repeat-x top';
	document.getElementById(vid+'_navi').style.borderBottom = '1px solid #FFF';
	document.getElementById(vid+'_lt').style.color = '#7A1D42';
		
}
