﻿/* This script requires Prototype and is meant to be included on all Designer based pages */

function writeToConsole(str) {
    if (typeof (console) != "undefined") {
        console.log(str);
    }
}

// TODO: Since it is no longer necessary to special detect Safari on Macs consider deleting the browser detection

var BrowserDetect = {
    init: function() {
        this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
        this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
        this.OS = this.searchString(this.dataOS) || "an unknown OS";
    },
    searchString: function(data) {
        for (var i = 0; i < data.length; i++) {
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            this.versionSearchString = data[i].versionSearch || data[i].identity;
            if (dataString) {
                if (dataString.indexOf(data[i].subString) != -1)
                    return data[i].identity;
            }
            else if (dataProp)
                return data[i].identity;
        }
    },
    searchVersion: function(dataString) {
        var index = dataString.indexOf(this.versionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index + this.versionSearchString.length + 1));
    },
    dataBrowser: [
		{
		    string: navigator.userAgent,
		    subString: "Chrome",
		    identity: "Chrome"
		},
		{ string: navigator.userAgent,
		    subString: "OmniWeb",
		    versionSearch: "OmniWeb/",
		    identity: "OmniWeb"
		},
		{
		    string: navigator.vendor,
		    subString: "Apple",
		    identity: "Safari",
		    versionSearch: "Version"
		},
		{
		    prop: window.opera,
		    identity: "Opera"
		},
		{
		    string: navigator.vendor,
		    subString: "iCab",
		    identity: "iCab"
		},
		{
		    string: navigator.vendor,
		    subString: "KDE",
		    identity: "Konqueror"
		},
		{
		    string: navigator.userAgent,
		    subString: "Firefox",
		    identity: "Firefox"
		},
		{
		    string: navigator.vendor,
		    subString: "Camino",
		    identity: "Camino"
		},
		{		// for newer Netscapes (6+)
		    string: navigator.userAgent,
		    subString: "Netscape",
		    identity: "Netscape"
		},
		{
		    string: navigator.userAgent,
		    subString: "MSIE",
		    identity: "Explorer",
		    versionSearch: "MSIE"
		},
		{
		    string: navigator.userAgent,
		    subString: "Gecko",
		    identity: "Mozilla",
		    versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
		    string: navigator.userAgent,
		    subString: "Mozilla",
		    identity: "Netscape",
		    versionSearch: "Mozilla"
		}
	],
    dataOS: [
		{
		    string: navigator.platform,
		    subString: "Win",
		    identity: "Windows"
		},
		{
		    string: navigator.platform,
		    subString: "Mac",
		    identity: "Mac"
		},
		{
		    string: navigator.userAgent,
		    subString: "iPhone",
		    identity: "iPhone/iPod"
		},
		{
		    string: navigator.platform,
		    subString: "Linux",
		    identity: "Linux"
		}
	]

};
BrowserDetect.init();

/* ------------------------------------------------------- EqualHeight of columns ------------------------------------------------------- */

///Identisk med MakeChildrenEqualHeight, bortset fra at denne
//metode, resetter højden først. (auto).
function ResetAndFillSiblingsHeights(id){  

    var elems = $$('#' + id + '>div');
    
    var biggestHeight = elems.max(function(elem){
        if (elem.getStyle("float") != 'none'){
        
            // Remeber the original height
            if (elem.originalHeight == undefined){
                elem.originalHeight = elem.style.height;
            }
            
            //First reset height
            elem.style.height = elem.originalHeight;        
        
            return elem.getHeight();
        }
    });

    elems.each(function(elem) {
        if (elem.getStyle("float") != 'none'){
            elem.setStyle({ height: biggestHeight + 'px' });
        }
    });

    //$(id).setStyle({ height: (biggestHeight) + 'px' });
}

function ClearHeight(id)
{
    $(id).style.height = "auto";
    var elems = $$('#' + $(id).id + ">div");
    elems.each(function(elem)
    {
        if (elem.getStyle("float") == 'left' || elem.getStyle("float") == 'right') 
        {
            elem.style.height = "auto";
        }
    });
}

function MakeChildrenEqualHeight(id) {
    var biggestHeight = 0;
    var elems = $$('#' + id + ">div");
    elems.each(function(elem){
        if (elem.getStyle("float") == 'left' || elem.getStyle("float") == 'right') {
                        
            var height = elem.getHeight();

            if (biggestHeight < height){
                biggestHeight = height;
            }
        }
    });  

    elems.each(function(elem) {
        if (elem.getStyle("float") == 'left' || elem.getStyle("float") == 'right') {
            elem.setStyle({ height: (biggestHeight) + 'px' });
        }
    });

    $(id).setStyle({ height: (biggestHeight) + 'px' });
}

function FillHeights(elem) {

    var parentHeight = $(elem.parentNode).getHeight();

    var heightOfChildrenMinusFiller = 0;
    var filler = null;

    $(elem.parentNode.id).childElements().each(function(child) {
        if (child.hasClassName('filler')) {
            filler = child;
        } else {
            heightOfChildrenMinusFiller = heightOfChildrenMinusFiller + child.getHeight();
        }
    });

    if(parentHeight - heightOfChildrenMinusFiller > 0)
    {
        elem.setStyle({height:(parentHeight - heightOfChildrenMinusFiller)+ "px" });
    }
}


//Denne metode kaldes mens en scripttacolues effekt kører.
//Den sørger for at resette den faste højde fra EnforceAsTableCssClass, og sætte
//højden til den nye højde.
function EnforceAsTableCssClassAncestors(Id)
{
    $(Id).ancestors().each(function(ancestor)
    {
        if($(ancestor).hasClassName("asTable"))
        {
            ResetAndFillSiblingsHeights(ancestor.id);
        }
    });
}

// This function finds all elements with the asTable class, and makes their childrens height equal.
function EnforceAsTableCssClass() {
    $$('.asTable').each(function(elem) { ResetAndFillSiblingsHeights(elem.id); });
}

function EnforceFillHeight() {
    $$('.fillHeight').each(function(elem) { FillHeights(elem); });
}

function ClearEnforceAsTableCssClass(Id)
{
    $(Id).ancestors().each(function(ancestor)
    {
        if($(ancestor).hasClassName("asTable"))
        {
            ClearHeight(ancestor);
        }
    });
}

function EnforceJavaScriptCssClasses() {
    EnforceAsTableCssClass();
    EnforceFillHeight();
}

Event.observe(window, 'load', function() {
    EnforceJavaScriptCssClasses();
    setTimeout(EnforceJavaScriptCssClasses, 500);
});

var focusId = '';
var focusListeners = [];
var focusStateTable = $H();

function setFocus(newId) {
    if (newId != '') {
        focusStateTable.set(newId, 'set');
    }
    
    if (newId != focusId) {
        focusListeners.each(function(func) { func(focusId, newId); });
        focusId = newId;
    }
}

function toogleFocus(newId) {
    if (focusId == newId) {
        setFocus('');
    }
    else {
        setFocus(newId);
    }
}

function safeRemove(id) { 
    if (focusStateTable.get(id) == 'remove') {
        setFocus('');
    }
}

function removeFocus(id) {
    focusStateTable.set(id, 'remove');
    setTimeout('safeRemove(\"' + id + '\")', 150);
}

function addFocusListener(func) {
    focusListeners.push(func);
}

