self.name = "parentWindow";
var SELECT_ALL = "selectAll";
var DESELECT_ALL = "deSelectAll";

function cancelEventCompletion(e) 
{
	if (window.event && !e) 
	{
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}
	if (e && e.stopPropagation && e.preventDefault) 
	{
		e.stopPropagation();
		e.preventDefault();
	}
}

function addEvent(obj, evType, fn, useCapture) 
{
	if (useCapture == null)
		useCapture = false;
	
	if (obj.addEventListener) 
	{
		obj.addEventListener(evType, fn, useCapture);
		return true;
	} 
	else if (obj.attachEvent) 
	{
		return obj.attachEvent("on" + evType, fn);
	} 
	else 
	{
		obj['on' + eventType] = fn;
	}
}

function hasNumbers(myString)
{
	var chars = myString.split("");
	var returnValue = false;
		
	for (var i = 0; i < chars.length; i++)
	{
		if (!isNaN(parseInt(chars[i])))
		{
			returnValue = true;
			break;			
		}
	}
	
	return returnValue;
}
	
function isMobile(myString)
{
	var chars = myString.split("");
	var numberCounter = 0;
	var spaceCounter = 0;
	var returnValue = true;

	if (chars.length > 12)
		returnValue = false;
	else
	{
		for (var i = 0; i < chars.length; i++)
		{
			if (isNaN(parseInt(chars[i])) && chars[i] != " ")
			{
				returnValue = false;
				break;
			}
			else if (!isNaN(parseInt(chars[i])))
			{
				numberCounter++;
			}
			else if (chars[i] == " ")
			{
				spaceCounter++;
			}				
		}
			
		if (returnValue)
		{
			if (numberCounter != 10 || spaceCounter > 2)
				returnValue = false;	
		}
	}
		
	return returnValue;		
}

function isLongPhone(myString)
{
	var chars = myString.split("");
	var returnValue = true;
	
	if (chars.length != 14)
		returnValue = false
	else
	{
		for (var i = 0; i < chars.length; i++)
		{
			if (i == 0)
			{
				if (chars[i] != "(")
				{
					returnValue = false;
					alert(i);
					break;
				}
			}
			else if (i == 3)
			{
				if (chars[i] != ")")
				{
					alert("--" + i);
					returnValue = false;
					break;
				}
			}
			else if (i == 4 || i == 9)
			{
				if (chars[i] != " ")
				{
					alert("ppp" + i);
					returnValue = false;
					break;
				}
			}
			else
			{
				if (isNaN(parseInt(chars[i])))
				{
					alert("www" + i);
					returnValue = false;
					break;
				}				
			}
		}
	}
	
	return returnValue;
}
		
function isNumeric(myString)
{
	var chars = myString.split("");
	var returnValue = true;
	
	for (var i = 0; i < chars.length; i++)
	{
		if (isNaN(parseInt(chars[i])))
		{
			returnValue = false;
			break;
		}
	}
	
	return returnValue;
}

function isSimplePhone(myString)
{
	if (isNumeric(myString.replace(/ /g, "0").replace(/\(/g, "1").replace(/\)/g, "2")) && myString.length > 7)
		return true;
	else
		return false;
}

function isWebsite(myString)
{
	if (myString.indexOf("http") == 0 || myString.indexOf("www") == 0)
		return true;
	else
		return false;
}

function standardFormValidation(e)
{
	var formForValidation = e;//getElementFromEvent(e);
	var errorPrefix = "The following information is needed: ";
	var errorMessage = "";
	var emptyCollectionTest = false;
	var emptyCollectionErrorMessage = "At least one of the fields in the form needs a value specified";
	var specificName = "fieldName";
	
	var trainer = document.getElementById("trainerId");
	var trainerId = 0;

	if (trainer)
	{
		trainerId = trainer.value;
	}

    for (var i = 0; i < formForValidation.elements.length; i++)
    {
		formElement = formForValidation.elements[i];
		
		if (formElement.value != null)
		{
			elementName = formElement.name;
			elementValue = trim(formElement.value);
			className = formElement.className;
			
			specificNameIndex = className.search(specificName);
			
			if (className.indexOf(":") > -1)
			{
				elementDisplayName = className.split(":");
				elementDisplayName = elementDisplayName[1];
			}
			else
			{
				if (specificNameIndex == -1)
					elementDisplayName = removeLastNumber(formElement.name);
				else
					elementDisplayName = className.substr(specificNameIndex + specificName.length).replace(/_/g, " ");
			}
			
			elementDisplayName = elementDisplayName.replace(/_/g, " ");
				
			elementDisplayName = elementDisplayName.substr(0, 1).toUpperCase() + elementDisplayName.substr(1);
			
			if (className.search("checkEmpty") > -1 && elementName.search("Date") < 0)
            {
				if (!(elementName == 'title' && trainerId != 0))
				{
					if (elementValue == "")
					{
						errorMessage += "\n- '" + elementDisplayName + "' requires a value";
					}
				}
			}
			
			if (className.search("checkWebsite") > -1)
			{
				if (elementValue != "")
				{	
					if (!isWebsite(elementValue))
					{
						errorMessage += "\n- '" + elementDisplayName + "' must be a valid website address, starting either with 'http:' or 'www'";						
					}
				}
			}
			
			if (elementName.search("Date") == elementName.length - 4 && elementName.length > 5)
			{
				elementDateRoot = elementName;
				
				dateDay = formForValidation[elementDateRoot + 'Day'].value;
				dateMonth = formForValidation[elementDateRoot + 'Month'].value;
				dateYear = formForValidation[elementDateRoot + 'Year'].value;
				
				if ((dateDay != '' && dateMonth != '' && dateYear != '') || (className.search("checkEmpty") > -1))
				{
					formattedDate = dateDay + dateMonth + dateYear;
					
					if (!check_date(formattedDate))
					{
						errorMessage += "\n- '" + elementDisplayName + "' is not a valid date";
					}
					else if (!checkPostToday(dateDay, dateMonth, dateYear))
					{
//						errorMessage += "\n- '" + elementDisplayName + "' must be a date in the future";
					}
				}
			}
		
			if (formElement.className.search("checkMobilePhone") > -1)
			{
				if (elementValue != "")
				{
					if (!isMobile(elementValue))
					{
						errorMessage += "\n- '" + elementDisplayName + "' must be in the following format: \"0123 456 789\"";
					}
				}
			}
			
			if (formElement.className.search("checkSimplePhone") > -1)
			{
				if (elementValue != "")
				{
					if (!isSimplePhone(elementValue))
					{
						errorMessage += "\n- '" + elementDisplayName + "' must contain only numbers, brackets or spaces and be more than 7 characters in length";
					}
				}
			}
					
			if (formElement.className.search("checkLongPhone") > -1)
			{
				if (elementValue != "")
				{
					if (!isLongPhone(elementValue))
					{
						errorMessage += "\n- '" + elementDisplayName + "' must be in the following format: \"(01) 2345 6789\"";
					}
				}
			}
		
			if (formElement.className.search("checkPostcode") > -1)
			{
				if (elementValue != "")
				{
					if (!isNumeric(elementValue) || elementValue.length != 4)
					{
						errorMessage += "\n- '" + elementDisplayName + "' must contain only 4 numbers";
					}
				}
			}
		
			if (formElement.className.search("checkNumeric") > -1)
			{
				if (elementValue != "")
				{
					if (!isNumeric(elementValue))
					{
						errorMessage += "\n- '" + elementDisplayName + "' must contain only numbers";
					}
				}
			}
		
			if (formElement.className.search("checkNoNumbers") > -1)
			{
				if (elementValue != "")
				{
					if (hasNumbers(elementValue))
					{
						errorMessage += "\n- '" + elementDisplayName + "' cannot have numbers in it";
					}				
				}
			}
		
			if (formElement.className.search("checkSelected") > -1 && trainerId == 0)
			{
				var radioElements = document.getElementsByName(elementName);
				var selectionMade = false;
			
				for (var j = 0; j < radioElements.length; j++)
				{
					if (radioElements[j].checked)
						selectionMade = true;
				}

				if (!selectionMade)
				{
					if (elementDisplayName.length > 25)
					{
						errorMessage += "\n- " + elementDisplayName;
					}
					else
					{
						errorMessage += "\n- '" + removeLastNumber(elementDisplayName) + "' must have a value selected";	
					}		
				}
			}
		
			if (formElement.className.search("checkRadioConditional") > -1)
			{
				if (formElement.checked)
				{
					var conditionalElement = document.getElementById(removeLastNumber(formElement.id));
				
					if (trim(conditionalElement.value) == "")
					{
						errorMessage += "\n- please enter data for the field titled '" + conditionalElement.name + "'";
					}
				}
			}
                
			if (formElement.className.search("checkEmail") > -1 && elementValue != "")
            {
				if (!checkEmail(elementValue))
                {
					errorMessage += "\n- '" + elementDisplayName + "' must contain a valid email address";
                }
			}
		
			if (formElement.className.search("checkLength") > -1)
			{
				var testLength = getLastNumber(formElement.className);
			
				if (elementValue.length > testLength)
				{
					errorMessage += "\n- '" + elementDisplayName + "' cannot contain data longer than " + testLength + " characters in length";
				}
			}
                
			if (formElement.className.search("checkCollectionEmpty") > -1)
			{
				var elementValue = trim(formElement.value);
                    
				emptyCollectionTest = true;
                    
				if (elementValue != "")
				{
					emptyCollectionErrorMessage = "";
				}
			}
		}
	}

	// if there's an empty collection test, need to update error message
	if (emptyCollectionErrorMessage != "" && emptyCollectionTest)
	{
		if (errorMessage != "")
			errorMessage += emptyCollectionErrorMessage;
		else
			return displayErrorMessage(emptyCollectionErrorMessage, e);
	}
            
	if (errorMessage != "")
	{
		return displayErrorMessage(errorPrefix + errorMessage, e);
	}
}
        
function displayErrorMessage(message, e)
{
	alert(message);

	cancelEventCompletion(e);
	return false;            
}
        
function checkEmail(email)
{
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	
	if (filter.test(email)) 
		return true;
	else 
		return false;
}
        
function trim(value) 
{
	if (value != null)
	{
		value = value.replace(/^\s+/, '');
		value = value.replace(/\s+$/, '');
	}
	else
		value = "";
	
	return value;
}
	
// gets the number from the end of a string if there is one 
// gets the number from the beginning of a string if there is one and firstNumber = true
function getLastNumber(myString, firstNumber)
{
	var myNumber = "";
	
	for (var i = 1; i <= myString.length; i++)
	{
		var singleNumber = myString.substring(myString.length - i, myString.length - i + 1);
		
		if (firstNumber)
			singleNumber = myString.substring(i - 1, i);

		if (isNaN(parseInt(singleNumber)))
			break;
		else
		{
			if (firstNumber)
				myNumber = myNumber + singleNumber;
			else
				myNumber = singleNumber + myNumber;
		}
	}	

	return myNumber;
}
	
function getFirstNumber(myString)
{
	return getLastNumber(myString, true);
}
        
function removeLastNumber(myString)
{
	// removes last integer of form element name if there is one
	if (!isNaN(parseInt(myString.substr(myString.length - 1, myString.length))))
	{
		myString = myString.substr(0, myString.length - 1);
	}
	
	return myString;
}

function getElementIdByEvent(e) 
{
	var elementId;

	if (window.event && window.event.srcElement) 
	{
		if (window.event.srcElement.getAttribute)
			elementId = window.event.srcElement.getAttribute('id');
	}
	
	if (e && e.target) 
	{
		var theEvent;
	
		if (e.target.nodeType == 3)
			theEvent = e.target.parentNode;
		else
			theEvent = e.target;
		
		elementId = theEvent.getAttribute('id');
	}
	
	return elementId;
}

function getElementFromEvent(e)
{
	return getElementByEvent(e);
}

function getElementByEvent(e)
{
	var element = false;

	if (window.event && window.event.srcElement) 
	{
		element = window.event.srcElement;
	}
	
	if (e && e.target) 
	{
		if (e.target.nodeType == 3)
			element = e.target.parentNode;
		else
			element = e.target;
	}
	
	return element;
}

function stringBeforeString(string, findString)
{
	index = string.search(findString);
	
	if (index > -1)
	{
		string = string.substr(0, index);
	}
	
	return string;
}

function reverseString(inputString) {

	var newString = '';
  
	for (var i=(inputString.length - 1); i >= 0; i--) 
	{
		newString += inputString.charAt(i);
	}
	
	return (newString);
}

function stringAfterString(string, findString)
{
	return reverseString(stringBeforeString(reverseString(string), reverseString(findString)));
}

function selectAll(e)
{
	var element = getElementByEvent(e);
	var checkBoxName = "";
	var checked = null;
	
	if (element.className.search(SELECT_ALL) > -1)
	{
		checkBoxName = stringAfterString(element.className, SELECT_ALL);
		checked = true;		
	}
	else if (element.className.search(DESELECT_ALL) > -1)
	{
		checkBoxName = stringAfterString(element.className, DESELECT_ALL);
		checked = false;
	}
	
	if (checked != null)
	{
		var formElements = document.form.elements;
		
		for (var i = 0; i < formElements.length; i++)
		{
			if (checkBoxName == formElements[i].name)
			{
				formElements[i].checked = checked;
			}
		}
	}
	
	cancelEventCompletion(e);
	return false;
}

function addListeners(e)
{
	var links = document.links;
	
	for (var i = 0; i < document.forms.length; i++)
	{
		if (document.forms[i].className.search("validateForm") > -1)
		{
//			addEvent(document.forms[i], 'submit', standardFormValidation);
		}
	}
	
	for (var i = 0; i < links.length; i++)
	{
		if (links[i].className.search(SELECT_ALL) > -1 || links[i].className.search(DESELECT_ALL) > -1)
		{
			addEvent(links[i], 'click', selectAll);
//			links[i].onclick = false;
		}
	}	
}



addEvent(window, 'load', addListeners, false);




function check_date(value)
{
	var checkstr = "0123456789";
	var Datevalue = "";
	var DateTemp = "";
	var seperator = ".";
	var day;
	var month;
	var year;
	var leap = 0;
	var err = 0;
	var i;

	err = 0;
	DateValue = value;

	/* Delete all chars except 0..9 */
   for (i = 0; i < DateValue.length; i++) {
	  if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
	     DateTemp = DateTemp + DateValue.substr(i,1);
	  }
   }
   
   DateValue = DateTemp;
   /* Always change date to 8 digits - string*/
   /* if year is entered as 2-digit / always assume 20xx */
   if (DateValue.length == 6) {
      DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
   if (DateValue.length != 8) {
      err = 19;}
   /* year is wrong if year = 0000 */
   year = DateValue.substr(4,4);
   if (year == 0) {
      err = 20;
   }
   /* Validation of month*/
   month = DateValue.substr(2,2);
   if ((month < 1) || (month > 12)) {
      err = 21;
   }
   /* Validation of day*/
   day = DateValue.substr(0,2);
   if (day < 1) {
     err = 22;
   }
   /* Validation leap-year / february / day */
   if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
      leap = 1;
   }
   if ((month == 2) && (leap == 1) && (day > 29)) {
      err = 23;
   }
   if ((month == 2) && (leap != 1) && (day > 28)) {
      err = 24;
   }
   /* Validation of other months */
   if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
      err = 25;
   }
   if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
      err = 26;
   }
   /* if 00 ist entered, no error, deleting the entry */
   if ((day == 0) && (month == 0) && (year == 00)) {
      err = 0; day = ""; month = ""; year = ""; seperator = "";
   }
   /* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
   if (err == 0) 
   {
	  return true;
   }
   else 
   {
	   return false;
   }
}

function checkPostToday(day, month, year)
{
	afterDate = year + month + day;
	
	var d = new Date();
	
	beforeDay = d.getDate();
	beforeMonth = d.getMonth() + 1;
	beforeYear = d.getFullYear();
	
	if (beforeDay < 10)
		beforeDay = "0" + beforeDay;
		
	if (beforeMonth < 10)
		beforeMonth = "0" + beforeMonth;
	
	beforeDate = beforeYear + " " + beforeMonth + " " + beforeDay;
	
	if (afterDate <= beforeDate)
		return false;
	else
		return true;
}

