﻿//HELPER


//AUTORUN...
$(document).ready(function() {
    ieUpgradeCheck();
    ddMainMenu.Setup();
    ddBoxy.Setup();
    ddToolTips.Setup();
});


//HELPERS
String.prototype.trim = function() {
    return (this.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, ""));
}
String.prototype.startsWith = function(str) {
    return (this.match("^" + str) == str);
}
String.prototype.endsWith = function(str) {
    return (this.match(str + "$") == str);
}
String.prototype.isDate = function() {
    var re = /^((0?\d)|(1[012]))[\/\-][0123]\d{1}[\/\-]((19)|(20))\d{2}$/;
    return re.test(this);
}
String.prototype.contains = function(str) {
    return this.toLowerCase().indexOf(str.toLowerCase()) >= 0;
}

//CHECK VERSION OF IE
function ieUpgradeCheck(ctrl) {
    ctrl = ctrl ? ctrl : '#ieUpgradeNotice';
    ctrl = $(ctrl);
    /*
    if (ctrl) {
        if (false) {
            ctrl.css("display", "block");
        } else {
            ctrl.css("display", "none");
        }
    }
    */
}
//THE FUNCTIONS
var ddMainMenu = {
    xpath: '#TopNavigation ul li',
    Setup: function() {
        $(ddMainMenu.xpath).corner("bottom").hover(
            function() {
                $(".nav-extra", this).css("display","block");
            },
            function() {
                $(".nav-extra", this).css("display", "none");
            }
        );
    }
}
var ddBoxy = {
    Setup: function() {
        $("div.boxy").corner();
        $("div.boxy div.caption").addClass("caption-open").click(ddBoxy.onToggle).dblclick(ddBoxy.onDblClick);

        //revealme
        $("div.revealme").each(function(e) {
            var $handle = $('.handle', e);
            var $content = $('.content', e);

            $handle.click(ddBoxy.onRevealMeToggle);
            $content.hide();
            if (!$handle.hasClass("closed")) { $handle.addClass("closed") }

        });
    },
    onToggle: function(e) {

        var parent = this.parentNode;
        if (parent) {
            var $kids = $(parent).children().filter(function(i) {
                return !$(this).hasClass("caption");
            });

            $kids.toggle(300);

            //set the css class for the caption
            if ($(this).hasClass("caption-closed")) {
                $(this).removeClass("caption-closed");
                $(this).addClass("caption-open");
            } else {
                $(this).removeClass("caption-open");
                $(this).addClass("caption-closed");
            }
        }
    },
    onDblClick: function(e) {
        var parent = this.parentNode;
        if (parent) {
            ddBoxy._showContent(parent);

            $(parent).hide(300);

        }
    },
    onRevealMeToggle: function(e) {

        var parent = this.parentNode;
        if (parent) {
            var $handle = $('.handle', parent);
            var $content = $('.content', parent);

            $content.toggle(300);

            //set the css class for the handle
            if ($handle.hasClass("closed")) {
                $handle.removeClass("closed");
                $handle.addClass("open");
            } else {
                $handle.removeClass("open");
                $handle.addClass("closed");
            }
        }
    },

    _showContent: function(parent) {
        if (parent) {
            var $kids = $(parent).children().filter(function(i) {
                return !$(this).hasClass("caption");
            });

            $kids.show();

            //set the css class for the caption
            if ($(this).hasClass("caption-closed")) {
                $(this).removeClass("caption-closed");
                $(this).addClass("caption-open");
            } else {
                $(this).removeClass("caption-open");
                $(this).addClass("caption-closed");
            }
        }
    }
}
var ddAttention = {
    overlayDiv: null,
    wrapperDiv: null,
    timer: null,
    Show: function(title, html, delay, locationEnum, width) {
        //clean-up
        if (ddAttention.overlayDiv) { $(ddAttention.overlayDiv).remove(); }
        if (ddAttention.wrapperDiv) { $(ddAttention.wrapperDiv).remove(); }

        width = width ? width : 400;
        locationEnum = locationEnum ? locationEnum : "default";

        ddAttention.overlayDiv = window.document.createElement("div");
        ddAttention.wrapperDiv = window.document.createElement("div");
        var titleWrapperDiv = window.document.createElement("div");
        var titleDiv = window.document.createElement("span");
        var closeDiv = window.document.createElement("span")
        var bodyDiv = window.document.createElement("div");
        var clickHereDiv = window.document.createElement("div");

        var top = 0;
        var left = 0;
        var margin = 5;
        var windowheight = $(window).height();
        if (!windowheight) { windowheight = 2000; }
        var docheight = document.height;
        if (!docheight) {
            docheight = document.body.offsetHeight;
        }
        windowheight += docheight;

        switch (locationEnum.toLowerCase()) {
            case "center":
                top = $(window).height() / 3 + $(window).scrollTop();
                left = ($(window).width() - width) / 2 + $(window).scrollLeft();
                break;
            case "top-left":
                top = margin;
                left = margin;
                break;
            case "top-right":
                top = margin;
                left = ($(window).width() - width) - margin;
                break;
            case "bottom-left":
                top = $(window).height() - 100 + $(window).scrollTop();
                left = margin;
                break;
            case "bottom-right":
                top = $(window).height() - 100 + $(window).scrollTop();
                left = ($(window).width() - width) - margin + $(window).scrollLeft();
                break;
            default:
                top = $(window).height() / 4 + $(window).scrollTop();
                left = ($(window).width() - width) / 3 + $(window).scrollLeft();
                break;
        }

        var cssOptions = {
            'top': top + 'px',
            'left': left + 'px',
            'width': width + 'px',
            'display': 'none'
        };

        $(ddAttention.overlayDiv).addClass('overlay-layer').css('height', windowheight);
        $(ddAttention.wrapperDiv).addClass("attention-box").css(cssOptions).draggable();
        $(titleWrapperDiv).addClass("attention-box-title");
        $(titleDiv).css({ 'display': 'block', 'float': 'left', 'margin-left': '5px' }).text(title);
        $(closeDiv).css({ 'display': 'block', 'float': 'right', 'margin-right': '5px', 'cursor': 'pointer' }).text('x').click(ddAttention.Close);
        $(bodyDiv).addClass("attention-box-content").html(html);
        $(clickHereDiv).addClass("attention-box-content-close").text('[ click here to close this box ]').click(ddAttention.Close);

        bodyDiv.appendChild(clickHereDiv);
        titleWrapperDiv.appendChild(titleDiv);
        titleWrapperDiv.appendChild(closeDiv);
        ddAttention.wrapperDiv.appendChild(titleWrapperDiv);
        ddAttention.wrapperDiv.appendChild(bodyDiv);
        ddAttention.overlayDiv.appendChild(ddAttention.wrapperDiv);
        window.document.body.appendChild(ddAttention.overlayDiv);

        $(ddAttention.wrapperDiv).slideDown(300, function() {
            if (delay) {
                ddAttention.timer = setTimeout(ddAttention.Close, delay);
            }
        });

    },
    Close: function() {
        if (ddAttention.timer) { clearTimeout(ddAttention.timer); }

        if (ddAttention.wrapperDiv) {
            $(ddAttention.wrapperDiv).fadeOut(500, function() {
                $(ddAttention.wrapperDiv).remove();
                ddAttention.wrapperDiv = null;
                $(ddAttention.overlayDiv).remove();
                ddAttention.overlayDiv = null;
            });
        } else if (ddAttention.overlayDiv) {
            $(ddAttention.overlayDiv).remove();
            ddAttention.overlayDiv = null;
        }
    }
};

//** --- ToolTips --- **//
var ddToolTips = {
    options: {
        targetCss: "qtip",
        addTipCss: 'add-tip',
        showBelow: 'add-below',
        addTipSpanCss: 'help'
    },
    Setup: function() {
        var isOk;
        $("." + ddToolTips.options.targetCss + "[title]").each(function(i) {
            ddToolTips.MakeTip($(this));
        });
        $("." + ddToolTips.options.addTipCss + "[title]").each(function(i) {
            var ctrl = $(this);
            var tip = document.createElement("span");
            if (this.tagName == "INPUT") {
                ctrl.after(tip);    //insert after the INPUT ctrl
            } else {
                this.appendChild(tip);
            }
            tip = $(tip);
            tip.addClass(ddToolTips.options.addTipSpanCss);
            tip.html("&nbsp;");
            ddToolTips.MakeTip(ctrl, tip);
        });
    },
    MakeTip: function(ctrl, tip) {
        if (!tip) { tip = ctrl; }
        var thePosition = {};
        if (tip.hasClass(ddToolTips.options.showBelow)) {
            thePosition = { corner: { target: 'bottomLeft', tooltip: 'topLeft'} };
        }
        tip.qtip({
            content: ctrl.attr("title"),
            position: thePosition,
            style: { name: 'dark',
                background: '#F79892',
                color: '#000',
                border: { width: 3, radius: 5, color: '#900' }
            }
        });
        ctrl.attr("tip", ctrl.attr("title"));
        ctrl.attr("title", "");
    }
};                                                       //end ddToolTips

/* MAIN MASTER FUNCTIONS */
var ddMaster = {
    PopupWindow: {
        theWindow: null,
        Show: function(title, html, position) {
            ddMaster.PopupWindow._create(title, html, position);
        },
        Hide: function() {
            if (ddMaster.PopupWindow.theWindow) {
                $(ddMaster.PopupWindow.theWindow).hide();
            }
        },
        _create: function(title, html, position) {
            if (!ddMaster.PopupWindow.theWindow) {
                ddMaster.PopupWindow.theWindow = document.createElement("div")
                $('body').append(ddMaster.PopupWindow.theWindow);
                $(ddMaster.PopupWindow.theWindow).addClass('popup-window');
            }      
                          
            $(ddMaster.PopupWindow.theWindow).css({'top': position.top + 'px', 'left': position.left + 'px'}).html("<h3 onclick='ddMaster.PopupWindow.Hide();' style='cursor: pointer;'>" + title + "</h3>" + html).show();            
        }
    },
    QuickLink: {
        MouseOver: function() {
            var qhead = $('#ql-head');
            var qbody = $('#ql-body');

            if (qhead && qbody) {
                if ((qbody.css("display") != 'block')) {
                    ddMaster.QuickLink.Toggle();
                }
            }

        },
        Toggle: function() {
            var qhead = $('#ql-head');
            var qbody = $('#ql-body');

            if (qhead && qbody) {
                if ((qbody.css("display") == 'block')) {
                    qhead.css("background", "transparent url(images/art/ir-quicklink.png) top left no-repeat");
                    qbody.hide("fold");
                } else if ((qbody.css("display") != 'block')) {
                    qhead.css("background", "transparent url(images/art/ir-quicklink-close.png) top left no-repeat");
                    qbody.show("fold");
                }
            }
        }
    },
    Help: {
        PageHelp: function() {
            var dialog = $find(IDs.wdwHelp);
            if (dialog) {
                dialog.show();
            } else {
                console.error("missing wdwHelp");
            }
        },
        onHelpLoaded: function() {
            //get the help for this page
            var currentUrl = location.href;
            var handler = 'help.ashx';
            $.get(handler, { ref: currentUrl }, ddMaster.Help.onHelpSuccess);
        },
        onHelpSuccess: function(result) {
            var area = $("#wdw-help-fieldset");
            if (area) {
                area.html(result);
            } else {
                area.html("<h3 class='error'>missing wdwHelp</h3>");
            }

        },
        onHelpError: function(result) {
            console.error(result);
        },
        Toggle: function(ctrl) {
            ctrl = $(ctrl);
            var li = ctrl.parent();
            if (li) {
                var content = $(".page-help-content", li);
                var meta = $(".page-help-meta", li);

                if (content && meta) {
                    var fx = "blind";
                    var speed = 200;

                    if (meta.css("display") == 'none') {
                        meta.css("display", "block");
                        ctrl.css("background-image", "url(images/art/ir-up.png)");
                        content.show(fx, {}, speed, ddMaster.Help.ToggleCallback);
                    } else {
                        meta.css("display", "none");
                        ctrl.css("background-image", "url(images/art/ir-down.png)");
                        content.hide(fx, {}, speed, ddMaster.Help.ToggleCallback);
                    }
                }
            }
        },
        ToggleCallback: function() {
            //this references the .page-help-content element
        }

    },
    Search: {
        searchFX: "blind",
        Show: function() {
            var dialog = $find(IDs.wdwSearch);
            if (dialog) {
                ddMaster.Search.Reset();
                dialog.show();
            } else {
                console.error("missing wdwSearch");
            }
        },
        Cancel: function() {
            var dialog = $find(IDs.wdwSearch);
            if (dialog) {
                dialog.hide();
            } else {
                console.error("missing wdwSearch");
            }
        },
        Reset: function() {
            var xForm = $("#SearchForm");
            if (xForm.css("display") == 'none') {
                $("#SearchResults").hide(ddMaster.Search.searchFX, {}, 500, function() {
                    xForm.show(ddMaster.Search.searchFX, {}, 500);
                });
            }
        },
        Run: function() {
            $("#SearchResultsContent").html(ddMaster.Working());

            $("#SearchForm").hide(ddMaster.Search.searchFX, {}, 500, function() {
                $("#SearchResults").show(ddMaster.Search.searchFX, {}, 500);
            });

            //THIS IS WHERE THE SEARCH IS DONE     
            var keywords = $('#' + IDs.txtKeywords).val();
            keywords = keywords ? keywords : '?';

            PageMethods.UserSearch(keywords, ddMaster.Search.onSearchSuccess, ddMaster.Search.onSearchError);
        },
        onSearchSuccess: function(results) {
            var html = "<ul>";

            if (!results || results.length == 0) {
                html += "<li>no results found!</li>"
            } else {
                for (var i = 0; i < results.length; i++) {
                    var result = results[i];
                    html += '<li><a href="' + result.Url + '" title="' + result.ToolTip + '">' + result.Title + '</a></li>';
                }
            }
            html += '</ul>';
            $("#SearchResultsContent").html(html);

        },
        onSearchError: function(result) {
            var html = '<div style="color:#900;">error searching!</div>';
            $("#SearchResultsContent").html(html);
        }
    },
    Intro: {
        pageIntroContent: null,
        pageIntroBtn: null,
        pageIntroCookieKey: "PageIntroState",
        TogglePageIntro: function(parentID) {
            var fx = "blind";
            var speed = 200;

            if (!ddMaster.Intro.pageIntroContent || !ddMaster.Intro.pageIntroBtn) {
                var parent = $("#" + parentID);
                ddMaster.Intro.pageIntroContent = $(".page-intro-content", parent);
                ddMaster.Intro.pageIntroBtn = $(".page-intro-button", parent);
            }

            if (ddMaster.Intro.pageIntroContent) {
                if (ddMaster.Intro.pageIntroContent.css("display") == "none") {
                    ddMaster.Intro.pageIntroContent.show(fx, {}, speed, ddMaster.Intro.PageIntroCallback);
                } else {
                    ddMaster.Intro.pageIntroContent.hide(fx, {}, speed, ddMaster.Intro.PageIntroCallback);
                }
            }
        },
        PageIntroCallback: function() {
            if (ddMaster.Intro.pageIntroContent && ddMaster.Intro.pageIntroBtn) {
                if (ddMaster.Intro.pageIntroContent.css("display") == "none") {
                    ddMaster.Intro.pageIntroBtn.html("(click to see page introduction)");
                    ddMaster.Intro.pageIntroBtn.css("background-image", "url(images/art/ir-down.png)");
                    $.cookie(ddMaster.Intro.pageIntroCookieKey, "hide", { expires: 10000 });
                } else {
                    ddMaster.Intro.pageIntroBtn.html("(click to hide)");
                    ddMaster.Intro.pageIntroBtn.css("background-image", "url(images/art/ir-up.png)");
                    $.cookie(ddMaster.Intro.pageIntroCookieKey, "show", { expires: 10000 });
                }
            }
        }
    },
    DialogBox: {
        Show: function(text) {
            var dialog = $find(IDs.wdwInfo);
            var content = $('#wdwInfo_content');
            if (dialog && content) {
                content.html(text);
                dialog.show();
            } else {
                console.error("missing wdwInfo");
            }

        },
        Hide: function() {
            var dialog = $find(IDs.wdwInfo);
            if (dialog) {
                dialog.hide();
            } else {
                console.error("missing wdwInfo");
            }

        }
    },
    Working: function() {
        return '<div class="working">Searching...</div>';
    },
    Pulse: function(ctrl) {
        var $ctrl = $(ctrl);
        if ($ctrl) {
            $ctrl.animate({ opacity: .8 }, 500).animate({ opacity: .3 }, 1000).animate({ opacity: 1 }, 5000);

        }
    }
};


//setup console
try {
    if (!("console" in window) || !("firebug" in console)) {
        window.console = {};
        //simulate logging by sending to alert        
        var names = ["log", "debug", "info", "warn", "error"];
        for (var i = 0; i < names.length; ++i) {
            window.console[names[i]] = function() { for (var i = 0; i < arguments.length;  i++) { alert(arguments[i]); } };
        }
        //add the reset just in case
        names = ["assert",
             "dir", "dirxml", "group", "groupEnd", "time",
             "timeEnd", "count", "trace", "profile", "profileEnd"];
        for (var i = 0; i < names.length; ++i) {
            window.console[names[i]] = function() { };
        }

    }
} catch (e) { }
