/**
 * Création d'un un objet XHR.
 */
function getXHR() {
    try {
        requete = new XMLHttpRequest();
    } catch (microsoft) {
        try {
            requete = new ActiveXObject('Msxml2.XMLHTTP');
        } catch(autremicrosoft) {
            try {
                requete = new ActiveXObject('Microsoft.XMLHTTP');
            } catch(echec) {
            	requete = null;
            }
        }
    }
}

/**
 * Change the object background color 
 * 
 * @param obj
 * @param color
 */
function changeBackgroundColor(obj, color) {
	
	if (obj != null) {
		obj.style.backgroundColor = color;
	}
}

/**
 * Change the object border
 * 
 * @param obj
 * @param style
 * @param color
 * @param pixel
 */
function changeBorder(obj, style, color, pixel) {
	
	if (obj != null) {
		obj.style.border = style + " " + color + " " + pixel;
	}
}

/**
 * Reset a field
 * 
 * @param obj
 * @param msg
 */
function resetField(obj, msg) {

	if (obj != null) {
		obj.style.border = "";
	}
	
	if (msg != null) {
		msg.innerHTML = "";
	}
}

/**
 * Write an error message
 * 
 * @param obj
 * @param msg
 */
function writeErrorMessage(obj, msg) {
	
	if (obj != null && msg != null) {
		obj.innerHTML = msg;
	}
}

/**
 * Check an alphabetic field
 * 
 * @param obj
 * @param msg
 * @return true if valid
 */
function checkAlphabeticField(obj, msg) {
	
	if (obj.value != "") {
		
		var pattern = /^[a-záéíóäëiöúàèììù -]+$/i;
		if (!pattern.test(obj.value)) {
			changeBorder(obj, 'solid', '#c00', '2px');
			writeErrorMessage(msg, "Format incorrect.<br />");
			return false;
		}
	}
	
	return true;
}

/**
 * Check an alphanumeric field
 * 
 * @param obj
 * @param msg
 * @return true if valid
 */
function checkAlphanumericField(obj, msg) {
	
	if (obj.value != "") {
		
		var pattern = /^[0-9a-záéíóäëiöúàèììù ]+$/i;
		if (!pattern.test(obj.value)) {
			changeBorder(obj, 'solid', '#c00', '2px');
			writeErrorMessage(msg, "Format incorrect.<br />");
			return false;
		}
	}
	
	return true;
}

/**
 * Check a numeric field
 * 
 * @param obj
 * @param msg
 * @return true if valid
 */
function checkNumericField(obj, msg) {
	
	if (obj.value != "") {
		
		var pattern = /^[0-9]+$/;
		if (!pattern.test(obj.value)) {
			changeBorder(obj, 'solid', '#c00', '2px');
			writeErrorMessage(msg, "Format incorrect.<br />");
			return false;
		}
	}
	
	return true;
}

/**
 * Check a double field
 * 
 * @param obj
 * @param msg
 * @return true if valid
 */
function checkDoubleField(obj, msg) {
	
	if (obj.value != "") {
		
		var pattern = /^[0-9.,-]+$/;
		if (!pattern.test(obj.value)) {
			changeBorder(obj, 'solid', '#c00', '2px');
			writeErrorMessage(msg, "Format incorrect.<br />");
			return false;
		}
	}
	
	return true;
}

/**
 * Check require field
 * 
 * @param obj
 * @param objMsg
 * @param msg
 * @return true if field is not empty
 */
function checkRequireField(obj, objMsg) {
	checkRequireField(obj, objMsg, null);
}

/**
 * Check require field
 * 
 * @param obj
 * @param objMsg
 * @param msg
 * @return true if field is not empty
 */
function checkRequireField(obj, objMsg, msg) {
	
	var type = obj.type;
	var bool = true;

	switch (type) {

		case 'text':
		case 'textarea':
			bool = (obj.value != "" && obj != null);
			break;
			
		case 'password':
			bool = (obj.value != "" && obj != null);
			break;

		case 'select-one':
			bool = (obj.value != 0 && obj.value != "");
			break;
			
		case 'checkbox':
			bool = obj.checked;
			break;
			
		default:
	}

	if (!bool) {
		changeBorder(obj, 'solid', '#c00', '2px');
		
		if (msg == null) {
			writeErrorMessage(objMsg, "Ce champ est obligatoire.<br />");
		} else {
			writeErrorMessage(objMsg, msg);
		}
		
	}
	
	return bool;
}

/**
 * Check a "code postal"
 * 
 * @param obj
 * @param msg
 * @return true if valid
 */
function checkCodePostal(obj, msg) {
	
	if (obj.value != "") {
		
		var pattern = /^(0[1-9]{1}|[1-9][0-9]{1})[0-9]{3}$/;
		if (!pattern.test(obj.value)) {
			changeBorder(obj, 'solid', '#c00', '2px');
			writeErrorMessage(msg, "Ce code postal est incorrect.<br />");
			return false;
		}
	}
	
	return true;
}

/**
 * Check a french phone number or fax number
 * 
 * @param obj
 * @param msg
 * @return true if valid
 */
function checkPhoneNumber(obj, msg) {
	
	if (obj.value != "") {
		
		var pattern = /^(0[1234568])[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/;
		if (!pattern.test(obj.value)) {
			changeBorder(obj, 'solid', '#c00', '2px');
			writeErrorMessage(msg, "Ce num&eacute;ro est incorrect.<br />");
			return false;
		}
	}
	
	return true;
}

/**
 * Check a cellular phone number
 * 
 * @param obj
 * @param msg
 * @return true if valid
 */
function checkCellularNumber(obj, msg) {
	
	if (obj.value != "") {
		
		var pattern = /^(06)[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/;
		if (!pattern.test(obj.value)) {
			changeBorder(obj, 'solid', '#c00', '2px');
			writeErrorMessage(msg, "Ce num&eacute;ro est incorrect.<br />");
			return false;
		}
	}
	
	return true;
}

/**
 * Check an email address
 * 
 * @param obj
 * @param msg
 * @return true if valid
 */
function checkEmailAddress(obj, msg) {
	
	if (obj.value != "") {
		
		var pattern = /^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$/;
		if (!pattern.test(obj.value)) {
			changeBorder(obj, 'solid', '#c00', '2px');
			writeErrorMessage(msg, "Cet e-mail n'est pas valide.<br />");
			return false;
		}
	}
	
	return true;
}

/**
 * Check an URL
 * 
 * @param obj
 * @param msg
 * @return true if valid
 */
function checkURL(obj, msg) {
	
	if (obj.value != "") {
		
		var pattern = /^(((ht|f)tp(s?))\:\/\/)?(([a-zA-Z0-9]+([@\-\.]?[a-zA-Z0-9]+)*)(\:[a-zA-Z0-9\-\.]+)?@)?(www.|ftp.|[a-zA-Z]+.)?[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,})(\:[0-9]+)?\/?/;
		if (!pattern.test(obj.value)) {
			changeBorder(obj, 'solid', '#c00', '2px');
			writeErrorMessage(msg, "Cet URL n'est pas valide.<br />");
			return false;
		}
	}
	
	return true;
}

/**
 * Check a password
 * 
 * @param obj
 * @param msgObj
 * @return true if valid
 */
function checkPassword(obj, msgObj) {
	checkPassword(obj, msgObj, null);
}

/**
 * Check a password
 * 
 * @param obj
 * @param msgObj
 * @param msg
 * @return true if valid
 */
function checkPassword(obj, msgObj, msg) {
	
	if (obj != null) {

		if (obj.value.length < 6) {
			changeBorder(obj, 'solid', '#c00', '2px');
			
			if (msg != null) {
				writeErrorMessage(msgObj, msg);
			} else {
				writeErrorMessage(msgObj, "Cet mot de passe est invalide.<br />");
			}
			return false;
		}
	}
	
	return true;
}

/**
 * Check passwords
 * 
 * @return true if valid
 */
function checkPasswords(pwd1, pwd2, objMsg) {
	
	if (pwd1 != null && pwd2 != null) {
		if (pwd1.value == pwd2.value) {
			return true;
		} else {
			changeBorder(pwd1, 'solid', '#c00', '2px');
			//changeBorder(pwd2, 'solid', '#c00', '2px');
			writeErrorMessage(objMsg, "Les mots de passe ne concordent pas.<br />");
			return false;
		}
	} else {
		return false;
	}
}

/**
 * Check a login field
 * 
 * @param obj
 * @param msg
 * @return true if valid
 */
function checkLogin(obj, msg) {
	
	if (obj.value != "") {
		
		var pattern = /^[0-9a-záéíóäëiöúàèììù]+$/i;
		if (!pattern.test(obj.value)) {
			changeBorder(obj, 'solid', '#c00', '2px');
			writeErrorMessage(msg, "Format incorrect.<br />");
			return false;
		}
	}
	
	return true;
}

/**
 * Check a date
 * 
 * @param obj
 * @param msg
 * @return true if valid
 */
function checkDateFormat(obj, msg) {
	
	if (obj.value != "") {
		
		var pattern = /^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;
		if (!pattern.test(obj.value)) {
			changeBorder(obj, 'solid', '#c00', '2px');
			writeErrorMessage(msg, "La date est incorrecte.<br />");
			return false;
		}
	}
	
	return true;
}

/**
 * Check a date
 * 
 * @param obj
 * @param msg
 * @return true if valid
 */
function checkRangeNumber(obj, msg, min, max) {

	if (obj.value < min || obj.value > max) {
		
		changeBorder(obj, 'solid', '#c00', '2px');
		writeErrorMessage(msg, "Valeur en dehors de la plage souhait&eacute;e (" + min + " &agrave; " + max + ").<br />");
		return false;
	}
	
	return true;
}

/**
 * Submit the form
 */
function submitForm(form) {
	document.forms[form].submit();
}

/**
 * Change source image
 */
function changeImage(dest, img) {
	document.getElementById(dest).src = img;
}
