/*
 * @version 2 2009-07-26
 * @author Michael Armenis
 * @copyright Copyright (C) 2008 - 2009 All rights reserved.
 * @license GNU/GPL
 */
function validate(){
	msgbox = document.getElementById("errorbox");
	ErrorHeading = true;
	ErrorHeadingValidateRequired = true;
	ErrorHeadingValidateEmails = true;	
	cleanErrorBox();
	var failrequired = validationRequiredPassed();
	var failemails = validationEmailFieldsPassed();
//	msgbox = null;
//	ErrorHeading = null;
//	reqitems = null;
//	currentElement = null;
//	labels = null;
	if (failrequired ==true || failemails==true)
	{
		msgAnchor.focus();
		return false;
	}
	else
	{
		return true;
	}
}

function validationRequiredPassed(){
	reqitems=getElementsByClassName("req"); //get all required elements
	var passValidation = false;
	var foundErrors = false;
	var continueValidation = false;
	for (var i=0; i < reqitems.length; i++)
	{
		// check type of control
		switch (reqitems[i].type)
		{
			case "text":
			case "textarea":
			case "password":			
				if(reqitems[i].value.replace(/\s/g, "")==""){continueValidation = true;}else{continueValidation = false;}
			break;
			case "chekbox":
				if(reqitems[i].checked){continueValidation = true;}else{continueValidation = false;}
			break;
			case "select-one":
				if(reqitems[i].options[reqitems[i].selectedIndex].value==""){continueValidation = true;}else{continueValidation = false;}
			break;
		}
			// reset border colour
			reqitems[i].style.border ="1px solid #8B9F77";
		// if something found empty continue
		if(continueValidation)
		{
			findMatchingLabel(i,reqitems,"validateRequired");
			foundErrors = true;
		}
	}
	return foundErrors;
}

function findMatchingLabel(element,allElements,validationType){			
	currentElement = allElements[element];
	currentElement.style.border ="1px solid red";
	currentElement.style.background ="";
	// move and find the label that has a for name
	currElementParentNode = currentElement.parentNode;
	labels = currentElement.parentNode.getElementsByTagName('label');
	for (var x=0; x < labels.length; x++)
	{
		//matchLabel= none;
		if(labels[x].htmlFor==currentElement.id)
		{
			var matchLabel= labels[x];
		}
	}
	//labelText = matchLabel.firstChild.nodeValue;
	labelText = matchLabel.getAttribute("title");
	writeError(validationType);
}

function validationNumericFieldsPassed(){
	
}

function validationEmailFieldsPassed(){
	emailitems=getElementsByClassName("email"); //get all email elements
	var passValidation = false;
	var foundErrors = false;
	var continueValidation = false;
	for (var i=0; i < emailitems.length; i++)
	{
		// to be sure that the type is input
		if(emailitems[i].type=="text")
		{
			if (!emailitems[i].value.replace(/\s/g, "")=="")
			{
				var regSearch = /^[A-Z0-9\._%-+]+@[A-Z0-9\.-]+\.[A-Z]{2,4}$/i;
				var pass = regSearch.test(emailitems[i].value);
				if (!pass)
				{
					findMatchingLabel(i,emailitems,"validateEmails");
					foundErrors = true;
				}
			}
		}
	}
	return foundErrors;
}

function cleanErrorBox(){
	var msgbox1 = document.getElementById("errorbox");
	allerrors = msgbox1.childNodes;
	for (var y=0; y = allerrors.length; y++)
	{
	msgbox1.removeChild(msgbox1.childNodes[0]);
	}
//	var container = document.getElementById("ContentWrap");
//	msgbox.container.removeChild(msgbox);
}

function writeError(validationType){
	if (msgbox.style.display == 'none'){msgbox.style.display = ''};
	// write in the error box
	if(ErrorHeading)
	{
		messageHeader = document.createElement("h3");
		msgbox.appendChild(messageHeader);
		msgAnchor = document.createElement("a");
		msgAnchor.setAttribute("href", "#");
		msgAnchor.setAttribute("name", "errorHeading");
		msgAnchor.id = "errorHeading";
		messageHeader.appendChild(msgAnchor);
		msgAnchor.appendChild(document.createTextNode("Please correct the following errors."));
		ErrorHeading = false;
	}
	switch (validationType)
	{
		case "validateRequired":	
			if(ErrorHeadingValidateRequired)
			{
				msgDescr = document.createElement("h4");
				msgbox.appendChild(msgDescr);
				msgDescr.appendChild(document.createTextNode("The following entries are required and were found empty."));
				ul = document.createElement("ul");
				msgbox.appendChild(ul);
				ErrorHeadingValidateRequired = false;
			}
		break;
		case "validateEmails":
			if(ErrorHeadingValidateEmails)
			{
				msgDescr = document.createElement("h4");
				msgbox.appendChild(msgDescr);
				msgDescr.appendChild(document.createTextNode("The following emails are not valid."));
				ul = document.createElement("ul");
				msgbox.appendChild(ul);
				ErrorHeadingValidateEmails = false;
			}
		break;
	}
	li = document.createElement("li");
	anch = document.createElement("a");
	anch.setAttribute("href", "#"+currentElement.id);
	ul.appendChild(li);
	anch.onclick = function(){document.getElementById(this.href.split('#')[1]).focus();return false;};
	li.appendChild(anch);
	anch.appendChild(document.createTextNode(labelText));
}

function toggle(obj,trigger) {
	var trig = document.getElementById(trigger);
	var el = document.getElementById(obj);
	if (trig.checked){
		el.style.display = '';
	}
	else{
		el.style.display = 'none';
	}
	//el.style.display = (el.style.display != 'none' ? 'none' : '' );
}

function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp('(^|\\\\s)'+searchClass+'(\\\\s|$)');
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function getElementsByClassName(classname, node) {
	if(!node) node = document.getElementsByTagName("body")[0];
	var a = [];
	var re = new RegExp('\\b' + classname + '\\b');
	var els = node.getElementsByTagName("*");
	for(var i=0,j=els.length; i<j; i++)
	if(re.test(els[i].className))a.push(els[i]);
	return a;
}

function wordCount(countFrom, displayNumber, maxWordsAllowed){
   var1 = String(countFrom);
   var2 = String(displayNumber);
   var WordsReached = false;
   countWords = maxWordsAllowed +1  - document.getElementById(var1).value.split(/\s/).length;
   if (countWords<0){
	WordsReached = true;   
   	countWords = 'The maximum allowed number of words has been reached. Please delete (' + Math.abs(countWords) + ')' + ' words.';
   };
   targetNode = document.getElementById(var2);
   textNode = document.createTextNode(countWords);
    while (targetNode.firstChild) {
   	targetNode.removeChild(targetNode.firstChild);
   }
   targetNode.appendChild(textNode);
   if (WordsReached){
	   targetNode.style.color ='#FF0000';
	}
	else{
		targetNode.style.color ='#666666';
	}
}	
