/**
 * @author	Victor Zuydweg victor@zuydweg.nl
 * @version	1.0
 * @project	Residentie Bach Ensembles
 */

var cssHoverClass = "hover";

if(window.addEventListener) window.addEventListener("load", init, false);
else if (window.attachEvent) window.attachEvent("onload", init);
else window.onload=init;

/**
 * Load initial functions
 */

function init()
{
	loop('a');
	loop('form');
	
	// id driven functions
	setTotalOrderedTickets();
}

/**
 * Write Flash to screen
 * @param {Object} src
 * @param {Object} width
 * @param {Object} height
 */
function writeFlash(s, width, height)
{
	// variables
	var color1 = "ffffff";
	var color2 = "aaaaaa";
	var src = s + '&color1=0x' + color1 + '&color2=0x' + color2 + '&border=1';
	var result = '';
	
	// construct the player
	result += '<object width="' + width + '" height="' + height + '">';
	result += '<param name="movie" value="' + src + 'fs=1" />';
	result += '<param name="wmode" value="transparent" />';
	result += '<param name="allowFullScreen" value="true" />';
	result += '<embed src="' + src + '&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="' + width + '" height="' + height + '">';
	result += '</object>';
	document.write(result);
}

/**
 * Loop through elements and start functions
 */

function loop(element)
{
	var elements = document.getElementsByTagName(element);
	for(var i=0; i<elements.length; i++)
	{
		setAnchorToObject(elements[i]);
		setValidation(elements[i]);
	}
}

/**	
 * Set single hyperlink to parentNode
 * @param {HTML Node} obj
 */

function setAnchorToObject(obj)
{
	if(obj.href)
	{
		if(obj.parentNode.getElementsByTagName('a').length == 1 && obj.parentNode.tagName.toLowerCase() != 'div')
		{
			obj.parentNode.link = obj.parentNode.getElementsByTagName('a')[0];
			obj.parentNode.className += " " + cssHoverClass;
			obj.parentNode.onclick = function()
			{
				document.location = this.link;
			}
		}
	}
}


/**	
 * Set validation for forms
 * @param {HTML Node} obj
 */

 function setValidation(form)
 {
 	if (form.tagName.toLowerCase() == 'form')
	{
		// find the formtype
 		var input = form.getElementsByTagName('input');
 		for (var i = 0; i < input.length; i++)
		{
 			if (input[i].name == 'type') form.sort = input[i].value;
 		}
		
 		form.onsubmit = function()
		{
			// differend validatin for different sorts of form
 			switch (this.sort)
			{
 				case "bestel":
 					var required = new Array('name', 'adres', 'pc', 'place', 'email', 'rekening');
					break;
 				case "contact":
 					var required = new Array('name', 'email', 'message');
					break;
 				case "vriend":
 					var required = new Array('naam', 'adres', 'pc', 'plaats', 'email', 'bedrag');
					break;
 			}
			
			// return
			if(required != undefined) return(validateForm(this, required));
 		}
 	}
 	
 	function validateForm(form, required)
	{
		// default error message
 		var errors = '';

		// check 'kaarten bestel'-form if any cards are checked	
		if(form.sort == 'bestel')
		{
			if(!anyOrderedTickets(form)) errors += '<li>Er zijn geen kaarten besteld</li>';
		}
		
		// check required fields
		// validate email adres
 		for (var i = 0; i < required.length; i++) {
 			var obj = document.getElementById(required[i]);
			if(obj)
			{
	 			if (obj.value == '')
				{
					if(obj.className.search('error') == -1) obj.className += ' error';
	 				errors += '<li>' + obj.name + ' is een verplicht veld</li>';
				}
				else if (obj.id == 'email')
				{	
                    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
                    if (!reg.test(obj.value))
					{
						if(obj.className.search('error') == -1) obj.className += ' error';
		 				errors += '<li>' + obj.name + ' is geen geldig e-mailadres (bij. test@test.nl)</li>';
					}
				}
				else obj.className = obj.className.replace('error','');
			}
 		}
 
 		// return value
		if (errors != '')
		{
			// set error message
			if(document.getElementById('error')) document.getElementById('error').innerHTML = '<h3><a name="error>Fout!<a/></h3><ul>' + errors + '</ul>';
			window.location = "#error";
			return false;
		}
		else return true;
 	}
	
	// Check to see if there are any oredered tickets whatsoever
	function anyOrderedTickets(obj)
	{
		var input = form.getElementsByTagName('input');
		var orderedTickets = false;
		for(var i=0; i<input.length; i++)
		{
			// Only input of number of cars are in tables
			var parent = input[i].parentNode;
			if(parent.tagName.toLowerCase() == 'td')
			{
				if(input[i].value != '') orderedTickets = true;
			}
		}
		return orderedTickets;
	}
 }

/**
 * Calculates the total price of ordered tickets when ordering them
 */
function setTotalOrderedTickets()
{
	if(document.getElementById('totalTicketPrice'))
	{
		var target = document.getElementById('totalTicketPrice');
		var input = getAncestorNode(target, 'table').getElementsByTagName('input');
		var total = 0;
		for(var i=0; i<input.length; i++)
		{
			var label = input[i].parentNode.getElementsByTagName('label')[0];
			input[i].price = getPrice(label.innerHTML);
			if(input[i].value != '') total += input[i].price;
			input[i].onkeyup = function()
			{
				total = 0;
				for(var i=0; i<input.length; i++)
				{
					if(input[i].value != '') total += input[i].value * input[i].price;
					target.innerHTML = formatPrice(total);
				}
			}
		}
	}
	
	function getPrice(price)
	{
		price = price.replace('x €','');
		price = price.replace(',','.');
		price = parseFloat(price);
		return price;
	}
	
	function formatPrice(num)
	{
		num = eval(num);
		num *= 100;
		num = Math.round(num)/100;
		
			if (num - Math.floor(num) == 0) {
				num = num + ",-";
			} else {
				string = num.toString();
				parts = string.split(".");
				cents = parts[1];
					if (cents.length == 1) {
						num = num + "0";
						}
			}
		
		num = "&euro; " + num;
		return num;
	}

}

function getAncestorNode(obj, searchee)
{
	if(obj.parentNode.tagName.toLowerCase() == searchee)
	{
		return obj.parentNode;
	}
	else return getAncestorNode(obj.parentNode, searchee);
}
