﻿hasValidEmail = function(elem)
{
    return isValidEmail(elem.val());
}

isValidEmail = function(src)
{
    var emailReg = "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$";
    var regex = new RegExp(emailReg);
    return regex.test(src);
} 

hasValue = function (elem)
{
    return elem.val() != '';
}

isValidDate = function(day,month,year)
{   
    return isDate(day + "/" + month + "/" + year);
}

isDate = function(dateStr)
{
    var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
    var matchArray = dateStr.match(datePat); // is the format ok?

    if (matchArray == null)
    {
        log('Please enter your birth date as dd/mm/yyyy. Your current selection reads: ' + dateStr);
        return false;
    }

    day = matchArray[1]; // parse date into variables
    month = matchArray[3];
    year = matchArray[5];

    if (month < 1 || month > 12)
    {
        // check month range
        log('Month must be between 1 and 12.');
        return false;
    }

    if (day < 1 || day > 31)
    {
        log('Day must be between 1 and 31.');
        return false;
    }

    if ((month==4 || month==6 || month==9 || month==11) && day==31)
    {
        log('Month ' +month+ " doesn't have 31 days!");
        return false;
    }

    if (month == 2)
    {
        // check for february 29th
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day > 29 || (day==29 && !isleap))
        {
            log("February " + year + " doesn't have " + day + " days!");
            return false;
        }
    }
    return true; // date is valid
}

validationFeedback = function (el,isValid)
{
    if(!isValid)
    {
        el.parent().addClass('error');
    }
    else
    {
       el.parent().removeClass('error');
    }
}

validateControlRequired = function(control)
{
    if(!hasValue(control))
    {
        control.parent().addClass('error');    
        formIsValid  = false;
    }
    else
    {
        control.parent().removeClass('error');    
    }
}


/*   ---------------  extend jquery for validation ----------------- */

jQuery.fn.extend({
    validator : function(valfn)
    {
        var el = this;
        var id = el.attr('id');
        if(typeof(el.validators[id]) == 'undefined')
        {
            el.validators[id] = $.makeArray();
            el.validators[id].push(valfn);
        }
        else
        {
            el.validators[id].push(valfn);
        }
        return el;
    },
    validate : function(options)
    {
        var opt = { cssclass: "error"};
        $.extend(opt,options);

        var isValid = true;
        var el = this;
        var id = el.attr('id');
        log('validating: ' + id);
        for(var i=0;i < el.validators[id].length; i++)
        {
            if(el.validators[id])
            {
                var valfn = el.validators[id][i];
                if(!valfn(el))
                {
                    isValid = false;
                }
            }
        }
        
        if(isValid)
        {
            el.removeClass(opt.cssclass);
        }
        else
        {
            el.addClass(opt.cssclass);
        }

        if(el.feedbacks[id].length > 0)
        {
            for(var i=0;i < el.feedbacks[id].length; i++)
            {
                el.feedbacks[id][i](el,isValid);
            }
        }
        else if(isValid)
        {
            el.removeClass(opt.cssclass);
        }
        else if(!isValid)
        {
            el.addClass(opt.cssclass);
        }
        return isValid;
    },
    validateall : function(options)
    {
        var el = this;
        var opt = { cssclass: "error"};
        $.extend(opt,options);

        var isValid = true;
        for(elem in el.validators)
        {
            if(!$('#' + elem).validate())
            {
                isValid = false;
            }
        }
        
        return isValid;
    },
    feedback : function(feedbackfn)
    {
        var el = this;
        var id = el.attr('id');
        if(typeof(el.feedbacks[id]) == 'undefined')
        {
            el.feedbacks[id] = $.makeArray();
            el.feedbacks[id].push(feedbackfn);
        }
        else
        {
            el.feedbacks[id].push(feedbackfn);
        }
        return el;
    }
});

$.fn.validators = $.makeArray();
$.fn.feedbacks = $.makeArray();