// version 0.2 23/10/2008

// *******************************
// *******************************
// This variant for gyb add more message texts to improve the help
// *******************************
// *******************************
//
// PWS & MBWEBS 2008
// 
// expects form to have ID of 'pmbws' in lowercase
// uses variable formID to set this
// 
// Looks for form radio set name 'radvalidation' 
// to determine if errors are inLine or as Alerts
// defaults to inLine if radio with ID of 'radalert' not found
//
// form field vet checks are determined by their css class names
// class names used are:
// 
// Required
// requiredNotWhitespace
// positiveInteger
// positiveOrZeroInteger
// numeric
// Email
// Decimal
// telephone
//
// error messages are created into a span tag with 
// class as set in variable 'errorClass'
//
// Expects the form to be structured into paragraphs containing label and field
//	<p><label></label><input> </p> 
// for inline error messages the span is placed before the closing </p>
// thus: <p><label></label><input> <span class="errorMsg">msgText</span></p>
// ===============================


// *******************************
// *******************************
// start declare variables

var formId = 'pmbws';
var errorSpanId = '_error';
var errorMsg = "";

// message output variable specification
var msgTypeField = 'radvalidation'; // field name for radio options
var msgTypeId = 'radalert';  // id of radio option for alerts
var msgTypeDefault = 'radinpage';  // id of radio option for in page messages (not required)

var errorClass = "errorMsg";

var msgText = Array();

msgText['required'] 			=  "Please complete this required field.";
msgText['requiredNotWhitespace'] 	=  "Please complete this field without spaces.";
msgText['positiveInteger'] 		=  "This field may only contain a positive whole number.";
msgText['positiveOrZeroInteger'] 	=  "This field may only contain a non-negative whole number.";
msgText['numeric'] 			=  "This field may only contain a whole number.";
msgText['decimal'] 			=  "This field may only contain a number.";
msgText['email'] 			=  "Please enter a valid email address.";
msgText['telephone'] 			=  "Please enter a valid telephone number into this field.";

msgText['requiredCompany'] 		=  "Please complete the Company Name field.";
msgText['requiredFName'] 		=  "Please complete the First Name field.";
msgText['requiredSName'] 		=  "Please complete the Surname field.";
msgText['requiredAddress'] 		=  "Please complete the Company Address field.";
msgText['requiredStand'] 		=  "Please select the stand you want.";
msgText['requiredPcode'] 		=  "Please enter your post code";
msgText['requiredWeb'] 			=  "Please enter your web site address";
msgText['requiredInfo'] 		=  "Please enter your company description";
msgText['requiredAbout'] 		=  "Where did you hear about the event";

msgText['checkTerms'] 			=  "Please confirm acceptance of the terms";
msgText['radioQuestion'] 		=  "Please select an answer";

// ==============================
// do not change below this line
// ==============================

// build array of expressions
valid_exp = Array();
valid_exp['email'] = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/;
valid_exp['numeric'] = /^-?\d+$/;
valid_exp['telephone'] = /^[- ()0-9]+$/;
valid_exp['requiredNotWhitespace'] = /\s/;


// end declare variables
// ===============================



// add listener 
addLoadListener(init);


function init() 
	{
	if(document.forms[formId])
		{
		document.forms[formId].onsubmit = vetForm;
		return true;
		}
	}





function vetForm()
	{
	
	// var needs to be delared here to ensure form is loaded first
	var elements = document.forms[formId].elements;
	clearError();
	
	for (var i = 0; i < elements.length; i++)
		{
		
		// required
			//  if (/(^| )required( |$)/.test(elements[i].className.toLowerCase()) 
		if (/(^| )required(|$)/.test(elements[i].className.toLowerCase()) 
			&& elements[i].value == "" )
			{
				// errorMsg = msgText['required']; // old line:  
			msgTextClass = elements[i].className; // new line
			errorMsg = msgText[msgTextClass];// new line

			// call error display function
			displayError(errorMsg,elements[i]);
			// put cursor in field
			elements[i].focus()
			return false;
			}
		// email
		if (/(^| )email( |$)/.test(elements[i].className.toLowerCase()) 
			&& !valid_exp['email'].test(elements[i].value.toLowerCase()))
			{
			errorMsg = msgText['email'];
			displayError(errorMsg,elements[i]);
			elements[i].focus()
			return false;
			} 
		
		// telephone
		if (/(^| )telephone( |$)/.test(elements[i].className) 
			&& !valid_exp['telephone'].test(elements[i].value))
			{
			errorMsg = msgText['telephone'];
			displayError(errorMsg,elements[i]);
			elements[i].focus()
			return false;
			} 
		// decimal
		if (/(^| )decimal( |$)/.test(elements[i].className.toLowerCase()) 
			&& parseFloat(elements[i].value.toString(),10) != elements[i].value.toString() )
			{
			errorMsg = msgText['decimal'];
			displayError(errorMsg,elements[i]);
			elements[i].focus()
			return false;
			}
		// numeric
		if (/(^| )numeric( |$)/.test(elements[i].className.toLowerCase()) 
			&& !valid_exp['numeric'].test(elements[i].value))
			{
			errorMsg = msgText['numeric'];
			displayError(errorMsg,elements[i]);
			elements[i].focus()
			return false;
			}

		// requiredNotWhitespace
		if (/(^| )requirednotwhitespace( |$)/.test(elements[i].className.toLowerCase()) 
			&& (elements[i].value == ""
			|| (elements[i].value != ""
			&& valid_exp['requiredNotWhitespace'].test(elements[i].value))) )
			{
			errorMsg = msgText['requiredNotWhitespace'];
			displayError(errorMsg,elements[i]);
			elements[i].focus()
			return false;
			}
		// positiveInteger
		if (/(^| )positiveinteger( |$)/.test(elements[i].className.toLowerCase()) 
			&& (elements[i].value == ""
			|| (parseInt(elements[i].value,10).toString() != elements[i].value.toString() 
			|| elements[i].value <= 0)))
			{
			errorMsg = msgText['positiveInteger'];
			displayError(errorMsg,elements[i]);
			elements[i].focus()
			return false;
			}
		// positiveOrZeroInteger
		if (/(^| )positiveorzerointeger( |$)/.test(elements[i].className.toLowerCase()) 
			&& parseInt(elements[i].value,10).toString() != elements[i].value.toString() )
			{
			errorMsg = msgText['positiveOrZeroInteger'];
			displayError(errorMsg,elements[i]);
			elements[i].focus()
			return false;
			}
		if (/(^| )check(|$)/.test(elements[i].className.toLowerCase()) 
			&& elements[i].checked == false )
			{
			msgTextClass = elements[i].className; // new line
			errorMsg = msgText[msgTextClass];// new line

			// call error display function
			displayError(errorMsg,elements[i]);
			// put cursor in field
			elements[i].focus()
			return false;
			}

		if (/(^| )radio(|$)/.test(elements[i].className.toLowerCase()) )
			{
			//formName = document.forms[formId];
			//radioGroupName = elements[i];
			//alert(document.forms[formId][elements[i].name]);
			radioGroup = document.forms[formId][elements[i].name];
			//alert(document.forms[formId].value);
			
			//alert(radioGroup.length);
			// check each option to see it one's selected
			radioChecked = 0;
			for (var r = 0; r < radioGroup.length; r++){
				//alert(radioChecked + " : "+r+" ; "+radioGroup);
				if(radioGroup[r].checked == true){radioChecked = 1}
				}
			
			//alert(radioChecked + " : "+r+" ; "+radioGroup.length+" ; "+elements[i].id);
			
			if(radioChecked == 0){
			msgTextClass = elements[i].className; // new line
			errorMsg = msgText[msgTextClass];// new line

			// call error display function
			displayError(errorMsg,elements[i]);
			// put cursor in field
			elements[i].focus()
			return false;
			}
			}

		} // end for loop
	} // end function


function displayError(errorMsg,element)
{
	// get error type to display
	// read radio buttons looking for Id to match value of variable 'msgTypeId'
	if(document.forms[formId][msgTypeField])
		{
		for(var i=0; i < document.forms[formId][msgTypeField].length; i++)
			{
			if(document.forms[formId][msgTypeField][i].checked == true)
				{
				msgType = document.forms[formId][msgTypeField][i].id;
				}
			}
		}
	else 
		{
		msgType = msgTypeDefault;
		}
		
	// display
	if(msgType.toLowerCase() == msgTypeId)
		{
		// alert messages
		alert(errorMsg);
		}
	else
		{
		// create span and put in as lst child in para
		var msgSpan = document.createElement('span');
		msgSpan.id = formId + errorSpanId;
		msgSpanMsg = document.createTextNode(errorMsg);
		msgSpan.appendChild(msgSpanMsg);
		msgSpan.className = errorClass;
		
		var fieldPara = element.parentNode;
		fieldPara.appendChild(msgSpan);
		//alert(errorMsg);
		}
}

function clearError()
	{
	// delete any existing error messages
	if(document.getElementById(formId + errorSpanId))
		{
		errorSpan = document.getElementById(formId + errorSpanId);
		errorSpanParent = errorSpan.parentNode;
		errorSpanParent.removeChild(errorSpan);
		}
	}

function addLoadListener(fn)
{
  if (typeof window.addEventListener != 'undefined')
  {
    window.addEventListener('load', fn, false);
  }
  else if (typeof document.addEventListener != 'undefined')
  {
    document.addEventListener('load', fn, false);
  }
  else if (typeof window.attachEvent != 'undefined')
  {
    window.attachEvent('onload', fn);
  }
  else
  {
    var oldfn = window.onload;
    if (typeof window.onload != 'function')
    {
      window.onload = fn;
    }
    else
    {
      window.onload = function()
      {
        oldfn();
        fn();
      };
    }
  }
}

function checkConcurrent(seminarId){
	for(var i = 0; i < seminarsCount ; i++) {
		if(seminars[i][0] == seminarId){
			if(seminars[i][3] && document.getElementById('seminar' + seminars[i][1]).checked && document.getElementById('seminar' + seminars[i][0]).checked){
				alert("Sorry, this seminar runs concurrently with seminar\n"+ '"'+seminars[i][3]+'"');
				document.getElementById('seminar' + seminars[i][0]).checked = false;
				}
			}
		}
	}
