/**
* Tommy Brière
* 2008-01-22
* Utilitaires de formulaires
**/
function FormulaireHelper(data, formId, postData, next, autosubmit, autofocus, tabindex){
this.data=data;
this.next=next;
this.formId=formId;
this.postData=postData;
this.initialState;
this.init(autosubmit, tabindex);
this.setInitialState();
this.url="/plugin.php";
if(autofocus){
this.autoFocus();}}

function vfocus(){
this.className=this.className+" "+'formfocus';}

function vblur(){
this.className=this.classNameBak;}

function enterPressed(e){
var keynum;
if(window.event){
keynum= e.keyCode;}
else if(e.which){
keynum= e.which;}
if(keynum==13){
return true;}
return false;}

FormulaireHelper.prototype={
submitOnEnter: function(e){
if(enterPressed(e)){
this.autosubmit();}},

init: function(autosubmit, tabindex){
for(var i=0; i< this.data.length; i++){
v=this.data[i];
var input= $w(v[0]);
if(input){
if(input.type!="radio") input.name= v[0];
if((input.type=="text")||(input.type=="password")||(input.type=="textarea")){
input.classNameBak=input.className;
this.addListener(input,"focus" , vfocus);
this.addListener(input,"blur" , vblur);}
if((autosubmit!=null)&&(this.data.length-1==i)&&(input.type!="textarea")){
input.autosubmit= autosubmit;
this.addListener(input,"keypress" , this.submitOnEnter);}
if(tabindex>0){
input.tabIndex=(i+tabindex);}
var i2=$w(v[0]+"_i");
if(i2){
if(v.length>=4){
this.setUpToolTip([i2], v[3]);} else{
this.setUpToolTip([i2], v[1]);}
i2.onclick=this.aide;}} else{
alert(_TR("mot.js_form_helper_erreur_champs" ,"DEBUG : Impossible de trouver le champ {0}", v[0]));}}},
setUpToolTip: function(nodes, message){
new ToolTip(message, nodes);}}
FormulaireHelper.prototype.addListener= function(input, event, f){
try{
YAHOO.util.Event.addListener(input, event, f, input, true);} catch(e){
jQuery.event.add(input, event, function(e){
f.call(input, e);} );}}

FormulaireHelper.prototype.autoFocus= function(){
if(this.data.length>0){
v=this.data[0];
var input= $w(v[0]);
if(input.value=="" ){
try{
input.focus();} catch(e){}}}}

FormulaireHelper.prototype.aide= function(){
return false;}

FormulaireHelper.prototype.vCham= function(){
var radioAVal=[];
var radioState=[];
for(var i=0; i< this.data.length; i++){
var v=this.data[i];
var doitV=true;
if(v.length>=3){
doitV=v[2];}
if(doitV){
var input= $w(v[0]);
var ok=false;
if(input.type=="checkbox" ){
if(input.checked){
ok=true;}} else if(input.type=="select-one" ){
if(input.selectedIndex> 0 || input.length< 2){
ok=true;}} else if(input.type=="radio" ){
var name= input.name;
if(radioState[name]){} else{
radioAVal[radioAVal.length]=[name,i];
radioState[name]=1;}
if(input.checked){
radioState[name]=2;}
ok= true;} else{
if(input.value!=""){
ok=true;}}
if(!ok){
alert(v[1]);
input.focus();
return false;}}}
for(var i=0; i< radioAVal.length; i++){
var d= radioAVal[i];
var v=this.data[d[1]];
var n=d[0];
if(radioState[n]== 1){
alert(v[1]);
var input= $w(v[0]);
input.focus();
return false;}}
return true;}

FormulaireHelper.prototype.soum= function(){
var f= $w(this.formId);
var sUrl= this.url;
var postData= this.postData;
var valeurs= getFieldsValueOfEl(f);
for(var i=0; i< valeurs.length; i++){
var val= valeurs[i];
var encval= encodeURIComponent(val[1]);
postData+='&'+val[0]+"="+encval;}
var request= blockingXmlCall(sUrl, postData);
return this.afterSave(request);}
FormulaireHelper.prototype.afterSave= function(request){
var data= request.responseText;
if((data.length>=2)&&(data.substr(0, 2)=="OK")){
this.afterSuccessSave(request);
return true;} else if(data=="LOGIN"){
sessionExpire();} else{
alert(data);}
return false;}
FormulaireHelper.prototype.afterSuccessSave= function(request){
if(this.next!=null){
window.location.href=this.next;} else{
return true;}}

FormulaireHelper.prototype.valider= function(){
if(this.vCham()){
this.soum();}}
FormulaireHelper.prototype.getFieldsValues= function(){
return getFieldsValueOfEl($w(this.formId));}

FormulaireHelper.prototype.setInitialState= function(){
this.initialState= this.getFieldsValues();}

FormulaireHelper.prototype.isModified= function(){
if(this.initialState!=null){
nfields= this.getFieldsValues();
for(var i=0; i< nfields.length; i++){

if(nfields[i][1]!=this.initialState[i][1]){
return true;}}}
return false;}
FormulaireHelper.prototype.addData= function(name, value){
var i= document.createElement("input");
i.type="hidden";
i.name=name;
i.value=value;
var form= $w(this.formId);
form.appendChild(i);}

FormulaireHelper.prototype.addParams= function(params){
var plist= params.split("&");
for(var i=0; i< plist.length; i++){
var p= plist[i];
var part= p.split("=");
if((part[0])&&(part[0]!="")){
this.addData(part[0], decodeURIComponent(part[1]));}}}

function onKeyPressLimit(input, e, limit){
var keynum;
var keychar;
var numcheck;
if(window.event){
keynum= e.keyCode;}
else if(e.which){
keynum= e.which;}
if((keynum>46)||(keynum==32)){
return(input.value.length<limit);}
return true;}

function onKeyUpLimit(input, limit){
if(input.value.length>limit){
alert(_TR("mot.js_form_helper_erreur_caracteres" ,"Vous ne pouvez entrer plus de {0} caractères dans ce champ...", limit));
input.value= input.value.substr(0, limit);}}

function remplacer(chaine, element, nouveau){
var reg=new RegExp(element,"gi");
return chaine.replace(reg, nouveau);}

function formatterApresXml(chaine){
chaine= remplacer(chaine,"\\\\\\\\" ,"\\" );
return chaine;}
function escapeHTML(html){
var div= document.createElement('div');
var text= document.createTextNode(html);
div.appendChild(text);
return div.innerHTML;}

function safeXmlExtract(parent, nom){
var match= parent.getElementsByTagName(nom);
if(match.length==1){
var node= match[0];
if(node.childNodes.length== 1){
return formatterApresXml(node.firstChild.nodeValue);}}
return"";}
