var xhr = null;

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////// Classe AjaX /////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
function AjaX(doOnAnswer)
{
	this.init = createAjaxObject;
	this.sendQuery = sendAjaxQuery;
	this.doOnAnswer = doOnAnswer;
}

////////////////////////////////////////////////////////////////////////////////
//////////////// Fonction de création de l'objet XMLHttpRequest ////////////////
////////////////////////////////////////////////////////////////////////////////
function createAjaxObject()
{
	if(window.XMLHttpRequest) {
		xhr = new XMLHttpRequest(); // Firefox, Safari, Opéra
		if (xhr.overrideMimeType) {
			xhr.overrideMimeType("text/xml"); // Debug Safari
		}
	} else {
		if(window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP"); // IE
			} catch (e) {
				try {
					xhr = new ActiveXObject("Microsoft.XMLHTTP"); // IE
				} catch (e) {}
			}
		}
	}
	this.handler = xhr;
	return this.handler;
}

////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Envoi de la requête AjaX ///////////////////////////
////////////////////////////////////////////////////////////////////////////////
function sendAjaxQuery(action, data)
{
	this.handler.open('POST', action, true);

	this.handler.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=utf8');

	var postData = '';
	for(var i = 0 ; i < data.length ; i++) {
		postData += data[i][0]+'='+data[i][1]+'&';
	}
	postData = postData.substr(0, postData.length - 1);
	this.handler.send(postData);

	this.handler.onreadystatechange = this.doOnAnswer;
}


////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
function inscription() {
	if(document.getElementById('signinForm') || document.getElementById('compteForm')) {
		if(document.getElementById('signinForm'))
			var myform = document.getElementById('signinForm');
		else
			var myform = document.getElementById('compteForm');
		
		myform.onsubmit = function() {
			if(document.getElementById('field_ville').nodeName == 'input') {
				document.getElementById('field_ville').value = document.getElementById('field_ville').value.toUpperCase();
			}
			return true;
		}
		
		/* Choix professionnel/particulier */
		var zone = document.getElementById('pro');
		if(document.getElementById('field_pro') && document.getElementById('field_pro').checked == false)
			zone.style.display = 'none';
		
		var radios = document.getElementById('choixType').getElementsByTagName('input');
		for(var i = 0 ; i < radios.length ; i++) {
			radios[i].zone = zone;
			radios[i].onchange = function() {
				if (this.value == 'professionnel' && this.checked) {
					this.zone.style.display = 'block';
				}
				else if (this.value == 'particulier' && this.checked) {
					this.zone.style.display = 'none';
			
				}
			}
			radios[i].onclick = function() {
				if (this.value == 'professionnel' && this.checked) {
					this.zone.style.display = 'block';
				}
				else if (this.value == 'particulier' && this.checked) {
					this.zone.style.display = 'none';
			
				}
			}
		}
		
		/* Sélection région, département, code postal et ville */
		var selReg = document.getElementById('field_region');
		var saveReg = document.getElementById('save_region');
		var selDpt = document.getElementById('field_dpt');
		var saveDpt = document.getElementById('save_dpt');
		var cpField = document.getElementById('field_cp');
		var saveCp = document.getElementById('save_cp');
		var villeField = document.getElementById('field_ville');
		var saveVille = document.getElementById('save_ville');
		
		// Initialisation
		selDpt.disabled = (saveDpt.value == 'NULL');
		cpField.disabled = (saveCp.value == '');
		villeField.disabled = (saveVille.value == '');
		
		selReg.dpt = selDpt;
		var selRegFunc = function(obj) {
			if(obj.options[obj.selectedIndex].value != 'NULL') {
				var attr = new Array(
					new Array('region', obj.options[obj.selectedIndex].value)
				);
				var url = 'AjaX/listeDpt.xml';
				var obj = new AjaX(changeDptList);
				xhr = obj.init();
				obj.sendQuery(url, attr);
			} else {
				obj.dpt.length = 1;
				obj.dpt.disabled = true;
			}
		}
		selReg.onchange = function() { selRegFunc(this); }
		selReg.onkeyup = function() { selRegFunc(this); }
		if(selReg.selectedIndex > 0)
			selRegFunc(selReg);
		
		selDpt.cp = cpField;
		var selDptFunc = function(obj) {
			if(obj.options[obj.selectedIndex].value != 'NULL') {
				if(obj.options[obj.selectedIndex].value == '2A' || obj.options[obj.selectedIndex].value == '2B') {
					obj.cp.value = '20';
				} else {
					obj.cp.value = obj.options[obj.selectedIndex].value+'';
				}
				obj.cp.disabled = false;
			} else {
				obj.cp.value = '';
				obj.cp.disabled = true;
			}
		}
		selDpt.onchange = function() { selDptFunc(this); }
		selDpt.onkeyup = function() { selDptFunc(this); }
		
		cpField.ville = villeField;
		var cpFieldFunc = function(obj) {
			if (obj.value.length == 5) {
				var attr = new Array(
					new Array('cp', obj.value)
				);
				var url = 'AjaX/listeVille.xml';
				var obj = new AjaX(changeVilleList);
				xhr = obj.init();
				obj.sendQuery(url, attr);				
			} else {
				obj.ville.disabled = true;
			}
		}
		cpField.onkeyup = function() { cpFieldFunc(this); }
		if(saveCp.value != '')
			cpFieldFunc(cpField);
	}
}
function changeDptList() {
	try {
		if(xhr.readyState == 4) {
			if(xhr.status == 200) {
				var actual = document.getElementById('field_dpt');
				var save = document.getElementById('save_dpt');
				var xml = xhr.responseXML;
				var root = null;
				if(typeof XMLDocument == 'function' || typeof XMLDocument == 'object') { // Firefox
					root = xml.firstChild;
				} else if(typeof Document != 'undefined' && xml instanceof Document) { // Opera
					root = xml.childNodes.item(1);
				} else { 								// IE
					var res = new ActiveXObject("Microsoft.XMLDOM");
					res.async="false";
					res.loadXML(xhr.responseText);
					root = res.childNodes.item(1);
				}
				
				if(root.nodeName != 'error') {
					var liste = root.childNodes;
					actual.length = liste.length + 1;
					for(var i = 0 ; i < liste.length ; i++) {
						actual.options[i+1].value = liste[i].getAttribute('num');
						actual.options[i+1].text = liste[i].firstChild.nodeValue;
						if(save.value == liste[i].getAttribute('num'))
							actual.options[i+1].selected = true;
					}
					actual.disabled = false;
				} else {
					alert('Une erreur est survenue lors de la récupération des départements associés à cette région');
				}
			}
		}
	} catch(e) { }
}
function changeVilleList() {
	try {
		if(xhr.readyState == 4) {
			if(xhr.status == 200) {
				var actual_cp = document.getElementById('field_cp');
				var save_cp = document.getElementById('save_cp');
				var actual = document.getElementById('field_ville');
				var save = document.getElementById('save_ville');
				if(xhr.responseText.indexOf('Warning') >= 0) {
					var field = document.createElement('input');
					field.setAttribute('id',actual.id);
					field.setAttribute('name',actual.name);
					field.setAttribute('type','text');
					if (actual_cp.value == save_cp.value) {
					   field.setAttribute('value', save.value);
					   field.value = save.value;
                    }
					actual.parentNode.replaceChild(field, actual);					
				} else {
					var xml = xhr.responseXML;
					var root = null;
					if(typeof XMLDocument == 'function' || typeof XMLDocument == 'object') {  // Firefox
						root = xml.firstChild;
					} else if(typeof Document != 'undefined' && xml instanceof Document) { // Opera
						root = xml.childNodes.item(1);
					} else { 								// IE
						var res = new ActiveXObject("Microsoft.XMLDOM");
						res.async="false";
						res.loadXML(xhr.responseText);
						root = res.childNodes.item(1);
					}
					
					var liste = root.childNodes;
					if(root.nodeName != 'error' && liste.length > 0) {
						var field = document.createElement('select');
						field.setAttribute('id',actual.id);
						field.setAttribute('name',actual.name);
						field.options.length = liste.length + 1; 
						field.options[0].value = 'NULL';
						field.options[0].text = '-- Choisissez votre ville --';
						for(var i = 0 ; i < liste.length ; i++) {
							field.options[i+1].value = liste[i].firstChild.nodeValue;
							field.options[i+1].text = liste[i].firstChild.nodeValue;
							if(save.value == liste[i].firstChild.nodeValue)
								field.options[i+1].selected = true;
						}
						field.disabled = false;
						actual.parentNode.replaceChild(field, actual);
					} else {
						if(liste.length == 0 || root.firstChild.nodeValue == 'notFound' || root.firstChild.nodeValue == 'connexionFailed') {
							var field = document.createElement('input');
							field.setAttribute('id',actual.id);
							field.setAttribute('name',actual.name);
							field.setAttribute('type','text');
        					if (actual_cp.value == save_cp.value) {
        					   field.setAttribute('value', save.value);
        					   field.value = save.value;
                            }
							actual.parentNode.replaceChild(field, actual);
						} else
							alert('Une erreur est survenue lors de la récupération des villes associées à ce code postal');
					}
				}
			}
		}
	} catch(e) {}
}

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
function popupLinks() {
	var links = document.getElementsByTagName('a');
	for(var i = 0 ; i < links.length ; i++) {
		if(links[i].className.indexOf('popup') >= 0) {
			links[i].onclick = function() {
				window.open(this.href);
				return false;
			}
		}
	}
}

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
function ajouterAnnonce() {
	if(document.getElementById('newAnnonceForm') || document.getElementById('advSearchForm')) {
		var noJs = document.getElementById('noJs');
		noJs.parentNode.removeChild(noJs);
		
		var mrqList = document.getElementById('field_marque');
		var typList = document.getElementById('field_type');
		var modList = document.getElementById('field_modele');
		
		var mrqSave = document.getElementById('save_marque');
		for (var i = 0 ; i < mrqList.options.length ; i++) {
			if (mrqList.options[i].value == mrqSave.value)
				mrqList.options[i].selected = true;
		}
		var typSave = document.getElementById('save_type');
		for (var i = 0 ; i < typList.options.length ; i++) {
			if (typList.options[i].value == typSave.value)
				typList.options[i].selected = true;
		}
		mrqFunc(mrqList);
		
		var autreMrq = document.getElementById('field_autreMarque').parentNode;
		var autreTyp = document.getElementById('field_autreType').parentNode;
		var autreMod = document.getElementById('field_autreModele').parentNode;
		
		if(mrqList.options[mrqList.selectedIndex].value != 'AUTRE')
			autreMrq.style.display = 'none';
		if(typList.options[typList.selectedIndex].value != 'AUTRE')
			autreTyp.style.display = 'none';
		if(modList.options[modList.selectedIndex].value != 'AUTRE')
			autreMod.style.display = 'none';
		if(mrqList.options[mrqList.selectedIndex].value == 'NULL' && typList.options[typList.selectedIndex].value == 'NULL')
			modList.disabled = true;

		mrqList.onchange = function() { mrqFunc(this); }
		mrqList.onkeyup = function() { mrqFunc(this); }
		
		typList.onchange = function() { typFunc(this); }
		typList.onkeyup = function() { typFunc(this); }
		
		modList.onchange = function() { modFunc(this); }
		modList.onkeyup = function() { modFunc(this); }
		
		document.getElementById('newAnnonceForm').onsubmit = function() {
            var mask = document.createElement('div');
            mask.id = 'opacityMask';
            changeOpac(65, mask);
            document.getElementsByTagName('body')[0].appendChild(mask);
            
            var message = document.createElement('div');
            message.id = 'waitMsg';
            var p1 = document.createElement('p');
            p1.appendChild(document.createTextNode('Veuillez patienter pendant que nous traitons votre demande.'));
            var p2 = document.createElement('p');
            p2.appendChild(document.createTextNode('Cela peut prendre quelques minutes en fonction des images que vous avez sélectionné et de votre connexion Internet.'));
            var img = document.createElement('img');
            img.src = 'Ressources/Images/Design/ajax-loader.gif';
            img.alt = '';
            message.appendChild(p1);
            message.appendChild(p2);
            message.appendChild(img);
            document.getElementsByTagName('body')[0].appendChild(message);
        }
	}
}
function changeOpac(opacity, obj) {
    var object = obj.style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
}
function changeModList() {
	var mrqList = document.getElementById('field_marque');
	var typList = document.getElementById('field_type');
	var modList = document.getElementById('field_modele');
	var attr = new Array(
		new Array('marque', mrqList.options[mrqList.selectedIndex].value),
		new Array('type', typList.options[typList.selectedIndex].value)
	);
	var url = 'AjaX/listeModele.xml';
	var obj = new AjaX(changeModList2);
	xhr = obj.init();
	obj.sendQuery(url, attr);
}
function changeModList2() {
	try {
		if(xhr.readyState == 4) {
			if(xhr.status == 200) {
				var actual = document.getElementById('field_modele');
				var save = document.getElementById('save_modele');
				var xml = xhr.responseXML;
				var root = null;
				if(typeof XMLDocument == 'function' || typeof XMLDocument == 'object') {  // Firefox
					root = xml.firstChild;
				} else if(typeof Document != 'undefined' && xml instanceof Document) { // Opera
					root = xml.childNodes.item(1);
				} else { 								// IE
					var res = new ActiveXObject("Microsoft.XMLDOM");
					res.async="false";
					res.loadXML(xhr.responseText);
					root = res.childNodes.item(1);
				}
								
				if(root.nodeName != 'error') {
					var liste = root.childNodes;
					var field = document.createElement('select');
					field.setAttribute('id',actual.id);
					field.setAttribute('name',actual.name);
					field.options.length = liste.length + 2;
					field.options[0].value = 'NULL';
					field.options[0].text = '-- Pas de modèle --';
					for(var i = 0 ; i < liste.length ; i++) {
						field.options[i+1].value = liste[i].getAttribute('num');
						field.options[i+1].text = liste[i].firstChild.nodeValue;
						if(save.value == liste[i].getAttribute('num'))
							field.options[i+1].selected = true;
					}
					if (!document.getElementById('advSearchForm')) {
						field.options[liste.length+1].value = 'AUTRE';
						field.options[liste.length+1].text = 'Autre... Précisez...';
					} else {
						field.options.length--;					
					}
					field.disabled = false;
					field.onchange = function() { modFunc(this); }
					field.onkeyup = function() { modFunc(this); }
					actual.parentNode.replaceChild(field, actual);
				} else {
					var field = document.createElement('select');
					field.setAttribute('id',actual.id);
					field.setAttribute('name',actual.name);
					field.options.length = 2;
					field.options[0].value = 'NULL';
					field.options[0].text = '-- Pas de modèle --';
					field.options[1].value = 'AUTRE';
					field.options[1].text = 'Autre... Précisez...';
					field.disabled = false;
					field.onchange = function() { modFunc(this); }
					field.onkeyup = function() { modFunc(this); }
					field.options[1].selected = true;
					actual.parentNode.replaceChild(field, actual);
				}
			}
		}
	} catch(e) {}
}
function modFunc(obj) {
	var autreMod = document.getElementById('field_autreModele').parentNode;
	if (obj.options[obj.selectedIndex].value == 'AUTRE') {
		autreMod.style.display = 'block';
	} else {
		autreMod.style.display = 'none';
	}
}
function mrqFunc(obj) {
	var typList = document.getElementById('field_type');
	var modList = document.getElementById('field_modele');
	var autreMod = document.getElementById('field_autreModele').parentNode;
	var autreMrq = document.getElementById('field_autreMarque').parentNode;
	if (obj.options[obj.selectedIndex].value == 'AUTRE') {
		autreMrq.style.display = 'block';
		if (typList.options[typList.selectedIndex].value != 'NULL') {
			modList.disabled = false;
			modList.options[1] = modList.options[modList.options.length-1];
			modList.options.length = 2;
		}
	} else {
		autreMrq.style.display = 'none';
		modList.options[0].selected = true;
		modList.disabled = true;
		autreMod.style.display = 'none';
		if (obj.options[obj.selectedIndex].value != 'NULL') {
			if (typList.selectedIndex != 0) {
				modList.disabled = false;
				changeModList();
			}
		}
	}
}
function typFunc(obj) {
	var mrqList = document.getElementById('field_marque');
	var modList = document.getElementById('field_modele');
	var autreMod = document.getElementById('field_autreModele').parentNode;
	var autreTyp = document.getElementById('field_autreType').parentNode;
	if (obj.options[obj.selectedIndex].value == 'AUTRE') {
		autreTyp.style.display = 'block';
		if (mrqList.options[mrqList.selectedIndex].value != 'NULL') {
			modList.disabled = false;
			modList.options[1] = modList.options[modList.options.length-1];
			modList.options.length = 2;
		}
	} else {
		autreTyp.style.display = 'none';
		modList.options[0].selected = true;
		modList.disabled = true;
		autreMod.style.display = 'none';
		if (obj.options[obj.selectedIndex].value != 'NULL') {
			if (mrqList.selectedIndex != 0) {
				modList.disabled = false;
				changeModList();
			}
		}
	}
}

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
function adminTPrix() {
	if (document.getElementById('addTPrix')) {
		var check = document.getElementById('addTPrix').getElementsByTagName('input')[2];
		check.field = document.getElementById('addTPrix').getElementsByTagName('input')[1];
		check.onchange = function() {
			if (this.checked) {
				this.field.disabled = true;
				this.field.value = '';
			}
			else {
				this.field.disabled = false;
			}
		}
		check.onclick = function() {
			if (this.checked) {
				this.field.disabled = true;
				this.field.value = '';
			}
			else {
				this.field.disabled = false;
			}
		}
	}
	if (document.getElementById('adminListeTPrix')) {
		var lines = document.getElementById('adminListeTPrix').getElementsByTagName('tr');
		for (var i = 1 ; i < lines.length ; i++) {
			var check = lines[i].getElementsByTagName('input')[2];
			check.field = lines[i].getElementsByTagName('input')[1];
			check.onchange = function() {
				if (this.checked) {
					this.field.disabled = true;
					this.field.value = '';
				}
				else {
					this.field.disabled = false;
				}
			}
			check.onclick = function() {
				if (this.checked) {
					this.field.disabled = true;
					this.field.value = '';
				}
				else {
					this.field.disabled = false;
				}
			}		
		}
	}
}

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
function inputSpec() {
	var inp = document.getElementsByTagName('input');
	for (var i = 0 ; i < inp.length ; i++) {
		if (inp[i].className.indexOf('entier') >= 0) {
			function intField(obj) {
				obj.value = parseInt(obj.value);
				if (obj.value == 'NaN')
					obj.value = '';
			}
			inp[i].onkeyup = function() { intField(this); }
			inp[i].onchange = function() { intField(this); }
		}
	}
}

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
window.onload = function() {
	inscription();
	ajouterAnnonce();
	popupLinks();
	adminTPrix();
	inputSpec();
}
