﻿/* EVENTHANDLER FOR DOMONLOAD
//## ADD FUNCTIONS THAT SHOULD RUN ON DOM LOAD
----------------------------------------------------*/
var onPageLoad = function() {

    addColspanToTh();
    addIdToClonetable();
    if (navigator.appVersion.indexOf("MSIE") != -1) {
        setHeights();
    }
    initPlate();
    createHeaderClone();
    loadTooltips();
    graphLinks();

    initPrintBasket();

    externalLinks();

    /*Prevent IE 6 background flickering*/
    try { document.execCommand('BackgroundImageCache', false, true) } catch (err) { };
};

var getElementsByClassName = function(a, b, c) { var d = (b == '*' && a.all) ? a.all : a.getElementsByTagName(b), arrReturnElements = new Array(); c = c.replace(/\-/g, '\\-'); var e = new RegExp('(^|\\s)' + c + '(\\s|$)'), oElement = null; for (var i = 0, n = d.length; i < n; i++) { oElement = d[i]; if (e.test(oElement.className)) arrReturnElements.push(oElement) }; return (arrReturnElements) };
var addEvent = function(obj, type, fn) { if (obj.addEventListener) { obj.addEventListener(type, fn, false); EventCache.add(obj, type, fn) } else if (obj.attachEvent) { obj['e' + type + fn] = fn; obj[type + fn] = function() { obj['e' + type + fn](window.event) }; obj.attachEvent('on' + type, obj[type + fn]); EventCache.add(obj, type, fn); } else { obj['on' + type] = obj['e' + type + fn] } }
var EventCache = function() { var listEvents = []; return { listEvents: listEvents, add: function(node, sEventName, fHandler) { listEvents.push(arguments) }, flush: function() { var i, item; for (i = listEvents.length - 1; i >= 0; i = i - 1) { item = listEvents[i]; if (item[0].removeEventListener) { item[0].removeEventListener(item[1], item[2], item[3]) } if (item[1].substring(0, 2) != 'on') { item[1] = 'on' + item[1] }; if (item[0].detachEvent) { item[0].detachEvent(item[1], item[2]) }; item[0][item[1]] = null } } } } ();
var removeEvent = function(obj, type, fn) { if (obj.removeEventListener) { obj.removeEventListener(type, fn, false) } else if (obj.detachEvent) { obj.detachEvent('on' + type, obj[type + fn]); obj[type + fn] = null; obj['e' + type + fn] = null } }
var getElementsByAttribute = function(a, b, c, d) { var e = (b == '*' && a.all) ? a.all : a.getElementsByTagName(b); var f = new Array(), g = (typeof d != 'undefined') ? new RegExp("(^|\\s)" + d + "(\\s|$)") : null, h, j; for (var i = 0, n = e.length; i < n; i++) { h = e[i]; j = h.getAttribute && h.getAttribute(c); if (typeof j == 'string' && j.length > 0) { if (typeof d == 'undefined' || (g && g.test(j))) { f.push(h) } } } return f }
var $ = function(elm) { return document.getElementById(elm); }
var cssjs = function(a, o, c1, c2) {
	if (o == null) { return };
	switch (a) {
		case 'swap':
			o.className = !DOMhelp.cssjs('check', o, c1) ? o.className.replace(c2, c1) : o.className.replace(c1, c2);
			break;
		case 'add':
			if (!DOMhelp.cssjs('check', o, c1)) { o.className += o.className ? ' ' + c1 : c1; }
			break;
		case 'remove':
			var rep = o.className.match(' ' + c1) ? ' ' + c1 : c1;
			o.className = o.className.replace(rep, '');
			break;
		case 'check':
			var found = false;
			var temparray = o.className.split(' ');
			for (var i = 0; i < temparray.length; i++) {
				if (temparray[i] == c1) { found = true; }
			}
			return found;
			break;
	}
}

/* IS IE
----------------------------------------------------*/
var isIE = /*@cc_on!@*/false;
var isIE6 = false/*@cc_on || @_jscript_version < 5.7@*/;

/* FUNCTIONALITY FOR NEW TOOLTIPS
----------------------------------------------------*/
var externalLinks = function() {
    var re = /^(https?:\/\/[^\/]+).*$/;
    var currentHref = window.location.href.replace(re, '$1');

    var reLocal = new RegExp('^' + currentHref.replace(/\./, '\\.'));
    var arrTipElems = document.getElementsByTagName("a");
    for (var j = 0, m = arrTipElems.length; j < m; j++) {
        var a = arrTipElems[j];
        var href = a.href;
        if (href == '' || reLocal.test(href) || !/^http/.test(href))
            continue;
        if (a.className != undefined) {
            a.className += ' external';
        }
        else {
            a.className = 'external';
        }
    }
}


/* FUNCTIONALITY FOR NEW TOOLTIPS
----------------------------------------------------*/
var loadTooltips = function() {
	var arrTipElems = getElementsByClassName(document, "a", "tooltips");
	for (var j = 0, m = arrTipElems.length; j < m; j++) {
		var intElems = arrTipElems[j];
		var intElems = DOM.ChildNodes(intElems);
		for (var i = 0, n = intElems.length; i < n; i++) {
			var TipElm = arrTipElems[i];
			if (TipElm.getAttribute('title')) {
				addEvent(intElems[i], 'mouseover', DisplayTooltip);
			}
		}
	}
}

/*new*/
var arrObjHolder = new Array();

/* DISPLAY TOOLTIP
----------------------------------------------------*/
var DisplayTooltip = function(event) {

	//var elmTitle = this.getAttribute('title');
	var linkEle = this.parentNode;
	var elmTitle = linkEle.getAttribute('title');
	if (!elmTitle) return;
	linkEle.setAttribute('rel', elmTitle);
	linkEle.setAttribute('title', '');

	if ($('tooltip-container')) {
		this.div = $('tooltip-container');
	} else {
		this.div = document.createElement('div');
		this.div.id = 'tooltip-container';
	}

	arrObjHolder['infoLyr'] = this.div;
	if (document.all) {
		x = event.clientX + document.body.scrollLeft;
		y = event.clientY + document.documentElement.scrollTop;
	} else {
		x = event.pageX;
		y = event.pageY;
	}
	if (x < 0) { x = -500; }
	if (y < 0) { y = -500; }
	this.div.style.left = (x - 30) + 'px';
	this.div.style.top = (y + 5) + 'px';
	this.div.zIndex = 1000;
	this.div.innerHTML = '<em>' + elmTitle + '</em>';
	document.getElementsByTagName('body')[0].appendChild(this.div);
	this.div.style.display = 'block';
	addEvent(this, 'mouseout', HideTooltip);
}

/* HIDE TOOLTIP
----------------------------------------------------*/
var HideTooltip = function() {
	arrObjHolder['infoLyr'].innerHTML = '';
	arrObjHolder['infoLyr'].style.display = 'none';
	var linkEle = this.parentNode;
	linkEle.setAttribute('title', linkEle.getAttribute('rel'));
}

/* INIT NAVIPLATE
----------------------------------------------------*/
var initPlate = function() {
	var wrap = getElementsByClassName(document, 'div', 'naviwrapper');
	for (var ii = 0; ii < wrap.length; ++ii) {
		naviwrapper = wrap[ii];
		var a = getElementsByClassName(naviwrapper, 'div', 'naviplate');
		var n = a.length;
		if (n < 1) return;
		var b = document.createElement('ul');
		for (var i = 0; i < n; i++) {
			var c = a[i];
			if (!c || !c.childNodes) return;
			var d = c.getElementsByTagName('H2')[0];
			if (!d) return;
			var e = d.getElementsByTagName('SPAN')[0].innerHTML;
			var f = e.EscapeString2();
			var g = document.createElement('LI');
			var h = document.createElement('A');
			var s = document.createElement('SPAN');
			var j = document.createAttribute('HREF');
			j.nodeValue = '#' + f;
			h.setAttributeNode(j);
			var j = document.createAttribute('REL');
			j.nodeValue = f;
			h.setAttributeNode(j);
			var k = document.createTextNode(e);
			h.appendChild(s);
			s.appendChild(k);
			h.href = '#' + f;
			//h.rel='#'+f;
			DOMhelp.setAttribute(h, 'rel', '#' + c.id);
			if (d.className == 'tabstart') {
				g.className = 'selected'
			} else {
				c.style.display = 'none'
			}
			d.style.position = 'absolute';
			d.style.left = '-9999em';
			g.appendChild(h);
			b.appendChild(g);
		};
		naviwrapper.insertBefore(b, naviwrapper.firstChild);
		naviwrapper.getElementsByTagName('ul')[0].style.display = 'block';
		var naviClick = naviwrapper.getElementsByTagName('ul')[0].getElementsByTagName('a');
		for (var i = 0, n = naviClick.length, elm = null; i < n; i++) {
			elm = naviClick[i];
			var target = $(elm.rel.replace('#', ''));
			addEvent(elm, 'click', getNaviPlate);
		}
	}
}
var getNaviPlate = function(e) {
	CancelEvent(e);
	var parentElm = DOMhelp.getTarget(e);
	var parent = parentElm.parentNode;
	var liTab = parent.parentNode;
	liTab = liTab.parentNode;
	liTab = liTab.getElementsByTagName('li');
	for (var i = 0, n = liTab.length, elm = null; i < n; i++) {
		var elm = liTab[i];
		elm.className = "";
		var target = $(elm.getElementsByTagName('a')[0].rel.replace('#', ''));
		target.style.display = 'none';
	}
	var liEle = parent.parentNode;
	liEle.className = 'selected';
	var target = $(parent.rel.replace('#', ''))
	target.style.display = 'block';
	var clonedTable = $('clonedtable'); if (!clonedTable) return;
	clonedTable.style.display = (clonedTable.style.display == 'none') ? 'block' : 'none';
}
/*Introduction the the cod
----------------------------------------------------*/
/* the following classes are added through backend code:
level0, level1, bold, sum
level0: indicates that a severe amount of sibling rows can be hidden by clicking on the level0 element
level1: sibling of level0 element and contains a graph and a link to open a popup when clicked on the element; is grouped in the excel file
bold: a row is marked bold in the excel-file
sum: a sum row; the sum row shall contain a graph and link to a popup but always visible
annotation: 1) sum rows in the excel-file get level0 as their class name; for easier handling, this class name is changed to level1 via js
2) grouped elements are visualized as a graph under the "Graph" tab.

/* ClASS NAME HEADINGS AND RESULTS IN TABLE
----------------------------------------------------*/
//adds colspan to level0 elements and changes the class of level0 elements, which should act as level1 elements, to level1 (i.d. sum rows)
var addColspanToTh = function() {
	if (!$('clonetable')) { return };
	var tr0s = DOM.GetByAttribute($('clonetable'), 'tr', 'class', 'level0');
	var x = 0;
	while (tr0s[x].childNodes.length < 2) {
		x++;
		Console.Info("tr: " + tr0s[x].id);
	}
	Console.Info("tr ute: " +tr0s[x].className);
	var num = tr0s[x].childNodes.length;
	var num = num.toString();
	Console.Info(num);

	for (var i = 0, n = tr0s.length, ele = null; i < n; i++) {
		ele = tr0s[i];
		if (ele.childNodes.length < 2) {
			var th = DOM.FirstChild(ele);
			var prevRow = DOM.PreviousSibling(ele);
			th.colSpan = num;
			cssjs('add', ele, 'show');
		}
		else {
			cssjs('swap', ele, 'level1', 'level0');
		}
	}
}



/* ADD ID TO CLONE TABLE
----------------------------------------------------*/
var addIdToClonetable = function() {
	var container = $('clonetable'); if (!container) return;
	container.parentNode.style.background = 'none';
	container.parentNode.style.paddingBottom = '0';
	var trs = DOM.GetByAttribute($('clonetable'), 'tr', 'class', '*');
	for (var j = 0, n = trs.length, elm = null; j < n; j++) {
		elm = trs[j];
		elm.id = j;
	}
}



/* ADD HEADER TO CLONED TABLE
----------------------------------------------------*/
var createHeaderClone = function() {
	var table = $('clonetable'); if (!table) return;
	var tableClone = table.cloneNode(true);

	var tableCloneContainer = DOMhelp.createEle('DIV', 'naviplate', 'clonedtable');
	tableCloneContainer.innerHTML = '<table>' + tableClone.innerHTML + '</table>';
	DOMhelp.addEle(tableCloneContainer, table.parentNode.parentNode);
	tableCloneContainer.style.background = '#fff';
	tableCloneContainer.style.paddingBottom = '0';
}

/* UPDATE CLONED TABLE
---------------------------------------------*/

var updateTableClone = function() {

	var table = $('clonedtable'); if (!table) return;
	DOM.Remove(table);
	createHeaderClone();
	graphLinks();
}

/* ADD A AND CLICK TO TABLE LINKS
----------------------------------------------------*/
var graphLinks = function() {
	var container = $('clonedtable'); if (!container) return;
	var trs = DOM.GetByAttribute($('clonedtable'), 'tr', 'class', 'level1');
	var childArray = [];
	for (var j = 0, n = trs.length, elm = null; j < n; j++) {
		elm = trs[j];
		var allElm = elm.getElementsByTagName('*');
		childArray.push(allElm);
		var divElm = childArray[j][1];
		var text = divElm.innerHTML;
		divElm.innerHTML = '';
		var clickEle = DOM.Create('A');
		clickEle.innerHTML = text;
		DOM.SetAttribute(clickEle, 'href', 'javascript:;');
		addEvent(clickEle, 'click', showHide);
		DOM.Add(clickEle, divElm);
	}
	var tr0s = DOM.GetByAttribute($('clonedtable'), 'tr', 'class', 'level0');
	var array = [];
	for (var i = 0, m = tr0s.length, ele = null; i < m; i++) {
		ele = tr0s[i];
		var allElm2 = ele.getElementsByTagName('*');
		array.push(allElm2);

		var divElm2 = array[i][1];
		var text1 = divElm2.innerHTML;
		divElm2.innerHTML = '';
		var clickEle2 = DOM.Create('A');
		clickEle2.innerHTML = text1;
		DOM.SetAttribute(clickEle2, 'href', 'javascript:;');
		addEvent(clickEle2, 'click', showHide);
		DOM.Add(clickEle2, divElm2);
	}
}

/* ADD A AND CLICK TO TABLE LINKS
----------------------------------------------------*/
var setHeights = function() {
    var container = $('clonetable'); if (!container) return;
    var trs = $('clonetable').getElementsByTagName('TR')
    for (var j = 0, n = trs.length, elm = null; j < n; j++) {
        elm = trs[j];
        var add = 0;
        if (elm.className.indexOf('show') != -1) {
            add = -10;
        }
        var allElm = elm.getElementsByTagName('TH');
        if (allElm.length > 0) {
            var divs = allElm[0].getElementsByTagName('DIV')
            if (divs.length > 0) {
                if (divs[0].offsetHeight+add < 10) {
                    add = 0;
                }
                divs[0].style.height = divs[0].offsetHeight + add + "px";
            }
        }
    }
}


/* TOGGLE GRAPHS
----------------------------------------------------*/
/* some explanation
----------------------------------------------------*/
// show/hide is applied on level0 elements
// hideSibl/showSibl is applied on level1 elements
// graphVisible/graphHide is applied to the dynamically created tr which contains a preview image of graph and the link to popup

var showHide = function(e) {
	CancelEvent(e);
	var parentId = this.parentNode.parentNode.parentNode.id;
	var parent = $(parentId);
	//tableContainer = container of clone table
	var tableContainer = parent.parentNode.parentNode.parentNode;
	var nexSibling = DOM.NextSibling(parent);
	var prevSibling = DOM.PreviousSibling(parent);
	// myRow = the respective row the click event took place
	var myRow = this.parentNode.parentNode.parentNode;
	var tableContainer = myRow.parentNode.parentNode.parentNode;
	//check if the parent (tr) of the event (a) has a class show
	if (cssjs('check', myRow, 'show')) {
		var level0Ele = this.parentNode.parentNode.parentNode;
		var level0 = $(level0Ele.id);
		var sibl = DOM.NextSibling(level0);
		//as long as the a sibling of the 'click'-row has a sibling with a class level1 or dynamic, change the class name to hideSibl and			//graphHide respectively
		// but the sum row (sum) shall always be visible
		while ((cssjs('check', sibl, 'level1') && !cssjs('check', sibl, 'sum')) || cssjs('check', sibl, 'dynamic')) {
			// if the row already has a showSibl, switch to hideSibl
			if (cssjs('check', sibl, 'showSibl')) {
				cssjs('swap', sibl, 'showSibl', 'hideSibl');
			}
			// the row "dynamic" is visible, switch to graphHide
			else if (cssjs('check', sibl, 'dynamic') && cssjs('check', sibl, 'graphVisible')) {
				cssjs('swap', sibl, 'graphVisible', 'graphHide');
			}
			// if the row is clicked the first time, add hideSibl
			else if (!cssjs('check', sibl, 'showSibl')) {
				cssjs('add', sibl, 'hideSibl');
			}
			sibl = DOM.NextSibling(sibl);
		}
		//when all siblings containg level1 are hidden change the class "show" on level0 to "hide"
		cssjs('swap', level0, 'hide', 'show');
	}
	//if the clicked element is a level1 row and does not yet have it's sibling row "dynamic", create it
	else if ((nexSibling == null && cssjs('check', myRow, 'level1')) || (!cssjs('check', nexSibling, 'dynamic') && cssjs('check', myRow, 'level1'))) {
		var rowEleClone = this.parentNode.parentNode.parentNode;
		var rowEle = $(rowEleClone.id);
		var tr = document.createElement('tr');
		var td = document.createElement('td');
		var rowEleNodes = rowEle.childNodes.length;
		var x = rowEleNodes.toString();
		DOM.SetAttribute(td, 'colspan', x);
		var div = document.createElement('div');
		var link = document.createElement('a');
		var img = document.createElement('img');
		var rowNumber = rowEle.getAttribute('id');
		var domain = document.domain;
		var url = window.location.pathname;
		url = "http://" + domain + url + "?" + getQS() + "&g=" + rowNumber;

		DOM.SetAttribute(img, 'src', url);
		DOM.SetAttribute(img, 'alt', 'graph');
		DOM.SetAttribute(img, 'width', '265');
		DOM.SetAttribute(img, 'height', '100');
		DOM.SetAttribute(link, 'href', 'javascript:;');



		//create the text-link for popup
		var link2 = document.createElement('a');
		link2.innerHTML = document.getElementById('enlargetext').value;
		DOM.SetAttribute(link2, 'class', 'enlargeImg');
		DOM.SetAttribute(link2, 'href', 'javascript:;');


		tableContainer.style.overflow = 'hidden';
		tableContainer.style.borderRight = '10px solid #f1f1f1';
		tableContainer.style.borderBottom = '10px solid #f1f1f1';

		DOM.Add(img, link);
		DOM.Add(link, div);
		DOM.Add(link2, div);
		DOM.Add(div, td);
		DOM.Add(td, tr);
		DOM.AddAfter(tr, parent);
		addEvent(link, 'click', graphpopup);
		addEvent(link2, 'click', graphpopup);
		
		//add the class name "dynamic" and "graphVisible" and the respective link
		td.style.textAlign = 'left';
		cssjs('add', tr, 'dynamic');
		cssjs('add', tr, 'graphVisible');
		cssjs('add', tr.previousSibling, 'showMe');
		DOM.SetAttribute(link, 'rel', 'g' + rowNumber);
		DOM.SetAttribute(link2, 'rel', 'g' + rowNumber);

	}
	else {

		if (cssjs('check', parent, 'hide')) {
			while (cssjs('check', nexSibling, 'hideSibl') || cssjs('check', nexSibling, 'dynamic')) {
				if (cssjs('check', nexSibling, 'hideSibl')) {
					cssjs('swap', nexSibling, 'hideSibl', 'showSibl');
				}
				else {
					cssjs('swap', nexSibling, 'graphHide', 'graphVisible');
				}
				nexSibling = DOM.NextSibling(nexSibling);
			}
			cssjs('swap', parent, 'show', 'hide');
		}
		else if (isIE) {
			tableContainer.style.overflow = (tableContainer.style.overflow == 'scroll') ? 'hidden' : 'scroll';
			tableContainer.style.borderRight = (tableContainer.style.borderRight == 'medium none') ? '10px solid #f1f1f1' : 'medium none';
			tableContainer.style.borderBottom = (tableContainer.style.borderBottom == 'medium none') ? '10px solid #f1f1f1' : 'medium none';
			(cssjs('check', nexSibling, 'graphVisible')) ? cssjs('swap', nexSibling, 'graphHide', 'graphVisible') : cssjs('swap', nexSibling, 'graphVisible', 'graphHide');
			(cssjs('check', parent, 'hideMe')) ? cssjs('swap', parent, 'showMe', 'hideMe') : cssjs('swap', parent, 'hideMe', 'showMe');
		}
		else {
			tableContainer.style.overflow = (tableContainer.style.overflow == 'scroll') ? 'hidden' : 'scroll';
			tableContainer.style.borderRight = (tableContainer.style.borderRight == 'medium none') ? '10px solid #f1f1f1' : 'medium none';
			tableContainer.style.borderBottom = (tableContainer.style.borderBottom == 'medium none') ? '10px solid #f1f1f1' : 'medium none';
			(cssjs('check', nexSibling, 'graphVisible')) ? cssjs('swap', nexSibling, 'graphHide', 'graphVisible') : cssjs('swap', nexSibling, 'graphVisible', 'graphHide');
			(cssjs('check', parent, 'hideMe')) ? cssjs('swap', parent, 'hideMe', 'showMe') : cssjs('swap', parent, 'showMe', 'hideMe');
		}
	}

	// update cloned table
	updateTableClone();
}




/* OPACITY FADE
----------------------------------------------------*/
var Fade = {
	In: function(uid, opacity) { if (typeof uid == 'object') { if (uid.id) { uid = uid.id; } else { var newUid = Guid(); DOM.SetAttribute(uid, 'id', newUid); uid = newUid; } } var obj = $(uid); if (!obj) return; obj.style.display = 'block'; if (opacity <= 100) { Fade.setOpacity(obj, opacity); opacity += 5; fadeTimer = window.setTimeout('Fade.In("' + uid + '",' + opacity + ')', 40) } else { Fade.setOpacity(obj, 100); obj.style.filter = ''; fadeTimer = null } },
	Out: function(uid, opacity) { if (typeof uid == 'object') { if (uid.id) { uid = uid.id; } else { var newUid = Guid(); DOM.SetAttribute(uid, 'id', newUid); uid = newUid; } } var obj = $(uid); if (!obj) return; if (opacity > 0) { Fade.setOpacity(obj, opacity); opacity -= 5; fadeTimer = window.setTimeout('Fade.Out("' + uid + '",' + opacity + ')', 30) } else { obj.style.display = 'none'; Fade.setOpacity(obj, 0); fadeTimer = null; } },
	setOpacity: function(obj, opacity) { if (!obj) return; obj.style.filter = 'alpha(style=0,opacity:' + opacity + ')'; obj.style.KHTMLOpacity = (opacity / 100); obj.style.MozOpacity = (opacity / 100); obj.style.opacity = (opacity / 100) }
};
/* CREATE GUID
----------------------------------------------------*/
var Guid = function() { var fakeGuid = '' + new Date().getTime() * Math.ceil(Math.random() * 100); fakeGuid = fakeGuid.substring(0, 12); return fakeGuid };

/* CANCEL EVENT
----------------------------------------------------*/
var CancelEvent = function(e) { if (e.preventDefault) { e.preventDefault() } else { e.returnResult = false }; if (e.stopPropagation) { e.stopPropagation() } else { e.cancelBubble = true; event.returnValue = false; } };

/* SHORTCUT: GET ELEMENT BY ID
----------------------------------------------------*/
var $ = function(elm) { return document.getElementById(elm); }

var Console = function() {
	return {
		Log: function(msg, args) { if (typeof console == 'undefined') return false; if (!args) args = ''; console.log(msg, args) },
		Info: function(msg, args) { if (typeof console == 'undefined') return false; if (!args) args = ''; console.info(msg, args) },
		Warn: function(msg, args) { if (typeof console == 'undefined') return false; if (!args) args = ''; console.warn(msg, args) },
		Error: function(msg, args) { if (typeof console == 'undefined') return false; if (!args) args = ''; console.error(msg, args) }
	}
} ();

/* GET SCREEN VIEWPORT
----------------------------------------------------*/
var getViewport = {
    Height: function() { if (typeof window.innerHeight != 'undefined') { return window.innerHeight } else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientHeight != 'undefined' && document.documentElement.clientHeight) { return document.documentElement.clientHeight } },
    Width: function() { if (typeof window.innerWidth != 'undefined') { return window.innerWidth } else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth) { return document.documentElement.clientWidth } }
};

var closePrintBasket = function() {
    var printBasket = DOM.GetByClassName(document, 'div', 'printbasket')[0];
    if (printBasket) {
        printBasket.style.display = 'none';
        $('printbasket-background').style.display = 'none';
    }
}
var initPrintBasket = function() {

    var printBasket = DOM.GetByClassName(document, 'div', 'printbasket')[0];
    if (printBasket) {
        
        printBasket.style.top = document.documentElement.scrollTop + 100 + 'px';

        var viewPort = getViewport.Height();
        var body = DOM.GetByClassName(printBasket, 'div', 'body');
        
        for (var i = 0; i < body.length; elm = null,  i++) {
            
            elm = body[i];     

            if (viewPort < 600) {
                elm.style.height = 300 + 'px';
            } else {
                elm.style.height = viewPort - 350 + 'px';
            }

        }

        var basketBackground = DOM.Create('div', '', 'printbasket-background');
        DOM.AddAfter(basketBackground, printBasket);
        Fade.setOpacity(basketBackground, 75);
        $('printbasket-background').style.height = $('mainwrapnarrow').offsetHeight + 'px';
        printBasket.style.left = (document.documentElement.offsetWidth / 2) - (printBasket.offsetWidth / 2) + 'px';
        addEvent($('printbasketx'), 'click', closePrintBasket);
        TABBOX.Init();
    }

};
var updatefilesize = function() {
    var itterator = parseInt(document.getElementById('selectedtab').value);
    var printBasket = DOM.GetByClassName(document, 'div', 'printbasket')[0];
    var areas = DOM.GetByClassName(printBasket, 'div', 'body');
    var boxes = areas[itterator].getElementsByTagName("INPUT");
    var size = 0;
    for (var i = 0; i < boxes.length; i++) {
        if (boxes[i].checked) {
            size = size + parseInt(boxes[i].value);
        }
    }
    var sizeTxt = size / 1024;
    if (sizeTxt > 1000) {
        sizeTxt = Math.round(10* sizeTxt / 1024)/10 + ' MB';
    } else {
        sizeTxt = Math.round(sizeTxt) + ' kB';
    }
    document.getElementById('printbasketsize').innerHTML = sizeTxt;
}
function get_cookie(cookie_name) {
    var results = document.cookie.match('(^|;) ?' + cookie_name + '=([^;]*)(;|$)');

    if (results)
        return (unescape(results[2]));
    else
        return null;
}
function addToBasket(id) {
    var c = get_cookie("printbasketitems");
    if (!c || ('|' + c + '|').indexOf('|' + id + '|') == -1) {
        if (!c) {
            c = id;
        } else {
            c = c + "|" + id;
        }
    }
    document.cookie = "printbasketitems=" + escape(c) + '; path=/';
    return false;
}

/* TABBOX
----------------------------------------------------*/
var TABBOX = {};
TABBOX.Init = function() {
    this.TabBoxes = DOM.GetByClassName(document, 'div', 'tabbox');
    var tab = null;
    var area = null;
    var link = null;
    for (var i = 0, n = this.TabBoxes.length; i < n; i++) {
        var tabbox = this.TabBoxes[i];
        var tabs = DOM.GetByClassName(tabbox, 'ul', 'tabs')[0].getElementsByTagName('LI');
        var areas = DOM.GetByClassName(tabbox, 'div', 'body');
        for (var x = 0, z = tabs.length; x < z; x++) {
            tab = tabs[x];
            area = areas[x];
            link = tab.getElementsByTagName('A')[0];
            addEvent(link, 'click', TABBOX.Toggle);
            if (x == 0) {
                tab.className = tab.className + ' active';
            } else {
                area.style.display = 'none';
            }
        }
        link.className = link.className + ' last';
    }
    updatefilesize();
};
TABBOX.Toggle = function() {
    var itterator = 0;
    var parent = this;
    var currentTab = parent.parentNode;
    while (parent.parentNode.className.indexOf('tabbox') == -1) {
        parent = parent.parentNode;
    }
    var tabbox = parent.parentNode;
    var tabs = DOM.GetByClassName(tabbox, 'ul', 'tabs')[0].getElementsByTagName('LI');
    var areas = DOM.GetByClassName(tabbox, 'div', 'body');
    for (var x = 0, z = tabs.length; x < z; x++) {
        tab = tabs[x];
        area = areas[x];
        link = tab.getElementsByTagName('A')[0];
        tab.className = tab.className.replace('active', '');
        area.style.display = 'none';
        if (tab == currentTab) {
            itterator = x;
        }
    }
    tabs[itterator].className = tabs[itterator].className + ' active';
    areas[itterator].style.display = 'block';
    document.getElementById('selectedtab').value = itterator;
    updatefilesize();
};

/* DOM HELPER
----------------------------------------------------*/
var DOM = {
	Get: function(elm) { if (typeof elm === 'string') { return document.getElementById(elm); } else { return elm; } },
	Create: function(tag, cssClass, id) { var tmp = document.createElement(tag); if (cssClass) { tmp.className = cssClass; } if (id) { tmp.id = id; } return tmp; },
	Remove: function(elm) { var elm = this.Get(elm); elm.parentNode.removeChild(elm) },
	Add: function(elm, target) { var elm = this.Get(elm); var target = this.Get(target); target.appendChild(elm); },
	AddFirst: function(elm, target) { var elm = this.Get(elm); var target = this.Get(target); target.insertBefore(elm, DOM.ChildNodes(target)[0]); },
	AddAfter: function(elm, target) { var parent = target.parentNode; if (DOM.LastChild(parent) == target) { parent.appendChild(elm) } else { parent.insertBefore(elm, DOM.NextSibling(target)) } },
	AddBefore: function(elm, target) { var parent = target.parentNode; parent.insertBefore(elm, target); },
	SetAttribute: function(elm, type, value) { var t = document.createAttribute(type); t.nodeValue = value; elm.setAttributeNode(t); },
	GetAttribute: function(elm, attrib) { for (var q = 0, qn = elm.attributes.length; q < qn; q++) { if (elm.attributes[q].nodeName.toLowerCase() == attrib) { return elm.attributes[q].nodeValue; } } },
	PreviousSibling: function(node) { if (node.previousSibling) { node = node.previousSibling; while (node != null && node.nodeType == 3) { node = node.previousSibling; }; return node; }; return null; },
	NextSibling: function(node) { if (node.nextSibling) { node = node.nextSibling; while (node != null && node.nodeType == 3) { node = node.nextSibling; }; return node; }; return null; },
	FirstChild: function(node) { if (node) { var children = DOM.ChildNodes(node); if (children.length > 0) { return children[0]; }; return null; }; return null; },
	LastChild: function(node) { if (node) { var children = DOM.ChildNodes(node); if (children.length > 0) { return children[children.length - 1]; }; return null; }; return null; },
	ChildNodes: function(obj) { if (obj) { var children = obj.childNodes, tmp = []; if (children.length > 0) { for (var ii = 0, nn = children.length; ii < nn; ii++) { var node = children[ii]; if (node.nodeType == 1) tmp.push(node); }; return tmp; }; return null; }; return null; },
	GetByClassName: function(parent, tag, classname) { var d = (tag == '*' && parent.all) ? parent.all : parent.getElementsByTagName(tag), arrReturnElements = new Array(); classname = classname.replace(/\-/g, '\\-'); var e = new RegExp('(^|\\s)' + classname + '(\\s|$)'), oElement = null; for (var i = 0, n = d.length; i < n; i++) { oElement = d[i]; if (e.test(oElement.className)) arrReturnElements.push(oElement) }; return (arrReturnElements); },
	GetByAttribute: function(parent, tag, attrib, value) { var e = (tag == '*' && parent.all) ? parent.all : parent.getElementsByTagName(tag); var f = new Array(), g = (typeof value != 'undefined') ? new RegExp("(^|\\s)" + value + "(\\s|$)") : null, h, j; for (var i = 0, n = e.length; i < n; i++) { h = e[i]; j = h.getAttribute && DOM.GetAttribute(h, attrib); if (typeof j == 'string' && j.length > 0) { if (typeof value == 'undefined' || (g && g.test(j))) { f.push(h) } } } return f; }
};

String.prototype.EscapeString2 = function() { return (this.replace(new RegExp('([^a-zA-Z0-9]+)', 'igm'), '').toLowerCase()); };
var $ = function(elm) { return document.getElementById(elm); }

var onDOMload = function() { if (arguments.callee.done) return; arguments.callee.done = true; if (_timer) clearInterval(_timer); onPageLoad() };
/*@cc_on
@if(@_win32 || @_win64)if (document.getElementById) { document.write("<script id=\"ieScriptLoad\" defer src=\"//:\"><\/script>"); document.getElementById("ieScriptLoad").onreadystatechange = function() { if (this.readyState == "complete") { onDOMload() } } } @end@*/
if (document.addEventListener) { document.addEventListener('DOMContentLoaded', onDOMload, false) }; if (/KHTML|WebKit|iCab/i.test(navigator.userAgent)) { var _timer = setInterval(function() { if (/loaded|complete/.test(document.readyState)) { onDOMload() } }, 10) } window.onload = onDOMload;
