/**
 * Valide un formulaire HTML selon une expression régulière donnée
 */                       
 
/* Parameters */
var failClass = 'failed';
var passClass = 'pass';
var reqClass  = 'required';
var timeout = .1;

/* Validation types */
var validationTypes = new Array();
validationTypes[ 'email' ]        = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
validationTypes[ 'name' ]         = /^[A-Za-zàÀèÈéÉïÏîÎôÔêÊçÇ]+[A-Za-z\-\sàÀèÈéÉïÏîÎôÔêÊçÇ\.\,\"\'\“\”\’\‘\-\(\)]*$/;
validationTypes[ 'initial' ]      = /^[A-Za-zàÀèÈéÉïÏîÎôÔêÊçÇ]*$/;
validationTypes[ 'text' ]         = /^.+$/;
validationTypes[ 'multilinetxt' ] = /^[\s\S]+$/;
validationTypes[ 'postalCode' ]   = /^[a-zA-Z][0-9][a-zA-Z]\s?[0-9][a-zA-Z][0-9]$/;
validationTypes[ 'password' ]     = /^[a-zA-Z0-9]{6,35}$/; 
validationTypes[ 'date' ]         = /^[0-9]{4}(\s)?(\-|\\|\/)(\s)?[0-9]{1,2}(\s)?(\-|\\|\/)(\s)?[0-9]{2}$/;
validationTypes[ 'title' ]        = /^.+$/; 
validationTypes[ 'nbJour' ]       = /^[1-6]{1}$/;
validationTypes[ 'microUrl' ]     = /^[a-zA-Z0-9._-]{4,40}$/;
validationTypes[ 'phone' ]        = /^([0-9\-])?[0-9]{3}\-[0-9]{3}\-[0-9]{4}$/;
var tabChamps = new Array();
var tabChampsTell = new Array();

function Validation( formFieldId, validationType, permetVide ) {
    if ( typeof permetVide == "undefined" || !permetVide ) {
        permetVide = false;
        tabChamps[ formFieldId ] = 'required';
    } else {
        tabChamps[ formFieldId ] = false;
    }
    
    addImages( formFieldId, permetVide );
    
    if( validationTypes[ validationType ] != null ) {
        var regex = validationTypes[ validationType ]; 
         if( $F( formFieldId ) == "" && permetVide == true )  {
           tabChamps[ formFieldId ] = true;
         } else {
           tabChamps[ formFieldId ] = regex.test( $F( formFieldId ) );   
         }  
        
        if( $F( formFieldId ).length > 0 ) {
            changeFieldState( formFieldId, tabChamps[ formFieldId ] );
        }
        new Form.Element.Observer( formFieldId, timeout, function( field, value ) {
            var regex = validationTypes[ validationType ];
            changeFieldState( field.id, regex.test( value ) );
        } );
    }
}

function ValidationTell( formFieldId, validationType, permetVide ) {

    if ( typeof permetVide == "undefined" || !permetVide ) {
        permetVide = false;
        tabChampsTell[ formFieldId ] = 'required';
    } else {
        tabChampsTell[ formFieldId ] = false;
    }
    addImages( formFieldId, permetVide );
          
    if( validationTypes[ validationType ] != null ) {
        var regex = validationTypes[ validationType ]; 
         if( $F( formFieldId ) == "" && permetVide == true )  {
           tabChampsTell[ formFieldId ] = true;
         } else {
           tabChampsTell[ formFieldId ] = regex.test( $F( formFieldId ) );   
         }  
         
        if( $F( formFieldId ).length > 0 ) {
            changeFieldState( formFieldId, tabChampsTell[ formFieldId ] );
        }
        new Form.Element.Observer( formFieldId, timeout, function( field, value ) {
            var regex = validationTypes[ validationType ];
            changeFieldState( field.id, regex.test( value ) );
        } );
    }
}

function Comparison( formId, formFieldId, compareToId ) {
    addImages( formFieldId );
    //tabChamps[ formFieldId ] = false;
    new Form.Observer( formId, timeout, function( field, value ) {
        if( $F( formFieldId ).length > 0 ) {
            if( $F( formFieldId ) == $F( compareToId ) ) {
                changeFieldState( formFieldId, true );
            } else {
                changeFieldState( formFieldId, false );
            }
        }
    } );
}      

function getImagePath() {
    return document.location.toString().substring( 0, document.location.toString().indexOf( '/', 8 ) );
}

function addImages( field, permetVide ) {
    getImagePath();
    Insertion.After( field, '<img id="' + field + '_' + failClass + '" src="http://www.inmemoriam.ca/images/icon_check_unavailable.gif" alt="Invalid entry"  style="display:none;" class="check"/>' );
    Insertion.After( field, '<img id="' + field + '_' + passClass + '" src="http://www.inmemoriam.ca/images/icon_check_available.gif" alt="Valid entry"  style="display:none;" class="check"/>' );
    
    if( permetVide ) {
        Insertion.After( field, '<span id="' + field + '_' + reqClass + '" style="display:none;"></span>' );
    } else {
        Insertion.After( field, '<img id="' + field + '_' + reqClass + '" src="http://www.inmemoriam.ca/images/icon_mandatory.gif" alt="Required entry" class="check"/>' );
    }
}

function changeFieldState( field, valid ) {
    $( field + '_' + reqClass ).hide(); 
    if( valid ) {
        $( field + '_' + failClass ).hide();  
        $( field + '_' + passClass ).show();   
        tabChamps[ field ] = true;   
    } else {
        $( field + '_' + failClass ).show();
        $( field + '_' + passClass ).hide();
        tabChamps[ field ] = false;
    }
}

function checkForm() { 
    var formValid = true;
    for( champs in tabChamps ) {
        if( tabChamps[ champs ] == false ) {
            formValid = false;
            changeFieldState( champs, false ); 
        }
    }
    return formValid;
}


function checkFormTellYourFriend() { 
    var formValid = true;
    for( champs in tabChampsTell) {
        if( tabChamps[ champs ] == false ) {
            formValid = false;
            changeFieldState( champs, false ); 
        }
    }
    return formValid;
}

function changeVisible( divId, visible ) {
    if( visible ) {
        $( divId ).show();
    } else {
        $( divId ).hide();
    }
}

function call_changementProvinceNew( input, idPays, idProvince, pageLang ) {
	provinceListing = new Ajax.Updater( input, '/ajax/afficherProvinceNew.php', {method: 'get', parameters: {idPays: idPays, idProvince: idProvince, pageLang: pageLang } } );  
}