// Name: validation.js
// Author: Shuns (www.netgrow.com.au)
// Last Updated: 27/03/07
// Version: 1.7

var fV={init: function(){var j=0;for(var i in validationSet){if(document.getElementsByName(i)){var formField=document.getElementsByName(i);for(var k=0;k < formField.length;k++){if(typeof formField[k]!='undefined'){formField[k].form.id=(formField[k].form.id==null||formField[k].form.id=='')? 'val_form_'+j++: formField[k].form.id;if(!/\b ?noerrorspan\b/.test(formField[k].className)){var errorSpan=document.createElement('span');errorSpan.className='errormessage';errorSpan.id=formField[k].type.match(/radio|checkbox/)? 'error_'+formField[k].name : 'error_'+formField[k].id;formField[k].parentNode.appendChild(errorSpan);}if(!/\b ?noblur\b/.test(formField[k].className)){fV.addEvent(formField[k], 'blur', fV.checkValid, false);}if(!formField[k].form.validateSubmit){fV.addEvent(formField[k].form, 'submit', fV.checkValidSubmit, false);formField[k].form.onsubmit=fV.checkSubmit;formField[k].form.validateSubmit=true;}}}}}},checkValidSubmit: function(e){var frm=window.event ? window.event.srcElement : e ? e.target : null;if(!frm)return;var errText=[];var fieldErr=[];var errsAdded='';for(var i=0;i < frm.elements.length;i++){if(frm.elements[i].name && validationSet[frm.elements[i].name]){var failedE=fV.handleValidity(frm.elements[i]);var errDisplay=frm.elements[i].type.match(/radio|checkbox/)? document.getElementById('error_'+frm.elements[i].name): document.getElementById('error_'+frm.elements[i].id);if(failedE && errDisplay){errDisplay.innerHTML=validationSet[failedE.name]['error'];}if(!failedE && errDisplay){errDisplay.innerHTML='';}if(failedE){var labels=document.getElementsByTagName('label');var found=false;for(var j=0;j < labels.length;j++){if(labels[j].htmlFor==failedE.id){found=true;if(frm.elements[frm.elements[i].name].length > 1){if(errsAdded.indexOf(frm.elements[i].name)>-1){break;}else{if(frm.elements[i].type.match(/radio|checkbox/)){if (frm.elements[i].title && frm.elements[i].title != ''){errText[errText.length]=frm.elements[i].title;}else{errText[errText.length]=frm.elements[i].name;}}else if(frm.elements[i].type.match(/text|textarea|password|file/)){fieldErr[fieldErr.length]=frm.elements[i].id;}if (!frm.elements[i].type.match(/radio|checkbox/)) {errText[errText.length]=labels[j].firstChild.nodeValue.replace(/[:;-]/g, '');}errsAdded+=frm.elements[i].name+'\n';break;}}else{if(frm.elements[i].type.match(/text|textarea|password|file/)){fieldErr[fieldErr.length]=frm.elements[i].id;}errText[errText.length]=labels[j].firstChild.nodeValue.replace(/[:;-]/g, '');break;}}}if(!found && errsAdded.indexOf(frm.elements[i].name)==-1){if(frm.elements[i].type.match(/text|textarea|password|file/)){fieldErr[fieldErr.length]=frm.elements[i].id;}if(frm.elements[i].title && frm.elements[i].title !=''){errText[errText.length] = frm.elements[i].title;}else{errText[errText.length] = frm.elements[i].name;}errsAdded+=frm.elements[i].name+'\n';}}}}if(errText.length > 0){if(document.getElementById('vm'+frm.id)){frm.removeChild(document.getElementById('vm'+frm.id));}var alertErr=/\b ?alerterror\b/.test(frm.className)? true : false;var fixMsg='The following fields contain errors or are '+'incomplete please fix these and resubmit:';if(!alertErr){var wrap=document.createElement('div');var ul=document.createElement('ul');var span=document.createElement('span');wrap.id='vm'+frm.id;wrap.className='validationmessage';wrap.style.display='block';wrap.appendChild(span);wrap.appendChild(ul);frm.insertBefore(wrap,frm.firstChild);span.appendChild(document.createTextNode(fixMsg));for(var i=0;i<errText.length;i++){var li=document.createElement('li');li.appendChild(document.createTextNode(errText[i]));ul.appendChild(li);}}else{alert(fixMsg+'\n\n- '+errText.join('\n- '));}if(fieldErr.length && fieldErr[0]!='' && document.getElementById(fieldErr[0])!=null){document.getElementById(fieldErr[0]).focus();}else{window.scrollTo(0, fV.getPos(wrap, 'offsetTop')); }frm.submitAllowed=false;if(e && e.stopPropagation && e.preventDefault){e.stopPropagation();e.preventDefault();}if(window.event){window.event.cancelBubble=true;window.event.returnValue=false;return false;}}else{frm.submitAllowed=true;}},checkSubmit: function(){if(this.attachEvent){return true;}return this.submitAllowed;},checkValid: function(e){var target=window.event ? window.event.srcElement : e ? e.target : null;if(!target)return;var failedE=fV.handleValidity(target);var errDisplay=target.type.match(/radio|checkbox/)? document.getElementById('error_'+target.name): document.getElementById('error_'+target.id);if(failedE && errDisplay){errDisplay.innerHTML=validationSet[failedE.name]['error'];}if(failedE && !errDisplay){alert(validationSet[failedE.name]['error']);}if(!failedE && errDisplay){errDisplay.innerHTML='';}},handleValidity: function(field){var errorClass=field.className.replace(/\b ?field\b/, ' fielderror');var normalClass=field.className.replace(/\b ?fielderror\b/, ' field');switch(field.type){case 'select-one':if(validationSet[field.name]['required']!=null &&validationSet[field.name]['required']==false && field.value==''){field.className=normalClass;return null;}else if(field.selectedIndex==-1||field.options[field.selectedIndex].value==''){field.className=errorClass;return field;}else{field.className=normalClass;return null;}case 'select-multiple':if(field.selectedIndex==-1){field.className=errorClass;return field;}else{field.className=normalClass;return null;}case 'text':case 'textarea':case 'password':case 'file':if(validationSet[field.name]['required']!=null &&validationSet[field.name]['required']==false && field.value==''){field.className=normalClass;return null;}else if(!field.value.match(validationSet[field.name]['regexp'])){field.className=errorClass;return field;}else{field.className=normalClass;return null;}case 'radio':case 'checkbox':var checked=false;if(field.form.elements[field.name].length){for(var j=0;j < field.form.elements[field.name].length;j++){if(field.form.elements[field.name][j].checked){checked=true;}}}else{checked=field.checked;}if(!checked){return field;}else{return null;}default:return null;}},addEvent: function(target, eventType, functionRef, capture){if(typeof target.addEventListener !='undefined'){target.addEventListener(eventType, functionRef, capture);}else if(typeof target.attachEvent !='undefined'){target.attachEvent('on'+eventType, functionRef);}else{eventType='on'+eventType;if(typeof target[eventType]=='function'){var oldListener=target[eventType];target[eventType]=function(){oldListener();return functionRef();};}else{target[eventType]=functionRef;}}return true;},getPos: function (el,prop) {var c=el[prop],b=document.body,br=navigator.userAgent.toLowerCase(),msie=(/msie/.test(br) && !/opera/.test(br));while((el = el.offsetParent) && (el != b)){if (!msie || (el.currentStyle.position != 'relative')){c += el[prop];}}return c;}};fV.addEvent(window, 'load', fV.init, false);