var panel;
var formIsValid = false;
var submitted = false;
var formOriginalCss = new Object();
var formHeight;
var formFooterPosition;
var intervalID;

jQuery(hookupSignup);

function hookupSignup() {
    jQuery('a#sign_up').live('click', toggleAtFooter);
    jQuery('img#on_the_house_img').live('click', toggleAtOffers);
    jQuery('#load_terms_btn').live('click', popupTerms);
    jQuery('#privacyLink').live('click', popupTerms);
    jQuery('#signup_button').live('click', trySubmit);
    jQuery('#close_link').live('click', hideSignupPanel);
    jQuery('#children_count').live('click', handleChildrenCountChange);   
    
    resetValidation();
    handleChildrenCountChange();

    panel = jQuery('#signup-panel');
    panel.find('.hide a').live('click', hideSignupPanel);
    panel.css({ 'z-index': 10000 });

    panel.show();
    formOriginalCss = panel.position();
    formOriginalCss.height = panel.height();
    formOriginalCss.width = panel.width();
    panel.hide();
}

function popupTerms() {
    window.open("http://www.pizzaexpress.com/privacy-policy.aspx",
                "terms", 
                "status = 0, height = 450, width = 600, resizable = 0, scrollbars = 1");
}

function handleChildrenCountChange() {
    number_of_kids = jQuery('#children_count').val();
    for (i = 1; i <= 6; i++) {
        if (number_of_kids < i) {
            jQuery('#child_' + i).hide();
        } else {
            jQuery('#child_' + i).show();
        }
    }
}

function trySubmit() {
    validateForm();
    if (formIsValid) {
        submitSignupForm();
        showThankYou();
        startAutoClose();
    } else {
        gotoTopOfForm();
    }
}

function showThankYou() {
    $.ajax({ type: "GET",
        url: '/talk-to-us/thank-you.aspx',
        dataType: "html",
        success: function(data) {
            jQuery('div#formContent').replaceWith(data);
        }
    }); 
}

function validateForm() {
    resetValidation();
    if (jQuery('#title').val() == '' ||
        jQuery('#title').val() == 0) {
        addErrorToErrorList('Title');
    }

    if (jQuery('#forename').val() == '') {
        addErrorToErrorList('Forename');
    }
    
    if (jQuery('#surname').val() == '') {
        addErrorToErrorList('Surname');
    }

    if (! emailIsValid(jQuery('#email').val())) {
        addErrorToErrorList('Email');
    }

    if (! postcodeIsValid(jQuery('#postcode').val())) {
        addErrorToErrorList('Postcode');
    }

    if (jQuery('#opt_in:checked').val() != 'on') {
        showAcceptTerms();
    }
}

function emailIsValid(val) {
    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    return (reg.test(val));
}

function postcodeIsValid(val) {
    var reg = /^([a-pr-uqyzA-PR-UWYZ0-9][a-hk-yA-HK-Y0-9][aehmnprtvxyAEHMNPRTVXY0-9]?[abehmnprvwxyABEHMNPRVWXY0-9]? {1,2}[0-9][abd-hjln-uw-zABD-HJLN-UW-Z]{2}|GIR 0AA)$/;
    return (reg.test(val));
}

function addErrorToErrorList(error) {
    formIsValid = false;
    showFormIncompleteError();
    jQuery("<li>" + error + "</li>").appendTo("#errorList");
}

function gotoTopOfForm() {
    jQuery.scrollTo('#signup-panel', 800, { easing: 'easeOutQuint' });
}

function showFormIncompleteError() {
    jQuery('#errors').show();
    jQuery('#formInvalidText').show();
    jQuery('#errorList').show();
}

function showAcceptTerms() {
    formIsValid = false;
    jQuery('#errors').show();
    jQuery('#acceptTermsText').show();
}

function resetValidation() {
    formIsValid = true;
    jQuery('#errors').hide();
    jQuery("#errorList").html('');
    jQuery('#errorList').hide();
    jQuery('#acceptTermsText').hide();
    jQuery('#formInvalidText').hide();
}

function submitSignupForm() {
    PizzaExpress.Core.Web.MailListManager.SendSignupForm("48", getFormAsObject());
    submitted = true;
}

function getFormAsObject() {
    var formVars = new Object();
    formVars.field6 = jQuery('#email').val();
    formVars.field7 = jQuery('#title').val();
    formVars.field8 = jQuery('#forename').val();
    formVars.field9 = jQuery('#surname').val();
    formVars.field10 = jQuery('#postcode').val();
    formVars.field11 = jQuery('#dob_day').val();
    formVars.field12 = jQuery('#dob_month').val();
    formVars.field13 = jQuery('#dob_year').val();
    formVars.field14 = jQuery('#children_count').val();
    formVars.field15 = jQuery('#child_age_1').val();
    formVars.field16 = jQuery('#child_age_2').val();
    formVars.field17 = jQuery('#child_age_3').val();
    formVars.field18 = jQuery('#child_age_4').val();
    formVars.field19 = jQuery('#child_age_5').val();
    formVars.field20 = jQuery('#child_age_6').val();
    formVars.field21 = jQuery('#mobile').val();
    formVars.field22 = jQuery('#pizzas_at_home').val();
    return formVars;
    
}

function hideSignupPanel() {
    clearInterval(intervalID);
    panel.hide();
}

function closeThankYouPanel(event) {
    event.preventDefault();
    panel.hide();
}

function hideSignupPanelIfSubmitted() {
    if (submitted) {
        hideSignupPanel();
    }
}

function startAutoClose() {
    intervalID = setInterval(hideSignupPanelIfSubmitted, 10000);
}

function toggleSignupPanel() {
    panel.toggle();
    if (panel.is(':visible')) { gotoTopOfForm(); }
    if (submitted) { startAutoClose(); }
        
    // re-apply sIFR as it can't complete this on page load due to the popup being hidden
    applyGeneralHeadings();
}

function toggleAtOffers(event) {
    panel = jQuery('#signup-panel').remove();
    jQuery('body').append(panel);

    var offersX = jQuery('#side').offset().left - panel.width() - 30;
    var offersY = jQuery('#on_the_house_img').offset().top;

    panel.css({ 'top': offersY });
    panel.css({ 'left': offersX });

    toggleSignupPanel();
    event.preventDefault();
}

function toggleAtFooter(event) {
    panel = jQuery('#signup-panel').remove();
    jQuery('#sign_up_wrap').append(panel);
    panel.css({ 'top': formOriginalCss.top });
    panel.css({ 'left': formOriginalCss.left });

    toggleSignupPanel();
    event.preventDefault();
}
