/********************************************************
*	(C)2006-2007 Creuna AB KeySubmit.js
*		
*	This script set external pages to be targeted in
*   a new window and also fixes a lot of compatibility
*   issues with the CSS standard for Internet Explorer
*	  
*********************************************************/


var PageInitializer = new function() {

    var m_ActiveClass = " ie-active";
    var m_ActiveRegEx = new RegExp(m_ActiveClass + "\\b");
    var m_PrevActiveClass = " prev-ie-active";
    var m_PrevActiveRegEx = new RegExp(m_PrevActiveClass + "\\b");
    var m_TargetClass = " ie-target";
    var m_TargetRegEx = new RegExp(m_TargetClass + "\\b");
    var m_TargetedClass = " ie-targeted";
    var m_TargetedRegEx = new RegExp(m_TargetedClass + "\\b");
    var m_MenuHoverClass = " ie-hover";
    var m_MenuHoverRegEx = new RegExp(m_MenuHoverClass + "\\b");
    var m_UrlHash = "";
    var m_IFrame = null;
    var m_PortletEditView = null;

    this.Prepare = function() {
        var node = document.documentElement;
        if (!node) {
            node = document.getElementsByTagName("body")[0];
        }
        if (node.className == null || node.className.match(/\bhasJavascript\b/) == null) {
            var append = "hasJavascript";
            var className = node.className;
            node.className = className == null ? append : className.replace(/\s+/g, " ") + (className == "" ? "" : " ") + append;
        }
    }


    this.OnLoad = function() {
        PageInitializer.InitializeExternalLinks();
        if (PageInitializer.IsIE()) {
            PageInitializer.InitializeInputs();
            PageInitializer.InitializeButtons();
            if (PageInitializer.PreIE7()) {
                PageInitializer.InitializeHover();
            }
            document.onpropertychange = PageInitializer.OnTargetChanged;
        }
        PageInitializer.InitializeTables();
    }

    this.InEPiServerEditView = function() {
        if (m_PortletEditView == null) {
            m_PortletEditView = (document.location.href.indexOf("PortletEditView=true") >= 0);
            if (window.parent.name == "EditPanel") { m_PortletEditView = true; }
        }
        return m_PortletEditView;
    }

    this.InitializeExternalLinks = function() {

        if (!document.getElementsByTagName)
            return;

        var anchors = document.getElementsByTagName("a");

        for (var i = 0; i < anchors.length; i++) {
            var anchor = anchors[i];
            var href = anchor.getAttribute("href");
            if (href != null) {
                if (this.IsIE()) {
                    this.AddMailtoClass(anchor, href);
                    var spanElement = document.createElement("span");
                    spanElement.className = "anchor-end";
                    //spanElement.innerHtml = "<!-- Anchor End -->";
                    anchor.appendChild(spanElement);
                }
                var rel = anchor.getAttribute("rel");
                var email = this.IsEmailLink(href);
                var file = this.IsFileLink(href, rel);
                var external = this.IsExternalLink(href, rel);
                if (!email && (external || file)) {
                    if (anchor.target != null) {
                        anchor.target = "_blank";
                        if (this.IsIE()) {
                            if (file) {
                                anchor.className += " file";
                                this.AddExtensionClass(anchor, href);
                            } else {
                                anchor.className += " external";
                            }
                        }
                    }
                }
            }
        }
    }

    this.IsExternalLink = function(href, rel) {
        if (document.location.pathname != null) {
            var host = document.location.href.substring(0, document.location.href.indexOf(document.location.pathname));
            if (href.indexOf(host) == 0) {
                return false;
            }
        }
        var s = href.substring(0, 1);
        return (rel == "external" || (s != "/" && s != "#"));
    }

    this.IsFileLink = function(href, rel) {
        var extension = "";
        var dotIndex = href.lastIndexOf(".");
        var questionIndex = href.indexOf("?");
        if (dotIndex > 0 && questionIndex < 0) {
            extension = href.slice(dotIndex + 1);
            var slashIndex = extension.indexOf("/");
            if (slashIndex > 0) {
                extension = "";
            }
            var hashIndex = extension.indexOf("#");
            if (hashIndex > 0) {
                extension = extension.substring(0, hashIndex);
            }
        }
        if (href == "../../Web/Core/Frameworks/Example") {
            alert(extension);
        }
        return (rel == "file" || (extension != "" && extension != "htm" && extension != "html" && extension != "aspx" && extension != "asp" && extension != "jsp" && extension != "php"));
    }

    this.IsEmailLink = function(href) {
        return href.indexOf("mailto:") == 0;
    }

    this.ShowHideClosedGroupSettings = function(state) {
        var cgsDiv = document.getElementById("closedGroupSettings");
        if (cgsDiv != null) {
            if (state == "closed")
                cgsDiv.style.display = "block";
            else
                cgsDiv.style.display = "none";
        }
    }

    this.InitializeTables = function() {

        if (!document.getElementsByTagName)
            return;

        var tables = document.getElementsByTagName("table");

        var EVEN = false;
        var ODD = true;

        for (var i = 0; i < tables.length; i++) {
            var table = tables[i];

            if (table.cellPadding == null || table.cellPadding == "") {
                table.cellPadding = "0";
            }
            if (table.cellSpacing == null || table.cellSpacing == "") {
                table.cellSpacing = "0";
            }

            if (table.className.indexOf("sortable") == -1) {
                var tbody = table.getElementsByTagName("tbody")[0];
                var currentState = EVEN;

                var rows = table.getElementsByTagName("tr");

                for (var j = 0; j < rows.length; j++) {
                    var tr = rows[j];
                    var isHeadingRow = tr.getElementsByTagName("th").length > 0;

                    if (isHeadingRow) {
                        currentState = EVEN;
                    } else {
                        if (currentState == EVEN) {
                            tr.className += " even";
                        } else {
                            tr.className += " odd";
                        }
                        currentState = !currentState;
                    }
                }
            }
        }
    }

    /**************************************
    IE Repairing Scripts START
    **************************************/

    this.OnTargetChanged = function() {
        if (document.location.hash != m_UrlHash) {
            if (m_UrlHash != "") {
                var oldTarget = document.getElementById(m_UrlHash.slice(1));
                if (oldTarget != null) {
                    oldTarget.className = oldTarget.className.replace(m_TargetRegEx, "");
                    if (oldTarget.nextSibling != null) {
                        oldTarget.nextSibling.className = oldTarget.nextSibling.className.replace(m_TargetedRegEx, "");
                    }
                }
            }
            m_UrlHash = document.location.hash;
            if (m_UrlHash != "") {
                var newTarget = document.getElementById(m_UrlHash.slice(1));
                if (newTarget != null) {
                    newTarget.className += m_TargetClass;
                    if (newTarget.nextSibling != null) {
                        newTarget.nextSibling.className += m_TargetedClass;
                    }

                }
            }
        }
    }

    this.AddMailtoClass = function(anchor, href) {
        if (this.IsEmailLink(href))
            anchor.className += " mailto";
    }

    this.AddExtensionClass = function(anchor, href) {
        var index = href.lastIndexOf(".");
        if (index > 0) {
            anchor.className += " ext-" + href.slice(index + 1);
        }
    }

    this.InitializeInputs = function() {
        var inputs = document.getElementsByTagName("input");
        for (var i = 0; i < inputs.length; i++) {
            var input = inputs[i];
            input.className += " input-" + input.getAttribute("type");
        }
    }

    this.InitializeButtons = function() {
        var buttons = document.getElementsByTagName("button");
        for (var i = 0; i < buttons.length; i++) {
            var button = buttons[i];
            button.onmousedown = this.ButtonActivated;
            button.onmouseenter = this.ButtonDeactivated;
            button.onmouseleave = this.ButtonDeactivated;
            if (button.disabled) {
                button.className += " disabled";
            }
            if (/\bprev\b/.exec(button.className)) {
                button.onmousedown = this.PrevButtonActivated;
                button.onmouseenter = this.PrevButtonDeactivated;
                button.onmouseleave = this.PrevButtonDeactivated;
            }
        }
    }

    this.InitializeHover = function() {
        var changelanguage = document.getElementById("changelanguagecontainer");
        if (changelanguage != null) {
            changelanguage.onmouseenter = this.MenuOnMouseOver;
            changelanguage.onmouseleave = this.MenuOnMouseOut;
        }
        var feedcontainer = document.getElementById("feedcontainer");
        if (feedcontainer != null) {
            feedcontainer.onmouseenter = this.MenuOnMouseOver;
            feedcontainer.onmouseleave = this.MenuOnMouseOut;
        }
        var accounts = document.getElementById("accounts");
        if (accounts != null) {
            accounts.onmouseenter = this.MenuOnMouseOver;
            accounts.onmouseleave = this.MenuOnMouseOut;
        }
        var loggedInInfo = document.getElementById("logged-in-info");
        if (loggedInInfo != null) {
            var buttons = loggedInInfo.getElementsByTagName("button");
            if (buttons.length > 0) {
                buttons[0].onmouseenter = this.MenuOnMouseOver;
                buttons[0].onmouseleave = this.MenuOnMouseOut;
            }
        }
        var productFaq = document.getElementById("faqitem");
        if (productFaq != null) {
            var dataterms = productFaq.getElementsByTagName("dt");
            for (var i = 0; i < dataterms.length; i++) {
                dataterms[i].onmouseenter = this.MenuOnMouseOver;
                dataterms[i].onmouseleave = this.MenuOnMouseOut;
            }
        }
    }

    this.ButtonActivated = function() {
        this.className += m_ActiveClass;
    }

    this.ButtonDeactivated = function() {
        this.className = this.className.replace(m_ActiveRegEx, "");
    }

    this.PrevButtonActivated = function() {
        this.className += " prev-ie-active";
    }

    this.PrevButtonDeactivated = function() {
        this.className = this.className.replace(m_PrevActiveRegEx, "");
    }

    this.MenuOnMouseOver = function() {
        this.className += m_MenuHoverClass;
    }

    this.MenuOnMouseOut = function() {
        this.className = this.className.replace(m_MenuHoverRegEx, "");
    }

    this.IsIE = function() {
        var agt = navigator.userAgent.toLowerCase();
        return ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
    }

    this.PreIE7 = function() {
        var agt = navigator.userAgent.toLowerCase();
        return (((agt.indexOf("msie 5") != -1) || (agt.indexOf("msie 6") != -1)) && (agt.indexOf("opera") == -1));
    }

    /**************************************
    IE Repairing Scripts END
    **************************************/

}
PageInitializer.Prepare();
if(document.addEventListener)
	document.addEventListener("load", PageInitializer.OnLoad, false);
if(window.addEventListener)
	window.addEventListener("load", PageInitializer.OnLoad, false);
else if(window.attachEvent)
	window.attachEvent("onload", PageInitializer.OnLoad);


