﻿/// <reference name="MicrosoftAjax.js"/>
/// <reference path="../../Services/RecordError.asmx" />


Type.registerNamespace("AMS");

AMS.PageManager = function() {
    this.widgetcount;
    this.zonecount;
    this.widgets;
    this.zones;
    this._toupdate;
    this._showcommands;
    this._isinupdate;
    this._edittype; // 0=layout edit groups, 1=edit zones, 2=edit widgets
    this._siteorpage; //
    this._siteid;
    this._pageid;
    this.ActiveWidgetID;
    this.newwidgetid;
    this.newwidgetname;
    this.newwidgettarget;
    this.newwidgettargetname;
    this.newwidgettargetposition;
    this.zoneclass = 'zone-content';
    this.widgetclass = 'widget';
    this.newwidgetclass = 'new-widget';
    this.CurrentPage = null;
    this.UpdateRefreshPage = false;
    this.UpdateMainPanel = false;
    this.CurrentEditingZoneID = null;
};

AMS.PageManager.prototype = {
    CallingWebService: function () {
        /* this is to be called everytime a web serive is call.  we will use this later for ads*/
    }
    , Mouse: {
        x: null
        , y: null
    }
    , CloseDialog: function () {
        // destroy temp
        var oManager = GetRadWindowManager();
        var oWnd = oManager.getActiveWindow();
        if (oWnd) {
            oWnd.close();
        }
        PageManager.CurrentEditingZoneID = null;
        PageManager.RefreshPage();
        PageManager.UpdateMain();
        // $("#newwidgetdialog").dialog('close');
    }
    , init: function (mode) {
        // TODO: adjust size based on screensize
        this.initUpdatePanenlDialog();
        //        AMS.Web.Services.RecordError.Test();
    }
    , initUpdatePanenlDialog: function () {
        $("#updatingDialog").dialog({
            bgiframe: true
                , height: 150
                , width: 300
                , modal: true
                , closeOnEscape: false
                , autoOpen: false
                , resizable: false
                , draggable: false
        });
    }
    , openUpdatePanelDialog: function () {
        // new
        $("BODY").css("cursor", "wait");
        $(document).bind("mousemove", this.updatingFollower);
        $("#updatingfollower").show();
    }
    , closeUpdatePanelDialog: function () {
        // new
        $("BODY").css("cursor", "default");
        $("#updatingfollower").hide();
        $(document).unbind("mousemove", this.updatingFollower);
    }
    , updatingFollower: function (e) {
        $("#updatingfollower").css("left", e.pageX - 14).css("top", e.pageY - 14);
    }
    , UpdateZone: function (id) {
        // ajax call to update zone
        if (PageManager.CurrentEditingZoneID !== null) {
            __doPostBack(PageManager.CurrentEditingZoneID, '');
        }
        else if (id !== null) {
            __doPostBack(id, '');
        }
        else {
            // errored
        }
    }
    , PageSettings: function (id) {
        var newwidgeturl = "/default.cmd?cmd=3.5&pid=" + id;
        var oWnd = window.radopen(newwidgeturl, "DialogWindow");
    }
    , RecordError: function (line, fun, alrt) {
        if (PageManager.CurrentPage !== null) {
            AMS.Web.Services.RecordError.Java(line, fun, PageManager.CurrentPage);
        }
        else {
            AMS.Web.Services.RecordError.Java(line, fun, "");
        }
        if (alrt != null) {
            alert(alrt);
        }
    }
    , RefreshPage: function () {
        if (PageManager.CurrentPage != null && PageManager.UpdateRefreshPage) {
            location.href = PageManager.CurrentPage;
        }
    }
    , UpdateMain: function () {
        if (PageManager.UpdateMainPanel) {
            PageManager.UpdateMainPanel = false;
            __doPostBack('MainPageUpdate', '');
        }
    }
    , ServiceCallRtnErrorSucess: function (err, uc, mn) {
        if (err.IsErrored == true) {
            alert(err.Msg);
        }
    }
    , ServiceCallErrored: function (result, uc, mn) {
        if (mn != "") {
            // record error in database
        }
    }
    , ResizeChildZonesColums: function (zone) {
        // need to resize the zone based on the it's parents type
        // get a list all children

        var zoneCount = zone.children(".zonegroup, .zone").length;
        var pWidth = zone.innerWidth();

        if ($.browser.msie && $.browser.version > 7) {
            var t = zone.parent().css("border-right-width");
            var borderWidth = parseInt(zone.parent().css("border-right-width"));
            if (isNaN(borderWidth)) { borderWidth = 0; }
            var paddingWidth = parseInt(zone.parent().css("padding-right"));
            if (isNaN(paddingWidth)) { paddingWidth = 0; }

            //            if ($.browser.msie && $.browser.version < 8) {
            //                borderWidth += parseInt(zone.parent().css("border-left-width"));
            //                paddingWidth += parseInt(zone.parent().css("padding-left"));
            //                if (isNaN(borderWidth)) { borderWidth = 0; }
            //                if (isNaN(paddingWidth)) { paddingWidth = 0; }
            //            }

            borderWidth += paddingWidth;
            pWidth = pWidth - borderWidth;
        }
        else if ($.browser.msie && $.browser.version < 8) {
            // ie 7 and lower
            borderWidth = parseInt(zone.parent().css("border-right-width")) + parseInt(zone.parent().css("border-left-width"));
            if (isNaN(borderWidth)) { borderWidth = 0; }
            paddingWidth = parseInt(zone.parent().css("padding-right")) + parseInt(zone.parent().css("padding-left"));
            if (isNaN(paddingWidth)) { paddingWidth = 0; }
            borderWidth += paddingWidth;
            pWidth = pWidth + borderWidth;
        }

        var zoneWidthTotal = 0; // this is the total width of the zone as the zones are looped through
        var currentZoneNum = 0; // this is the current zone for indexing purposes
        var maxZoneHeight = 0;
        while (currentZoneNum < zoneCount) {
            var sender = $(zone.children(".zonegroup, .zone")[currentZoneNum]);
            if (currentZoneNum == zoneCount - 1) {
                // processes last zone and expands it to the empyt space left of makes it small if needed
                var widthLeft = pWidth - zoneWidthTotal;
                var borderWidth, borderleft, borderright;
                var padding, paddingleft, paddingright;
                var maginwidth, marginLeft, marginRight;

                marginLeft = parseInt(sender.css("margin-left"));
                if (isNaN(marginLeft)) { marginLeft = 0; }
                marginRight = parseInt(sender.css("margin-right"));
                if (isNaN(marginRight)) { marginRight = 0; }
                maginwidth = marginLeft + marginRight;

                borderleft = parseInt(sender.css("border-left-width"));
                if (isNaN(borderleft)) { borderleft = 0; }
                borderright = parseInt(sender.css("border-right-width"));
                if (isNaN(borderright)) { borderright = 0; }
                borderWidth = borderleft + borderright;

                paddingleft = parseInt(sender.css("padding-left"));
                if (isNaN(paddingleft)) { paddingleft = 0; }
                paddingright = parseInt(sender.css("padding-right"));
                if (isNaN(paddingright)) { paddingright = 0; }
                paddingWidth = paddingleft + paddingright;

                borderWidth += paddingWidth + maginwidth;


                widthLeft = widthLeft - borderWidth;
                // zoneWidthTotal += widthLeft;
                if ($.browser.msie) {
                    var d = pWidth - zoneWidthTotal;
                    zoneWidthTotal += d;
                }
                sender.width(widthLeft);
            }
            else {
                // process the zones that are not last in the list
                var mWidth = sender.outerWidth();
                if ($.browser.msie && $.browser.version > 7) {
                    var borderWidth = parseInt(sender.css("border-right-width"));
                    var paddingWidth = parseInt(sender.css("padding-right"));

                    //                    if ($.browser.msie && $.browser.version < 8) {
                    //                        borderWidth += parseInt(sender.css("border-left-width"));
                    //                        paddingWidth += parseInt(sender.css("padding-left"));
                    //                        if (isNaN(borderWidth)) { borderWidth = 0; }
                    //                        if (isNaN(paddingWidth)) { paddingWidth = 0; }
                    //                    }

                    if (!isNaN(borderWidth)) {
                        mWidth += borderWidth;
                    }
                    if (!isNaN(paddingWidth)) {
                        mWidth += paddingWidth;
                    }
                }

                zoneWidthTotal += mWidth;
            }
            currentZoneNum += 1;
        }



        // calculate height and set all widgets to this height
        if (($.browser.msie && $.browser.version > 7) || (!$.browser.msie)) {
            var pheight = zone.innerHeight();
            currentZoneNum = 0;
            while (currentZoneNum < zoneCount) {
                var sender = $(zone.children(".zonegroup, .zone")[currentZoneNum]);

                // sender.find('.ui-widget:first').css('height', pheight);
                sender.find('.ui-widget:first').find('.ui-widget-content:first').css('min-height', pheight - (sender.find('.ui-widget:first').find('.ui-widget-header:first').outerHeight() - sender.find('.ui-widget:first').find('.ui-widget-footer:first').outerHeight()));
                currentZoneNum += 1;
            }
        }
        else {
            // IE 6 && 7
            // Get the largest widget
            currentZoneNum = 0;
            var pheight = 0;
            while (currentZoneNum < zoneCount) {
                var sender = $(zone.children(".zonegroup, .zone")[currentZoneNum]);
                if (sender.outerHeight() > pheight) { pheight = sender.outerHeight(); }
                currentZoneNum += 1;
            }
            // resize all the widgets
            currentZoneNum = 0;
            while (currentZoneNum < zoneCount) {
                var sender = $(zone.children(".zonegroup, .zone")[currentZoneNum]);
                // sender.find('.ui-widget:first').css('height', pheight);
                sender.find('.ui-widget:first').find('.ui-widget-content:first').css('min-height', pheight - (sender.find('.ui-widget:first').find('.ui-widget-header:first').outerHeight() - sender.find('.ui-widget:first').find('.ui-widget-footer:first').outerHeight()));
                currentZoneNum += 1;
            }
        }


    }
    , ResizeChildWidgetsColums: function (zone) {
        // get children list
        var widgetCount = zone.children(".widget").length;
        var pWidth = zone.innerWidth();
        if ($.browser.msie && $.browser.version > 7) {
            borderWidth = parseInt(zone.parent().css("border-right-width")) + parseInt(zone.parent().css("border-left-width"));
            if (isNaN(borderWidth)) { borderWidth = 0; }
            paddingWidth = parseInt(zone.parent().css("padding-right")) + parseInt(zone.parent().css("padding-left"));
            if (isNaN(paddingWidth)) { paddingWidth = 0; }
            borderWidth += paddingWidth;
            pWidth = pWidth + borderWidth;

            //            if ($.browser.msie && $.browser.version < 8) {
            //                borderWidth += parseInt(zone.parent().css("border-left-width"));
            //                paddingWidth += parseInt(zone.parent().css("padding-left"));
            //                if (isNaN(borderWidth)) { borderWidth = 0; }
            //                if (isNaN(paddingWidth)) { paddingWidth = 0; }
            //            }

            borderWidth += paddingWidth;
            pWidth = pWidth - borderWidth;
        }
        else if ($.browser.msie && $.browser.version < 8) {
            // ie 7 and lower
            borderWidth = parseInt(zone.parent().css("border-right-width")) + parseInt(zone.parent().css("border-left-width"));
            if (isNaN(borderWidth)) { borderWidth = 0; }
            paddingWidth = parseInt(zone.parent().css("padding-right")) + parseInt(zone.parent().css("padding-left"));
            if (isNaN(paddingWidth)) { paddingWidth = 0; }
            borderWidth += paddingWidth;
            pWidth = pWidth + borderWidth;
        }
        var wWidthTotal = 0;
        var cWidgts = 0;
        while (cWidgts < widgetCount) {
            var sender = $(zone.children(".widget")[cWidgts]);
            if (cWidgts == widgetCount - 1) {
                // resize last width to be whats left
                var widthLeft = pWidth - wWidthTotal;
                var borderWidth;
                var padding;
                if ($.browser.msie && $.browser.version > 7) {
                    borderWidth = parseInt(sender.css("border-right-width")) + parseInt(sender.css("border-left-width"));
                    if (isNaN(borderWidth)) { borderWidth = 0; }
                    paddingWidth = parseInt(sender.css("padding-right")) + parseInt(sender.css("padding-left"));
                    if (isNaN(paddingWidth)) { paddingWidth = 0; }
                    borderWidth += paddingWidth;
                }
                else if ($.browser.msie && $.browser.version < 8) {
                    borderWidth = parseInt(sender.css("border-right-width")) + parseInt(sender.css("border-left-width"));
                    if (isNaN(borderWidth)) { borderWidth = 0; }
                    paddingWidth = parseInt(sender.css("padding-right")) + parseInt(sender.css("padding-left"));
                    if (isNaN(paddingWidth)) { paddingWidth = 0; }
                    borderWidth += paddingWidth;
                }
                else {
                    borderWidth = parseInt(sender.css("border-right-width")) + parseInt(sender.css("border-left-width"));
                    if (isNaN(borderWidth)) { borderWidth = 0; }
                    paddingWidth = parseInt(sender.css("padding-right")) + parseInt(sender.css("padding-left"));
                    if (isNaN(paddingWidth)) { paddingWidth = 0; }
                    borderWidth += paddingWidth;
                }
                widthLeft = widthLeft - borderWidth;
                // wWidthTotal += widthLeft;
                if ($.browser.msie) {
                    var d = pWidth - wWidthTotal;
                    wWidthTotal += d;
                }
                sender.width(widthLeft);
            }
            else {
                // add up widgets widths
                var mWidth = sender.outerWidth();
                if ($.browser.msie && $.browser.version > 7) {
                    var borderWidth = parseInt(sender.css("border-right-width"));
                    var paddingWidth = parseInt(sender.css("padding-right"));

                    //                    if ($.browser.msie && $.browser.version < 8) {
                    //                        borderWidth += parseInt(sender.css("border-left-width"));
                    //                        paddingWidth += parseInt(sender.css("padding-left"));
                    //                        if (isNaN(borderWidth)) { borderWidth = 0; }
                    //                        if (isNaN(paddingWidth)) { paddingWidth = 0; }
                    //                    }

                    if (!isNaN(borderWidth)) {
                        mWidth += borderWidth;
                    }
                    if (!isNaN(paddingWidth)) {
                        mWidth += paddingWidth;
                    }
                }

                wWidthTotal += mWidth;
            }
            cWidgts += 1;
        }

        // calculate height and set all widgets to this height
        if (($.browser.msie && $.browser.version > 7) || (!$.browser.msie)) {
            var pheight = zone.innerHeight();
            cWidgts = 0;
            while (cWidgts < widgetCount) {
                var sender = $(zone.children(".widget")[cWidgts]);

                // sender.find('.ui-widget:first').css('height', pheight);
                sender.find('.ui-widget:first').find('.ui-widget-content:first').css('height', pheight - (sender.find('.ui-widget:first').find('.ui-widget-header:first').outerHeight() - sender.find('.ui-widget:first').find('.ui-widget-footer:first').outerHeight()));
                cWidgts += 1;
            }
        }
        else {
            // IE 6 && 7
            // Get the largest widget
            cWidgts = 0;
            var pheight = 0;
            while (cWidgts < widgetCount) {
                var sender = $(zone.children(".widget")[cWidgts]);
                if (sender.outerHeight() > pheight) { pheight = sender.outerHeight(); }
                cWidgts += 1;
            }
            // resize all the widgets
            cWidgts = 0;
            while (cWidgts < widgetCount) {
                var sender = $(zone.children(".widget")[cWidgts]);
                // sender.find('.ui-widget:first').css('height', pheight);
                sender.find('.ui-widget:first').find('.ui-widget-content:first').css('height', pheight - (sender.find('.ui-widget:first').find('.ui-widget-header:first').outerHeight() - sender.find('.ui-widget:first').find('.ui-widget-footer:first').outerHeight()));
                cWidgts += 1;
            }
        }
    }
    , OpenSitePageSettings: function (cmd, id) {
        var newwidgeturl = "/default.cmd?cmd=" + cmd + "&pid=" + id;
        var oWnd = window.radopen(newwidgeturl, "DialogWindow");
    }
    , Open3rdPartyPages: function () {

    }

};

AMS.PageManager.registerClass("AMS.PageManager");
var PageManager = new AMS.PageManager();

$(document).ready(function (e) {
    $(document).bind("click",
                function (e) {
                    PageManager.Mouse.x = e.pageX;
                    PageManager.Mouse.y = e.pageY;
                }
            );
});

window.onerror = function(err, file, line) {
    PageManager.CurrentPage = file;
    PageManager.RecordError(err + ' line:' + line, "Unhandeled Error - " + file, null);
    return true;
}