
// requires utils.js (addLoadEvent);

//_____[ FORMS ]_____\\

var validateForm =
{
	check: '',
	focused: false,
	
	checkForm: function(whichform)
	{
		validateForm.check = '';
		var elements = validateForm.getElementsByClassName(whichform,'required');
		for(var i = 0; i < elements.length; i++)
		{
			var element = elements[i];
			if(!validateForm.isFilled(element))
			{
				var message = (element.name) ? 'Please fill in the '+element.name+' field.' : 'Please make a selection.';
				validateForm.showError(element,message);
				validateForm.check += 'false';
			}
			if(element.className.indexOf('email') != -1)
			{
				if(!validateForm.isEmail(element))
				{
					validateForm.showError(element,'The '+element.name+' field must be a valid email address, e.g. you@youremail.com');
					validateForm.check += 'false';
				}
			}
			if(element.className.indexOf('numeric') != -1)
			{
				if(!validateForm.isNumeric(element))
				{
					validateForm.showError(element,'The '+element.name+' field must be numeric.');
					validateForm.check += 'false';
				}
			}
		}
		validateForm.check += 'true';
	},

	showError: function(element,message)
	{
		var nodes = element.parentNode.childNodes;
		for(var i = 0; i < nodes.length; i++)
		{
			if(nodes[i].className == 'error')
			{
				return;
			}
		}
		var error = document.createElement('strong');
		error.className = 'error';
		var t = document.createTextNode(message);
		error.appendChild(t);
		element.parentNode.appendChild(error);
		//element.parentNode.className = 'error';
		//alert(element.getAttribute('type'));
	},

	removeError: function(element)
	{
		var nodes = element.parentNode.childNodes;
		for (var i = 0; i < nodes.length; i++)
		{
			if(nodes[i].className == 'error')
			{
				element.parentNode.removeChild(nodes[i]);
				//element.parentNode.className = element.parentNode.className.replace('error','');
			}
		}
	},
	
	checkChildren: function(element)
	{
		var valid = false;
		var children = element.getElementsByTagName('input');
		for(var i = 0; i < children.length; i++)
		{
			var child = children[i];
			if(child.checked)
			{
				valid = true;
			}
		}
		return valid;
	},

	isFilled: function(element)
	{
		if(!element.value && element.hasChildNodes())
		{
			if(element.getElementsByTagName('input').length >= 1)
			{
				if(!validateForm.checkChildren(element))
				{
					return false;
				}
				else
				{
					validateForm.removeError(element);
					return true;
				}
			}
			if(element.options.length >= 1)
			{
				if(element.options[element.selectedIndex].value == '')
				{
					return false;
				}
				else
				{
					validateForm.removeError(element);
					return true;
				}
			}
		}
		else
		{
			if(element.value.length < 1) // || field.value == field.defaultValue
			{
				return false;
			}
			else
			{
				validateForm.removeError(element);
				return true;
			}
		}
	},
	
	isEmail: function(element)
	{
		return (element.value.indexOf('@') == -1 || element.value.indexOf('.') == -1) ? false : true;
	},
	
	isNumeric: function(element)
	{
		return (element.value.search(/[^0-9]/) != -1) ? false : true;
	},
	
	setFocus: function(whichform)
	{
		var errors = validateForm.getElementsByClassName(whichform,'error');
		if(errors[0])
		{
			var element = errors[0].previousSibling;
			while(element.nodeType != 1)
			{
				element = element.previousSibling;
			}
			if(element.hasChildNodes() && element.getElementsByTagName('input').length >= 1)
			{
				var n = element.getElementsByTagName('input')[0];
				n.focus();
			}
			else
			{
				element.focus();
			}
		}
	},

	getElementsByClassName: function(parent,name)
	{
		var results = new Array();
		var a = parent.getElementsByTagName('*');
		for(var i = 0; i < a.length; i++)
		{
			if(a[i].className.indexOf(name) != -1)
			{
				results[results.length] = a[i];
			}
		}
		return results;
	},

	init: function()
	{
		for(var i = 0; i < document.forms.length; i++)
		{
			var thisform = document.forms[i];
			thisform.onsubmit = function()
			{
				validateForm.checkForm(this);
				validateForm.setFocus(this);
				return (validateForm.check.indexOf('false') >= 0) ? false : true;
			};
		}
	}
}
addLoadEvent(validateForm.init);

//_____[ POPUPS ]_____\\

var popup =
{
	w: null,
	h: null,
	
	create: function(h,c)
	{
		var x = false;
		var n = '';
		var o = '';
		switch(c)
		{
			case 'calendar_popup':
				o = 'width=1000,height=750,scrollbars=1,resizable=yes';
				break;
			case 'collmgt_popup':
				o = 'width=800,height=500,menubar=1,scrollbars=1,resizable=yes';
				break;
			case 'ill_popup':
				o = 'width=620,height=600,scrollbars=1,resizable=yes';
				break;
			case 'infolit_popup':
				o = 'width=800,height=550,menubar=1,scrollbars=1,resizable=yes';
				break;
			case 'map_popup':
				o = 'width=540,height=550,scrollbars=1,resizable=yes';
				break;
			case 'ref_popup':
				o = 'width=450,height=360,scrollbars=1,resizable=yes';
				break;
			case 'reserves_popup':
				o = 'width=600,height=560,scrollbars=1,resizable=yes';
				break;
			case 'screenshot_popup':
				popup.size(h);
				o = 'width='+popup.w+',height='+popup.h+',scrollbars=yes,resizable=yes';
				break;
			case 'video_popup':
				o = 'width=400,height=400,scrollbars=1,resizable=yes';
				break;
			case 'wtl_popup':
				o = 'width=1000,height=700,scrollbars=1,resizable=yes';
				break;
			case 'close_popup':
				x = true;
				break;
		}
		if(x)
		{
			opener.location.href = h;
			window.close();
		}
		else
		{
			window.open(h,n,o);
		}
	},
	
	size: function(h)
	{
		var tmp = h.split('w=')[1];
		tmp = tmp.split('&h=');
		popup.w = parseInt(tmp[0]) + 20;
		popup.h = parseInt(tmp[1]) + 20;
	},

	set: function(a)
	{
		a.onclick = function()
		{
			popup.create(this.href,this.className);
			return false;
		};
	},

	get: function(a) {
		if(!document.getElementsByTagName || !document.getElementsByTagName(a)) return false;
		var links = document.getElementsByTagName(a);
		for (var i=0; i < links.length; i++)
		{
			if(links[i].className.indexOf('popup') != -1)
			{
				popup.set(links[i]);
			 }
		}
	},
	
	init: function()
	{
		popup.get('a');
		popup.get('area');
	}
}
addLoadEvent(popup.init);

//_____[ FAQ ]_____\\

var faq =
{ 
	changeClass: function(action,element,class1,class2)
	{
		switch (action)
		{
			case 'swap':
				element.className = !faq.changeClass('check',element,class1)?element.className.replace(class2,class1):element.className.replace(class1,class2);
				break;
			case 'add':
				if(!faq.changeClass('check',element,class1)){element.className+=element.className?' '+class1:class1;}
				break;
			case 'remove':
				var rep = element.className.match(' '+class1)?' '+class1:class1;
				element.className = element.className.replace(rep,'');
				break;
			case 'check':
				return new RegExp('\\b'+class1+'\\b').test(element.className)
				break;
		}
	},
	
	addLink: function(q,n)
	{
		var id = 'faq' + n;
		q.setAttribute('id',id);
		var a = document.createElement('a');
		a.setAttribute('href','#' + id);
		a.onfocus = function() { faq.changeClass('add',a.parentNode,'hover'); };
		a.onblur = function() { faq.changeClass('remove',a.parentNode,'hover'); };
		q.appendChild(a);
	},

	toggleDisplay: function()
	{
		if(!document.getElementById) return false;
		if(!document.getElementById('faq_container')) return false;
		var faqList = document.getElementById('faq_container');
		var heads = faqList.getElementsByTagName('h4');
		for(var i=0; i<heads.length; i++) {
			faq.addLink(heads[i],i);
			var elementToHide = heads[i].nextSibling;
			while(elementToHide.nodeType != 1)
			{
				elementToHide = elementToHide.nextSibling;
			}
			faq.changeClass('add',elementToHide,'hide')
			faq.changeClass('add',heads[i],'trigger')
			heads[i].elementToHide = elementToHide;
			heads[i].onmouseover = function()
			{
				faq.changeClass('add',this,'hover');
			};
			heads[i].onmouseout = function()
			{
				faq.changeClass('remove',this,'hover');
			};
			heads[i].onclick = function()
			{
				if(faq.changeClass('check',this.elementToHide,'hide'))
				{
					faq.changeClass('swap',this,'trigger','open');
					faq.changeClass('swap',this.elementToHide,'hide','show');
				}
				else
				{
					faq.changeClass('swap',this,'open','trigger');
					faq.changeClass('swap',this.elementToHide,'show','hide');
				}
			};
		}
	}
}
addLoadEvent(faq.toggleDisplay);

//_____[ TXT ]_____\\

var txt =
{
	makeLink: function(k)
	{
		var c = location.href;
		if(c.indexOf('#') != -1)
		{
			var h = c.split('#')[0];
		}
		else
		{
			var h = location.href;
		}
		var d = document.createElement('div');
		d.setAttribute('id','textonly');
		var a = document.createElement('a');
		if(k == 'textonly')
		{
			a.setAttribute('id','txt');
			a.setAttribute('href',h);
			var at = document.createTextNode('text only');
			a.onclick = function() { cookie.create('zsrtxt','show',1,'/'); };
		}
		if(k == 'regular')
		{
			a.setAttribute('id','orig');
			a.setAttribute('href',h);
			var at = document.createTextNode('Return to original display');
			a.onclick = function() { cookie.erase('zsrtxt'); };
		}
		a.appendChild(at);
		d.appendChild(a);
		var f = document.getElementById('footer');
		f.appendChild(d);
	},
	
	whichDisplay: function()
	{
		var tc = cookie.get('zsrtxt');
		if(tc && tc == 'show')
		{
			var css = document.getElementsByTagName('link');
			for(var i=css.length-1; i>=0; i--)
			{
				var c = css[i];
				if(c.getAttribute('href').indexOf('css') != -1)
				{
					c.setAttribute('href',''); // IE fix
					c.parentNode.removeChild(c);
				}
			}
			var img = document.getElementsByTagName('img');
			for(var j=img.length-1; j>=0; j--)
			{
				var m = img[j];
				m.parentNode.removeChild(m);
			}
			txt.makeLink('regular');
		}
		else { txt.makeLink('textonly'); }
	},
	
	init: function()
	{
		if(!document.getElementById || !document.createElement || !document.getElementById('footer')) return false;
		if(zsrUrl())
		{
			txt.whichDisplay();
		}
	}
}
// requires utils.js (cookie, zsrUrl);
addLoadEvent(txt.init);
