// ------------------------ Global object ------------------------ 

var volvoJs = {};

var isIE = (navigator.appName == 'Microsoft Internet Explorer');
if (isIE) { document.execCommand("BackgroundImageCache",false,true); };

// ------------------------ enable pre-DOM-ready CSS ------------------------ 

volvoJs.jsActive = function(DOMloaded){
	if (DOMloaded) {
		document.body.className = document.body.className.replace(' sys_jsNotReady','');
	} else {
		document.body.className += ' sys_jsActive sys_jsNotReady';
	}
}

// ------------------------ Check relations when events bubble ------------------------ 

function contains(a, b) { // Return true if node a contains node b.
	if ((a && b)) {
	  while (b.parentNode)
	    if ((b = b.parentNode) == a)
	      return true;
	  return false;
	}
}


// ------------------------ convert link list to select box ------------------------ 

function linkListToSelect(linkListWrap) {
    
	var linkList = linkListWrap.getElementsByTagName('a');
	var selectBox = new Array();
	
	for (var i = 0, il = linkList.length; i < il; i++) {
		selectBox[i] = '<option value="' + linkList[i].href + '">' + linkList[i].innerHTML + '</option>';
	}
	selectBox.unshift('<select class="sys_selectUrl">');
	selectBox.push('</select>');

	selectBox = selectBox.join('');	
	linkListWrap.innerHTML = selectBox;	
}

// ------------------------ auto-trig for select boxes ------------------------

function init_selectboxAutoTrig(trigClassName) {
    var callBack = function() { };
	var userAgent = navigator.userAgent;
	var uACheck = userAgent.match('AppleWebKit');
	
	var selectElems = document.getElementsByTagName('select');
	for (var i = 0, il = selectElems.length; i < il; i++) {
		if (selectElems[i].className.indexOf(trigClassName) > -1) {			  		
			var selectBox = selectElems[i];
			
			var linkListWrap = selectBox.parentNode;					
	        if (linkListWrap.id == "main_volvoGroupSelect") {
	            callBack = selectbox_goToUrl;
	        } else if (linkListWrap.id == "a0" && typeof(selectbox0) != 'undefined' && selectbox0 != null) { 
	            callBack = selectbox0;
	        } else if (linkListWrap.id == "a1" && typeof(selectbox1) != 'undefined' && selectbox1 != null) { 
	            callBack = selectbox1;
	        } else if (linkListWrap.id == "a2" && typeof(selectbox2) != 'undefined' && selectbox2 != null) { 
	            callBack = selectbox2;
	        } else if (linkListWrap.id == "a3" && typeof(selectbox3) != 'undefined' && selectbox3 != null) { 
	            callBack = selectbox3;
	        } else if (linkListWrap.id == "a4" && typeof(selectbox4) != 'undefined' && selectbox4 != null) { 
	            callBack = selectbox4;
	        } else if (linkListWrap.id == "a5" && typeof(selectbox5) != 'undefined' && selectbox5 != null) { 
	            callBack = selectbox5;
	        }			
			
			if (uACheck != null) {
				selectBox.onchange = selectChangedSafari;
				selectChangedSafari.reassign = callBack;
			} else {
				selectBox.changed = false;
				selectBox.onfocus = selectFocused;
				selectBox.onactivate = selectFocused;
				selectBox.onchange = selectChanged;
				selectBox.onkeydown = selectKeyed;
				selectBox.onclick = selectClicked;
			}
			selectBox.selectboxAutoTrig = callBack;
		}
	}
	
	return true;
}

function selectChangedSafari(){
	if (!this.selectboxAutoTrig) {
		this.selectboxAutoTrig = selectChangedSafari.reassign; // if assignment is lost during navigation
	}
	this.selectboxAutoTrig(); // trigger action of selectbox
} 

function selectChanged(theElement) {
	var theSelect;
	if (theElement && theElement.value) {
		theSelect = theElement;
	} else {
		theSelect = this;
	}
	if (!theSelect.changed) {
		return false;
	}
	
	theSelect.selectboxAutoTrig(); // trigger action of selectbox
	theSelect.changed = false;
	return true;
}

function selectClicked() { this.changed = true; }

function selectFocused() {
	this.initValue = this.value;
	return true;
}

function selectKeyed(e) {
	var keyCodeTab = "9";
	var keyCodeEnter = "13";
	var keyCodeEsc = "27";
	
	var e = window.event || e;
	var skey = e.keyCode || e.which;
		
	if (skey == keyCodeEnter) {
		this.changed = true;		
		chgObj = this; setTimeout('timeoutChanged()', 10)
	} else if (skey == keyCodeEsc) {
		this.value = this.initValue;
	} else {
		this.changed = false;
	}
	return true;
}

var chgObj;
function timeoutChanged() {
    if (chgObj != null) selectChanged(chgObj);
}

// ------------------------ go to URL by select box ------------------------ 

function isValueOk(o)
{
    return (o.value.length > 0 && o.value.replace('javascript:','') == o.value);
}

function selectbox_goToUrl() {
    if (isValueOk(this)) location.href = this.value; 
}

// ------------------------ Entry mouseover ------------------------ 

var entryActive = function(event) {

	var current, related;
	if (window.event) {
		current = this;
		related = window.event.fromElement;
	} else {
		current = event.currentTarget;
		related = event.relatedTarget;
	}
	
	if (!contains(current, related)) {
		//var activeElem = document.getElementsByTagName('div');
		//var activeMarker = document.getElementsByTagName('fieldset')[0];
		var activeElem = volvoJs.activeElem;
		var activeMarker = volvoJs.activeMarker;
		for (var i = 0, il =  activeElem.length; i < il; i++) {
			if (activeElem[i].className.indexOf('entryActive') > -1) {
				activeElem[i].className = activeElem[i].className.replace(' entryActive', '');
				activeMarker.className = activeMarker.className.replace('sys_entryIsActive', '');
				activeMarker.className = activeMarker.className.replace('sys_notVcc', '');
				break;
			}
		}
		
		current.parentNode.className += ' entryActive';
		document.getElementsByTagName('fieldset')[0].className += ' sys_entryIsActive';
		
		var chkHeight = parseInt(this.offsetHeight);
		if (chkHeight < 100) {
			document.getElementsByTagName('fieldset')[0].className += ' sys_notVcc';
		}
	}
}


// ------------------------ Entry mouseout ------------------------ 

var entryInactive = function(event) {
	var current, related;
	if (window.event) {
		current = this;
		related = window.event.toElement;
	} else {
		current = event.currentTarget;
		related = event.relatedTarget;
	}
	
	if (related && !contains(current, related) && related.nodeName.indexOf('SELECT') == -1 && related.nodeName.indexOf('OPTION') == -1 && related.className.indexOf('entryObj') == -1) {
		//var activeElem = document.getElementsByTagName('div');
		//var activeMarker = document.getElementsByTagName('fieldset')[0];
		var activeElem = volvoJs.activeElem;
		var activeMarker = volvoJs.activeMarker;
		for (var i = 0, il = activeElem.length; i < il; i++) {
			if (activeElem[i].className.indexOf('entryActive') > -1) {
				activeElem[i].className = activeElem[i].className.replace(' entryActive', '');
				activeMarker.className = activeMarker.className.replace('sys_entryIsActive', '');
				activeMarker.className = activeMarker.className.replace('sys_notVcc', '');
				break;
			}
		}
	}
}


// ------------------------ Entry link focus ------------------------ 

var entryActiveTab = function(){
	//var activeElem = document.getElementsByTagName('div');
	//var activeMarker = document.getElementsByTagName('fieldset')[0];
	var activeElem = volvoJs.activeElem;
	var activeMarker = volvoJs.activeMarker;
	for (var i = 0, il = activeElem.length; i < il; i++) {
		if (activeElem[i].className.indexOf('entryActive') > -1) {
			activeElem[i].className = activeElem[i].className.replace(' entryActive', '');
			activeMarker.className = activeMarker.className.replace('sys_entryIsActive', '');
			activeMarker.className = activeMarker.className.replace('sys_notVcc', '');
			break;
		}
	} 
	this.parentNode.parentNode.className += ' entryActive';
	document.getElementsByTagName('fieldset')[0].className += ' sys_entryIsActive';
	
	var chkHeight = parseInt(this.offsetHeight);
	if (chkHeight > 100) {
		document.getElementsByTagName('fieldset')[0].className += ' sys_vcc';
	}
}


// ------------------------ Entry link blur ------------------------ 

var entryInactiveTab = function(event){
	//var activeElem = document.getElementsByTagName('div');
	//var activeMarker = document.getElementsByTagName('fieldset')[0];
	var activeElem = volvoJs.activeElem;
	var activeMarker = volvoJs.activeMarker;
	for (var i = 0, il = activeElem.length; i < il; i++) {
		if (activeElem[i].className.indexOf('entryActive') > -1) {
			activeElem[i].className = activeElem[i].className.replace(' entryActive', '');
			activeMarker.className = activeMarker.className.replace('sys_entryIsActive', '');
			activeMarker.className = activeMarker.className.replace('sys_notVcc', '');
			break;
		}
	}
}


// ------------------------ Entry blur if moused outside the entries ------------------------ 

var entryInactiveOutside = function(e){
	var event = e || window.event;
	var target = event.target || event.srcElement;
	
	var BAs = document.getElementById('main_volvoBAs');
	var vcc = document.getElementById('main_vcc');
	
	if (!contains(BAs, target) && !contains(vcc, target)){ // volvoJs.entryContainer
		var activeElem = volvoJs.activeElem;
		var activeMarker = volvoJs.activeMarker;
		for (var i = 0, il = activeElem.length; i < il; i++) {
			if (activeElem[i].className.indexOf('entryActive') > -1) {
				activeElem[i].className = activeElem[i].className.replace(' entryActive', '');
				activeMarker.className = activeMarker.className.replace('sys_entryIsActive', '');
				activeMarker.className = activeMarker.className.replace('sys_notVcc', '');
				break;
			}
		}
	}
}

// ------------------------ Event assigns etc. ------------------------ 

function assignEvents() {

	var entry_vcc = document.getElementById('main_vcc');
	if (typeof(entry_vcc) == 'undefined' || entry_vcc == null) return;

	volvoJs.jsActive(true);
	
	volvoJs.activeElem = document.getElementsByTagName('div');
	volvoJs.activeMarker = document.getElementsByTagName('fieldset')[0];
	
	var entries = document.getElementsByTagName('span');
	for (var i=0, il=entries.length; i<il; i++) {
		if (entries[i].className.indexOf('entryObj') > -1) {
			entries[i].onmouseover = entryActive;
			entries[i].onmouseout = entryInactive;
			
			var lst = entries[i].getElementsByTagName('a');
			if (lst.length > 0) entries[i].getElementsByTagName('a')[0].onfocus = entryActiveTab;
		}
	}
	
	var entrySubLinkLists = document.getElementsByTagName('div');
	for (var i=0, il=entrySubLinkLists.length; i<il; i++) {
		if (entrySubLinkLists[i].className.indexOf('entrySubLinks') > -1) {
			linkListToSelect(entrySubLinkLists[i]);
		}
	}
		
	init_selectboxAutoTrig('sys_selectUrl');
	
	document.body.onmouseover = entryInactiveOutside;
	
	entry_vcc.getElementsByTagName('a')[0].onfocus = entryInactiveTab;
	entry_vcc.getElementsByTagName('a')[1].onblur = entryInactiveTab;
	
	var main_volvoGroupSelect = document.getElementById('main_volvoGroupSelect');
	main_volvoGroupSelect.getElementsByTagName('select')[0].onmouseover = entryInactiveTab;
}

function voidAllJSLinks() { 
	var links = document.getElementsByTagName('a');        	
   	for (i = 0; i < links.length; i++) {
        var s = links[i].href;
		if (s.match(/#+$/)) {
			links[i].href = 'javascript:void(0);';
		}
	}
} 


window.onload = function() {
    voidAllJSLinks();
	assignEvents();
}


