var txtColor = '#000000'
var field
var parentnd
var parentnd
var valuefield
var ckeckfield
var fieldname
var index
var aVerifier
var verifie = new Array()
var mincar
var post
var maxcar
var x
var y
var lang
var numscript
var sendType
var layerInfoW
var layerInfoH
var layerInfoBG
var layerInfoBorder
var mincheck
var nbverif = new Array()
var thisForm
var nbcheked = new Array()
var requestUrl
var checkmessage
var csswait		= 'wait'
var cssok			= 'valid'	
var cssparentavert	= 'surbr_avert field'
var cssparentok		= 'surbr_none field'
var cssavert		= 'clr_avert s10px error clear'	
var formValidationMasks = new Array()
formValidationMasks['email'] = /\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/gi	// Email
formValidationMasks['numeric'] = /^[0-9]+$/gi	// Numeric
formValidationMasks['tel'] = /^[0-9+]+$/gi	// Numeric
formValidationMasks['prix'] = /^([0-9+]*\.{0,1}?[0-9+]*)$/gi	// Numeric
var urlscrit = new Array()
urlscrit[1] = "/inc/bddexist.php"
var bddmessage = new Array()
bddmessage[1] = "Patienter"
bddmessage[2] = "Ce pseudonyme est déjà utilisé par un membre"
var messageLang = new Array()

/*******Chargement de la feuille de style par javascript********
var headID  = document.getElementsByTagName("head")[0];         
var cssNode = document.createElement('link');

cssNode.type  = 'text/css';
cssNode.rel   = 'stylesheet';
cssNode.href  = '/lib/veryform/css/styles.css';
cssNode.media = 'screen';

headID.appendChild(cssNode);
*******Fin Chargement de la feuille de style par javascript********/

function verifAllFields(this_form,wrequest)	{
if(wrequest == null)
	sendType = 'request'
else
	sendType = wrequest
thisForm	= this_form
post = 1
aVerifier = 0
verifie = new Array()
nbcheked = new Array()
nbverif = new Array()
	var inputFields = thisForm.getElementsByTagName('INPUT')
	var textFields = thisForm.getElementsByTagName('TEXTAREA')
	var selectBoxes = thisForm.getElementsByTagName('SELECT')
	
	var inputs = new Array()
	
	for(var no=0;no<textFields.length;no++){
			inputs[inputs.length] = textFields[no]
	}	
	for(var no=0;no<inputFields.length;no++){
			inputs[inputs.length] = inputFields[no]
		
	}	
	for(var no=0;no<selectBoxes.length;no++){
			inputs[inputs.length] = selectBoxes[no]
		
	}
	for(var no=0;no<inputs.length;no++){
		var param = inputs[no].getAttribute('param')
		if(!param)param = inputs[no].param
		if(param) {
			aVerifier++
		}
		else if(no==inputs.length-1 && aVerifier == 0) {
			validform()
		}
	}	
	for(var no=0;no<inputs.length;no++){
		var param = inputs[no].getAttribute('param')
		if(!param)param = inputs[no].param
		if(param) {
			//alert(param+' -- '+inputs[no])
			verifield(this_form,inputs[no])
		}
	}	
}	
function initinfofield(this_form,thisfield) {
	field		= thisfield
	thisForm	= this_form
	attribut	= field.getAttribute('param')
	valuefield	= field.value 
	checkfield	= field.checked 
	fieldname	= field.name 
	index 		= valuefield.length
}
function verifield(this_form,thisfield) {
	initinfofield(this_form,thisfield)
	
	var param	= attribut.split('|')
	if(!post)
		nbverif = new Array()
	if(thisfield.parentNode.id == '' || thisfield.parentNode.id == null) {
		thatsId = generateGuid()
		thisfield.parentNode.id = thatsId
		parentnd	= thatsId
	}
	else
		parentnd	= thisfield.parentNode.id
	type		= param[0]
	//alert(thisfield.parentNode.id);
	//alert(CS.Guid);
	if(param[1] == null)
		param[1] = 0
	mincar		= param[1]
	if(param[2] == null)
		param[2] = 0
	maxcar		= param[2]
	if(param[3] == null)
		param[3] = 0
	checkmessage = param[3]
	if(param[4] == null)
		param[4] = 1
	mincheck = param[4]
	if(param[5] == null)
		param[5] = 0
	x = param[5]
	if(param[6] == null)
		param[6] = 0
	y = param[6]
	if(param[7] == null)
		param[7] = 0
	numscript = param[7]
	if(nbverif[parentnd] == null) 
		nbverif[parentnd] = 0	
	if(index >= 0) {
		var typeverif = type.split(';')	
		for(i=0;i < typeverif.length;i++) {
			veriftype(i,typeverif[i],typeverif.length)
		}
	}	
}
function veriftype(id,type,tablenght) {
		var inner = 1;
		var typeAr	= type.split('{')
		type = typeAr[0];
		if(typeAr[1])
			paramType =  typeAr[1].substring(0,typeAr[1].length-1);
		
		
	switch(type) {
		case "empty" :  
			if(index <= 0) {
				typeinfo	= 'avert'
				messageLang['en'] = 'Necessary field'
				messageLang['fr'] = 'Ce champ est obligatoire'
				message		= messageLang[lang]
			}
			else {
				typeinfo	= 'ok'
				message		= ''
			}
		break
		case "mincar" :  
			if(index < mincar) {
				typeinfo	= 'avert'
				messageLang['en'] = 'This field must have minimum '+mincar+' letters'
				messageLang['fr'] = 'Ce champ doit comporter au minimum '+mincar+' caractères'
				message		= messageLang[lang]
			}
			else {
				typeinfo	= 'ok'
				message		= ''				
			}
		break
		case "maxcar" :  
			if(index > maxcar) {
				typeinfo	= 'avert'
				messageLang['en'] = 'This field must have maximum '+maxcar+' letters'
				messageLang['fr'] = 'Ce champ doit comporter au maximum '+maxcar+' caractères'
				message		= messageLang[lang]
			}
			else {
				typeinfo	= 'ok'
				message		= ''
			}
		break
		case "email" :  
			if(!valuefield.match(formValidationMasks['email']) && index>0) {
				typeinfo	= 'avert'
				messageLang['en'] = 'Your E-mail must be valid'
				messageLang['fr'] = 'Votre adresse e-mail doit être valide'
				message		= messageLang[lang]
			}
			else {
				typeinfo	= 'ok'
				message		= ''
			}
		break
		case "numeric" :  
			if(!valuefield.match(formValidationMasks['numeric']) && index>0) {
				typeinfo	= 'avert'
				messageLang['en'] = 'This field should have only numbers'
				messageLang['fr'] = 'Ce champ doit comporter uniquement des chiffres'
				message		= messageLang[lang]
			}
			else {
				typeinfo	= 'ok'
				message		= ''
			}
		break
		case "tel" :  
			if(!valuefield.match(formValidationMasks['tel']) && index>0) {
				typeinfo	= 'avert'
				messageLang['en'] = 'This field should have only numbers or the + sign'
				messageLang['fr'] = 'Ce champ doit comporter uniquement des chiffres ou/et le signe +'
				message		= messageLang[lang]
			}
			else {
				typeinfo	= 'ok'
				message		= ''
			}
		break
		case "prix" :  
			if(!valuefield.match(formValidationMasks['prix']) && index>0) {
				typeinfo	= 'avert'
				messageLang['en'] = 'This field should have only numbers or the + sign'
				messageLang['fr'] = 'Ce champ doit comporter uniquement des chiffres ou/et un point'
				message		= messageLang[lang]
			}
			else {
				typeinfo	= 'ok'
				message		= ''
			}
		break
		case "check" : 
			/*if(nbcheked[fieldname] == null)
				nbcheked[fieldname] = 0 
			
			if(checkfield == true) {
				nbcheked[fieldname]++
			}
			if(checkfield == false) {
				if(nbcheked[fieldname]>0) 
					nbcheked[fieldname]--					
				}
			if(nbcheked[fieldname] < mincheck) {
				typeinfo	= 'avert'
				message		= checkmessage
			}
			else {
				typeinfo	= 'ok'
				message		= ''
			}*/
			nbcheked[fieldname] = 0
			if(thisForm[fieldname].length == undefined ) {
				if(thisForm[fieldname].checked == true) {
					nbcheked[fieldname]++
				}
			}
			else {
				//alert(thisForm[fieldname].length)
				for(i=0;i<thisForm[fieldname].length;i++) {
					if(thisForm[fieldname][i].checked == true) {
						nbcheked[fieldname]++
						}
				}
			}
			//alert(nbcheked[fieldname])
			if(nbcheked[fieldname] < mincheck) {
				typeinfo	= 'avert'
				message		= checkmessage
			}
			else {
				typeinfo	= 'ok'
				message		= ''
			}
		break
		/*case "leastone" :  
			var ArParamType = paramType.split(',')
			thisVerif = ArParamType[0].substring(1,ArParamType[0].length-1)
			inner = 0;
			aVerifier -= (ArParamType.length-2);
			for(i=1;i<ArParamType.length;i++) {
				initinfofield(thisForm,thisForm[ArParamType[i]])
				if(thisForm[ArParamType[i]].parentNode.id == '' || thisForm[ArParamType[i]].parentNode.id == null) {
					thatsId = generateGuid()
					thisForm[ArParamType[i]].parentNode.id = thatsId
					parentnd	= thatsId
				}
				else
					parentnd	= thisForm[ArParamType[i]].parentNode.id
				//alert(thisForm[ArParamType[i]].parentNode.id)
				veriftype(i,thisVerif,ArParamType.length)	
			}
			/*if(!valuefield.match(formValidationMasks['prix'])) {
				typeinfo	= 'avert'
				messageLang['en'] = 'This field should have only numbers or the + sign'
				messageLang['fr'] = 'Ce champ doit comporter uniquement des chiffres ou/et un point'
				message		= messageLang[lang]
			}
			else {
				typeinfo	= 'ok'
				message		= ''
			}
		break*/
		case "bddexist" : 
		bddexist(id,tablenght,parentnd)
		typeinfo	= 'wait'
		message		= '' 
		break
		default : 
	}
	if(inner==1) {
		//alert(parentnd);
		innerInfo(id,typeinfo,message,tablenght,parentnd)
	}
}

function innerInfo(id,typeinfo,message,tablenght,parentnd) {
var parent = document.getElementById(String(parentnd))
if(document.getElementById('in'+parentnd)==null) {
	var divmessage = document.createElement('div')
	divmessage.id = 'in'+parentnd
	parent.appendChild(divmessage)
}
else
	divmessage = document.getElementById('in'+parentnd)
// création des nouveaux noeuds

if(document.getElementById('inok'+parentnd)==null) {
	var spanok = document.createElement('span')
	spanok.id = 'inok'+parentnd
	divmessage.appendChild(spanok)
}
else
	spanok = document.getElementById('inok'+parentnd)
	
if(document.getElementById('in'+parentnd+id)==null) {
	var spanmessage = document.createElement('span')
	spanmessage.id = 'in'+parentnd+id
	divmessage.appendChild(spanmessage)
}
else
	spanmessage = document.getElementById('in'+parentnd+id)
	switch(typeinfo) {
		case "avert" :
			if(post) {
				if(verifie['fieldverifie'] == null)
					verifie['fieldverifie'] = 0
				verifie['fieldverifie']++
				verifie['fieldavert'] = 1
					//alert(verifie['fieldverifie']+' verifier sur '+aVerifier)
			}
			if(nbverif[parentnd]>0)
				nbverif[parentnd]--
			spanok.innerHTML	=	''
			if(cssparentavert != null)
				parent.className	=	cssparentavert
			if(cssavert != null)
				spanmessage.innerHTML	=	'<span class="'+cssavert+'">'+message+'</span>'
		break
		case "ok" :
			nbverif[parentnd]++
			spanmessage.innerHTML = ''
			
			//alert(allClauseOk(nbverif[parentnd],tablenght))
			if(nbverif[parentnd]>=tablenght) {
				//if(parentnd == 'field5')
				//alert(parentnd+' verifié '+nbverif[parentnd]+' -- '+tablenght);
				if(post) {
					if(verifie['fieldverifie'] == null)
						verifie['fieldverifie'] = 0;
					verifie['fieldverifie']++;
				}
				if(cssparentok != null)
					parent.className	=	cssparentok
				if(cssok != null)
					spanok.innerHTML	=	'<span class="'+cssok+'">'+message+'</span>'
			}
		break
		case "wait" :
			spanok.innerHTML	=	''
				if(cssparentok != null)
					parent.className	=	cssparentok
				if(cssok != null)
					spanmessage.innerHTML	=	'<span class="'+csswait+'">'+message+'</span>'
		break
	}
	if(verifie['fieldverifie'] == aVerifier && post==1) {
		//alert('terminer'+aVerifier+' -- '+verifie['fieldverifie']);
		//setTimeout("validform()", 3000);
		validform()
	}
}
function validform() {
	if(!verifie['fieldavert'] && post==1) {
		//Dialog.closeInfo();
		Dialog.info("Chargement<br>Veuillez Patienter ...", {width:250, height:100, showProgress: true});
			if(sendType == 'request')
				makeArrayForRequest();
			if(sendType == 'post')
				thisForm.submit()
		}
	else {
		innerInfo(1,'avert','Les champs en bleu sont à vérifier',0,'fieldresult');
	}
		post=0;
}
function bddexist(id,tablenght,thisparentnd) {
	   var xhr_object = null 
	   if(window.XMLHttpRequest) 
	      xhr_object = new XMLHttpRequest() 
	   else if(window.ActiveXObject) 
	      xhr_object = new ActiveXObject("Microsoft.XMLHTTP") 
	   else {
      alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...") 
	      return 
	   } 
	   xhr_object.open("POST", "inc/bddexist.php", true) 
	     
	   xhr_object.onreadystatechange = function() { 
	   if(xhr_object.readyState == 4) {
	  	
		if(xhr_object.responseText == 1) {
				 	typeinfo	= 'avert'
					message		= bddmessage[2]
		 }
		 else if(xhr_object.responseText == 2) {
				typeinfo	= 'ok'
				message		= ''
		 }
			innerInfo(id,typeinfo,message,tablenght,thisparentnd)
	   }
	   } 
	 
	   xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded") 
	   var data = "value="+valuefield+"&x="+x+"&y="+y 
	   xhr_object.send(data) 
}
function makeArrayForRequest() {
	var inputFields = thisForm.getElementsByTagName('INPUT')
	var selectBoxes = thisForm.getElementsByTagName('SELECT')
	var textFields = thisForm.getElementsByTagName('TEXTAREA')
	
	var inputs = new Array()
	var postInReq = new Array()
	
	for(var no=0;no<textFields.length;no++){
			inputs[inputs.length] = textFields[no]
	}
	for(var no=0;no<inputFields.length;no++){
			inputs[inputs.length] = inputFields[no]
		
	}	
	for(var no=0;no<selectBoxes.length;no++){
			inputs[inputs.length] = selectBoxes[no]
		
	}
	for(var no=0;no<inputs.length;no++){
		var post = inputs[no].getAttribute('post')
		if(!post)post = inputs[no].post
		if(post) {
			if(inputs[no].type == ('radio' || 'checkbox')) {
				if(inputs[no].checked ==true) 
					postInReq[inputs[no].name] = inputs[no].value
			}
			else if(inputs[no].value)
				postInReq[inputs[no].name] = inputs[no].value
		}
	}
	
	sendRequest(postInReq)
}
function sendRequest(array) {
	
	var data = makeData(array)
	var xhr_object = null 
   if(window.XMLHttpRequest) 
	  xhr_object = new XMLHttpRequest() 
   else if(window.ActiveXObject) 
	  xhr_object = new ActiveXObject("Microsoft.XMLHTTP") 
   else {
  alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...") 
	  return 
   } 
   xhr_object.open("POST", requestUrl, true) 
	 
   xhr_object.onreadystatechange = function() { 
   		
	   if(xhr_object.readyState == 4)
		  	 Dialog.info(xhr_object.responseText, {width:250, height:100, showProgress: true, destroyOnClose: true});
   } 
 
   xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded") 
   xhr_object.send(data)
   
}
function makeData(array) {
	lengthArray = lengthAssoc(array)
	var i = 0
	for (var cle in array) {
		if((i != 0) && (i != lengthArray))
			data += "&";
		if(i == 0) 
			data = cle+"="+array[cle];
		else
			data += cle+"="+array[cle];
		
		i++
	} 
	return data;
}
function lengthAssoc(array) {
	var i = 0
	for (var cle in array) {
		i++
	}
	return i
}
function closeLayer(layerid) {
	 document.getElementById(layerid).style.display = 'none';
}
function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}


	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	//alert(arrayPageSize);
	return arrayPageSize;
}
function DIV_Remove( div_){
var Obj = document.getElementById( div_);
if( Obj){
var Parent = Obj.parentNode;
if( Parent)
Parent.removeChild( Obj);
}
}

function layerInfo(content) {

	if(document.getElementById('incache')) 
		DIV_Remove('incache')
	if(document.getElementById('cache'))
		 DIV_Remove('cache')
	ieop = 70
	ieop2 = 100
	size =  new Array()
	size = getPageSize()
	//document.body.removeChild(new_div);
	var divcache = document.createElement('div')
	divcache.id = 'cache'
	document.getElementsByTagName("body")[0].appendChild(divcache)
	divcache.style.position = 'absolute'
	divcache.style.display = 'block'
	divcache.style.zIndex = 2000
	divcache.style.background = layerInfoBG
	divcache.style.padding = '0'
	divcache.style.width = '100%'
	divcache.style.height = size[1]+'px'
	divcache.style.top = '0'
	divcache.style.left = '0'
	divcache.style.filter="alpha(opacity="+ieop+")"
	divcache.style.MozOpacity=ieop/100
	divcache.style.opacity=ieop/100	
	

	var divmessage2 = document.createElement('div')
	divmessage2.id = 'incache'
	document.getElementsByTagName("body")[0].appendChild(divmessage2)
	divmessage2.style.position = 'absolute'
	divmessage2.style.display = 'block'
	divmessage2.style.zIndex = 2001
	divmessage2.style.background = layerInfoBG
	divmessage2.style.border = '1px solid '+layerInfoBorder
	divmessage2.style.color = txtColor
	divmessage2.style.padding = '10px'
	divmessage2.style.width = layerInfoW+'px'
	divmessage2.style.height = layerInfoH+'px'
	divmessage2.style.top = (getScrollY()+((GetBodyHeight()/2)-(layerInfoH/2)))+'px'
	divmessage2.style.left = ((GetBodyWidth()/2)-(layerInfoW/2))+'px'
	divmessage2.innerHTML = content+'<br class="clear" /><br><br><a href="javascript:closeLayer(\'incache\');closeLayer(\'cache\')" style="position:absolute;bottom:5px;right:5px"><b>Cliquez ici pour fermer</</a>'
}
function putContent(zone,content) {
	document.getElementById(zone).innerHTML = content;
}
function generateGuid()
{
var result, i, j;
result = '';
for(j=0; j<32; j++)
{
if( j == 8 || j == 12|| j == 16|| j == 20)
result = result + '-';
i = Math.floor(Math.random()*16).toString(16).toUpperCase();
result = result + i;
}
return result
}