Ext.namespace('TA.Validator');

var spot = new Ext.Spotlight({
    easing:'easeOut',
    duration:.3
});

/**
 *  The validation function for validating an Email address
 *  Param: value - The value to be validated
 */
TA.Validator.isValidEmail = function (value) {
    return value.match(/^([\w-\.]+)@((\[\d{1,3}\.\d{1,3}\.\d{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|\d{1,3})(\]?)$/);
};

/**
 *  The validation function for validating a Phone number
 *  Param: value - The value to be validated
 */
TA.Validator.isValidPhoneNumber = function (value) {
    return value.match(/^1?[-. ]?\(?\d{3}\)?[-. ]?\d{3}[-. ]?\d{4}$/) && value != "555-555-5555" && value != "555.555.5555" && value != "555 555 5555";
};

/**
 *  The validation function for validating a Phone number
 *  Param: value - The value to be validated
 */
TA.Validator.isValidPostalCode = function (value) {
    return value.match(/^[0-9]{5}$/) || value.match(/^[0-9]{9}$/);
};

function clearText(id, value) {
    var input = Ext.getDom(id);

    if (input.value == value) {
        input.value = '';
    }
}

function unclear(id, value) {
    var input = Ext.getDom(id);

    if (input.value == '') {
        input.value = value;
    }
}

function showError (obj) {
    obj.className = 'error';
}

function hideError (obj) {
    obj.className = '';
}

var config = {
    inputs: [
        {
            id:'fName',
            required:true,
            type:'none',
            defaultValue:'First Name*'
        },{
            id:'lName',
            required:true,
            type:'none',
            defaultValue:'Last Name*'
        },{
            id:'city',
            required:true,
            type:'none',
            defaultValue:'City*'
        },{
            id:'state',
            required:true,
            type:'none',
            defaultValue:'ST*'
        },{
            id:'postalCode',
            required:true,
            type:'postalcode',
            defaultValue:'ZIP*'
        },{
            id:'email',
            required:true,
            type:'email',
            defaultValue:'Email*'
        }
    ]
};

Ext.onReady(function() {
    if (window.config != undefined && config != null) {
        if (config.inputs != undefined && config.inputs != null) {
            Ext.getDom('form').onsubmit = function () {
                var valid = true;
                for (var i = 0 ; i < config.inputs.length ; i++) {
                    var input = Ext.getDom(config.inputs[i].id);
                    if (config.inputs[i].required) {
                        if (input.value == '' || input.value.toLowerCase() == config.inputs[i].defaultValue.toLowerCase()) {
                            showError(input);
                            valid = false;
                            continue;
                        } else {
                            hideError(input);
                        }
                    }

                    if (input.value == '' || input.value.toLowerCase() == config.inputs[i].defaultValue.toLowerCase()) {
                        continue;
                    }

                    switch (config.inputs[i].type.toLowerCase()) {
                        case 'phone':
                            if (!TA.Validator.isValidPhoneNumber(input.value)) {
                                showError(input);
                                valid = false;
                            } else {
                                hideError(input);
                            }
                            continue;
                        case 'email':
                            if (!TA.Validator.isValidEmail(input.value)) {
                                showError(input);
                                valid = false;
                            } else {
                                hideError(input);
                            }
                            continue;
                        case 'postalcode':
                            if (!TA.Validator.isValidPostalCode(input.value)) {
                                showError(input);
                                valid = false;
                            } else {
                                hideError(input);
                            }
                            continue;
                        default:
                            continue;
                    }
                }

                if (!valid) {
                    Ext.get('error').update('<img src="images/error.png" alt="Please correct errors highlighted below" width="248" height="12"/>');
                    location.hash = '#content';
                } else {
                    Ext.get('error').update('');
                    return true;
                }

                return false;
            };
        }
    }
});
