﻿cmn =
{
    values:
    {
        pageUrl: function() {
           return window.location.href;
        },
        pageTitle: function() {
            return document.title;
        },
        firstName: function() {
            return $('#cmnFirstName').val();
        },
        lastName: function() {
            return $('#cmnLastName').val();
        },
        phone: function() {
            return $('#cmnPhone').val();
        },
        phoneExtension: function() {
            return $('#cmnPhoneExtension').val();
        },
        email: function() {
            return $('#cmnEmail').val();
        },
        availability: function() {
            return parseInt($('#cmnAvailability').val(), 10);
        },
        talkAbout: function() {
            return parseInt($('#cmnTalkAbout').val(), 10);
        },
        lastActivity: ""
    },
    autoResponse:
    {
        send: false,
        fromAddress: "",
        fromName: "",
        replyToAddress: "",
        template: "",
        subject: ""
    },
    box:
    {
        main: null,
        request: null,
        requestMenu: null,
        error: null,
        errorMenu: null,
        loading: null,
        response: null,
        responseMenu: null,
        init: function() {
            cmn.box.main = $('#CallMeNow');
            cmn.box.request = $('#cmnRequestTable');
            cmn.box.requestMenu = $('#cmnCommandBar1');
            cmn.box.loading = $('#cmnLoading');
            cmn.box.error = $('#cmnError');
            cmn.box.errorMenu = $('#cmnCommandBar2');
            cmn.box.response = $('#cmnResult');
            cmn.box.responseMenu = $('#cmnCommandBar3');
            cmn.addShowHide(cmn.box.main);
            cmn.addShowHide(cmn.box.request);
            cmn.addShowHide(cmn.box.requestMenu);
            cmn.addShowHide(cmn.box.loading);
            cmn.addShowHide(cmn.box.error);
            cmn.addShowHide(cmn.box.errorMenu);
            cmn.addShowHide(cmn.box.response);
            cmn.addShowHide(cmn.box.responseMenu);
            cmn.box.error.clear = function() {
                cmn.box.error.html("");
                cmn.box.error.hide();
            };
            cmn.box.response.clear = function() {
                cmn.box.response.html("");
                cmn.box.response.hide();
            };
        },
        showRequest: function() {
            cmn.box.main.show();
            cmn.box.request.show();
            cmn.box.requestMenu.show();
            cmn.box.loading.hide();
            cmn.box.error.hide();
            cmn.box.errorMenu.hide();
            cmn.box.response.hide();
            cmn.box.responseMenu.hide();
        },
        showLoading: function() {
            cmn.box.main.show();
            cmn.box.request.hide();
            cmn.box.requestMenu.hide();
            cmn.box.loading.show();
            cmn.box.error.hide();
            cmn.box.errorMenu.hide();
            cmn.box.response.hide();
            cmn.box.responseMenu.hide();
        },
        showError: function() {
            cmn.box.main.show();
            cmn.box.request.hide();
            cmn.box.requestMenu.hide();
            cmn.box.loading.hide();
            cmn.box.error.show();
            cmn.box.errorMenu.show();
            cmn.box.response.hide();
            cmn.box.responseMenu.hide();
        },
        showResponse: function() {
            cmn.box.main.show();
            cmn.box.request.hide();
            cmn.box.requestMenu.hide();
            cmn.box.loading.hide();
            cmn.box.error.hide();
            cmn.box.errorMenu.hide();
            cmn.box.response.show();
            cmn.box.responseMenu.show();
        }
    },
    addShowHide: function(el) {
        if (el) {
            el.show = function() 
            { 
                el.removeClass('Hide'); 
            };
            el.hide = function() 
            { 
                el.addClass('Hide'); 
            };
        } 

    },
    cmd:
    {
        request: null,
        close1: null,
        close2: null,
        close3: null,
        tryAgain: null,
        init: function() {
            cmn.cmd.request = $('#cmnRequestButton');
            cmn.cmd.close1 = $('#cmnCloseButton1');
            cmn.cmd.close2 = $('#cmnCloseButton2');
            cmn.cmd.close3 = $('#cmnCloseButton3');
            cmn.cmd.tryAgain = $('#cmnTryAgain');
            cmn.cmd.close1.click(function() { cmn.hide(); });
            cmn.cmd.close2.click(function() { cmn.hide(); });
            cmn.cmd.close3.click(function() { cmn.hide(); });
            cmn.cmd.request.click(function() { cmn.submit(); });
            cmn.cmd.tryAgain.click(function() { cmn.box.showRequest(); });
        }
    },
    hide: function() {
        cmn.box.main.hide();
        return false;
    },
    show: function(element, arSend, arFromAddress, arFromName, arReplyToAddress, arTemplate, arSubject, cmnLastActivity) {
        cmn.autoResponse.send = arSend;
        cmn.autoResponse.fromAddress = arFromAddress;
        cmn.autoResponse.fromName = arFromName;
        cmn.autoResponse.replyToAddress = arReplyToAddress;
        cmn.autoResponse.template = arTemplate;
        cmn.autoResponse.subject = arSubject;
        cmn.values.lastActivity = cmnLastActivity;
        cmn.move(element, cmn.box.main);
        cmn.box.showRequest();
        return false;
    },
    move: function(clicked, target) {
        var pos = $(clicked).position();
        var ctx = { t:$(document).scrollTop(), l:$(document).scrollLeft(), 
            h:$(window).height(), w:$(window).width(), 
            b:0, r:0, fh:290, fw:400 };
        ctx.b = ctx.t + ctx.h;
        ctx.r = ctx.l + ctx.w;
        pos.top = pos.top - (ctx.fh / 2);
        pos.left = pos.left - ctx.fw;
        pos.top = (pos.top + ctx.fh > ctx.b) ? ctx.b - ctx.fh : pos.top;
        pos.left = (pos.left + ctx.fw > ctx.r) ? ctx.r - ctx.fw : pos.left;
        pos.top = (pos.top < ctx.t) ? ctx.t : (pos.top < 0) ? 0 : pos.top;
        pos.left = (pos.left < ctx.l) ? ctx.l : (pos.left < 0) ? 0 : pos.left;
		if (jQuery.browser.mozilla == true) {
            $(target).css({left:"0px",top:"0px"});
        }
        else {
		    $(target).css({left:""+pos.left+"px",top:""+pos.top+"px"});
        }
        
    },
    setError: function(message) {
        cmn.box.error.html(message);
        cmn.box.showError();
    },
    setResponse: function(message) {
        cmn.box.response.html(message);
        cmn.box.showResponse();
    },
    getJsonObject: function(data) {
        var jsonObject = {};
        try {
            var result;
            if (data.xml == null) {
                var serializer = new XMLSerializer();
                result = serializer.serializeToString(data);
            } else {
                result = data.xml;
            }
            var regexp = /<[/]?string[^<>]*>|<\?xml[^<>]+>/gi;
            result = result.replace(regexp, "");
            regexp = /\&lt\;/gi;
            result = result.replace(regexp, "<");
            regexp = /\&gt\;/gi;
            result = result.replace(regexp, ">");
            jsonObject = eval('(' + result + ')');
        } catch(e) {
            jsonObject = {errorNum:1,errorText:"Your request could not be handled at this time"};
        }
        return jsonObject;
    },
    getPayload: function() {
        var payload =
        {
            FirstName: cmn.values.firstName(),
            LastName: cmn.values.lastName(),
            Phone: cmn.values.phone(),
            PhoneExtension: cmn.values.phoneExtension(),
            Email: cmn.values.email(),
            Availability: cmn.values.availability(),
            TalkAbout: cmn.values.talkAbout(),
            PageUrl: cmn.values.pageUrl(),
            PageTitle: cmn.values.pageTitle(),
            SendAutoResponse: cmn.autoResponse.send,
            AutoResponseFromAddress: cmn.autoResponse.fromAddress,
            AutoResponseFromName: cmn.autoResponse.fromName,
            AutoResponseReplyToAddress: cmn.autoResponse.replyToAddress,
            AutoResponseTemplate: cmn.autoResponse.template,
            AutoResponseSubject: cmn.autoResponse.subject,
            LastActivity: cmn.values.lastActivity

        };
        return payload;
    },
    webservice: null,
    submit: function() {
        window.setTimeout(function() { cmn.box.showLoading(); }, 0);
        $.post(cmn.webservice, cmn.getPayload(),
            function(data) {
                var responseJson = cmn.getJsonObject(data);
                if (responseJson.errorNum == 0) {
                    cmn.setResponse(responseJson.responseText);
                    // update cookie only when there are no errors
                    cmn.updateCookie(usrctx);
                } else {
                    cmn.setError(responseJson.errorText);
                }
            }, "xml");

    },
    updateCookie : function(container) {
        if (typeof container != "undefined") {
            container.init();
            container.user.fname = cmn.values.firstName();
            container.user.lname = cmn.values.lastName();
            container.user.phone = cmn.values.phone();
            container.user.email = cmn.values.email();
            container.user.phoneExtension = cmn.values.phoneExtension();
            container.save();
        }
    },
    init: function(url) {
        cmn.webservice = url;
        cmn.box.init();
        cmn.cmd.init();
        if (typeof(usrctx) != "undefined")
        {
            usrctx.fill("cmnFirstName","cmnLastName","cmnPhone","cmnEmail","","cmnPhoneExtension");
        }
    },
    elementOffset: function(obj) {
        var curleft = curtop = 0;
        if (typeof obj != 'undefined' && obj != null && obj.offsetParent) {
            curleft = obj.offsetLeft;
            curtop = obj.offsetTop;
            while (obj = obj.offsetParent) {
                curleft += obj.offsetLeft;
                curtop += obj.offsetTop;
            }
        }
        return { x: curleft, y: curtop };
    }
};
    
        