
function HFormGetValue(_id){
	var $this__params=eval(_id+'Params');
	if($this__params['DClass']=='DWarning')
		return;
	if($this__params['DClass']=='DCheckbox'){
		if(document.getElementById(_id).checked)
			return '1';
		return '';
	}
	if($this__params['DClass']=='DList'){
		var el=document.getElementById($this__params['form']).elements[_id];
		if(el.value==undefined){//C'est des boutons radio
			for(var i=0;i<el.length;i++){
				if(el[i].checked)//Pas Vide
					return el[i].value;
			}
			return $this__params['nonevalue'];
		}
	}
	if($this__params['DClass']=='DListMulti'){
		selected = new Array();

		var ob=document.getElementById($this__params['form']).elements[_id];

		if(ob!=undefined && ob.type=='select-multiple'){
			for(var i=0; i<ob.options.length; i++){
				if (ob.options[i].selected){
					selected.push(ob.options[i].value);
				}
			}
		}else{//checkbox-multiples
			var ob=document.getElementById($this__params['form']).elements[_id+'[]'];
			for(var i=0; i<ob.length; i++){
				if(ob[i].checked)
					selected.push(ob[i].value);
			}
		}
		return selected;
	}
	return document.getElementById(_id).value;
}
function HFormSetValue(_id,_value){
	var $this__params=eval(_id+'Params');
	if($this__params['DClass']=='DWarning')
		return;
	if($this__params['DClass']=='DCheckbox'){
		if(_value=='1')
			document.getElementById(_id).checked=true;
		else
			document.getElementById(_id).checked=false;
		return;
	}
	if($this__params['DClass']=='DList'){
		var el=document.getElementById($this__params['form']).elements[_id];
		if(el.value==undefined){//C'est des boutons radio
			for(var i=0;i<el.length;i++){
				if(el[i].value==_value){
					el[i].checked=true;
					return;
				}
			}
			return;
		}
	}
	if($this__params['DClass']=='DListMulti'){
		var ob=document.getElementById($this__params['form']).elements[_id];

		if(ob!=undefined && ob.type=='select-multiple'){
			for(var i=0;i<ob.options.length;i++){
				var found=false;
				for(var j=0;j<_value.length;j++){
					if(ob.options[i].value==_value[j])
						found=true;
				}
				ob.options[i].selected=found;
			}
		}else{//checkbox-multiples
			var ob=document.getElementById($this__params['form']).elements[_id+'[]'];
			for(var i=0; i<ob.length; i++){
				var found=false;
				for(var j=0;j<_value.length;j++){
					if(ob[i].value==_value[j])
						found=true;
				}
				ob[i].checked=found;
			}
		}
		return;
	}
	if($this__params['DClass']=='DFile'){//Le navigateur ne l'autorise pas
		return;
	}
	document.getElementById(_id).value=_value;
}

var HFormOriginalValues=new Array();
function HFormSaveOriginalValues(_formId){
	var Elem=eval(_formId+'Elements');
	HFormOriginalValues[_formId]=new Array();
	for(var k in Elem){
		HFormOriginalValues[_formId][Elem[k]]=HFormGetValue(Elem[k]);
	}
}
function HFormReset(_formId){
	var Elem=eval(_formId+'Elements');
	HFormWarnClearAll(_formId);
	for(var k in Elem){
		HFormSetValue(Elem[k],HFormOriginalValues[_formId][Elem[k]]);
	}
}

function HFormWarnMsgGlue(_errors,_errmsgs,_errmsgsall,_glue){
	var txt='';
	for(var kerrcod in _errors){
		if(_errmsgs[kerrcod]){
			if(txt!='')txt+=_glue;
			txt+=_errmsgs[kerrcod];
		}else if(_errmsgsall[kerrcod]){
			if(txt!='')txt+=_glue;
			txt+=_errmsgsall[kerrcod];
		}
	}
	return txt;
}

function HFormValidate(_id){//Génére le tableau de code d'erreur pour un champ	(return true/false)
	var $this__params=eval(_id+'Params');
	return eval('HForm'+$this__params['DClass']+'("'+_id+'")');
}
function HFormValidateAll(_formId){//Génére le tableau d'erreur de tout les champs (return true/false)
	var Elem=eval(_formId+'Elements');
	var res=true;
	for(var k in Elem){
		if(!HFormValidate(Elem[k]))
			res=false;
	}
	return res;
}

function HFormWarnInline(_id){//Affiche ou Efface le Warning Inline d'un champ
	var $this__params=eval(_id+'Params');

	for(var errcod1st in $this__params['errors']){break;}

	if(errcod1st){//Si il y a des erreurs
		if(document.getElementById(_id+'WarnInlinesingle')!=undefined){
			document.getElementById(_id+'WarnInlinesingle').className='HFormWarnInlineErr';
			if($this__params['WarnInlineMsg'][errcod1st]!=undefined)//Si le message à été définit
				document.getElementById(_id+'WarnInlinesingle').innerHTML=$this__params['WarnInlineMsg'][errcod1st];
			else if($this__params['WarnMsg'][errcod1st]!=undefined)//Si le message à été définit
				document.getElementById(_id+'WarnInlinesingle').innerHTML=$this__params['WarnMsg'][errcod1st];
		}else if(document.getElementById(_id+'WarnInlinemulti')!=undefined){
			document.getElementById(_id+'WarnInlinemulti').className='HFormWarnInlineErr';
			document.getElementById(_id+'WarnInlinemulti').innerHTML=HFormWarnMsgGlue($this__params['errors'],$this__params['WarnInlineMsg'],$this__params['WarnMsg'],'<br />');
		}else if(document.getElementById(_id+'WarnInlinenone')!=undefined){
			document.getElementById(_id+'WarnInlinenone').className='HFormWarnInlineErr';
		}
	}else{//Si il n'y a pas d'erreurs
		HFormWarnInlineClear(_id,'Ok');
	}
}

function HFormWarnInlineClear(_id,_Ok){
	if(document.getElementById(_id+'WarnInlinesingle')!=undefined){
		document.getElementById(_id+'WarnInlinesingle').className='HFormWarnInline'+_Ok;
		document.getElementById(_id+'WarnInlinesingle').innerHTML='&nbsp;';
	}else if(document.getElementById(_id+'WarnInlinemulti')!=undefined){
		document.getElementById(_id+'WarnInlinemulti').className='HFormWarnInline'+_Ok;
		document.getElementById(_id+'WarnInlinemulti').innerHTML='&nbsp;';
	}else if(document.getElementById(_id+'WarnInlinenone')!=undefined){
		document.getElementById(_id+'WarnInlinenone').className='HFormWarnInline'+_Ok;
	}
}


function HFormWarnColor(_id){//Affiche ou Efface le Warning Color d'un champ
	var $this__params=eval(_id+'Params');
	var $form__params=eval($this__params['form']+'Params');

	for(var errcod1st in $this__params['errors']){break;}

	if(errcod1st){//Si il y a des erreurs
		if(document.getElementById(_id+'WarnColor')!=undefined)
			document.getElementById(_id+'WarnColor').style.backgroundColor=$form__params['ColorNo'];
		else if(document.getElementById(_id)!=undefined)
			document.getElementById(_id).style.backgroundColor=$form__params['ColorNo'];
		if($this__params['WarnColorBoth'] && document.getElementById(_id)!=undefined)
			document.getElementById(_id).style.backgroundColor=$form__params['ColorNo'];
	}else{//Si il n'y a pas d'erreurs
		HFormWarnColorClear(_id);
	}
}

function HFormWarnColorClear(_id){
	var $this__params=eval(_id+'Params');
	var $form__params=eval($this__params['form']+'Params');
	if(document.getElementById(_id+'WarnColor')!=undefined)
		document.getElementById(_id+'WarnColor').style.backgroundColor=$form__params['ColorOk'];
	if(document.getElementById(_id)!=undefined)
		document.getElementById(_id).style.backgroundColor=$form__params['ColorOk'];	
}

/**
 * Used by HFormWarnLive to reset the previous timeout of one field if not executed yet
 */
var HFormWarnLiveTimeout=new Array();
/**
 * HFormWarnLive only manage the timeout, this does the rest
 * @access private
 */
function _HFormWarnLive(_id){
	if(HFormWarnLiveTimeout[_id]!=undefined)delete HFormWarnLiveTimeout[_id];//timeout expired
	
	var $this__params=eval(_id+'Params');
	
	if($this__params['WarnLiveInline'] || $this__params['WarnLiveColor']){

		HFormValidate(_id);
	
		if($this__params['WarnLiveInline']) HFormWarnInline(_id);

		if($this__params['WarnLiveColor']) HFormWarnColor(_id);

	}
}
/**
 * Validation while user's typing
 * @internal execute HFormValidate HFormWarnInline HFormWarnColor
*/
function HFormWarnLive(_id){//
	if(HFormWarnLiveTimeout[_id]!=undefined)clearTimeout(HFormWarnLiveTimeout[_id]);
	var $this__params=eval(_id+'Params');
	HFormWarnLiveTimeout[_id]=setTimeout("_HFormWarnLive('"+_id+"')",$this__params['WarnLiveDelai']);
}

function HFormWarnClearAll(_formId){//Efface tout Warning
	var Elem=eval(_formId+'Elements');
	for(var k in Elem){
		//WarnInline
		HFormWarnInlineClear(Elem[k]);
		//WarnColor
		HFormWarnColorClear(Elem[k]);
		//WarnBloc
		if(document.getElementById(_formId+'WarnBloc')!=undefined) document.getElementById(_formId+'WarnBloc').innerHTML='';
	}
}

function HFormWarnSubmit(_formId){//Appel : HFormWarnInline HFormWarnColor HFormWarnAlert HFormWarnBloc (appelé au reload)
	var Elem=eval(_formId+'Elements');
	var BlocTxt='';
	var AlertTxt='';
	var Txt='';

	HFormWarnClearAll(_formId);

	for(var k in Elem){
		var $this__params=eval(Elem[k]+'Params');

		//WarnInline
		if($this__params['WarnSubmitInline'])
			HFormWarnInline(Elem[k]);

		//WarnColor
		if($this__params['WarnSubmitColor'])
			HFormWarnColor(Elem[k]);

		//WarnBloc
		if($this__params['WarnSubmitBloc']){
			Txt=HFormWarnMsgGlue($this__params['errors'],$this__params['WarnBlocMsg'],$this__params['WarnMsg'],'<br />');
			if(Txt!='' && BlocTxt!='')BlocTxt+='<br />';
			BlocTxt+=Txt;
		}

		//WarnAlert
		if($this__params['WarnSubmitAlert']){
			Txt=HFormWarnMsgGlue($this__params['errors'],$this__params['WarnAlertMsg'],$this__params['WarnMsg'],"\n");
			if(Txt!='' && AlertTxt!='')AlertTxt+="\n";
			AlertTxt+=Txt;
		}
	}
	//WarnBloc
	if(document.getElementById(_formId+'WarnBloc')!=undefined){
		if(BlocTxt!='')BlocTxt+='<br />&nbsp;';
		document.getElementById(_formId+'WarnBloc').innerHTML=BlocTxt;
	}
	//WarnAlert
	if(document.getElementById(_formId+'WarnAlert')!=undefined && AlertTxt!='')
		alert(AlertTxt);
}

function HFormOnSubmit(_formId){//Appel : HFormValidateAll HFormWarnSubmit
	//Si on permet uniquement l'envoi à partir du bouton
	var formParams=eval(_formId+'Params');
	if(formParams['buttonsonly']){
		if(!eval(_formId+'isSubmitBt'))return false;
		eval(_formId+'isSubmitBt==false;');
	}

	var tmp=HFormValidateAll(_formId);
	HFormWarnSubmit(_formId);//Affiche ou Efface les erreurs

	return tmp;
}


////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////FONCTIONS JS GENERIC A METTRE AILLEUR!//////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

function str_replace(search,replace,subject) {
	// by: Gabriel Paderni

	if(!(replace instanceof Array)){
		replace=new Array(replace);
		if(search instanceof Array){//If search  is an array and replace  is a string, then this replacement string is used for every value of search
			while(search.length>replace.length){
				replace[replace.length]=replace[0];
			}
		}
	}

	if(!(search instanceof Array))search=new Array(search);
	while(search.length>replace.length){//If replace  has fewer values than search , then an empty string is used for the rest of replacement values
		replace[replace.length]='';
	}

	if(subject instanceof Array){//If subject is an array, then the search and replace is performed with every entry of subject , and the return value is an array as well.
		for(k in subject){
			subject[k]=str_replace(search,replace,subject[k]);
		}
		return subject;
	}
	
	for(var k=0; k<search.length; k++){
		var i = subject.indexOf(search[k]);
		while(i>-1){
			subject = subject.replace(search[k], replace[k]);
			i = subject.indexOf(search[k],i);
		}
	}

	return subject;
}
