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; }