﻿/// <reference path="spider.js" />
/// <reference path="jquery-1.4.1.js" />

$.extend(spider.validation,
    {
        base: {
            formId: 'formid',
            colorFail: 'yellow',
            colorSuccess: 'white',
            classAlarm: 'alarm',
            classOnly: true
        },

        isValid: function (settings) {
            switch (typeof settings) {
                case 'string':
                    var _settings = spider.utility.create(this.base);
                    _settings.formId = settings;
                    break;

                case 'object':
                    var _settings = settings;
                    spider.utility.setProperties(spider.validation.base, _settings);
                    break;
            };

            var allGood = true;
            var throwFail = function (me, allGood) {
                _settings.classOnly ? me.addClass(_settings.classAlarm) : me.css('background-color', _settings.colorFail);
                $('label[for=' + me.attr('id') + ']').addClass(_settings.classAlarm);
                return false;

            };
            var throwSuccess = function (me) {
                _settings.classOnly ? me.removeClass(_settings.classAlarm) : me.css('background-color', _settings.colorSuccess);
                $('label[for=' + me.attr('id') + ']').removeClass(_settings.classAlarm);
            };

            $('#' + _settings.formId + ' .required').each(function (e, d) {
                switch (d.type) {
                    case 'text': case 'password': case 'textarea':
                        $.trim($(this).val()) == '' ? allGood = throwFail($(this)) : throwSuccess($(this));
                        break;

                    case 'checkbox':
                        $(this).is(':checked') ? throwSuccess($(this)) : allGood = throwFail($(this));
                        break;

                    case 'select-one':
                        d.selectedIndex == 0 ? allGood = throwFail($(this)) : throwSuccess($(this));
                        break;
                };
            });
            return allGood;
        }
    }
);
