// Initialisation de l'objet request
function initRequest() {
	var request;

	if (window.XMLHttpRequest) {
		request = new XMLHttpRequest();
	}
	else {
		request = new ActiveXObject('Msxml2.XMLHTTP');

		if (!request) {
			request = new ActiveXObject('Microsoft.XMLHTTP');
		}
	}

	return request;
}

// Fonction de traitement des erreurs
function traiteErreur(message) {
	$('bloc_erreur_js').innerHTML = message;
	$('bloc_erreur_js').style.display = 'inline';
}

// Envoi d'une requête
function sendRequest(type, url, async, asyncCall) {
	try {
		var request = initRequest();

		if (!request) {
			throw new Error('Votre navigateur ne permet pas d\'utiliser toutes les fonctionnalités de ce site. Pensez à le mettre à jour.');
		}

		// Chaîne pour le passage en mode POST
		var queryString = null;

		request.onreadystatechange = function() { asyncCallBack(request, asyncCall); };
		request.open(type, url, async);

		if (type.toLowerCase() == 'post' && arguments[4] != null && arguments[4].length > 0) {
			queryString = arguments[4];
			request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
		}

		request.send(queryString);
	}
	catch (e) {
		traiteErreur(e.message);
	}
}

// Fonction de traitement des retours
function asyncCallBack(request, callBack) {
	try {
		switch (request.readyState) {
			case 0:
				// Traitement pour une requête non initalisée
				break;

			case 1:
				// Traitement pour une requête en cours de transfert
				break;

			case 2:
				// Traitement pour une requête transférée.
				break;

			case 3:
				// Traitement lorsqu'une partie de la réponse est accessible.
				break;

			case 4:
				if (request.status == 200) {
					var docXml = request.responseXML;

					if (docXml.documentElement.nodeName == 'error') {
						throw new Error('Le serveur à rencontré une erreur: ' + docXml.documentElement.firstChild.nodeValue);
					}

					callBack(docXml);
				}
				else {
					throw new Error('Le serveur n\'a pas pu traiter la requête. Réponse HTTP: ' + request.status + '.');
				}
			break;
		}
	}
	catch (e) {
		traiteErreur(e.message);
	}
}

// Retourne true si la touche entrée a été pressée
function returnKeyPressed(evenement) {
   var key;

	if (window.event) {
		key = evenement.keyCode;
	}
	else {
		key = evenement.which;
	}

   return key == 13;
}

// Construit une url depuis les informations d'une catégorie
function buildUrl(infoCategorie) {
	var url = '';
	var anchor = '';

	var content = infoCategorie['libelle_categorie'];
	var description = infoCategorie['description_categorie'];
	var module = infoCategorie['module']
	var type_action = infoCategorie['type_action'];
	var action = infoCategorie['action'];
	var parametre = infoCategorie['parametre'];
	var valeur_parametre = infoCategorie['valeur_parametre'];


	if (!(module && action)) {
		return content;
	}

	if (description) {
		description = ' alt="' + description + '" title="' + description + '"';
	}

	switch (type_action) {
		case 'href':
			url = (arguments[1]) ? "blank.php5" : "index.php5";
			url += '?mod=' + encodeURIComponent(module) + '&' + action;

			if (parametre) {
				url += '&' + parametre;

				if (valeur_parametre) {
					 url += '=' + valeur_parametre;
				}
			}

			anchor = '<a href="' + url + '"' + description + '>';
			break

		default:
			anchor = '<a href="#" onclick="' + action + '"' + description + '>';
			break;
	}

	anchor += content + '</a>';
	return (arguments[1]) ? url : anchor;
}

function verifFormCommande() {
	if ($F('nom') == '' || $F('prenom') == '' || $F('email') == '' || $F('mdp') == '') {
		alert('Veuillez renseigner les champs nom, prénom, email et mot de passe avant de valider la commande.');
		return false;
	}

	callClient(true);
	return false;
}

// Vérification et aide à la saisie de date
function verifDate(champDate) {
	champDate.value.replace('[^0-9/]', '');
	var joursParMois = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	var tabDate = champDate.value.split('/');
}

function callProduitByCode(code) {
	var url = "blank.php5?mod=Catalogue&get_by_code=" + encodeURIComponent(code);
	sendRequest('GET', url, true, asyncProduitByCode);
}

function asyncProduitByCode(docXml) {
	if (!docXml.getElementsByTagName('id_produit')[0].hasChildNodes()) {
		var code_produit = docXml.getElementsByTagName('code_produit')[0].firstChild.nodeValue;
		$('pdt_' + code_produit).innerHTML = 'Produit inconnu';
		return;
	}

	var id_produit = docXml.getElementsByTagName('id_produit')[0].firstChild.nodeValue;
	var code_produit = docXml.getElementsByTagName('code_produit')[0].firstChild.nodeValue;
	var libelle_produit = docXml.getElementsByTagName('libelle_produit')[0].firstChild.nodeValue;
	var prix_vente_ttc = docXml.getElementsByTagName('prix_vente_ttc')[0].firstChild.nodeValue;
	var url_thumb = docXml.getElementsByTagName('url_thumb')[0].firstChild.nodeValue;

	var tag_dispo = docXml.getElementsByTagName('dispo')[0];
	var html = '';

	html = '<img src="' + url_thumb + '" class="img_objet" /><ul class="bloc_objet"><li class="elt_objet"><span class="nom_objet">' + libelle_produit + '</span>';

	if (tag_dispo.hasChildNodes()) {
		html += '<li class="elt_objet"><span class="nom_objet">' + tag_dispo.firstChild.nodeValue + '</span></li>';
	}

	html += '<li class="elt_objet"><span class="nom_objet">Prix: ' + prix_vente_ttc + ' &euro;</span></li><li class="elt_objet"><a href="index.php5?mod=Catalogue&amp;detail_produit=' + id_produit + '" class="link_objet">Plus d\'infos</a></li></ul>';

	$('pdt_' + code_produit).innerHTML = html;
}

Object.extend(String, {
		escape: function(str) {
			return str.valueOf().replace('\'', '\\\'');
		}
	}
);
