// global variables
var toggleTimer = null;

// eventhandler for domonload
var onDOMload=function() {
  if(arguments.callee.done) return;
  arguments.callee.done=true;
  if(_timer) clearInterval(_timer);
  
	// add functions that should run on dom load
	initLoadEvents()
	initTools();
	initPageTools();
	initEmail();
	initBoxes();
	initSitemap();
	initMap();
	initIframeHandler();
	removeFlashBorder();	
	setupTable("color");
	suggestionBox();
};

/*@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;


// shortcut for get elemeny by id
var $ = function(elm) { return document.getElementById(elm); }


// remove 'click here to active and use this control' on flash objects
var removeFlashBorder = function() {
	var theObjects = document.getElementsByTagName("object");
	if(!theObjects) return;
	var n = theObjects.length;
	for (var i=0; i<n; i++){
		theObjects[i].outerHTML = theObjects[i].outerHTML;
	}
};


// get elements by class name
function getElementsByClassName(node,classname) {
	if (node.getElementsByClassName)
		return node.getElementsByClassName(classname);
	else {
		// your custom function
	}
}

var getElementsByClassName = function(oElm, strTagName, strClassName){
	if (oElm.getElementsByClassName) {
		return oElm.getElementsByClassName(strClassName);
	} else {
		var arrElements=(strTagName == '*' && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
		var arrReturnElements=new Array();
		strClassName=strClassName.replace(/\-/g, '\\-');
		var oRegExp = new RegExp('(^|\\s)' + strClassName + '(\\s|$)');
		var oElement;
		for(var i=0, il=arrElements.length; i<il; i++){
			oElement=arrElements[i];
			if(oRegExp.test(oElement.className)){
				arrReturnElements.push(oElement);
			}
		}
		return (arrReturnElements)
	}
};


// eventhandler for adding events to objects
function addEvent(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;
			};
		}
	};
}();


// check if object has a function event attached
var hasFunctionEvent = function(obj,eventhandler){
	if(!obj.attributes) return false;
	var n = obj.attributes.length;
	for(var x=0; x<n; x++){
		var strEvent = 'e'+ eventhandler +'function';
		if(obj.attributes[x].nodeName.indexOf(strEvent) != -1){
			return (obj.attributes[x].value?true:false);
		}
	}
};

var initLoadEvents = function() {

	try {
		document.execCommand("BackgroundImageCache", false, true);
	} catch(err) {}

	if($('applytothisjobtitle') != null) {
		toggleObj('applytothisjob');
		addEvent($('applytothisjobtitle'),'click', function(){ toggleObj('applytothisjob')});
	}
	
	// startpage suggestion box
	var suggestionbox = $('business');
	
		if (suggestionbox != null) {
			var fieldset = suggestionbox.getElementsByTagName('fieldset')[0];
				fieldset.style.display = 'block';
				
			var p = suggestionbox.getElementsByTagName('p');
			for (var i=0, il=p.length;i<il;i++)
				p[i].style.display = 'block';	

		}
			
	// align content in listings (if too much content)
	var listbox = getElementsByClassName(document,'div','listbox');
		if (listbox != null) {

			for (var i=0, il=listbox.length;i<il;i++) {
				var dl = listbox[i].getElementsByTagName('dl')[0];
				if (dl != null) {
					if (dl.clientHeight > 100) dl.getElementsByTagName('dd')[0].className = 'img large';
				}
			}
		}
		
	// style columns in list document tables (through colgroup with col elements)
	var listdocuments = $('list-documents');
	if (listdocuments != null) {
		var tables = listdocuments.getElementsByTagName('table');
	
		if (tables != null) {
			for (var i=0, il=tables.length;i<il;i++) {
				var table = tables[i];
				
				// colgroup
				var colgroup = document.createElement('colgroup');
					
					// first column
					var col1 = document.createElement('col')
					var col1Width = document.createAttribute('width');
						col1Width.nodeValue = "1*";
					
					col1.setAttributeNode(col1Width);
					
					// second column
					var col2 = document.createElement('col');
					var col2Width = document.createAttribute('width');
						col2Width.nodeValue = '20%';
					
					col2.setAttributeNode(col2Width);
						
					// third column
					var col3 = document.createElement('col');
					var col3Width = document.createAttribute('width');
						col3Width.nodeValue = '10%';
						
					col3.setAttributeNode(col3Width);
					
					// fourth column (if media kit table)
					var col4 = document.createElement('col');
					var col4Width = document.createAttribute('width');
						col4Width.nodeValue = '8%';
						
					col4.setAttributeNode(col4Width);
					
					if (table.className == 'mediakit') colgroup.appendChild(col4);
					
					colgroup.appendChild(col1);
					colgroup.appendChild(col2);
					colgroup.appendChild(col3);
					
					var thead = table.getElementsByTagName('thead')[0];
					var tbody = table.getElementsByTagName('tbody')[0];
					
					var targetElm;
					
					// decide where to add colgroup section
					if (thead != null) {
						targetElm = thead;
						
						var th;
						if (table.className == 'mediakit') {
							th = thead.getElementsByTagName('th')[1]; // media kit table
						} else {
							th = thead.getElementsByTagName('th')[0];
						}
						th.style.width='62%';
							
					} else {
						targetElm = tbody;
					}
					
					// add whole colgroup section to table
					var colgroupSection = table.insertBefore(colgroup, targetElm);
			}
		}
	}
}

// focus suggestion box text field
var suggestionBox = function() {
	var suggestionTxt = getElementsByClassName(document,'input','suggestiontxt')[0];
	if(suggestionTxt)
	{
		addEvent(suggestionTxt, 'click', function() { suggestionTxt.select() });
		if (suggestionTxt.setAttribute) suggestionTxt.setAttribute('autocomplete', 'off'); 
	}
}

// initialize tools
var initTools = function() {
	var ss = $("siteselector");
	if (!ss) return;
		//$("siteselector").style.top = '-5000px';
	
	var ssa = $("siteselector-li").getElementsByTagName('a')[0];
	
	if (!ssa) return;
	
		ssa.style.display = 'block';
		
		addEvent(ssa, 'mouseover', function() { window.clearTimeout(toggleTimer); siteSelector.Display(0) });
		addEvent(ssa, 'mouseout', function() { toggleTimer = window.setTimeout(siteSelector.Hide, 200) });
		addEvent(ss, 'mouseover', function() { window.clearTimeout(toggleTimer); siteSelector.Display(1) });
		addEvent(ss, 'mouseout', function() { toggleTimer = window.setTimeout(siteSelector.Hide, 200) });
}

var siteSelector = {
	Display: function(fade) {
		var ss = $("siteselector"), ssli = $("siteselector-li");
		
		ss.style.top = '100%';
		ss.style.display = 'block';
		
		var ssPos = elmPos.X(ssli);
			if (ssPos > 802) ss.style.left = '-280px';
		
		if (fade==0 && ssli.className == '')
			Fade.In(ss.id, 4);
			
		ssli.className = 'selected';
	},
	Hide: function() {
		var ss = $("siteselector"), ssli = $("siteselector-li");
		
		ss.style.display = 'none';
		ssli.className = '';
	}
}


// initialize page tools
var initPageTools = function() {

	var pt = $('page-tools'), introduction = $('introduction');
	var heading = document.getElementsByTagName('h1')[0];
	
	if (pt != null) {
	
	var headings = pt.getElementsByTagName('h3');
		for (i=0;i<headings.length;i++)
			headings[i].style.display = 'block';
	
		pt.style.border = '0';
		pt.style.padding = '0';
		
		// hide div elements in page tools
		var ptdiv = pt.getElementsByTagName('div');
	
		for (i=0, il=ptdiv.length;i<il;i++) {
			if (ptdiv[i].className == 'modal')
				ptdiv[i].style.display = 'none';
		}
	}
}


var scrollTop = function() {
	var scrollY;
	
	if (document.all) {
		scrollY = document.body.scrollTop;
    } else {
        scrollY = window.pageYOffset;
    }
}

// init iframe object handler
var initIframeHandler=function(){
	var iFrameWrapper=$('iframe-wrapper');
	if(iFrameWrapper){
		var iFrame=$('iframe'); if(!iFrame) return;
		var iFrameSrc=iFrame.src,iFrameId=iFrame.id;
		var iFrameDyn=document.createElement('IFRAME');
		iFrameDyn.id=iFrameId;iFrameDyn.src=iFrameSrc;iFrameDyn.width='590';iFrameDyn.height='400';
		iFrameDyn.frameBorder='0';iFrameDyn.allowTransparency='true';iFrameWrapper.innerHTML='';
		iFrameWrapper.appendChild(iFrameDyn);
	}
};
        
// initialize boxes needed for modal popup
var initBoxes = function() {
	// create fade div
	var fade = document.createElement('div');
	var idAttr = document.createAttribute('id');
		idAttr.nodeValue = "fade";
		fade.setAttributeNode(idAttr);
		
	document.body.appendChild(fade);
	
	var pt = $('page-tools');
	
	if (!pt) return;
	
		var pta = pt.getElementsByTagName('h3');
			
			for(var i=0; i<3; i++) {
				var e = pta[i];

				if(!hasFunctionEvent(e,'click')) addEvent(e, 'click', box.Open);
				if(!hasFunctionEvent(e,'focus')) addEvent(e, 'focus', box.Open);
			}
		
		// set modal popup styles
		var elem = getElementsByClassName(document, "div", "modal");

		for(var i=0, il=elem.length; i<il; i++) {
			var e = elem[i]; // div with modal class
			
			e.style.display = 'none';
			e.style.position = 'absolute';
			e.style.top = elmPos.Y(e.parentNode) -4 + 'px';
			e.style.left = elmPos.X(e.parentNode);
			e.style.zIndex = '1002';
		}
			
		var fade = $('fade');
		var wrap = $('wrap');
		var docHeight = document.documentElement.clientHeight;
		var addHeight = 0;
		
		var flashindex = getElementsByClassName(document, "div", "flashindex");
			if (flashindex != null) addHeight = 350;
				
			if (wrap.clientHeight < docHeight) {
				fade.style.height = docHeight + 'px';
			} else {
				if (flashindex.length > 0) {
					fade.style.height = wrap.clientHeight + addHeight + 72 + 'px';
				} else {
					fade.style.height = wrap.clientHeight + 72 + 'px';
				}
			}
			
			
				
		if(!hasFunctionEvent(fade,'click')) addEvent(fade, 'click', 
			function() { 
				fade.style.display = 'none'; 
				var elem = getElementsByClassName(document, "div", "modal"); 
				for(var i=0, il=elem.length; i<il; i++) { 
					elem[i].style.display = 'none'; 
				}
		});
}

// open and close modal box
var box = {
	Open: function() {
		var fade = $('fade'), modal = $(this.className);
			if(!modal) return;
			fade.style.display = 'block';
			modal.style.display = 'block';
			
			modal.style.top = elmPos.Y(modal.parentNode) -4 + 'px'; /*added Gustaf 080426*/		
	},
	Close: function(elem) {
		var fade = $('fade'), modal = $(elem);
	    $('fade').style.display = 'none';
		$('modal').style.display = 'none';
	}
}


// sitemap
var initSitemap = function() {
		
	var fieldset = $('sitemapbuttons');		
	if (!fieldset) return;
	
		fieldset.style.display = 'block';
		
		// get radio buttons and add events to them
		var radiobuttons = fieldset.getElementsByTagName('input');
		var defaultBtn = radiobuttons[0];
		var expandallBtn = radiobuttons[1];
		var collapseallBtn = radiobuttons[2];
			
			addEvent(defaultBtn, 'click', sitemap.Default);
			addEvent(expandallBtn, 'click', sitemap.ExpandAll);
			addEvent(collapseallBtn, 'click', sitemap.CollapseAll);
			
			// set default layout
			sitemap.Default();
			defaultBtn.checked = true;
			
			// add toggle event to first span in <li class="haschildren">
			var items = getElementsByClassName($('sitemap'), "li", "haschildren");
			
			for(var i=0, il=items.length; i<il; i++) {
				var e = items[i]; // li element with haschildren class
				var span = e.getElementsByTagName('span')[0]; // first anchor in <li class="haschildren">
				
				addEvent(span, 'click', sitemapToggle);
			}
}


var sitemap = {
	Default: function() {
		var elmSitemap = $('sitemap');
		if (!elmSitemap) return;
			
		var lists = elmSitemap.getElementsByTagName('ul'); // get all lists
		
		for(var i=0, il=lists.length; i<il; i++) {
			var rootElem = lists[i].parentNode.parentNode.id;
			if (rootElem != 'sitemap') {
				lists[i].style.display = 'none'; // show first level lists, hide the rest
			} else { // make sure all list items in first level are displayed
				lists[i].style.display = 'block';
			}
		}
		
		var items = getElementsByClassName(elmSitemap, "li", "haschildren"); // get all <li class="haschildren">
		
		for(var i=0, il=items.length; i<il; i++) {
			var e = items[i]; // li element with haschildren class
			var error;
			
			var rootElem = items[i].parentNode.parentNode.id; // identifier for rootElem
			
			var span = e.getElementsByTagName('span')[0]; // first anchor in <li class="haschildren">
			span.className = 'expand';
			if (rootElem == 'sitemap') { span.className = 'collapse'; } // set correct icon for level 1 anchors
		}
	},
	ExpandAll: function() {
		var elmSitemap = $('sitemap');
		if (!elmSitemap) return;
			
		var lists = elmSitemap.getElementsByTagName('ul'); // get all lists
		
		for(var i=0; i<lists.length; i++)
			lists[i].style.display = 'block'; // show all lists
			
		var items = getElementsByClassName(elmSitemap, "li", "haschildren");
		
		for(var i=0, il=items.length; i<il; i++) {
			var e = items[i]; // li element with haschildren class		
			var span = e.getElementsByTagName('span')[0]; // first span in <li class="haschildren">
			
			//addEvent(span, 'click', sitemapToggle);
			span.className = 'collapse'; // set correct icon
		}
	},
	CollapseAll: function() {
		var elmSitemap = $('sitemap');
		if (!elmSitemap) return;
			
		var lists = elmSitemap.getElementsByTagName('ul'); // get all lists
		
		for(var i=0, il=lists.length; i<il; i++)
			lists[i].style.display = 'none'; // hide all lists
		
		var items = getElementsByClassName(elmSitemap, "li", "haschildren");
		
		for(var i=0, il=items.length; i<il; i++) {
			var e = items[i]; // li element with haschildren class			
			var span = e.getElementsByTagName('span')[0]; // first span in <li class="haschildren">
			
			//addEvent(span, 'click', sitemapToggle);
			span.className = 'expand'; // set correct icon
		}
	}
}


// open and close sitemap node
var sitemapToggle = function() {
	var lists = this.parentNode.getElementsByTagName("ul"); // all lists in list item
	for(var i=0, il=lists.length; i<il; i++) {
		var e = lists[i], span = e.parentNode.getElementsByTagName('span')[0];
		//var currsStyle=(e.style.display == 'none')?true:false;
		if (e.style.display == 'none') {
			e.style.display = 'block';
			span.className = 'collapse';
		}
		else {
			e.style.display = 'none';
			span.className = 'expand';
		};
	}
}


// fade effect
var Fade = {
	In: function(uid, opacity) {
		var obj = $(uid);
		if(!obj) return;

		if(opacity <= 100) {
			Fade.setOpacity(obj, opacity);
			opacity += 20;
			fadeTimer = window.setTimeout('Fade.In("'+ uid +'",'+ opacity +')', 20);
		} else {
			Fade.setOpacity(obj, 100);
			window.clearTimeout(fadeTimer);
		}
	},
	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);
	}
};

// get object coordinates 
var elmPos = {
	X : function(obj) {
		var curleft = 0;
		if(obj.offsetParent) { while(1) { curleft += obj.offsetLeft; if(!obj.offsetParent) break; obj = obj.offsetParent; };
		} else if(obj.x) { curleft += obj.x; }
		return curleft;
	},
	Y : function(obj) {
		var curtop = 0;
		if(obj.offsetParent) { while(1) { curtop += obj.offsetTop; if(!obj.offsetParent) break; obj = obj.offsetParent; };
		} else if(obj.y) { curtop += obj.y; }
		return curtop;
	}
}


// insert content directly after given element
function insertAfter(newElement,targetElement) {

	var parent = targetElement.parentNode; // look for target element's parent
	
	if(parent.lastchild == targetElement) { // if the parents last child is the target element
		parent.appendChild(newElement); // add the new element after the target element
	} else {
		parent.insertBefore(newElement, targetElement.nextSibling); // the target has siblings, insert the new element between the target and it's next sibling
	}
}


/*HIDE AND SHOW FUNCTION*/
function toggleObj(elementID)
{
	var obj = $(elementID);
	if(!obj) return;
	if(obj.style.display == "none") {
		obj.style.display = "block";
	} else {
		obj.style.display = "none";
	}
}

/* INIT EMAIL
----------------------------------------------------*/
function initEmail(){
	var links=getElementsByClassName(document, 'a', 'email');
	var n=links.length;
	for(var i=0; i<n; i++){
		var link=links[i];
		if(link) {
			email=decodeBase64(link.title);
			email2=email.replace(/ /g,'');
			link.href='mailto:'+email2;
			link.title=email2;
			link.innerHTML=email;
		}
	}
}




function setupTable(tableClass)
{
    var oTables = document.getElementsByTagName("table");

    if (!oTables) return;
    
    for (var i=0, il=oTables.length; i<il; i++) {
        if (oTables[i].className.indexOf(tableClass) != -1) {
            var oRows = oTables[i].getElementsByTagName("tr");
            
            if (oRows == null) continue;

            for (var j=0; j < oRows.length; j++) {
                /*if (j == 0)
                {
                    oRows[j].className = oRows[j].className + ' top';
                }
                else if (j%2)
                {
                    oRows[j].className = oRows[j].className + ' gray';
                }
                else
                {
                    oRows[j].className = oRows[j].className + ' white';
                }*/

                /*var hasHeaders = false;
                var oHeaders = oRows[j].getElementsByTagName("th");

                if (oHeaders != null && oHeaders[0] != null) {
                    oHeaders[0].className = oHeaders[0].className + " rowheader";
                    hasHeaders = true;
                }

                if (!hasHeaders) {
                    var oCells = oRows[j].getElementsByTagName("td");
                    if (oCells == null) continue;
                    if (oCells[0] == null) continue;
                    oCells[0].className = oCells[0].className + " rowheader";
                }*/
            }
        }
    }
}
        
var END_OF_INPUT = -1;
var base64Chars = new Array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/');
var reverseBase64Chars = new Array();
for(var i=0; i < base64Chars.length; i++){
	reverseBase64Chars[base64Chars[i]] = i;
};

var base64Str;
var base64Count;
function setBase64Str(str){
	base64Str=str;
	base64Count=0;
}

function readReverseBase64(){   
	if(!base64Str) return END_OF_INPUT;
	while(true){      
		if(base64Count >= base64Str.length) return END_OF_INPUT;
		var nextCharacter = base64Str.charAt(base64Count);
		base64Count++;
		if(reverseBase64Chars[nextCharacter]){
			return reverseBase64Chars[nextCharacter];
		}
		if(nextCharacter == 'A') return 0;
	}
	return END_OF_INPUT;
}

function ntos(n){
	n=n^9;
	n=n.toString(16);
	if (n.length == 1) n="0"+n;
	n="%"+n;
	return unescape(n);
}

function decodeBase64(str){
	setBase64Str(str);
	var result = "";
	var inBuffer = new Array(4);
	var done = false;
	while (!done && (inBuffer[0] = readReverseBase64()) != END_OF_INPUT && (inBuffer[1] = readReverseBase64()) != END_OF_INPUT){
		inBuffer[2] = readReverseBase64();
		inBuffer[3] = readReverseBase64();
		result += ntos((((inBuffer[0] << 2) & 0xff)| inBuffer[1] >> 4));
		if (inBuffer[2] != END_OF_INPUT){
			result +=  ntos((((inBuffer[1] << 4) & 0xff)| inBuffer[2] >> 2));
			if (inBuffer[3] != END_OF_INPUT){
				result +=  ntos((((inBuffer[2] << 6)  & 0xff) | inBuffer[3]));
			} else {
				done = true;
			}
		} else {
			done = true;
		}
	}
	return result;
}


// Google map controller
var isMapActive = false;
var useGeoCoder = false;
var isACenter = false;
var pageid;
var langCode;
var geocoder;

	function initMap()
	{
		if(isMapActive)
		{
		
			loadMap();
			if(useGeoCoder)
			{
				if(!geocoder)
				{
					geocoder = new GClientGeocoder();
				}
			}
		}	
	}

var marker;
function addAddressToMap(response) {
  //map.clearOverlays();
  if (!response || response.Status.code != 200) {
    alert("Sorry, we were unable to geocode that address. Please improve the address information.");
  } else {
  
    place = response.Placemark[0];
    point = new GLatLng(place.Point.coordinates[1],
                        place.Point.coordinates[0]);
    marker = new GMarker(point);
    if(!isACenter)
    {
		
		map.setCenter(point, 9);
		isACenter = true;
    }
  
    // add the coordinates to the page
    addCoordinatesToPage(place.Point.coordinates[1], place.Point.coordinates[0], pageid);
  }
}

function showLocation(address) {
	if(geocoder)
	{
		geocoder.getLocations(address, addAddressToMap);
	}
}

/*Web Service that will add the coordinates to the page*/
function addCoordinatesToPage(longitude, latitude, pageid)
{
	Securitas.Services.GoogleMapService.SetCoordinatesOnAddress(longitude, 
	latitude, pageid, langCode, handleReturnValue);
}

function handleReturnValue(returnvalue)
{
	map.addOverlay(marker);
	GEvent.addListener('marker', 'click', 
		function()
		{
			marker.openInfoWindowHtml( returnvalue + 
			'<br />' +  place.address + ' <br />' +
			 place.AddressDetails.Country.CountryNameCode);
		}
		);
}