

function isEmail()
{
    var filter_email=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
    return filter_email.test(this);
}



function isFormattedDate()
{
    var filter_date=/^\d{2}\/\d{2}\/\d{4}$/i;
    return filter_date.test(this);
}


function isEmpty()
{
    if( typeof this == 'undefined' ){
        return true;
    }  
    if( typeof(this) == 'number' && ( parseInt(this, 10) == 0 || parseFloat(this) == 0 ) ){
        return true;
    }       
    if( this==null || this == false || this == '' || jQuery.isEmptyObject(this) ){
        return true;
    }
    return false;
}

function isNotEmpty()
{
    return !(this).isEmpty();   
}

function isMd5()
{
    filter = /^[a-z0-9]{32}$/i;
    return filter.test(this);
}

function isSha1()
{
    filter = /^[a-z0-9]{40}$/i;
    return filter.test(this);
}

function isFloat()
{
    return (parseFloat(this) == this);
}

function isUnsignedFloat()
{
    return (parseFloat(this) == this && this > 0);
}

function isName()
{
    filter = /^[^0-9!<>,;?=+()@#"°{}_$%:]*$/i;
    return filter.test(this);
}

function isPrice()
{
    filter = /^[0-9]{1,10}(\.[0-9]{1,9})?$/i;
    return filter.test(this);
}

function isAddress()
{
    filter = /^[^!<>?=+@{}_$%]*$/i;
    return filter.test(this);
}

function isCityName()
{
    filter = /^[^!<>;?=+@#"°{}_$%]*$/i;
    return filter.test(this);
}

function isDate()
{
    filter = /^([0-9]{4})-((0?[1-9])|(1[0-2]))-((0?[1-9])|([1-2][0-9])|(3[01]))( [0-9]{2}:[0-9]{2}:[0-9]{2})?$/i;
    return filter.test(this);
}

function isPhoneNumber()
{
    filter = /^[+0-9. ()-]*$/i;
    return filter.test(this);
}

function isPostCode()
{
    filter = /^[a-z 0-9-]+$/i;
    return filter.test(this);
}

function isUrl()
{
    filter = /^([[:alnum:]]|[:#%&_=\(\)\.\? \+\-@\/])+$/i;
    return filter.test(this);
}

function isAbsoluteUrl()
{
    filter = /^https?:\/\/([[:alnum:]]|[:#%&_=\(\)\.\? \+\-@\/])+$/i;
    return filter.test(this);
}

function isFileName()
{
    filter = /^[a-z0-9_.-]*$/i;
    return filter.test(this);
}

function isPasswd( _passwd, _size )
{
    if( typeof _size == 'undefined' ){
        _size = 5;
    }
    filter = new RegExp("^[.a-z_0-9-!@#$%\^&*()]{"+ _size +",32}$", "g");
    return filter.test(this);
}

var t = [Number,String,Boolean];
for(var i in t){
    t[i].prototype.isEmail = isEmail;
    t[i].prototype.isFormattedDate = isFormattedDate;
    t[i].prototype.isEmpty = isEmpty;
    t[i].prototype.isNotEmpty = isNotEmpty;
    t[i].prototype.isMd5 = isMd5;
    t[i].prototype.isSha1 = isSha1;
    t[i].prototype.isFloat = isFloat;
    t[i].prototype.isUnsignedFloat = isUnsignedFloat;
    t[i].prototype.isName = isName;
    t[i].prototype.isPrice = isPrice;
    t[i].prototype.isAddress = isAddress;
    t[i].prototype.isCityName = isCityName;
    t[i].prototype.isDate = isDate;
    t[i].prototype.isPhoneNumber = isPhoneNumber;
    t[i].prototype.isPostCode = isPostCode;
    t[i].prototype.isUrl = isUrl;
    t[i].prototype.isAbsoluteUrl = isAbsoluteUrl;
    t[i].prototype.isFileName = isFileName;
    t[i].prototype.isPasswd = isPasswd;
}


function dbg(s){
    if( typeof console.log != 'undefined' ){
        console.log( ( typeof s == 'string' ) ? s : s.toString() );
    }
}

function isPreviousDate(_oDate)
{
    nDate = new Date();
    return _oDate.getTime() < nDate.getTime();
}

function isNextDate(_oDate)
{
    nDate = new Date();
    return _oDate.getTime() > nDate.getTime();
}

function isDateInferiorToNow(_oDate)
{
    nDate = new Date();
    return nDate.getTime() < _oDate.getTime();
}

function date_parser(_value, _format)
{
    
    var t_format = _format.split(/[^\w]/i);
    var t_value = _value.split(/[^\d]/i);
    
    if(t_format.length != t_value.length){
        return false;
    }
    
    
    
    var t_f_v = new Array();
    
    for(var i = 0 ; i < t_format.length ; i++ ) 
    {

        switch(t_format[i])
        {
            case 'Y':
                if(t_value[i] < 1900 || t_value[i] > 2100){
                    return false;
                }
                break;
            
            case 'm':
                if(t_value[i] < 1 || t_value[i] > 12){
                    return false;
                }            
                break;               
                
            case 'd':
                if(t_value[i] < 1 || t_value[i] > 31){
                    return false;
                }            
                break;
            
            case 'H':
                if(t_value[i] < 0 || t_value[i] > 23){
                    return false;
                }              
                break; 
                
            case 'i':
            case 's':
                if(t_value[i] < 0 || t_value[i] > 59){
                    return false;
                }              
                break;
            
            default:
                return false;                             
        }
        t_f_v[t_format[i]] = t_value[i];
    }
    
    

    odate = new Date( 
                (typeof t_f_v["Y"] == "undefined")?0:t_f_v["Y"],
                (typeof t_f_v["m"] == "undefined")?0:t_f_v["m"] - 1,
                (typeof t_f_v["d"] == "undefined")?0:t_f_v["d"],
                (typeof t_f_v["H"] == "undefined")?0:t_f_v["H"],
                (typeof t_f_v["i"] == "undefined")?0:t_f_v["i"],
                (typeof t_f_v["s"] == "undefined")?0:t_f_v["s"],
                0
    );
    return odate;                                
}

function guest_message_fo(s, f)
{
    //  Affiche message 
    if( typeof s == 'string'){
        alert(s);
    }
    if( typeof f == 'function'){
        f();   
    }    
}

function guest_message(s, modal, f)
{
    //  Cache Loader
    $('#form_loader').hide();
    //  On remonte
    if( !modal ) {
        if($.browser.opera){$('html').animate({ scrollTop: ($('#message').offset().top - 30) }, 600, 'easeInOutCirc');}
        else{$('html,body').animate({ scrollTop: ($('#message').offset().top - 30) }, 600, 'easeInOutCirc');}
        var _div = 'message';
    }
    else {
        var _div = 'message_modal';
    }             
    
    //  Affiche message 
    if( typeof s == 'string'){
        $('#'+_div).fadeOut(300, function() {
            $(this).html(s);
            $(this).fadeIn(500);
        });        
    }
    if( typeof f == 'function'){
        f();   
    }
}


function check_form(_form)
{
    b_ok = true;
    _form = $(_form);
    
    for(i=0;i<t_validators.length;i++)
    {
        validator = t_validators[i];
        switch(validator.type)
        {
            case 'text':
                el = _form.find('input[name='+validator.name+']');
                if(el.length)
                {
                    ret = validator.fn( el );
                    
                    if( ret ){
                        el.next().next().text( ret ); 
                        b_ok = false;
                    }  
                    else{
                        el.next().next().text(''); 
                    }                     
                }
                break;
                            
            case 'password':
                el = _form.find('input[name='+validator.name+']');
                if(el.length)
                {
                    ret = validator.fn( el );
                    
                    if( ret ){
                        el.next().next().text( ret ); 
                        b_ok = false;
                    }  
                    else{
                        el.next().next().text(''); 
                    }                     
                }
                break;
                            
            case 'date':
                el = _form.find('input[name='+validator.name+']');
                if(el.length)
                {
                    ret = validator.fn( el );
                    
                    if( ret ){
                        el.next().next().text( ret ); 
                        b_ok = false;
                    }  
                    else{
                        el.next().next().text(''); 
                    }                       
                }
                break;
                
            case 'select':
                el = _form.find('select[name='+validator.name+']');
                if(el.length)
                {
                    ret = validator.fn( el );
                    if( ret ){
                        el.next().next().text( ret ); 
                        b_ok = false;
                    }  
                    else{
                        el.next().next().text(''); 
                    }                       
                }
                break;                
            
        }
        
    }
    
    if( b_ok ){
        ajax_form( _form );
    }
    
    return false;
}

function ajax_form(form, _url) 
{    
    if(typeof(_url) == 'undefined'){
        _url = $(form).attr("action");
    }
    
    $.ajax({type: $(form).attr("method"), url: _url , data: $(form).serialize(), success: function (data) {eval(data);}}); 
}

function scroll_to_element(_el)
{
    $('html,body').animate({scrollTop:$(_el).offset().top},'normal');    
}

