var trimRe = /^\s+|\s+$/g;
var lang = {
    en: {
        required_field: 'Required Field',
        invalid_email: 'Invalid email address'
    }
};

function validateFields() {
    var submitButton = Ext.select('.x-form-submit input').elements[0];
    submitButton.disabled = true;
    
    var omniture = s;
    try {
        required_fields.each(function(o) { o.validate(); });
        emails.each(function(o) { o.validate(); });
    } catch (e) { }
    var errors = Ext.select('.error-text');

    if (errors.getCount() > 0) {
        var id = errors.elements[0].id;
        var newid = id.substr(0, id.length - 6);
        try {
            Ext.get(newid).focus();
        } catch (e) { }
        errors.each(function(o, i, idx) {
            var id = o.dom.id.substr(0, o.dom.id.length - 6);
            if (id == 'email') { omniture.sendFormEvent('e', '', App.FormId, 'Email'); }
            if (id == 'country') { omniture.sendFormEvent('e', '', App.FormId, 'Country'); }
            if (id == 'firstname') { omniture.sendFormEvent('e', '', App.FormId, 'First Name'); }
            if (id == 'lastname') { omniture.sendFormEvent('e', '', App.FormId, 'Last Name'); }
            if (id == 'address1') { omniture.sendFormEvent('e', '', App.FormId, 'Address 1'); }
            if (id == 'address2') { omniture.sendFormEvent('e', '', App.FormId, 'Address 2'); }
            if (id == 'city') { omniture.sendFormEvent('e', '', App.FormId, 'City'); }
            if (id == 'zip') { omniture.sendFormEvent('e', '', App.FormId, 'Zip Code'); }
            if (id == 'kit') { omniture.sendFormEvent('e', '', App.FormId, 'Publishing Kit'); }
        });
        submitButton.disabled = false;
        return false;
    } else {
        return true;
    }
}


function trim(value) {
    return String(value).replace(trimRe, "");
}

function isValidEmail(email) {
    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    if (reg.test(email) == false) {
        return false;
    }
    return true;
}

function alignTo(obj, toObj) {
    obj.setX(toObj.getX() + toObj.getWidth() + 1);
    obj.setY(toObj.getY() + 2);
}

function showError(text, el) {
    // if error is visible do not create
    if (Ext.get(el + '-error')) return;

    var dh = Ext.DomHelper;
    // var tag = dh.markup({ tag: 'div', cls: 'error-text', id: el + '-error', html: '<div class="close-button">&nbsp;</div> ' + text });
    var tag = dh.markup({ tag: 'div', cls: 'error-text', id: el + '-error', html: text });
    var dom = dh.append('body', tag);
    var obj = Ext.get(dom);
    if (el == "firstname") {
        alignTo(obj, Ext.get('lastname'));
    } else {
        alignTo(obj, Ext.get(el), 0, 0);
    }
    // obj.alignTo(el, 'tr-tl', [-87, 2]);
}

function removeError(id) {
    try {
        var el = Ext.get(id + '-error');
        el.remove();
    } catch (e) { }
}



var required_fields, emails;
var littleConfig = Ext.isIE ? { delay: 2000 } : {};

Ext.onReady(function() {
    var country = Ext.get('country');
    var stateUs = Ext.get('state-us');
    var stateCanada = Ext.get('state-canada');
    var stateOther = Ext.get('state-other');

    function stateEnable(s) {
        s.dom.disabled = false;
        s.removeClass('hidden');
    }

    function stateDisable(s) {
        s.dom.disabled = true;
        s.addClass('hidden');
    }

    function countryChanged() {
        var value = country.getValue();
        if (value == 'US') {
            stateEnable(stateUs);
            //stateUs.dom.value = data.state;
            stateDisable(stateCanada);
            stateDisable(stateOther);
        } else if (value == 'CA') {
            stateEnable(stateCanada);
            //stateCanada.dom.value = data.state;
            stateDisable(stateUs);
            stateDisable(stateOther);
        } else {
            stateEnable(stateOther);
            //stateOther.dom.value = data.state;
            stateDisable(stateUs);
            stateDisable(stateCanada);
        }
    }
    
    country.dom.value = data.country;
    country.dom.onchange = countryChanged;
    countryChanged();
    Ext.get('firstname').focus();
    Ext.get('firstname').dom.select();
    //Ext.get('gogreen').dom.checked = data.goGreen;
    Ext.get('updates').dom.checked = data.updates;
    Ext.get('kit').dom.value = data.kit;

    required_fields = Ext.select('.x-required');
    emails = Ext.select('.x-email');

    function requiredEvent(e, dom) {
        var t = e.getTarget();
        if (trim(t.value) == "") {
            showError(lang.en.required_field, t.id);
        } else {
            removeError(t.id);
        }
    }

    required_fields.each(function(o, els, idx) {
        o.validate = function() {
            if (trim(this.dom.value) == "") {
                showError(lang.en.required_field, this.dom.id);
            } else {
                removeError(this.dom.id);
            }
        };
        o.on('keyup', requiredEvent);
        o.on('change', requiredEvent);
    });


    function emailEvent(e, dom) {
        var t = e.getTarget();
        removeError(t.id);
        if (trim(t.value) == "") {
            showError(lang.en.required_field, t.id);
        } else if (!isValidEmail(t.value)) {
            showError(lang.en.invalid_email, t.id);
        }
    }

    emails.each(function(o, i) {
        o.validate = function() {
            removeError(this.dom.id);
            if (trim(this.dom.value) == "") {
                showError(lang.en.required_field, this.dom.id);
            } else if (!isValidEmail(this.dom.value)) {
                showError(lang.en.invalid_email, this.dom.id);
            }
        };
        o.on('keyup', emailEvent)
    });


}, this, littleConfig);