﻿stf =
{
    values:
    {
        pageUrl: function() {
            return window.location.href;
        },
        pageTitle: function() {
            return document.title;
        },
        friendName: function() {
            return $('#stfFriendName').val();
        },
        friendEmail: function() {
            return $('#stfFriendEmail').val();
        },
        yourName: function() {
            return $('#stfYourName').val();
        },
        yourEmail: function() {
            return $('#stfYourEmail').val();
        },
        yourMessage: function() {
            return $('#stfYourMessage').val();
        },
        messageTemplate: '',
        emptyMessageTemplate: ''
    },
    box:
    {
        main: null,
        request: null,
        requestMenu: null,
        error: null,
        errorMenu: null,
        loading: null,
        response: null,
        responseMenu: null,
        init: function() {
            stf.box.main = $('#SendToFriend');
            stf.box.request = $('#stfRequestTable');
            stf.box.requestMenu = $('#stfCommandBar1');
            stf.box.loading = $('#stfLoading');
            stf.box.error = $('#stfError');
            stf.box.errorMenu = $('#stfCommandBar2');
            stf.box.response = $('#stfResult');
            stf.box.responseMenu = $('#stfCommandBar3');
            stf.addShowHide(stf.box.main);
            stf.addShowHide(stf.box.request);
            stf.addShowHide(stf.box.requestMenu);
            stf.addShowHide(stf.box.loading);
            stf.addShowHide(stf.box.error);
            stf.addShowHide(stf.box.errorMenu);
            stf.addShowHide(stf.box.response);
            stf.addShowHide(stf.box.responseMenu);
            stf.box.error.clear = function() {
                stf.box.error.html('');
                stf.box.error.hide();
            };
            stf.box.response.clear = function() {
                stf.box.response.html('');
                stf.box.response.hide();
            };
        },
        showRequest: function() {
            stf.box.main.show();
            stf.box.request.show();
            stf.box.requestMenu.show();
            stf.box.loading.hide();
            stf.box.error.hide();
            stf.box.errorMenu.hide();
            stf.box.response.hide();
            stf.box.responseMenu.hide();
        },
        showLoading: function() {
            stf.box.main.show();
            stf.box.request.hide();
            stf.box.requestMenu.hide();
            stf.box.loading.show();
            stf.box.error.hide();
            stf.box.errorMenu.hide();
            stf.box.response.hide();
            stf.box.responseMenu.hide();
        },
        showError: function() {
            stf.box.main.show();
            stf.box.request.hide();
            stf.box.requestMenu.hide();
            stf.box.loading.hide();
            stf.box.error.show();
            stf.box.errorMenu.show();
            stf.box.response.hide();
            stf.box.responseMenu.hide();
        },
        showResponse: function() {
            stf.box.main.show();
            stf.box.request.hide();
            stf.box.requestMenu.hide();
            stf.box.loading.hide();
            stf.box.error.hide();
            stf.box.errorMenu.hide();
            stf.box.response.show();
            stf.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() {
            stf.cmd.request = $('#stfRequestButton');
            stf.cmd.close1 = $('#stfCloseButton1');
            stf.cmd.close2 = $('#stfCloseButton2');
            stf.cmd.close3 = $('#stfCloseButton3');
            stf.cmd.tryAgain = $('#stfTryAgain');
            stf.cmd.close1.click(function() { stf.hide(); });
            stf.cmd.close2.click(function() { stf.hide(); });
            stf.cmd.close3.click(function() { stf.hide(); });
            stf.cmd.request.click(function() { stf.submit(); });
            stf.cmd.tryAgain.click(function() { stf.box.showRequest(); });
        }
    },
    hide: function() {
        stf.box.main.hide();
        return false;
    },
    show: function(element, arMessageTemplate, arEmptyMessageTemplate) {
        stf.values.messageTemplate = arMessageTemplate;
        stf.values.emptyMessageTemplate = arEmptyMessageTemplate;
        stf.move(element, stf.box.main);
        stf.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;
		$(target).css({left:''+pos.left+'px',top:''+pos.top+'px'});
        
    },
    setError: function(message) {
        stf.box.error.html(message);
        stf.box.showError();
    },
    setResponse: function(message) {
        stf.box.response.html(message);
        stf.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 =
        {
            FriendName: stf.values.friendName(),
            FriendEmail: stf.values.friendEmail(),
            YourName: stf.values.yourName(),
            YourEmail: stf.values.yourEmail(),
            YourMessage: stf.values.yourMessage(),
            MessageTemplate: stf.values.messageTemplate,
            EmptyMessageTemplate: stf.values.emptyMessageTemplate,
            PageUrl: stf.values.pageUrl(),
            PageTitle: stf.values.pageTitle()
        };
        return payload;
    },
    webservice: null,
    submit: function() {
        window.setTimeout(function() { stf.box.showLoading(); }, 0);
        $.post(stf.webservice, stf.getPayload(),
            function(data) {
                var responseJson = stf.getJsonObject(data);
                if (responseJson.errorNum == 0) {
                    stf.setResponse(responseJson.responseText);
                    // update cookie only when there are no errors
                    stf.updateCookie(usrctx);
                } else {
                    stf.setError(responseJson.errorText);
                }
            }, 'xml');

    },
    updateCookie : function(container) {
        if (typeof container != 'undefined') {
            container.init();
            container.user.email = stf.values.email();
            container.save();
        }
    },
    init: function(url) {
        stf.webservice = url;
        stf.box.init();
        stf.cmd.init();
        if (typeof(usrctx) != 'undefined')
        {
            // First Name, Last Name, Phone, Email, Zip, Phone Extension
            usrctx.fill('','','','stfYourEmail','','');
            
            var names = [];
            if (usrctx.user.fname != null) names[names.length] = usrctx.user.fname;
            if (usrctx.user.lname != null) names[names.length] = usrctx.user.lname;
            var name = $.trim(names.join(' '));
            $('#stfYourName').val(name);
            
        }
    },
    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 };
    }
};

