/**
* @author GeekTantra
* @date 20 September 2009
*/
var jQueryJSON = '';
var PrevField = '';
(function (jQuery) {
    var ValidationErrors = new Array();
    jQuery.fn.validate = function (options) {
        options = jQuery.extend({
            expression: "return true;",
            message: "",
            error_class: "validationerrors",
            error_field_class: "errorfield",
            live: true
        }, options);
        var SelfID = jQuery(this).attr("id");
        
        var Comma = ', ';
        if (SelfID == 'ValidEmail') {
            Comma = '';
        }
        var inputExpression = options['expression'];
        inputExpression = inputExpression.replace(/\\/g,"\\\\");

        jQueryJSON +=  Comma + '{"ElementID":"' + SelfID + '", "Expression":"'+ inputExpression + '", "Message": "' + options['message'] + '", "ErrorClass":"' + options['error_class'] + '", "ErrorFieldClass":"' + options['error_field_class'] + '"}' 
        
        var unix_time = new Date();
        unix_time = parseInt(unix_time.getTime() / 1000);
        if (!jQuery(this).parents('form:first').attr("id")) {
            jQuery(this).parents('form:first').attr("id", "Form_" + unix_time);
        }
        var FormID = jQuery(this).parents('form:first').attr("id");
        if (!((typeof (ValidationErrors[FormID]) == 'object') && (ValidationErrors[FormID] instanceof Array))) {
            ValidationErrors[FormID] = new Array();
        }
        if (options['live']) {
            if (jQuery(this).find('input').length > 0) {
                jQuery(this).find('input').bind('blur', function () {
                    if (validate_field("#" + SelfID, options)) {
                        if (options.callback_success)
                            options.callback_success(this);
                    }
                    else {
                        if (options.callback_failure)
                            options.callback_failure(this);
                    }

                });


                jQuery(this).find('input').bind('keypress click', function () {
                    jQuery("#" + SelfID).next('.' + options['error_class']).remove();
                    jQuery("#" + SelfID).removeClass(options['error_field_class']);

                });
            }
            else {
                jQuery(this).bind('blur', function () {
                    jQuery(this).removeClass("tipborder");
                    jQuery(this).parent().find('.tip').removeClass('selected');
                    jQuery(this).parent().find('.tip').hide(); 
                    if (validate_field(this, 'onChange') == true){
                        var ObjJQuery = jQuery(this);
                        if (SelfID == 'ValidDay' || SelfID == 'ValidMonth' || SelfID == 'ValidYear'){
                            self = 'DOB';
                            id = '#BirthdayValidate';
                            ObjJQuery = jQuery(id);
                        }
                        ObjJQuery.parent().find('.' + options['error_class']).hide();  
                    }
                    else{
                        if (SelfID == 'ValidDay' || SelfID == 'ValidMonth' || SelfID == 'ValidYear'){
                        //alert('test');
                            isValidDate($('#ValidYear').val(), $('#ValidMonth').val(), $('#ValidDay').val())
                        }
                    }
                });
                jQuery(this).bind('click', function () {
                    $('.tip').hide();
                    $('.tip').removeClass('selected');
                    $(".tipborder").each( function() {
                        $(this).removeClass("tipborder");
                    }); 
                    $('.' + options['error_class']).hide();
                    if ($('#' + SelfID + 'EStatus').val() == 'True'){
                        var ObjJQuery = jQuery(this);
                        if (SelfID == 'ValidDay' || SelfID == 'ValidMonth' || SelfID == 'ValidYear'){
                            self = 'DOB';
                            id = '#BirthdayValidate';
                            ObjJQuery = jQuery(id);
                        }
                        ObjJQuery.parent().find('.' + options['error_class']).show();  
                    }
                    else{
                        if (SelfID == 'ValidDay' || SelfID == 'ValidMonth' || SelfID == 'ValidYear'){
                        //alert('test');
                            isValidDate($('#ValidYear').val(), $('#ValidMonth').val(), $('#ValidDay').val())
                        }
                    }
                });
                jQuery(this).bind('keypress', function () {
                    $('.tip').hide();
                    $('.tip').removeClass('selected');
                    $(".tipborder").each( function() {
                        $(this).removeClass("tipborder");
                    }); 
                    $('.' + options['error_class']).hide();
                    if ($('#' + SelfID + 'EStatus').val() == 'False'){
                        jQuery(this).next('.' + options['error_class']).hide();
                        jQuery(this).removeClass(options['error_field_class']);
                        jQuery(this).parent().removeClass('check');
                        $(this).parent().find('.tip').addClass('selected');
                        $(this).addClass('tipborder');
                        $(this).parent().find('.tip').show();
                    }
                    else{
                      jQuery(this).parent().find('.' + options['error_class']).show();  
                    }
                });
                jQuery(this).bind('change', function () {
                    $('.tip').hide();
                    $('.tip').removeClass('selected');
                    $(".tipborder").each( function() {
                        $(this).removeClass("tipborder");
                    }); 
                    $('.' + options['error_class']).hide();
                    //alert(validate_field(this));
                    if (validate_field(this) == false){
                        var ObjJQuery = jQuery(this);
                        if (SelfID == 'ValidDay' || SelfID == 'ValidMonth' || SelfID == 'ValidYear'){
                            self = 'DOB';
                            id = '#BirthdayValidate';
                            ObjJQuery = jQuery(id);
                        }
                        ObjJQuery.parent().find('.' + options['error_class']).show();  
                    }
                    else{
                        if (SelfID == 'ValidDay' || SelfID == 'ValidMonth' || SelfID == 'ValidYear'){
                        //alert('test');
                            isValidDate($('#ValidYear').val(), $('#ValidMonth').val(), $('#ValidDay').val())
                        }
                    }
                });
            }
        }

        function validate_field(id, mode) {

            var self = jQuery(id).attr("id");
            var selfExp = options['expression'];
            var SelfID = '';

            var expression = 'function Validate(){' + selfExp.replace(/VAL/g, 'jQuery(\'#' + self + '\').val()') + '} Validate()';
            var validation_state = eval(expression);
            
            jQuery(id).removeClass('inputError');

            if (self == 'ValidPassword'){
                var pwderror = '<span>' + $('#PasswordError').html() + '</span>';
                jQuery(id).parent().find('.' + options['error_class']).html(pwderror);
                //if(validation_state == true)
                //{
                    var errMsg = '';
                    var NumberError = $('#NumberError').val();
                    var AlphabetError = $('#AlphabetError').val();
                    var TooShort = $('#TooShort').val();

                    if(CheckPasswordFormat('#ValidPassword') == 'numeric')
                    {
                        validation_state = false;
                        pwderror = pwderror.replace('<span>','');
                        errMsg = '<span><font color="#FFFF99"><strong>' + NumberError + '</strong></font><br />';
                        pwderror =  errMsg + pwderror;
                    }
                    else if(CheckPasswordFormat('#ValidPassword') == 'alphabet')
                    {
                        validation_state = false;
                        errMsg = '<span><font color="#FFFF99"><strong>' + AlphabetError + '</strong></font><br />';
                        pwderror = pwderror.replace('<span>','');
                        pwderror =  errMsg + pwderror;
                    }
                    else if(CheckPasswordFormat('#ValidPassword') == 'tooshort')
                    {
                        validation_state = false;
                        errMsg = '<span><font color="#FFFF99"><strong>' + TooShort + '</strong></font><br />';
                        pwderror = pwderror.replace('<span>','');
                        pwderror =  errMsg + pwderror;
                    }
                    jQuery(id).parent().find('.' + options['error_class']).html(pwderror);
               // }
            }

            if (!validation_state) {
                $('#' + self + 'EStatus').val('True');
                if (self == 'ValidDay' || self == 'ValidMonth' || self == 'ValidYear'){
                    self = 'DOB';
                    id = '#BirthdayValidate';
                }
                else if (self == 'ValidateTerms'){
                    id = '#ValidTerms';
                }
                if (mode != 'onChange'){
                    if (ValidationErrors[FormID].join("|").search(id) == -1)
                        ValidationErrors[FormID].push(id);
                    jQuery(id).next('.' + options['error_class']).show();
                }
                if (mode != 'onChange'){
                    jQuery(id).parent().find('.' + options['error_class']).show();
                }
                if (self == 'ValidDay' || self == 'ValidMonth' || self == 'ValidYear'){
                    id = '#' + self;
                }
                $('#lbl' + self).addClass('labelError');
                jQuery(id).addClass('inputError');
                return false;
            }
            else {
                //alert('1#lbl' + self);
                $('#' + self + 'EStatus').val('False');
                jQuery(id).removeClass('inputError');
                jQuery(id).parent().addClass('check');
                if (self == 'ValidDay' || self == 'ValidMonth' || self == 'ValidYear'){
                    self = 'DOB';
                    id = '#BirthdayValidate';
                }
                else if (self == 'ValidateTerms'){
                    id = '#ValidTerms';
                }
                //jQuery('2#lbl' + self);
                jQuery('#sp' + self).hide();
                $('#lbl' + self).removeClass('labelError');
                for (var i = 0; i < ValidationErrors[FormID].length; i++) {
                    if (ValidationErrors[FormID][i] == id)
                        ValidationErrors[FormID].splice(i, 1);
                }
                return true;

            }
        }
    };
})(jQuery);


/**
* @author GeekTantra
* @date 24 September 2009
*/
/*
* This functions checks where an entered date is valid or not.
* It also works for leap year feb 29ths.
* @year: The Year entered in a date
* @month: The Month entered in a date
* @day: The Day entered in a date
*/
function isValidDate(year, month, day) {
    var date = new Date(year, (month - 1), day);
    var DateYear = date.getFullYear();
    var DateMonth = date.getMonth();
    var DateDay = date.getDate();
    
    if (year > 0 && month > 0 && day > 0) {
        CalAge(DateYear, DateMonth, DateDay);
    }
    else{
        $('#spDOB').show();
    }
    return false;
}

/*
* This function checks if there is at-least one element checked in a group of check-boxes or radio buttons.
* @id: The ID of the check-box or radio-button group
*/

function isChecked(id) {
    var ReturnVal = false;
    $("#" + id).find('input[type="radio"]').each(function () {
        if ($(this).is(":checked"))
            ReturnVal = true;
    });
    $("#" + id).find('input[type="checkbox"]').each(function () {
        if ($(this).is(":checked"))
            ReturnVal = true;
    });
    return ReturnVal;
}

function CalAge(year, month, day) {
    var dd = month;
    var mm = day;
    var yy = year;
    var age = 18;

    var mydate = new Date();
    mydate.setFullYear(yy, mm - 1, dd);

    var currdate = new Date();
    currdate.setFullYear(currdate.getFullYear() - age);
    if ((currdate - mydate) < 0) {

        $('#spDOB').show();
        return false;
    }

    else {
        $('#spDOB').hide();
        return true;
    }
}

function formValidation(id, expression, message, errorclass, errorfieldclass) {

    var self = $(id).attr("id");
    var fieldexpression = 'function Validate(){' + expression.replace(/VAL/g, '$(\'#' + self + '\').val()') + '} Validate()';
    var validation_state = eval(fieldexpression);
        
    $('.tip').hide();
    $(".tipborder").each( function() {
        $(this).removeClass("tipborder");
    });
     
    if (self == 'ValidPassword'){
        var pwderror = '<span>' + $('#PasswordError').html() + '</span>';
        jQuery(id).parent().find('.' + errorclass).html(pwderror);
        //if(validation_state == true)
        //{
            //alert(jQuery(id).val() + ' : ' + CheckPasswordFormat('#ValidPassword'));
            var errMsg = '';
            var NumberError = $('#NumberError').val();
            var AlphabetError = $('#AlphabetError').val();
            var TooShort = $('#TooShort').val();

            if(CheckPasswordFormat('#ValidPassword') == 'numeric')
            {
                validation_state = false;
                pwderror = pwderror.replace('<span>','');
                errMsg = '<span><font color="#FFFF99"><strong>' + NumberError + '</strong></font><br />';
                pwderror =  errMsg + pwderror;
                // alert(pwderror);
            }
            else if(CheckPasswordFormat('#ValidPassword') == 'alphabet')
            {
                validation_state = false;
                errMsg = '<span><font color="#FFFF99"><strong>' + AlphabetError + '</strong></font><br />';
                pwderror = pwderror.replace('<span>','');
                pwderror =  errMsg + pwderror;
            }
            else if(CheckPasswordFormat('#ValidPassword') == 'tooshort')
            {
                validation_state = false;
                errMsg = '<span><font color="#FFFF99"><strong>' + TooShort + '</strong></font><br />';
                pwderror = pwderror.replace('<span>','');
                pwderror =  errMsg + pwderror;
            }
            jQuery(id).parent().find('.' + errorclass).html(pwderror);
       // }
    }

    if (self == 'ValidateTerms'){
       id = '#ValidTerms';
    }

    if (!validation_state) {
        $('.' + errorclass).hide();
        $(id).addClass('inputError');
        $('#lbl' + self).addClass('labelError');
        $(id).next('.' + errorclass).show();
        $(id).parent().find('.' + errorclass).show();
        return false;
    }
    else {
        $(id).removeClass('inputError');
        $('#lbl' + self).removeClass('labelError');
        $(id).parent().find('.' + errorclass).hide();
        return true;
    }
}

function passwordChanged(ObjInput) {
    var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
    var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
    var enoughRegex = new RegExp("(?=.{6,}).*", "g");
    var pwd = $(ObjInput);
    var retValue = '';

    if (pwd.val().length == 0) {
        retValue = 'Type Password';
    }
    else if (false == enoughRegex.test(pwd.val())) {
        retValue = 'More Characters';
    }
    else if (strongRegex.test(pwd.val())) {
        retValue = '<span style="color:green">Strong!</span>';
    }
    else if (mediumRegex.test(pwd.val())) {
        retValue = '<span style="color:orange">Medium!</span>';
    }
    else {
        retValue = '<span style="color:red">Weak!</span>';
    }
    return retValue;
}


