function wHELPERS() {}; wHELPERS.prototype.addEvent = function(obj, type, fn) { if(!obj) { return;}
if (obj.attachEvent) { obj['e'+type+fn] = fn; obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
obj.attachEvent( 'on'+type, obj[type+fn] );} else if(obj.addEventListener) { obj.addEventListener( type,fn, false );} else { var originalHandler = obj["on" + type]; if (originalHandler) { obj["on" + type] = function(e){originalHandler(e);fn(e);};} else { obj["on" + type] = fn;}
}
}
wHELPERS.prototype.removeEvent = function(obj, type, fn) { if (obj.detachEvent) { if(obj[type+fn]) { obj.detachEvent( 'on'+type, obj[type+fn] ); obj[type+fn] = null;}
} else if(obj.removeEventListener)
obj.removeEventListener( type, fn, false ); else { obj["on" + type] = null;}
}
wHELPERS.prototype.getSourceElement = function(e) { if(!e) e = window.event; if(e.target)
var srcE = e.target; else
var srcE = e.srcElement; if(!srcE) return null; if(srcE.nodeType == 3) srcE = srcE.parentNode; if(srcE.tagName.toUpperCase()=='LABEL' && e.type=='click') { if(srcE.getAttribute('for')) { srcE = document.getElementById(srcE.getAttribute('for'));}
}
return srcE;}
wHELPERS.prototype.preventEvent = function(e) { if (!e) e = window.event; if (e.preventDefault) e.preventDefault(); else e.returnValue = false; return false;}
wHELPERS.prototype.stopPropagation = function(e) { if (!e) var e = window.event; e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation();}
wHELPERS.prototype.randomId = function () { var seed = (new Date()).getTime(); seed = seed.toString().substr(6); for (var i=0; i<6;i++)
seed += String.fromCharCode(48 + Math.floor((Math.random()*10))); return "id-" + seed;}
wHELPERS.prototype.activateStylesheet = function(sheetref) { if(document.getElementsByTagName) { var ss=document.getElementsByTagName('link');} else if (document.styleSheets) { var ss = document.styleSheets;}
for(var i=0;ss[i];i++ ) { if(ss[i].href.indexOf(sheetref) != -1) { ss[i].disabled = true; ss[i].disabled = false;}
}
}
wHELPERS.prototype.hasClass = function(element,className) { if(element && element.className) { if((' ' + element.className + ' ').indexOf(' ' + className +' ') != -1) { return true;}
}
return false;}
wHELPERS.prototype.hasClassPrefix = function(element,className) { if(element && element.className) { if((' ' + element.className).indexOf(' ' + className) != -1) { return true;}
}
return false;}
wHELPERS.prototype.hasIdPrefix = function(element,idPrefix) { if(element && element.id) { if(element.id.indexOf(idPrefix) != -1) { return true;}
}
return false;}
wHELPERS.prototype.getTop = function(obj) { var cur = 0; if(obj.offsetParent) { while(obj.offsetParent) { if((new wHELPERS()).getComputedStyle(obj,'position') == 'relative' ) { return cur;}
cur+=obj.offsetTop; obj = obj.offsetParent;}
}
return cur;}
wHELPERS.prototype.getLeft = function(obj) { var cur = 0; if(obj.offsetParent) { while(obj.offsetParent) { if((new wHELPERS()).getComputedStyle(obj,'position') == 'relative' ) { return cur;}
cur+=obj.offsetLeft; obj = obj.offsetParent;}
}
return cur;}
wHELPERS.prototype.getComputedStyle = function(element, styleName) { if(window.getComputedStyle) { return window.getComputedStyle(element,"").getPropertyValue(styleName);} else if(element.currentStyle) { return element.currentStyle[styleName];}
return false;}
var wHelpers = wHELPERS; if (!Array.prototype.push) { Array.prototype.push = function() { for (var i = 0; i < arguments.length; ++i) { this[this.length] = arguments[i];}
return this.length;};}
if(wHELPERS) { var wFORMS = { debugLevel : 0, helpers : new wHELPERS(), behaviors : {}, onLoadComplete : new Array(), processedForm : null, onLoadHandler : function() { for(var behaviorName in wFORMS.behaviors) { wFORMS.debug('wForms/loaded behavior: ' + behaviorName);}
for (var i=0;i<document.forms.length;i++) { wFORMS.debug('wForms/initialize: '+ (document.forms[i].name || document.forms[i].id) ); wFORMS.processedForm = document.forms[i]; wFORMS.addBehaviors(document.forms[i]);}
}, addBehaviors : function (node) { if(!node) return; var deep = arguments[1]?arguments[1]:true; if(!node.nodeType) { node = document.getElementById(node);}
if(!node || node.nodeType!=1) return; deep=(arguments.length>1)?arguments[1]:true; wFORMS._addBehaviors(node, deep);}, _addBehaviors : function (node, deep) { if(node.getAttribute('rel')=='no-behavior') { return false;}
if(node.nodeType == 1) { for(var behaviorName in wFORMS.behaviors) { wFORMS.behaviors[behaviorName].evaluate(node);}
if(deep) { for (var i=0, l=node.childNodes.length, cn=node.childNodes; i<l; i++) { if(cn[i].nodeType==1)
wFORMS._addBehaviors(cn[i], deep);}
}
if(node.tagName.toUpperCase() == 'FORM') { for (var i=0;i<wFORMS.onLoadComplete.length;i++) { wFORMS.onLoadComplete[i]();}
if(wFORMS.onLoadComplete.length > 0) { wFORMS.onLoadComplete = new Array();}
}
}
}, hasBehavior: function(behaviorName) { if(wFORMS.behaviors[behaviorName]) return true; return false;}, debug : function(txt) { msgLevel = arguments[1] || 10; if(wFORMS.debugLevel > 0 && msgLevel >= wFORMS.debugLevel) { if(!wFORMS.debugOutput)
wFORMS.initDebug(); if(wFORMS.debugOutput)
wFORMS.debugOutput.innerHTML += "<br />" + txt;}
}, initDebug : function() { var output = document.getElementById('debugOutput'); if(!output) { output = document.createElement('div'); output.id = 'debugOutput'; output.style.position = 'absolute'; output.style.right = '10px'; output.style.top = '10px'; output.style.zIndex = '300'; output.style.fontSize = 'x-small'; output.style.fontFamily = 'courier'; output.style.backgroundColor = '#DDD'; output.style.padding = '5px'; if(document.body)
wFORMS.debugOutput = document.body.appendChild(output);}
if(wFORMS.debugOutput)
wFORMS.debugOutput.ondblclick = function() { this.innerHTML = '' };}
}; wFORMS.NAME = "wForms"; wFORMS.VERSION = "2.0"; wFORMS.__repr__ = function () { return "[" + this.NAME + " " + this.VERSION + "]";}; wFORMS.toString = function () { return this.__repr__();}; wFORMS.utilities = wFORMS.helpers; var wf = wFORMS; wf.utilities.getSrcElement = wFORMS.helpers.getSourceElement; wf.utilities.XBrowserPreventEventDefault = wFORMS.helpers.preventEvent; wFORMS.helpers.activateStylesheet('wforms-jsonly.css'); wFORMS.helpers.addEvent(window,'load',wFORMS.onLoadHandler);}
if(wFORMS) { wFORMS.preventSubmissionOnEnter = false; wFORMS.showAlertOnError = true; wFORMS.className_required = "required"; wFORMS.className_validationError_msg = "errMsg"; wFORMS.className_validationError_fld = "errFld"; wFORMS.classNamePrefix_validation = "validate"; wFORMS.idSuffix_fieldError = "-E"; wFORMS.behaviors['validation'] = { errMsg_required : "This field is required. ", errMsg_alpha : "The text must use alphabetic characters only (a-z, A-Z). Numbers are not allowed.", errMsg_email : "This does not appear to be a valid email address.", errMsg_integer : "Please enter an integer.", errMsg_float : "Please enter a number (ex. 1.9).", errMsg_password : "Unsafe password. Your password should be between 4 and 12 characters long and use a combinaison of upper-case and lower-case letters.", errMsg_alphanum : "Please use alpha-numeric characters only [a-z 0-9].", errMsg_date : "This does not appear to be a valid date.", errMsg_notification : "%% error(s) detected. Your form has not been submitted yet.\nPlease check the information you provided.", errMsg_custom : "Please enter a valid value.", className_allRequired : "allrequired", jumpToErrorOnPage : null, currentPageIndex : -1, submitSwitchedOffFields : false, switchedOffFields : [], evaluate: function(node) { if(node.tagName.toUpperCase()=="FORM") { if(wFORMS.functionName_formValidation.toString()==wFORMS.functionName_formValidation) { wFORMS.functionName_formValidation = eval(wFORMS.functionName_formValidation);}
wFORMS.helpers.addEvent(node,'submit',wFORMS.functionName_formValidation);}
}, init: function() { }, run: function(e) { var element = wFORMS.helpers.getSourceElement(e); if(!element) element = e; var currentPageOnly = arguments.length>1 ? arguments[1]:false; wFORMS.behaviors['validation'].switchedOffFields = []; wFORMS.behaviors['validation'].jumpToErrorOnPage = null; if(wFORMS.preventSubmissionOnEnter) { if(element.type && element.type.toLowerCase()=='text')
return wFORMS.preventEvent(e);}
while (element && element.tagName.toUpperCase() != 'FORM') { element = element.parentNode;}
var nbErrors = wFORMS.behaviors['validation'].validateElement(element, currentPageOnly, true); wFORMS.behaviors['validation'].errorCount = nbErrors; if (nbErrors > 0) { if(wFORMS.behaviors['validation'].jumpToErrorOnPage) { wFORMS.behaviors['paging'].gotoPage(wFORMS.behaviors['validation'].jumpToErrorOnPage);}
if(wFORMS.showAlertOnError){ wFORMS.behaviors['validation'].showAlert(nbErrors);}
return wFORMS.helpers.preventEvent(e);}
if(!wFORMS.behaviors['validation'].submitSwitchedOffFields && !currentPageOnly) { for(var i=0; i < wFORMS.behaviors['validation'].switchedOffFields.length; i++) { var element = wFORMS.behaviors['validation'].switchedOffFields[i]; while(element.childNodes[0])
element.removeChild(element.childNodes[0]);}
}
return true;}, remove: function() { }, validateElement: function(element ) { var deep = arguments.length>2 ? arguments[2] : true; var currentPageOnly = arguments[1] ? arguments[1] : false; var wBehavior = wFORMS.behaviors['validation']; if(wFORMS.hasBehavior('switch') && wFORMS.helpers.hasClassPrefix(element,wFORMS.classNamePrefix_offState)) { if(!wBehavior.submitSwitchedOffFields) { wBehavior.switchedOffFields.push(element);}
return 0;}
if(wFORMS.hasBehavior('paging') && wFORMS.helpers.hasClass(element,wFORMS.className_paging)) { if(!wFORMS.helpers.hasClass(element,wFORMS.className_pagingCurrent) && currentPageOnly)
return 0; wBehavior.currentPageIndex = wFORMS.behaviors['paging'].getPageIndex(element);}
var nbErrors = 0; if(!wBehavior.checkRequired(element)) { wBehavior.showError(element, wBehavior.errMsg_required); nbErrors++;} else { if (wFORMS.helpers.hasClassPrefix(element,wFORMS.classNamePrefix_validation)) { var arrClasses = element.className.split(" "); for (j=0;j<arrClasses.length;j++) { switch(arrClasses[j]) { case "validate-alpha":
if(!wBehavior.isAlpha(element.value)) { wBehavior.showError(element, wBehavior.errMsg_alpha); nbErrors++;}
break; case "validate-alphanum":
if(!wBehavior.isAlphaNum(element.value)) { wBehavior.showError(element, wBehavior.errMsg_alphanum); nbErrors++;}
break; case "validate-date":
if(!wBehavior.isDate(element.value)) { wBehavior.showError(element, wBehavior.errMsg_date); nbErrors++;}
break; case "validate-time":
break; case "validate-email":
if(!wBehavior.isEmail(element.value)) { wBehavior.showError(element, wBehavior.errMsg_email); nbErrors++;}
break; case "validate-integer":
if(!wBehavior.isInteger(element.value)) { wBehavior.showError(element, wBehavior.errMsg_integer); nbErrors++;}
break; case "validate-float":
if(!wBehavior.isFloat(element.value)) { wBehavior.showError(element,wBehavior.errMsg_float); nbErrors++;}
break; case "validate-strongpassword":
if(!wBehavior.isPassword(element.value)) { wBehavior.showError(element, wBehavior.errMsg_password); nbErrors++;}
break; case "validate-custom":
var pattern = new RegExp("\/([^\/]*)\/([gi]*)"); var matches = element.className.match(pattern); if(matches[0]) { var validationPattern = new RegExp(matches[1],matches[2]); if(!element.value.match(validationPattern)) { wBehavior.showError(element, wBehavior.errMsg_custom); nbErrors++;}
}
break;}
}
}
}
if(nbErrors==0) { wBehavior.removeErrorMessage(element);} else { if(wBehavior.currentPageIndex>0 && !wBehavior.jumpToErrorOnPage) { wBehavior.jumpToErrorOnPage = wBehavior.currentPageIndex;}
}
if(deep) { for(var i=0; i < element.childNodes.length; i++) { if(element.childNodes[i].nodeType==1) { nbErrors += wBehavior.validateElement(element.childNodes[i], currentPageOnly, deep);}
}
}
return nbErrors;}, checkRequired: function(element) { var wBehavior = wFORMS.behaviors['validation']; if(wFORMS.helpers.hasClass(element,wFORMS.className_required)) { switch(element.tagName.toUpperCase()) { case "INPUT":
var inputType = element.getAttribute("type"); if(!inputType) inputType = 'text'; switch(inputType.toLowerCase()) { case "checkbox":
return element.checked; break; case "radio":
return element.checked; break; default:
return !wBehavior.isEmpty(element.value);}
break; case "SELECT":
if(element.selectedIndex==-1) { return false;} else
return !wBehavior.isEmpty(element.options[element.selectedIndex].value); break; case "TEXTAREA":
return !wBehavior.isEmpty(element.value); break; default:
return wBehavior.checkOneRequired(element); break;}
} else if(wFORMS.helpers.hasClass(element,wBehavior.className_allRequired)) { return wBehavior.checkAllRequired(element);}
return true;}, checkOneRequired: function(element) { if(element.nodeType != 1) return false; var tagName = element.tagName.toUpperCase(); var wBehavior = wFORMS.behaviors['validation']; if(tagName == "INPUT" || tagName == "SELECT" || tagName == "TEXTAREA" ) { var value = wBehavior.getFieldValue(element); if(!wBehavior.isEmpty(value)) { return true;}
}
for(var i=0; i<element.childNodes.length;i++) { if(wBehavior.checkOneRequired(element.childNodes[i])) return true;}
return false;}, checkAllRequired: function(element) { if(element.nodeType != 1) return true; var tagName = element.tagName.toUpperCase(); var wBehavior = wFORMS.behaviors['validation']; if(tagName == "INPUT" || tagName == "SELECT" || tagName == "TEXTAREA" ) { var value = wBehavior.getFieldValue(element); if(wBehavior.isEmpty(value)) { return false;}
}
for(var i=0; i<element.childNodes.length;i++) { if(!wBehavior.checkAllRequired(element.childNodes[i])) return false;}
return true;}, getFieldValue: function(element) { var value = null; if(element && element.tagName) { if(element.tagName.toUpperCase() == "INPUT") { var inputType = element.getAttribute("type"); if(!inputType) inputType = 'text'; switch(inputType.toLowerCase()) { case "checkbox":
value = element.checked?element.value:null; break; case "radio":
var radioGroup = element.form[element.name]; for (var i = 0; i< radioGroup.length; i++) { if (radioGroup[i].checked) { if(!value) value = new Array(); value[value.length] = radioGroup[i].value;}
}
break; default:
value = element.value;}
} else if(element.tagName.toUpperCase() == "SELECT") { if(element.selectedIndex!=-1)
value = element.options[element.selectedIndex].value
else
value = null;} else if(element.tagName.toUpperCase() == "TEXTAREA") { value = element.value;}
}
return value;}, isEmpty: function(s) { var regexpWhitespace = /^\s+$/; return ((s == null) || (s.length == 0) || regexpWhitespace.test(s));}, isAlpha: function(s) { var regexpAlphabetic = /^[a-zA-Z\s]+$/; return wFORMS.behaviors['validation'].isEmpty(s) || regexpAlphabetic.test(s);}, isAlphaNum: function(s) { var validChars = /^[\w\s]+$/; return wFORMS.behaviors['validation'].isEmpty(s) || validChars.test(s);}, isDate: function(s) { var testDate = new Date(s); return wFORMS.behaviors['validation'].isEmpty(s) || !isNaN(testDate);}, isEmail: function(s) { var regexpEmail = /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/; return wFORMS.behaviors['validation'].isEmpty(s) || regexpEmail.test(s);}, isInteger: function(s) { var regexp = /^[+]?\d+$/; return wFORMS.behaviors['validation'].isEmpty(s) || regexp.test(s);}, isFloat: function(s) { return wFORMS.behaviors['validation'].isEmpty(s) || !isNaN(parseFloat(s));}, isPassword: function(s) { return wFORMS.behaviors['validation'].isEmpty(s);}, showError: function (element,errorMsg) { wFORMS.behaviors['validation'].removeErrorMessage(element); if (!element.id) element.id = wFORMS.helpers.randomId(); element.className += " " + wFORMS.className_validationError_fld; var msgNode = document.createTextNode(" " + errorMsg); var fe = document.getElementById(element.id + wFORMS.idSuffix_fieldError); if(!fe) { fe = document.createElement("div"); fe.setAttribute('id', element.id + wFORMS.idSuffix_fieldError); var fl = document.getElementById(element.id + wFORMS.idSuffix_fieldLabel); if(fl)
fl.parentNode.insertBefore(fe,fl.nextSibling); else
element.parentNode.insertBefore(fe,element.nextSibling);}
fe.appendChild(msgNode); fe.className += " " + wFORMS.className_validationError_msg;}, showAlert: function (nbTotalErrors) { alert(wFORMS.behaviors['validation'].errMsg_notification.replace('%%',nbTotalErrors));}, removeErrorMessage: function(element) { if(wFORMS.helpers.hasClass(element,wFORMS.className_validationError_fld)) { var rErrClass = new RegExp(wFORMS.className_validationError_fld,"gi"); element.className = element.className.replace(rErrClass,""); var errorMessage = document.getElementById(element.id + wFORMS.idSuffix_fieldError); if(errorMessage) { errorMessage.innerHTML="";}
}
}
}
wFORMS.functionName_formValidation = wFORMS.behaviors['validation'].run; wFORMS.formValidation = wFORMS.behaviors['validation'].run; wFORMS.arrErrorMsg = new Array(); wFORMS.arrErrorMsg[0] = wFORMS.behaviors['validation'].errMsg_required; wFORMS.arrErrorMsg[1] = wFORMS.behaviors['validation'].errMsg_alpha; wFORMS.arrErrorMsg[2] = wFORMS.behaviors['validation'].errMsg_email; wFORMS.arrErrorMsg[3] = wFORMS.behaviors['validation'].errMsg_integer; wFORMS.arrErrorMsg[4] = wFORMS.behaviors['validation'].errMsg_float; wFORMS.arrErrorMsg[5] = wFORMS.behaviors['validation'].errMsg_password; wFORMS.arrErrorMsg[6] = wFORMS.behaviors['validation'].errMsg_alphanum; wFORMS.arrErrorMsg[7] = wFORMS.behaviors['validation'].errMsg_date; wFORMS.arrErrorMsg[8] = wFORMS.behaviors['validation'].errMsg_notification;}
