﻿var _serviceName = "/webservices/ACEMethods.svc";

(function(a) {
    $.browser.mobile = /android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i .test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i .test(a.substr(0, 4))
})(navigator.userAgent || navigator.vendor || window.opera);

function DetectMobile() {
    return $.browser.mobile;
}

function ConvertKeyValueArrayToJSONString(object) {

    return JSON.stringify(object);
}

function ConvertKeyValueArrayToRESTString(object) {
    var ret = "/";
    
    for (var key in object) 
    {
        if (object.hasOwnProperty(key)) 
        {
            var obj = object[key];

            ret += obj + "/";
        }
    }

    if (ret.length > 1)
        ret = ret.substring(0, ret.length - 1);

    return ret;
}

function DoJSONGetCall(serviceName, methodName, keyValuePairCollection, onSuccess, onFailure) {
    
    $.ajax(
        {
            type: "GET",
            url: serviceName + "/" + methodName + ConvertKeyValueArrayToRESTString(keyValuePairCollection),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: onSuccess,
            error: onFailure
        });
    }

function DoJSONPostCall(serviceName, methodName, keyValuePairCollection, onSuccess, onFailure, isAsync) {

    $.ajax(
    {
        type: "POST",
        url: "http://" + window.location.hostname + serviceName + "/" + methodName,
        data: ConvertKeyValueArrayToJSONString(keyValuePairCollection),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: onSuccess,
        error: onFailure,
        async: isAsync
    });
}

function DoJSONSecurePostCall(serviceName, methodName, keyValuePairCollection, onSuccess, onFailure) {
   
    $.ajax(
    {
        type: "POST",
        url: "https://" + window.location.hostname + serviceName + "/" + methodName,
        data: ConvertKeyValueArrayToJSONString(keyValuePairCollection),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: onSuccess,
        error: onFailure
    });
}


function ClickButtonOnEnter(e, buttonId) {
    var event = e ? e : window.event;
    var buttonToClick = RetrieveObjectId(buttonId);
    if (buttonToClick) {
        if (event.keyCode == 13) {
            $(buttonToClick).click();
            return false;
        }
    }
}

function S4() {
    return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}

// This is NOT an actual guid, but it will work for what we need it to do.

function guid() {
    return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
}

function DoBackgroundLogin(loginControlId) {
    var loginControl = RetrieveObjectId(loginControlId + '_dLoginWrapper');
    var lLogin = $(loginControl).find('*').find('[id*="bLogin"]');

    Login(lLogin);
}

function GetBrowserWindowSize() {
    var myWidth = 0, myHeight = 0;
    if (typeof (window.innerWidth) == 'number') {
        //Non-IE
        myWidth = window.innerWidth;
        myHeight = window.innerHeight;
    } else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
        //IE 6+ in 'standards compliant mode'
        myWidth = document.documentElement.clientWidth;
        myHeight = document.documentElement.clientHeight;
    } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
        //IE 4 compatible
        myWidth = document.body.clientWidth;
        myHeight = document.body.clientHeight;
    }

    return { Width: myWidth, Height: myHeight };
}

function GetJRefOfControl(clientId, controlName) {
    return $('#' + clientId + '_' + controlName);
}

function GetValOfControl(clientId, controlName) {
    return GetJRefOfControl(clientId, controlName).val();
}

function SubmitFeedback(clientId, javaScriptOnComplete, custnmbr, currentDate, entityTypeId) {
        BeginFeedbackSubmit(clientId);

        var browser = $.client.browser;
        var browserversion = $.client.browserversion;
        var os = $.client.os;
        var activityTypeId = 70;
        var entityTypeID = entityTypeId;
        var entityLink = custnmbr;
        var activitySubject = 'Feedback - ' + GetValOfControl(clientId, 'ddlCategory');
        var activityDate = currentDate;
        var feedback = GetValOfControl(clientId, 'tbFeedback');
        
        $.get('/myace/activity-generator.aspx?docreate=true'
            + '&activitytypeid=' + activityTypeId
            + '&entitytypeid=' + entityTypeID
            + '&entitylink=' + entityLink
            + '&activitySubject=' + activitySubject
            + '&activityDate=' + activityDate
            + '&activitytext=' + feedback
            + '&browser=' + browser
            + '&browserversion=' + browserversion
            + '&os=' + os
            + '&sourcewebpage=' + window.location.pathname
            , function (data) {
                ShowFeedbackStatus(data, clientId, javaScriptOnComplete);
            });

        return false;
    }
    
    function BeginFeedbackSubmit(clientId) {
        var dLogin = GetJRefOfControl(clientId, 'dLogin');
        var dFeedback = GetJRefOfControl(clientId, 'dFeedback');
        var dStatus = GetJRefOfControl(clientId, 'dStatus');
        var lblStatus = GetJRefOfControl(clientId, 'lblStatus');
        var imgProgress = GetJRefOfControl(clientId, 'imgProgress');
        
        lblStatus.text('Sending feedback...');
        imgProgress.show();
        
        dLogin.hide();
        dFeedback.hide();
        dStatus.show();      
    }
    
    function ResetFeedbackSubmit(clientId) {
        var dFeedback = GetJRefOfControl(clientId, 'dFeedback');
        var dStatus = GetJRefOfControl(clientId, 'dStatus');
        
        dStatus.hide();
        dFeedback.show('200');   
    }

    function ShowFeedbackStatus(data, clientId, javaScriptOnComplete) {
        var activityCreatedSuccessfully = $(data).find('#lblWasSuccessful').text() == 'True';
        var status = $(data).find('#lblStatusMessage').text();
        var lblStatus = GetJRefOfControl(clientId, 'lblStatus');
        var imgProgress = GetJRefOfControl(clientId, 'imgProgress');
        
        var dLogin = GetJRefOfControl(clientId, 'dLogin');
        var dFeedback = GetJRefOfControl(clientId, 'dFeedback');
        var dStatus = GetJRefOfControl(clientId, 'dStatus');
        
        imgProgress.hide('200');
        
        if(activityCreatedSuccessfully)
        {
            lblStatus.text('Feedback sent. Thank you!');
            GetJRefOfControl(clientId, 'tbFeedback').val('');
            
            if(javaScriptOnComplete != '')
            {
                eval(javaScriptOnComplete);
            }
        }
        else if(status == 'Login required') {
            dFeedback.hide();
            dStatus.hide();
            dLogin.show('200');

            return;
        }
        else {
            lblStatus.text(status);
        }

        setTimeout('ResetFeedbackSubmit(\'' + clientId + '\')', 3000);
    }

function Login(clientId) {

    var ret = true;
    var doPostBack = GetValOfControl(clientId, 'hfDoPostBack');
    var redirectURL = GetValOfControl(clientId, 'hfRedirectURL');
    var javaScriptOnComplete = GetValOfControl(clientId, 'hfJavaScriptOnComplete');
    var javaScriptOnFailure = GetValOfControl(clientId, 'hfJavaScriptOnFailure');
    var javaScriptOnLoginInitiated = GetValOfControl(clientId, 'hfJavaScriptOnLoginInitiated');
    var email = GetValOfControl(clientId, 'tbEmailAddress');
    var password = GetValOfControl(clientId, 'tbPassword');
    var dLoginWrapper = GetJRefOfControl(clientId, 'dLoginWrapper');
    var lblLoginError = GetJRefOfControl(clientId, 'lblLoginError');
    var hfCustnmbr = GetJRefOfControl(clientId, 'hfCustnmbr');
    var imgProgress = GetJRefOfControl(clientId, 'imgProgress');
    
    if (doPostBack == 'False') {

        if (javaScriptOnLoginInitiated != null) {
            eval(javaScriptOnLoginInitiated);
        }
        
        ret = false;

        var params = {
            email: email
            , password: password
        };

        dLoginWrapper.hide('slow');
        lblLoginError.text('Please wait...');
        lblLoginError.show('slow');
        imgProgress.show();

        DoJSONPostCall(_serviceName, "Login", params,

            function (msg) {

                if (msg.WasSuccessful) {
                    imgProgress.hide();
                    lblLoginError.text("Login Successful!");
                    hfCustnmbr.val(msg.ResultMessage);

                    if (javaScriptOnComplete != '') {
                        lblLoginError.text('');
                        eval(unescape(javaScriptOnComplete));
                    }
                    if (redirectURL != '')
                    // Stupid method call to fix an even more stupid IE browser bug
                        window.setTimeout(function () { window.location.href = redirectURL; }, 0);
                } else {
                    imgProgress.hide();
                    lblLoginError.show('slow');
                    lblLoginError.text(msg.ResultMessage);

                    if (javaScriptOnFailure != '') {
                        eval(unescape(javaScriptOnFailure));
                    }

                    setTimeout('ResetLoginControl(\'' + clientId + '\')', 7000);
                }

            }, function (msg) {
                imgProgress.hide();
                lblLoginError.show('slow');
                lblLoginError.text('Unable to login. Please verify your login information is correct.');

                setTimeout('ResetLoginControl(\'' + clientId + '\')', 7000);
            });
    }

    return ret;
}

function GetRandomBetweenRange(from, to) {
    return Math.floor(Math.random() * (to - from + 1) + from);
}

function CreateAccount(clientId) {

    var ret = true;
    
    var doPostBack = GetValOfControl(clientId, 'hfDoPostBack');
    var redirectURL = GetValOfControl(clientId, 'hfRedirectURL');
    var javaScriptOnComplete = GetValOfControl(clientId, 'hfJavaScriptOnComplete');
    var email = GetValOfControl(clientId, 'tbEmail');
    var password = GetValOfControl(clientId, 'tbPassword');
    var confirmPassword = GetValOfControl(clientId, 'tbPasswordConfirm');
    var firstName = GetValOfControl(clientId, 'tbFirstName');
    var lastName = GetValOfControl(clientId, 'tbLastName');
    var isDev = GetValOfControl(clientId, 'hfIsDev');
    var owner = GetValOfControl(clientId, 'hfOwner');
    var dCreateAccountWrapper = GetJRefOfControl(clientId, 'dCreateAccountWrapper');
    var lblCreateAccountErrorText = GetJRefOfControl(clientId, 'lblCreateAccountErrorText');
    var hfCustnmbr = GetJRefOfControl(clientId, 'hfCustnmbr');
    var imgProgress = GetJRefOfControl(clientId, 'imgProgress');

    if (doPostBack == 'False') {

        ret = false;

        var params = {
            email: email
            , password: password
            , confirmPassword: confirmPassword
            , firstName: firstName
            , lastName: lastName
            , aceOnlyOwner: owner
            , isDevValue: isDev
        };

        dCreateAccountWrapper.hide('slow');
        lblCreateAccountErrorText.text('Please wait...');
        lblCreateAccountErrorText.show('slow');
        imgProgress.show();

        DoJSONPostCall(_serviceName, "CreateAccount", params,

            function (msg) {

                if (msg.WasSuccessful) {
                    imgProgress.hide();
                    lblCreateAccountErrorText.text("Account Creation Successful!");
                    hfCustnmbr.val(msg.ResultMessage);

                    if (javaScriptOnComplete != '') {
                        lblCreateAccountErrorText.text('');
                        eval(javaScriptOnComplete);
                    }
                    if (redirectURL != '')
                        window.location.href = redirectURL;
                } else {
                    imgProgress.hide();
                    lblCreateAccountErrorText.show('slow');
                    lblCreateAccountErrorText.text(msg.ResultMessage);

                    setTimeout('ResetCreateAccountControl(\'' + clientId + '\')', 7000);
                }

            }, function (msg) {
                imgProgress.hide();
                lblCreateAccountErrorText.show('slow');
                lblCreateAccountErrorText.text('Unable to create account. Please verify your account information is correct.');

                setTimeout('ResetCreateAccountControl(\'' + clientId + '\')', 7000);
            });
    }

    return ret;
}

function ResetLoginControl(clientId) {
    
    var dLoginWrapper = GetJRefOfControl(clientId, 'dLoginWrapper');
    var lblLoginError = GetJRefOfControl(clientId, 'lblLoginError');
    
    lblLoginError.text('');
    lblLoginError.hide();
    dLoginWrapper.show('slow');
}

function ResetCreateAccountControl(clientId) {

    var dCreateAccountWrapper = GetJRefOfControl(clientId, 'dCreateAccountWrapper');
    var lblCreateAccountErrorText = GetJRefOfControl(clientId, 'lblCreateAccountErrorText');

    lblCreateAccountErrorText.text('');
    lblCreateAccountErrorText.hide();
    dCreateAccountWrapper.show('slow');
}

function InitDecimalBox(controlId, selectedValue) {
    var tbMinutes = $(RetrieveObjectId(controlId + '_tbMinutes'));
    var tbSeconds = $(RetrieveObjectId(controlId + '_tbSeconds'));
    var iMinutes = $(RetrieveObjectId('iMinutes_' + controlId));
    var iSeconds = $(RetrieveObjectId('iSeconds_' + controlId));

    iMinutes.val(tbMinutes.val());
    iSeconds.val(tbSeconds.val());

    $(RetrieveObjectId('ddlOptions_' + controlId)).val(selectedValue);
    DecimalBoxOptionChanged(controlId);
}

function DecimalBoxOptionChanged(controlId)// dOptionToShowId, aLinkToHide, hiddenFieldToUpdateId) 
{
    var optionName = $(RetrieveObjectId('ddlOptions_' + controlId)).val();

    var dTime = $(RetrieveObjectId('dTime_' + controlId));
    var dInfinity = $(RetrieveObjectId('dInfinity_' + controlId));
    var dNothing = $(RetrieveObjectId('dNothing_' + controlId));

    var dOptionToShowId = $(RetrieveObjectId('d' + optionName + '_' + controlId));
    var aLinkToHide = $(RetrieveObjectId('a' + optionName + '_' + controlId));

    var hfTime = $(RetrieveObjectId(controlId + '_hfTime'));
    var hfInfinity = $(RetrieveObjectId(controlId + '_hfInfinity'));
    var hfNothing = $(RetrieveObjectId(controlId + '_hfNothing'));
    var hfToUpdate = $(RetrieveObjectId(controlId + '_hf' + optionName));

    hfTime.val('False');
    hfInfinity.val('False');
    hfNothing.val('False');

    hfTime.show();
    hfInfinity.show();
    hfNothing.show();

    dTime.hide();
    dInfinity.hide();
    dNothing.hide();

    dOptionToShowId.show();
    hfToUpdate.val('True');
}

function RetrieveObjectId(controlID) {
    var elem;

    if (document.getElementById) // this is the way the standards work
    {
        elem = document.getElementById(controlID);
    } else if (document.all) // this is the way old msie versions work
    {
        elem = document.all[controlID];
    } else if (document.layers) // this is the way nn4 works
    {
        elem = document.layers[controlID];
    }

    return elem;
}

function ShowHideElement(controlID) {
    var element = RetrieveObjectId(controlID);

    if ($(element).is(":visible"))
        $(element).hide('blind');
    else $(element).show('blind');
}

function ShowHideElementWithSpeed(controlID, speed) {
    var element = RetrieveObjectId(controlID);

    if ($(element).is(":visible"))
        $(element).hide(speed);
    else $(element).show(speed);
}

function ClearElementData(controlID) {
    var element = RetrieveObjectId(controlID);

    $(element).val('');
    $(element).text('');
}

function PropagateValue(idFrom, idTo) {
    var from = $(RetrieveObjectId(idFrom));
    var to = $(RetrieveObjectId(idTo));

    to.val(from.val());
}

function Digitonly(event) {

    if ((event.keyCode >= 37 && event.keyCode <= 57)
        || (event.keyCode >= 96 && event.keyCode <= 105)
            || (event.keyCode >= 8 && event.keyCode <= 13)) return true;
    else
        return false;

}

function Output(message) {
    alert(message);
}

function PrintControl(controlID) {
    var controlToPrint = RetrieveObjectId(controlID);

    // For print options go to: http://projects.erikzaadi.com/jQueryPlugins/jQuery.printElement/
    $(controlToPrint).printElement({ overrideElementCSS: ['/fitnav/css/master.css'] });
}
