// ==================================
// Test Classe BCS.connect()
// ==================================



// Constructeur
// @param url {string} :: url de la page de traitement
// @param objet {object} :: objet auquel on se réfère (fonctions success, failure...)

BCS.connect = function(url, objet, funct) {

	// Propriétés
	this.url = url;
	this.arrayValue = new Array();
	this.objet = objet;
	this.successFunct = funct;
	
	// connectM
	this.connectM = BCS.connectM;
	// Ajoute la connexion courante à la pile de connexion
	this.connectM.addConnect(this);
	
	// Méthodes
	this.addValue = BCS.connect.addValue;
	this.connexion = BCS.connect.connexion;
	this.success = BCS.connect.success;
	this.failure = BCS.connect.failure;
	this.decode = BCS.connect.decode;
	this.getEl = BCS.connect.getEl;
}


// addValue
// @param cle {string}
// @param valeur {string}
// Description : Ajoute une valeur au tableau, à l'indice cle

BCS.connect.addValue = function(cle,valeur) {
	this.arrayValue[cle] = valeur;
}


// connexion
// @param connect {object} :: connexion courante (facultatif)
// Description : Effectue la connexion au serveur en passant en paramètre les valeurs du tableau arrayValue

BCS.connect.connexion = function(connect) {

	// Si connect n'est pas renseigné, connect est la connexion courante
	if(!connect) { var connect = this; }

		// On teste si la connexion peut s'effectuer
		if(BCS.connectM.connexionM(connect) == true) {
			if(this.successFunct==undefined){
				var callback = {
					success: connect.objet.success,
					failure: connect.objet.failure,
					argument: [connect.objet,connect] 
				};		
			} else {
				var callback = {
					success: this.success,
					failure: BCS.connect.failure,
					argument: [connect.objet,connect,this.successFunct] 
				};				
			}

			
			var j=0;
			for( var i in connect.arrayValue){
				if(j==0){
					connect.url += "?";
				} else {
					connect.url += "&";
				}
				connect.url += i+"="+connect.arrayValue[i];
				j++;
			}

			var req = YAHOO.util.Connect.asyncRequest('GET', connect.url, callback);
		
		} else {
			setTimeout(function() { BCS.connect.connexion(connect); }, 100);
		}
	}

BCS.connect.success = function( result ) {
	
	//alert(result);
	var obj = result.argument[0];
	var funct = result.argument[2];
	var reponse = BCS.connect.getText(result);
	obj.setContent(reponse);
	BCS.connectM.remove();
	eval(funct);
}

BCS.connect.failure = function (){
	alert("probleme de connexion");
	BCS.connectM.remove();
}

// getEl
// @param result {array}
// @param tag {string}
// @param indice {int}
BCS.connect.getEl = function(result,tag,indice) {
	if( ! indice ){
		indice = 0;
	}
	return BCS.connect.decode(result.responseXML.documentElement.getElementsByTagName(tag)[indice].firstChild.nodeValue);
}

BCS.connect.getText = function(result){
	return result.responseText;
}


// fonction decode
// @param ch {string}
// Description : Remplace les caractères spécifiés dans arrayCarac, dans la chaine ch, par les caractères de arrayCarac2
BCS.connect.decode = function(ch) {
	var arrayCarac = new Array("$255;","$254;");
	var arrayCarac2 = new Array("\"",  "'");
	
	var i=0;
	var j=0;
	
	for(j=0; j<arrayCarac.length; j++) {
		i=0;
		while(i!=-1) {
			i = ch.indexOf(arrayCarac[j], i);
			if(i>=0) {
				ch=ch.substring(0,i)+arrayCarac2[j]+ch.substring(i+arrayCarac[j].length);
				i+=arrayCarac2[j].length;
			}
		}
	}	
	
	return ch;
};