//Execute functions at startup
window.onload = function () {
	replaceCheckboxes();
	replaceBlockQuotes();
	insertHelperTextOnInput();
};

//Navigate to an URL
function navigateTo(event, url){
	document.location.href = url;

	//Make sure parent is not executed in tables
	if(window.event){event = window.event;}
	event.cancelBubble = true;
}

//Replace blockquotes with images
function replaceBlockQuotes() {
	var x=0;
	var objects = getElementsByClass('quote');
	for (var x = 0; x < objects.length; x++) {
		var newcontent = '<img src="'+baseurl+'image/blockquote-open.gif" alt="blockquote">' + objects[x].innerHTML + '<img src="'+baseurl+'image/blockquote-close.gif" alt="blockquote">';
		objects[x].innerHTML = newcontent;
	}
}

//Replace checkboxes with images
function replaceCheckboxes() {
    inputs = document.getElementsByTagName('input');
    for(var i=0; i < inputs.length; i++) {

        //Check if the input is a checkbox
        if(inputs[i].getAttribute('type') == 'checkbox') {

            //Check if the checkbox is checked
            var img = document.createElement('img');
            if(inputs[i].checked) {
                img.src = baseurl+'image/checkbox-checked.gif';
            } else {
                img.src = baseurl+'image/checkbox.gif';
            }

            //Set image ID and onclick action
            img.id = 'checkImage'+i;
            img.className = 'checkbox'
            tmpFunctionOnClick = "";
            if (inputs[i].onclick) {
				tmpFunctionOnClick = inputs[i].onclick + "";
				tmpFunctionOnClick = tmpFunctionOnClick.substr(tmpFunctionOnClick.indexOf("{") + 1, tmpFunctionOnClick.length - tmpFunctionOnClick.indexOf("{") - 2);
			}
			img.onclick = new Function('checkChange('+i+', \''+baseurl+'image/checkbox.gif\', \''+baseurl+'image/checkbox-checked.gif\') ' + tmpFunctionOnClick);

			//Set click event for label that are for checkbox
			labels = document.getElementsByTagName('label');
			for(var x=0; x < labels.length; x++) {
				if(inputs[i].id == labels[x].htmlFor) {
					labels[x].onclick = new Function('checkChange('+i+', \''+baseurl+'image/checkbox.gif\', \''+baseurl+'image/checkbox-checked.gif\') ' + tmpFunctionOnClick);
					labels[x].htmlFor = '';
				}
			}

            //Hide checkbox
            inputs[i].parentNode.insertBefore(img, inputs[i]);
            inputs[i].style.display='none';
        }
    }
}

//Change the checkbox status and the replacement image
function checkChange(i, imgFalse, imgTrue) {
	inputs = document.getElementsByTagName('input');
	if(inputs[i].checked) {
		inputs[i].checked = '';
		document.getElementById('checkImage'+i).src=imgFalse;
    } else {
        inputs[i].checked = 'checked';
        document.getElementById('checkImage'+i).src=imgTrue;
    }
}

//Start timer to change colors of an element
function blink(elementid){
	setInterval ("changeBackgroundColor('"+elementid+"')",100);
}

//Change backgroundcolor of element using color array
var iblink=0;
var blinkColorArray = Array('#F2FAD2', '#EFF8CA', '#ECF6C2','#E6F3B1','#E0F0A0','#DAED8F','#D4EA7E','#CFE76D','#C9E45C','#C3E14B','#BDDE3A','#B7DA2A');
function changeBackgroundColor(elementid) {
	var element=document.getElementById(elementid);
	if (element != null){
		element.style.backgroundColor = blinkColorArray[iblink];
		if (iblink==10){
			iblink=0;
			colorArray = blinkColorArray.reverse();
		}
	}
	iblink++;
}

//Change color of barchart using color array
function changeBarChartColor(barclass, textclass) {
	var i=0;
	var alltags = new Array();
    var alltags = document.getElementsByTagName("*");
	var barColorArray = Array('#FF977F','#FF977F', '#FF977F','#FF977F','#FFFA7F','#FFFA7F','#FFFA7F','#FFFA7F','#335561','#335561','#335561');
	var textColorArray = Array('#333333','#333333', '#333333','#333333','#333333','#333333','#333333','#333333','#FFFFFF','#FFFFFF','#FFFFFF');

	//Change color of bar
    for (i=0; i<alltags.length; i++) {
	    if (alltags[i].className==barclass) {
	    	var percentage = alltags[i].style.width.replace("%", "");
	    	var index = parseInt(Math.round((percentage / 10)))
    		alltags[i].style.backgroundColor = barColorArray[index];
    	}
    }

    //Change color of text in bar
    for (i=0; i<alltags.length; i++) {
	    if (alltags[i].className==textclass) {
	    	var percentage = alltags[i].innerHTML.replace("%", "");
	    	var index = parseInt(Math.round((percentage / 10)))
    		alltags[i].style.color = textColorArray[index];
    	}
    }
}

//Change visibility of element
function changeVisibility(elementid) {
	var status = document.getElementById(elementid).style.display;
	var hash = location.hash;

	//Only change visibility if id is other then hash (url#hash)
	if(hash=='#'+elementid){
		document.getElementById(elementid).style.display = 'block';
	} else {
		if(status=='none'){
			document.getElementById(elementid).style.display = 'block';
		} else {
			document.getElementById(elementid).style.display = 'none';
		}
	}
}

//Change + and - while collapsing and showing divs
function changePlusToMinus(elementid) {
	if (document.getElementById(elementid).innerHTML.substr(0, 1) == "+") {
		document.getElementById(elementid).innerHTML = '-' + document.getElementById(elementid).innerHTML.substr(1);
	} else {
		document.getElementById(elementid).innerHTML = '+' + document.getElementById(elementid).innerHTML.substr(1);
	}
}


//Set focus to an element in the form
function setFocus(elementid){
	var element=document.getElementById(elementid);
	if (element!=null ){
		element.focus();
	}
}

//Calculate and display total price with tax depending on country and tax number
function calculateTotal(amountid, priceid, tax, taxnumberid, countrycode){

	//Retrieve amount and taxnumber
	taxnumber = document.getElementById(taxnumberid).value;
	amount = document.getElementById(amountid).value;

	//Calculate total price for order
	if(taxnumber.length>0 && countrycode!='NL'){
		total = Number(amount);
	} else {
		total = Number(amount) + Number((amount / 100) * tax);
	}

	//Display price with tax
	document.getElementById(priceid).value = total.toFixed(2);
}

//Function to get classes form document
function getElementsByClass(className) {
	var classElements = new Array();
	var els = document.getElementsByTagName('*');
	var elslength = els.length;
	var pattern = new RegExp(className);
	for (i = 0; i < elslength; i++) {
		if (pattern.test(els[i].className)) {
			classElements[classElements.length] = els[i];
		}
	}
	return classElements;
}

//Select tab and make divs appear
function selectTab(tabid, elementid, blockelemetid, forcehash){
	var hash = location.hash;

	//Check if string ends on delimiter
	if(blockelemetid.endswith != ","){blockelemetid = blockelemetid+',';}

	//If we have to force the hash as selected tab then add the current tab to block
	if(forcehash=='true' && hash.length>0){
		blockelemetid = blockelemetid+elementid+','
	}

	//Create array of id's
	var count = 0;
	var temparray = Array();
	var delimiter = ',';
	while (blockelemetid.indexOf(delimiter)>0) {

		//Get element from delimiter and add it to array
		elementfound = blockelemetid.substr(0,blockelemetid.indexOf(delimiter));
		if (elementfound!=null){
			temparray[count] = elementfound;
			blockelemetid = blockelemetid.substr(blockelemetid.indexOf(delimiter)+1,blockelemetid.length-blockelemetid.indexOf(delimiter)+1);
			count = count + 1;
		}
	}

	//Hide all id's from array
	if (temparray!=null ){
    	for (i=0; i<temparray.length; i++) {
   			document.getElementById(temparray[i]).style.display = 'none';
    	}
	}

	var x=0;
	var objects = getElementsByClass('selected-tab');
	for (var x = 0; x < objects.length; x++) {
		if(objects[x].id != tabid){objects[x].className = 'tab';}
	}

	//Change elementid if we want to force #hash instead
	if(forcehash=='true' && hash.length>0){
		elementid = hash.substr(1, (hash.length-1));
		tabid = hash.substr(5, (hash.length-1));
	}

	//Show the selected\forced element
	document.getElementById(elementid).style.display = 'block';
	document.getElementById(tabid).className = 'selected-tab';
}

//Setup helper text balloons for form
function insertHelperTextOnInput() {
	// Append helper div at end of body
	var popHelper = document.createElement('div');
	popHelper.id = "helper";
	popHelper.innerHTML = "...";
	document.getElementsByTagName('body')[0].appendChild(popHelper);

	if (document.getElementById('form')) {
		var elements = document.getElementById('form').getElementsByTagName('input');
		var x = 0;
		if (elements.length > 0) {
			for (x = 0; x < elements.length; x++) {
				elements[x].onfocus = new Function("showHelper(this);");
			}
		}
	}

	var elements = getElementsByClass('helpertext');
	if (elements.length > 0) {
		var tmpFunctionOver = "";
		var tmpFunctionOut = "";
		for (x = 0; x < elements.length; x++) {
			if (elements[x].onmouseover) {
				tmpFunctionOver = elements[x].onmouseover + "";
				tmpFunctionOver = tmpFunctionOver.substr(tmpFunctionOver.indexOf("{") + 1, tmpFunctionOver.length - tmpFunctionOver.indexOf("{") - 2) + " ";
			}
			if (elements[x].onmouseout) {
				tmpFunctionOut = elements[x].onmouseout + "";
				tmpFunctionOut = tmpFunctionOut.substr(tmpFunctionOut.indexOf("{") + 1, tmpFunctionOut.length - tmpFunctionOut.indexOf("{") - 2) + " ";
			}
			elements[x].onmouseover = new Function(tmpFunctionOver + "showHelper(this);");
			elements[x].onmouseout = new Function(tmpFunctionOut + "hideHelper(this);");
		}
	}
}

//Postition the helper text balloon on the right position
function showHelper(obj) {
	if (typeof(obj) == "string") {
		obj = document.getElementById(obj);
	}

	var popHelper = document.getElementById('helper');
	var text = (obj.alt ? obj.alt : obj.title);
	if (obj.title) {
		obj.title = "";
	}

	if (text != null && text.length > 0) {
		var elementPos = findPos(obj);
		var offsetX = 0;
		var offsetY = 0;
		popHelper.alt = text;
		if (text.indexOf('(') != -1 && text.indexOf(')') != -1) {
			offsetX = text.substr(text.indexOf('(') + 1, text.indexOf(',') - 1);
			offsetY = text.substr(text.indexOf(',', text.indexOf('(')) + 1, text.indexOf(')') - (text.indexOf(',', text.indexOf('(')) + 1));
			text = text.substr(text.indexOf(')') + 1);
			offsetX = (parseInt(offsetX) * 1 != parseInt(offsetX) ? 0 : parseInt(offsetX));
			offsetY = (parseInt(offsetY) * 1 != parseInt(offsetY) ? 0 : parseInt(offsetY));
		}
		popHelper.innerHTML = "<p>" + text.replace(/'/, "\'") + "</p>";
		popHelper.style.display = "block";
		popHelper.style.top = ((elementPos[1] + (obj.offsetHeight / 2) - popHelper.offsetHeight) + 4 + parseInt(offsetY)) + "px";
		popHelper.style.left = (elementPos[0] + obj.offsetWidth - 20 + offsetX) + "px";
	} else {
		popHelper.style.display = "none";
	}
}

//Hide helper
function hideHelper(obj) {
	document.getElementById('helper').style.display = "none";
	if (document.getElementById('helper').alt) {
		obj.title = document.getElementById('helper').alt;
	}
}

//Find object in page
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

//Hide all elements with a specific classname
function hideClassName(className) {
	var elements = getElementsByClass(className);
	if (elements.length > 0) {
		for (x = 0; x < elements.length; x++) {
			elements[x].style.display = 'none';
		}
	}
}

//Show overlay during payment
function showOverlay(text) {
	if (document.getElementById('overlay').style.display == "block") {
		document.getElementById('overlay').style.display = "none";
	} else {
		document.getElementById('overlay').style.display = "block";

		var top = 0;
		var messageDiv = document.getElementById('overlay').getElementsByTagName('div')[0];
		if (document.documentElement.scrollHeight > document.documentElement.clientHeight) {
			top = (document.documentElement.clientHeight / 2) - (messageDiv.offsetHeight / 2);
			top += document.documentElement.scrollTop;
		} else {
			top = (document.documentElement.clientHeight / 2) - (messageDiv.offsetHeight / 2);
		}
		if (top <= 50)
			top = 10;
		messageDiv.style.top = top + "px";
		document.getElementById('overlay').style.height = (document.body.scrollHeight > document.documentElement.clientHeight ? document.body.scrollHeight + "px" : "100%");
	}
}