//**************************************************************
//  
//  Intelligence, Inc Jquery Plugin
//  Name: validate
//	Desc: Auto Validation based upon class
//
//
//**************************************************************

(function($) {

    function checkClass(currentInput, classSearch) {
        var classes = currentInput.attr('class');
        var classIndex = classes.indexOf(classSearch);
        return classIndex;
    }


    function parseClass(currentInput, classSearch) {

        //Get Substring Starting with our class
        var classes = currentInput.attr('class');
        var classIndex = classes.indexOf(classSearch);
        classes = classes.substring(classIndex);

        //Get end index of our class
        var spaceIndex = classes.indexOf(' ');

        var classAttribute = classes
        if (spaceIndex != -1) {
            classAttribute = classes.substring(0, spaceIndex);
        }

        var classArray = classAttribute.split('@');

        //Get Value
        var validateValue = classArray[1];

        return validateValue

    }


    $.fn.validate = function(options) {

        var defaults = {};

        return this.each(function() {

            var obj = $(this);

            obj.submit(function(e) {

                //INPUT FIELDS
                $(':input', obj).each(function() {

                    var input = $(this);

                    //Required -- class: 'validate_required'
                    if (checkClass(input,'validate_required') != -1) {
                        //If element is a select field
                        if (input.is('select')) {
                            if (input.val() == 0) {
                                e.preventDefault()
                                alert('The first ' + input.attr('name') + ' option is not a valid selection. Please choose one of the other options.');
                                input.focus();
                                return false;
                            }
                        }
                        else {
                            if (input.val() == '') {
                                e.preventDefault()
                                alert('Please enter a value for the ' + input.attr('name') + ' field.');
                                input.focus();
                                return false;
                            }
                        }
                    }

                    //Min Length -- class: 'validate_minlength'
                    //			 -- class@value
                    if (checkClass(input,'validate_minlength@') != -1) {
                        var length = parseClass(input, 'validate_minlength@');
                        if ((input.val() != '') && (input.val().length < length)) {
                            e.preventDefault()
                            alert('Please enter at least ' + length + ' characters in the ' + input.attr('name') + ' field.');
                            input.focus();
                            return false;
                        }
                    }

                    //Max Length -- class: 'validate_maxlength'
                    //			 -- class@value
                    if (checkClass(input,'validate_maxlength@') != -1) {
                        var length = parseClass(input, 'validate_maxlength@');
                        if ((input.val() != '') && (input.val().length > length)) {
                            e.preventDefault()
                            alert('Please enter at most ' + length + ' characters in the ' + input.attr('name') + ' field.');
                            input.focus();
                            return false;
                        }
                    }

                    //Minimum Value -- class: 'validate_minvalue'
                    //			    -- class@value
                    if (checkClass(input,'validate_minvalue@') != -1) {
                        var value = parseClass(input, 'validate_minvalue@');
                        if ((input.val() != '') && (input.val() < value)) {
                            e.preventDefault()
                            alert('Please enter a value greater than or equal to ' + value + ' in the ' + input.attr('name') + ' field.');
                            input.focus();
                            return false;
                        }
                    }

                    //Maximum Value -- class: 'validate_maxvalue'
                    //			    -- class@value
                    if (checkClass(input,'validate_maxvalue@') != -1) {
                        var value = parseClass(input, 'validate_maxvalue@');
                        if ((input.val() != '') && (input.val() > value)) {
                            e.preventDefault()
                            alert('Please enter a value less than or equal to ' + value + ' in the ' + input.attr('name') + ' field.');
                            input.focus();
                            return false;
                        }
                    }

                    //Email -- class: 'validate_email'
                    if (checkClass(input,'validate_email') != -1) {
                        var emailRegExp = /^[\w\.-]*[a-zA-Z0-9]@[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
                        if ((input.val() != '') && (!emailRegExp.test(input.val()))) {
                            e.preventDefault()
                            alert('Please provide a valid email address in the ' + input.attr('name') + ' field.');
                            input.focus();
                            return false;
                        }
                    }


                    //Only Numbers -- class: 'validate_numbers'
                    if (checkClass(input,'validate_numbers') != -1) {
                        var emailRegExp = /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
                        if ((input.val() != '') && (!emailRegExp.test(input.val()))) {
                            e.preventDefault()
                            alert('Please enter only digit characters in the ' + input.attr('name') + ' field.');
                            input.focus();
                            return false;
                        }
                    }

                    //Only Letters,Numbers -- class: 'validate_lettersnumbers'
                    if (checkClass(input,'validate_lettersnumbers') != -1) {
                        var emailRegExp = /^[a-zA-Z0-9]+$/;
                        if ((input.val() != '') && (!emailRegExp.test(input.val()))) {
                            e.preventDefault()
                            alert('Please enter only letter and digit characters in the ' + input.attr('name') + ' field.');
                            input.focus();
                            return false;
                        }
                    }

                    //Only Currency -- class: 'validate_currency
                    if (checkClass(input,'validate_currency') != -1) {
                        var emailRegExp = /^\$?[0-9][0-9\,]*(\.\d{1,2})?$|^\$?[\.]([\d][\d]?)$/;
                        if ((input.val() != '') && (!emailRegExp.test(input.val()))) {
                            e.preventDefault()
                            alert('Please enter a valid currency amount in the ' + input.attr('name') + ' field.');
                            input.focus();
                            return false;
                        }
                    }


                });

            });

        });

    };
})(jQuery);

