function Form() { //ver 1.1
/*
Author: Vincent Germain
Usage : ['regexShort','regexLong','warning',optionnal]
-regexShort: Detect if the form object name contain a specific word
-regexLong: Filther the main regular expression
-warning: Call the error message in case user input fail verification (set in warningList)
-optionnal: Set to false if the input is optionnal

Specific:
-objList[0][1]: Exclude any other objList[i++][0]
*/

	//Constructor
	this.language = 'fr';
	this.warningTag = 'div';
	this.greenColorBox = '#fff';
	this.redColorBox = '#ccc';
	this.ajax = false;
	//Initializing
	var warningList = new Array();
	var validType = new Array();
	warningList["fr"] = ["Ce champ n'est pas valide","Le numéro de téléphone n'est pas valide","Le numéro de fax n'est pas valide","Votre courriel est invalide","Le code postal n'est pas valide","La quantitée n'est pas valide","L'extension du fichier doit être .jpg","Ce nom d'utilisateur n'est pas valide","Ce lien n'est pas valide","Le message est invalide","Vous devez accepter les termes du contrat pour vous inscrire.","Les deux mots de passe diffèrent."];
	warningList["en"] = ["This field is not valid","The phone number is not valid","The fax number is not valid","The mail is not valid","The postal code is not valid","The quantity is not valid","The extension must be .jpg","This username is not valid","This link is not valid","Your message is invalid","You must accept the term of use","The password is different"];
	validType = ["text","textarea","checkbox","radio","password","file"];
	//Validate form
	Form.prototype.create = function(source) {
		for (var i=0;i<source.length;i++) if( validType.inArray(source[i].type) && !document.getElementById('war_'+source[i].name)) source[i].insertAdjacentHTML('afterEnd','<span id="war_'+source[i].name+'" class="error"></span>');
	}
	Form.prototype.validForm = function(source) {
		this.action = source.action;
		var increment = 0;
		var sendFlag = true;
		var warningDiv = document.getElementsByTagName(this.warningTag);
		var objList = [['generic','^.{2,255}$',warningList[this.language][increment++]],['phone','^(?:\\([2-9]\\d{2}\\)\\ ?|[2-9]\\d{2}(?:\\-?|\\ ?))[2-9]\\d{2}[- ]?\\d{4}$',warningList[this.language][increment++]],['fax','^(?:\\([2-9]\\d{2}\\)\\ ?|[2-9]\\d{2}(?:\\-?|\\ ?))[2-9]\\d{2}[- ]?\\d{4}$',warningList[this.language][increment++]],['mail','^[a-zA-Z][\\w\\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\\w\\.-]*[a-zA-Z0-9]\\.[a-zA-Z][a-zA-Z\\.]*[a-zA-Z]$',warningList[this.language][increment++]],['postal','^[ABCEGHJKLMNPRSTVXY]\\d[A-Z]\\ ?\\d[A-Z]\\d$',warningList[this.language][increment++]],['quant','^[0-9]{1,}$',warningList[this.language][increment++]],['photo','^(.*\\.(j|J)(p|P)(g|G))$',warningList[this.language][increment++]],['username','^[a-z0-9]{2,12}$',warningList[this.language][increment++]],['link','(http://|https://)([a-zA-Z0-9]+\\.[a-zA-Z0-9\\-]+|[a-zA-Z0-9\\-]+)\\.[a-zA-Z\\.]{2,6}(/[a-zA-Z0-9\\.\\?=/#%&\\+-]+|/|)',warningList[this.language][increment++]],['message','^.{2, }$',warningList[this.language][increment++]], ['check','^.{2, }$',warningList[this.language][increment++]], ['clone','^.{254,255}$',warningList[this.language][increment++]]]
		function queryResult(x,color,warning) {
			source[x].style.background = color;
			if (document.getElementById('war_'+source[x].name)) document.getElementById('war_'+source[x].name).innerHTML = warning;
			else if (warning != '') alert(warning);
			if (warning != '') sendFlag = false;
		}
		for (var i=0;i<source.length;i++) {
			if(validType.inArray(source[i].type)) {
				for (var j=0;j<objList.length;j++) {
					var shortRegex = new RegExp(objList[j][0],'i');
					if (source[i].name != null && source[i].name.search(shortRegex) != -1) {
						if (source[i].name.search(/true/i) != -1 || ((source[i].type == 'checkbox' && source[i].checked == true) || (source[i].type != 'checkbox' && source[i].value != ''))) {
							var longRegex = new RegExp(objList[j][1],'i');
							if (source[i].value.search(longRegex) != -1 || (objList[j][0] == 'clone' && source[i].value == source[i+1].value && source[i].value != '') || (objList[j][0] == 'clone' && source[i-1].value == source[i].value && source[i].value != '') || (objList[j][0] == 'message' && source[i].value.length < 5000 && source[i].value != '') || (source[i].type == 'checkbox' && source[i].checked == true)) {
								queryResult(i,this.greenColorBox,'');
								if (objList[j][0] == 'clone') queryResult(i+1,this.greenColorBox,'');
							} else {
								if (!document.getElementById('war_'+source[i].name) || document.getElementById('war_'+source[i].name).innerHTML == '') queryResult(i,this.redColorBox,objList[j][2]);
								else if (objList[j][0] == 'clone') queryResult(i+1,this.redColorBox,objList[j][2]);
							}
						} else queryResult(i,this.greenColorBox,'');
					}
				}
			}
		}
		if (sendFlag == true) {
			if (this.ajax == true) {
				callAjax(source,this.action);
				return false;
			} else return true;
		}
		return false;
	}
} // END classValidForm()

function initForms(x,y) {
	x = typeof(x) != 'undefined' ? x : 'validate';
	y = typeof(y) != 'undefined' ? y : 'en';
	var source = document.getElementsByClassName(x);
	form = new Array();
	for (var i=0;i<source.length;i++) {
		form[i] = new Form();
		var classe = source[i].className.split(' ');
		if (!classe.inArray('alert') && !classe.inArray('alert1') && !classe.inArray('alert2')) form[i].create(source[i]);
		if (classe.inArray('ajax')) form[i].ajax = true;
		form[i].language = y;
		source[i].onsubmit = new Function("return form["+i+"].validForm(this);");
	}
}

function hideSelect() {
	tagselect = document.getElementsByTagName('select');
	for (i=0;i<tagselect.length;i++) {
		if (tagselect[i].style.visibility == 'hidden' && tagselect[i].className != 'keep') tagselect[i].style.visibility = 'visible';
		else if (tagselect[i].className != 'keep') tagselect[i].style.visibility = 'hidden';
	}
}

function showAlert(x,a,y,z,w) {
	a = typeof(a) != 'undefined' ? a : '';
	x = typeof(x) != 'undefined' ? x : '';
	y = typeof(y) != 'undefined' ? y : 'alertContent';
	z = typeof(z) != 'undefined' ? z : 'alertBox';
	w = typeof(w) != 'undefined' ? w : 0;
	BrowserDetect.init();
	if (BrowserDetect.browser == 'Explorer' && BrowserDetect.version < 7) {
		hideSelect();
		document.getElementById(z).style.height = screen.height-170+'px';
	}
	if (document.getElementById(z).style.visibility == 'hidden') {
		document.getElementById(z).style.visibility = 'visible';
		document.getElementById(y).style.visibility = 'visible';
		document.getElementById(z).style.filter = 'alpha(opacity=80)';
		if (w == 1) {
			alert(x);
			window.location = "";					
		} else document.getElementById(y).innerHTML = '<div id="realContent"><div>'+x+'</div><div id="messageClose"><form method="post" action=""><input type="button" value="Fermer" class="btn" onclick="showAlert()" /></form></div></div>';	
	} else {
		document.getElementById(z).style.visibility = 'hidden';
		document.getElementById(y).style.visibility = 'hidden';
	}
}

function singleConfirm(target,regex,msg) {
	var shortRegex = new RegExp(regex,'i');
	if (document.getElementById(target).value.search(shortRegex) != -1) return true;
	else {
		alert(msg);
		return false;
	}
}

function confirmOperation(x,y,z) {
	z = typeof(z) != 'undefined' ? z : '';
	if (confirm(z) == false) return false;
	x.option.value = y;
	x.submit();
}

function callAjax(variable,target,script,header,type) {
	if (typeof(type) == 'undefined' || type == '') type = 'POST';
	if (typeof(target) == 'undefined' || target == '') target = 'content';
	if (typeof(script) == 'undefined' || script == '') script = root+'query.php';
	if (typeof(vphp) == 'undefined' || vphp == '') vphp = 'vphp';
	if (typeof(header) == 'undefined' || header == '') header = 'application/x-www-form-urlencoded';
	if (document.getElementById(target)) x = document.getElementById(target);
	//if (document.getElementById(target)) x.innerHTML = 'Please wait...';
	if (variable == '[object HTMLFormElement]') {
		list = new Array();
		var url = '';
		for (var i=0;i<variable.length;i++) {
			if (i < variable.length-1) opt = '&'; else opt = '';
			url += variable[i].id+'='+variable[i].value+opt;
		}
		variable = url;
	} else {
		variable = variable.replace(/amp;/gi, "");
		variable = unescape(variable);
	}
	var xmlhttp = false;
	/** Special IE only code ... */
	/*@cc_on
	  @if (@_jscript_version >= 5)
		  try {
			  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		  } catch (e) {
			  try {
				  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			  } catch (E) {
				  xmlhttp = false;
			  }
		 }
	  @else
		 xmlhttp = false;
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp = false;
		}
	}
	xmlhttp.open(type,script,true);
	xmlhttp.onreadystatechange = function () {
		if(xmlhttp.readyState == 4) {
			if (document.getElementById(target)) x.innerHTML = xmlhttp.responseText;
			var scripts = [];
			var script_sources = xmlhttp.responseText.split(/<script.*?>/);
			for (var i=1; i < script_sources.length; i++) scripts.push(script_sources[i].split(/<\/script>/)[0]);
           	for (var i=0; i<= scripts.length; i++) eval(scripts[i]);
			//showAlert('ok');
		}
	}
	xmlhttp.setRequestHeader('Content-Type',header);
	//xmlhttp.setRequestHeader('Content-Type','application/x-download');
	//xmlhttp.setRequestHeader("Content-Type","text/html; charset=utf-8");
	xmlhttp.send(variable);
	return false;
}
//Trust me, leave a space here

//Browser detection
//BrowserDetect.browser
//BrowserDetect.version
//BrowserDetect.OS

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.userAgent,
			subString: "iPhone",
			identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

function Clickheretoprint(x) {
 x = typeof(x) != 'undefined' ? x : 'printer';
 var disp_setting="toolbar=yes,location=no,directories=yes,menubar=yes,";
     disp_setting+="scrollbars=yes,width=1024, height=768, left=100, top=25";
 var content_vlue = document.getElementById(x).innerHTML;

 var docprint=window.open("","",disp_setting);
  docprint.document.open();
  docprint.document.write('<html><head><title>Citernes experts</title>');
  docprint.document.write('<link rel="stylesheet" href="'+root+'css/print.css"/></head><body onLoad="self.print()"><left>');
  docprint.document.write(content_vlue);           
  docprint.document.write('<p class="close"><a href="javascript:window.close();">Close window</p></left></body></html>');
  docprint.document.close();
  docprint.focus();
}

function tooltip (clas,msg) {
	//ie fix
	//var border = RUZEE.ShadedBorder.create({ corner:8, shadow:0,  border:2 });
	if (msg != undefined) alert(msg);
	clas = typeof(clas) != 'undefined' ? clas : 'active';
	var tips = document.getElementsByClassName(clas);
	for (i=0;i<tips.length;i++) {
		tips[i].innerHTML = '<span>'+tips[i].innerHTML+'<div class="rounded">'+tips[i].title+'</div></span>';
		tips[i].title = '';
		tips[i].getElementsByTagName('span')[0].onmouseover = new Function( 'showing(this.getElementsByTagName("div")[0]);' );
		tips[i].getElementsByTagName('span')[0].onmouseout = new Function( 'this.getElementsByTagName("div")[0].style.display="none"' );
		//border.render('round_'+i);
		var cur = tips[i].getElementsByTagName("*");
		if (clas == 'active') for (j=0;j<cur.length;j++) cur[j].style.cursor = 'pointer';
		else for (j=0;j<cur.length;j++) cur[j].style.cursor = 'help';
	}
	//Rounded('rounded', 6, 6);


	//applyRound (document.getElementById('toto'));
}

function showing(tips,off,ofy) {
	//alert(tips.className);
	var offX = 26;
	var offY = -14;
 	off = typeof(off) != 'undefined' ? off : 0;
 	ofy = typeof(ofy) != 'undefined' ? ofy : 0;
	tips.style.display = 'block';
	function mouseY(evt) {if (!evt) evt = window.event; if (evt.pageY) return evt.pageY; else if (evt.clientY)return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); else return 0;}
	function mouseX(evt) {if (!evt) evt = window.event; if (evt.pageX) return evt.pageX; else if (evt.clientX)return evt.clientX + (document.documentElement.scrollLeft ?  document.documentElement.scrollLeft : document.body.scrollLeft); else return 0;}
	function follow(evt) {if (document.getElementById) {var obj = tips.style; obj.visibility = 'visible';
	obj.left = (parseInt(mouseX(evt))+offX) - off +'px';
	if (off == 0) obj.top = (parseInt(mouseY(evt))+offY) - ofy + 'px'; else obj.top = offY + ofy + 'px';}}
	document.onmousemove = follow;
}

function fade(y,z) {
	y = typeof(y) != 'undefined' ? y : 'alertContent';
	z = typeof(z) != 'undefined' ? z : 'alertBox';
		if (document.getElementById(z).style.visibility == 'hidden') {
			document.getElementById(z).style.visibility = 'visible';
			document.getElementById(y).style.visibility = 'visible';
			document.getElementById(z).style.filter = 'alpha(opacity=80)';;
			//document.getElementById(y).innerHTML = '<div id="realContent"><div>'+x+'</div><div id="messageClose"><form method="post" id="alertForm" action=""><input type="submit" value="[-X-]" /></form></div></div>';	
		} else {
			document.getElementById(z).style.visibility = 'hidden';
			document.getElementById(y).style.visibility = 'hidden';
		}
}

function convertMail (x) {
	x = typeof(x) != 'undefined' ? x : 'email';
	if (document.getElementsByClassName(x)) {
		var mail = document.getElementsByClassName(x);
		for (var i = 0; i < mail.length; i++) {
			if (mail[i].childNodes[0].nodeValue) {
				string = mail[i].childNodes[0].nodeValue;
				email = string.split("_")[0] + "@" + string.split("_")[2];
				mail[i].innerHTML = '<a href="mailto:' + email + '?subject=Information">' + email + '</a>';
			}
		}
	}
}

function changeInputType(oldObject, oType) {
	var newObject = document.createElement('input');
	newObject.type = oType;
	if(oldObject.size) newObject.size = oldObject.size;
	if(oldObject.value) newObject.value = oldObject.value;
	if(oldObject.name) newObject.name = oldObject.name;
	if(oldObject.id) newObject.id = oldObject.id;
	if(oldObject.className) newObject.className = oldObject.className;
	oldObject.parentNode.replaceChild(newObject,oldObject);
	newObject.focus();
	return newObject;
}

function mustConfirm(x) {
	if (confirm(x) == false) return false;
}
