﻿/********************************************************
*	(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.OnLoad = function() {
        //PageInitializer.InitializeExternalLinks();
        if (PageInitializer.IsIE()) {
            PageInitializer.InitializeInputs();
            PageInitializer.InitializeButtons();
            if (PageInitializer.PreIE7()) {
                PageInitializer.InitializeHover();
            }
            //document.onpropertychange = PageInitializer.OnTargetChanged;
        }
        PageInitializer.InitializeTables();
    }

    this.InPortletEditView = function() {
        return isEditMode();
    }

    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 file = this.IsFileLink(href, rel);
                var external = this.IsExternalLink(href, rel);
                if (external || file) {
                    //anchor.className += " ext";
                    //anchor.setAttribute("title", "Länken leder till en annan webbplats");
                    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 || href.indexOf("mailto") == 0) {
                return false;
            }
        }
        var s = href.substring(0, 1);
        return (rel == "external" || (s != "/" && s != "#"));
    }

    this.IsFileLink = function(href, rel) {
        var extension = "";
        var index1 = href.lastIndexOf(".");
        var index2 = href.indexOf("?");
        if (index1 > 0 && index2 < 0) {
            extension = href.slice(index1 + 1);
            if (extension.indexOf("/") > 0)
                extension = "";
        }
        return (rel == "file" || (extension != "" && extension != "htm" && extension != "html" && extension != "aspx"));
    }

    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.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 (href.indexOf("mailto:") == 0)
            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;
        }
    }


    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
    **************************************/



    /**************************************
    Helper methods
    **************************************/

    function isEditMode() {
        var frame;
        var wnd = this.window;

        while (wnd != null) {
            try {
                if (wnd.commandEvent && wnd.latestNavigate != null && wnd.latestNavigate != '')
                    return true;
            }
            catch (e) {
                return false;
            }
            if (wnd == wnd.parent)
                break;
            wnd = wnd.parent;
        }
        return false;
    }

}
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);

