﻿Ext.ns("TGS.EmailCapture");

TGS.EmailCapture.Init = function(remoteAddr, serverName, uri,
                                        letterWebsiteID, newsLetterType,
                                        newsLetterHandlerURL, externalVendorURL, websiteName,
                                        defaultEmailText, defaultAirportText,
                                        errTxtEnterEmail, errTxtValidEmail, errTxtSubmitServer, errTxtSubmitExternalVendor,
                                        suggestLocClientID) {

    TGS.EmailCapture.RemoteAddr = remoteAddr;
    TGS.EmailCapture.ServerName = serverName;
    TGS.EmailCapture.Uri = uri;
    TGS.EmailCapture.LetterWebsiteID = letterWebsiteID;
    TGS.EmailCapture.NewsLetterType = newsLetterType;
    TGS.EmailCapture.NewsLetterHandlerURL = newsLetterHandlerURL;

    TGS.EmailCapture.ExternalVendorURL = externalVendorURL;
    TGS.EmailCapture.WebsiteName = websiteName;

    TGS.EmailCapture.DefaultEmailText = defaultEmailText;
    TGS.EmailCapture.DefaultAirportText = defaultAirportText;

    TGS.EmailCapture.ErrTxtEnterEmail = errTxtEnterEmail;
    TGS.EmailCapture.ErrTxtValidEmail = errTxtValidEmail;
    TGS.EmailCapture.ErrTxtSubmitServer = errTxtSubmitServer;
    TGS.EmailCapture.ErrTxtSubmitExternalVendor = errTxtSubmitExternalVendor;

    TGS.EmailCapture.SuggestLocClientID = suggestLocClientID;

    TGS.EmailCapture.EmailAddress = '';
    TGS.EmailCapture.HomeAirportInfo = '';
}


TGS.EmailCapture.SetPopupDisplayed = function(visible) {
    var signupPopup = Ext.get("sigup_popup");

    signupPopup.setDisplayed(visible);
    if (visible) {
        var signup = Ext.get("signup");
        // Set popup position
        signupPopup.setX(signup.getLeft() + signup.getWidth() - signupPopup.getWidth());
        signupPopup.setY(signup.getTop() + signup.getHeight() + 50);
    }
}

TGS.EmailCapture.IsErrorPopupDisplayed = function() {
    return Ext.get("sigup_popup").isVisible() && Ext.get("divSignupError").isVisible();
}

TGS.EmailCapture.SetErrorPopupDisplayed = function(visible, errMessage) {
    if (visible) {
        // Hide all signup content
        Ext.get("divSignupContent").setDisplayed(false);
        Ext.get(TGS.EmailCapture.SuggestLocClientID).setDisplayed(false);
        Ext.get("btnSubmitHomeAirport").setDisplayed(false);

        // Set error message
        var divSignupError = Ext.get("divSignupError");
        divSignupError.setDisplayed(true);
        divSignupError.update(errMessage);
    }

    TGS.EmailCapture.SetPopupDisplayed(visible);
}

TGS.EmailCapture.SetSignupPopupDisplayed = function(visible) {
    if (visible) {
        // Hide error message
        Ext.get("divSignupError").setDisplayed(false);

        // Show all signup popup content
        Ext.get("divSignupContent").setDisplayed(true);
        var autoSuggestLocation = Ext.get(TGS.EmailCapture.SuggestLocClientID);
        autoSuggestLocation.setDisplayed(true);
        autoSuggestLocation.dom.value = TGS.EmailCapture.DefaultAirportText;
        Ext.get("btnSubmitHomeAirport").setDisplayed(true);
    }

    TGS.EmailCapture.SetPopupDisplayed(visible);

    // Post the submitted data to server in order to be saved into DB and to be posted to external vendor
    if (!visible && !Ext.get("divSignupError").isDisplayed())
        TGS.EmailCapture.PostSubmittedDataToServer(true);
}

TGS.EmailCapture.ValidateEmailAddress = function() {
    var signupEmail = Ext.get("signup_email");
    // Validate if an email address was entered
    if (signupEmail.getValue().trim() == TGS.EmailCapture.DefaultEmailText)
        return TGS.EmailCapture.ErrTxtEnterEmail;

    // Validate email address formating
    if (!signupEmail.getValue().trim().match(new RegExp("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$")))
        return TGS.EmailCapture.ErrTxtValidEmail;

    // Set the valid email address
    TGS.EmailCapture.EmailAddress = signupEmail.getValue().trim();

    // return empty error message
    return '';
}

TGS.EmailCapture.SendNewsLetterRequest = function(isSubmitEmailAddress) {
    if (isSubmitEmailAddress) {
        var err = TGS.EmailCapture.ValidateEmailAddress();
        if ('' != err) {
            // Show email error popup
            TGS.EmailCapture.SetErrorPopupDisplayed(true, err);
            return;
        }
        // Post the submitted data to server in order to be saved into DB
        TGS.EmailCapture.PostSubmittedDataToServer(false);
    }
    else {
        if (Ext.get(TGS.EmailCapture.SuggestLocClientID).getValue().trim() == TGS.EmailCapture.DefaultAirportText) {
            // Hide signup popup
            TGS.EmailCapture.SetSignupPopupDisplayed(false);
            return;
        }
        else {
            var airportAutoSuggestLocation = Ext.get(TGS.EmailCapture.SuggestLocClientID + "_SelectedValue");
            if (airportAutoSuggestLocation.getValue() != null && airportAutoSuggestLocation.getValue().trim().length != 0)
                TGS.EmailCapture.HomeAirportInfo = airportAutoSuggestLocation.getValue().trim().split('%')[0];
            else {
                // Hide signup popup
                TGS.EmailCapture.SetSignupPopupDisplayed(false);
                return;
            }
        }
    }

    TGS.EmailCapture.SetSignupPopupDisplayed(isSubmitEmailAddress);
}

TGS.EmailCapture.PostSubmittedDataToServer = function(toExternalVendor) {
    try {
        var qs = '?LETTERWSID=' + TGS.EmailCapture.LetterWebsiteID +
            '&LETTERTYPE=' + TGS.EmailCapture.NewsLetterType;

        var protocol = TGS.EmailCapture.NewsLetterHandlerURL.toLowerCase().indexOf('https') === -1 ? 'http://' : 'https://';

        Ext.Ajax.request({ url: TGS.EmailCapture.NewsLetterHandlerURL + qs, method: 'POST',
            params: { IPADDRESS: encodeURI(TGS.EmailCapture.RemoteAddr),
                OPT_IN_URL: encodeURI(protocol + TGS.EmailCapture.ServerName + TGS.EmailCapture.Uri),
                EMAILADDRESS: encodeURI(TGS.EmailCapture.EmailAddress),
                HOME_AIRPORT_INFO: encodeURI(TGS.EmailCapture.HomeAirportInfo),
                EXTERNAL_VENDOR: '' + toExternalVendor
            },
            failure: function(response) {
                // Show error popup
                //TGS.EmailCapture.SetErrorPopupDisplayed(true, TGS.EmailCapture.ErrTxtSubmitServer);
            }
        });

        if (toExternalVendor) {
            // Reset submit data with default values
            TGS.EmailCapture.EmailAddress = '';
            TGS.EmailCapture.HomeAirportInfo = '';
            Ext.get("signup_email").dom.value = TGS.EmailCapture.DefaultEmailText;
        }
    } catch (e) {
        // Show error popup
        TGS.EmailCapture.SetErrorPopupDisplayed(true, TGS.EmailCapture.ErrTxtSubmitServer);
        TGS.EmailCapture.HomeAirportInfo = '';
    }
}
