IX.module({name:"IX.Form",mainClass:"IX.Form",version:"$Revision: 1.19.2.2 $",build:1,run:function(){var Y=YAHOO,YUD=Y.util.Dom,YL=Y.lang;IX.Form=function(){return{FF_WRAPPER_CLSS:"js_formfield_wrapper",VLDN_MSG_WRAPPER_CLSS:"js_validation_message_wrapper",VLDN_MSG:{validate_integer:"That does not look like a whole number, please try again.",validate_mandatory:"Please fill in all required fields.",validate_length:"Please fill in at least {num} characters.",validate_postcode:"That does not look like a postcode, please try again.",validate_phone:"That does not look like a phone number, please try again.",validate_email:"That does not look like an email address, please try again.",validate_url:"That does not look like a web address, please try again.",validate_confirm:"The confirmation does not match. Please try again",validate_empty_form:"Please fill in the form.",validate_date:"Please enter dates as dd/mm/yyyy.",validate_time:"Please enter the time as hh:mm or hh:mm.",validate_date_time:"Please enter a date and a time as dd/mm/yyyy hh:mm.",validate_date_before:"Please enter a date that is before {before}.",validate_date_after:"Please enter a date that is after {after}.",validate_date_within_next:"Please enter a date that is within the next {num} {unit}."},autocompleteNotOffFields:[],blockNotifyInvalid:false,hiddenDeleteFields:{},_formGroups:{},getCustomAttInheritableFromForm:function(el,att){el=YUD.get(el);var elems=el.form?[el,el.form]:el;return IX.Dom.getInheritableCustomAtt(elems,att)},getFormFieldWrapper:function(el){var w=IX.Dom.getCustomAtt(el,"formFieldWrapper");if(w){return w}else{return IX.Dom.setCustomAtt(el,"formFieldWrapper",(YUD.hasClass(el,this.FF_WRAPPER_CLSS)?el:YUD.getAncestorByClassName(el,this.FF_WRAPPER_CLSS)||el))}},getInvalidInputMsgWrapper:function(el){var w=IX.Dom.getCustomAtt(el,"validationMsgWrapper"),c=this.VLDN_MSG_WRAPPER_CLSS;if(w){return w}else{YUD.getAncestorBy(el,function(elem){if(YUD.hasClass(elem,c)){w=elem;return true}else{return YUD.getElementsByClassName(c,"",elem,function(e){w=w||e}).length>0}});return IX.Dom.setCustomAtt(el,"validationMsgWrapper",w)}},setPlaceholder:function(el,p){IX.Dom.setCustomAtt(el,"placeholder.text",decodeURIComponent(p),false);if(el.value===""){var clss=this.getCustomAttInheritableFromForm(el,"placeholder.className");rclss=this.getCustomAttInheritableFromForm(el,"placeholder.replaceClassName");if(clss&&!rclss){YUD.addClass(el,clss)}if(clss&&rclss){YUD.replaceClass(el,rclss,clss)}setTimeout(function(){el.value=IX.Dom.getCustomAtt(el,"placeholder.text")||""},50)}},clearPlaceholder:function(el){if(el.value===IX.Dom.getCustomAtt(el,"placeholder.text")){el.value="";var clss=this.getCustomAttInheritableFromForm(el,"placeholder.className");rclss=this.getCustomAttInheritableFromForm(el,"placeholder.replaceClassName");if(clss&&!rclss){YUD.removeClass(el,clss)}else{if(clss&&rclss){YUD.replaceClass(el,clss,rclss)}}}},addFocusClassHandlers:function(el,clss,replaceClss){el=YUD.get(el);var elems=el.tagName.toLowerCase()==="form"?el.elements:[el];for(var i=0;i<elems.length;i=i+1){YAHOO.util.Event.addListener(elems[i],"focus",function(){var clss=IX.Form.getCustomAttInheritableFromForm(this,"focus.className"),rclss=IX.Form.getCustomAttInheritableFromForm(this,"focus.replaceClassName"),wrapper=IX.Form.getFormFieldWrapper(this);if(clss&&!rclss){YAHOO.util.Dom.addClass(wrapper,clss)}if(clss&&rclss){YAHOO.util.Dom.replaceClass(wrapper,rclss,clss)}});YAHOO.util.Event.addListener(elems[i],"blur",function(){var clss=IX.Form.getCustomAttInheritableFromForm(this,"focus.className"),rclss=IX.Form.getCustomAttInheritableFromForm(this,"focus.replaceClassName"),wrapper=IX.Form.getFormFieldWrapper(this);if(clss&&!rclss){YAHOO.util.Dom.removeClass(wrapper,clss)}if(clss&&rclss){YAHOO.util.Dom.replaceClass(wrapper,clss,rclss)}})}},focus:function(el){el=YUD.get(el);if(!el.focus||el.disabled||el.offsetWidth===0){return false}if(Y.env.ua.gecko){var elems=this.autocompleteNotOffFields;if(elems.length===0){elems=this.autocompleteNotOffFields=YUD.getElementsBy(function(e){var a;if(e.type==="text"&&!((a=e.getAttribute("autocomplete"))&&a.toLowerCase==="off")){e.setAttribute("autocomplete","OFF");return true}return false},"INPUT",document)}else{YUD.batch(elems,function(e){e.setAttribute("autocomplete","OFF")})}setTimeout(function(){el.focus();YUD.batch(elems,function(e){e.removeAttribute("autocomplete")})},50)}else{setTimeout(function(){el.focus()},50)}return true},notifyInvalidInput:function(el,msg){el=YUD.get(el);if(this.blockNotifyInvalid){return false}this.blockNotifyInvalid=true;var clss=this.getCustomAttInheritableFromForm(el,"invalidInput.className"),rclss=this.getCustomAttInheritableFromForm(el,"invalidInput.replaceClassName"),fw=clss?this.getFormFieldWrapper(el):false,msg=decodeURIComponent(msg),msgwrapper;if(this.getCustomAttInheritableFromForm(el,"invalidInput.notifyMethod")==="inpage"){msgwrapper=this.getInvalidInputMsgWrapper(el)}if(fw&&clss&&!rclss){YUD.addClass(fw,clss)}else{if(fw&&clss&&rclss){YUD.replaceClass(fw,rclss,clss)}}if(!IX.Dom.getCustomAtt(el,"notifyInvalid")){IX.Dom.setCustomAtt(el,"notifyInvalid",true);Y.util.Event.addListener(el,"focus",function(event,o){o.blockNotifyInvalid=false},this,false);Y.util.Event.addListener(el,"blur",function(event,o){if(o[0]&&o[1]&&!o[2]){YUD.removeClass(o[0],o[1])}else{if(o[0]&&o[1]&&o[2]){YUD.replaceClass(o[0],o[1],o[2])}}if(Y.lang.isValue(o[3])){IX.Dom.deleteContent(IX.Dom.getCustomAtt(this,"invalidInput.textNode"))}},[fw,clss,rclss,msgwrapper],false)}if(msgwrapper){var t=IX.Dom.getCustomAtt(el,"invalidInput.textNode");if(!t){t=IX.Dom.setCustomAtt(el,"invalidInput.textNode",document.createTextNode(""),false);msgwrapper.appendChild(t)}IX.Dom.setTextContent(t,msg)}else{alert(msg)}if(el.select){el.select()}if(!this.focus(el)){this.blockNotifyInvalid=false}return false},group:function(str){return this._formGroups[str]=this._formGroups[str]||new this.Group(str)},trim:function(el){YUD.batch(el,function(e){if(e.value){e.value=Y.lang.trim(e.value)}})},getFieldContent:function(elem){elem=YUD.get(elem);if(elem.disabled){return null}if((elem.tagName.toLowerCase()==="input"&&elem.type&&(elem.type.match(/^text|hidden|password$/))||(elem.tagName.toLowerCase()==="textarea"))&&!YAHOO.lang.isUndefined(elem.value)&&!YAHOO.lang.isNull(elem.value)&&elem.value!==""&&elem.value!==IX.Dom.getCustomAtt(elem,"placeholder.text")){return elem.value}else{if(elem.tagName.toLowerCase()==="input"&&elem.type&&(elem.type==="radio"||elem.type==="checkbox")&&elem.checked){return elem.value}else{if(!elem.multiple&&elem.tagName.toLowerCase()==="select"&&elem.options&&!YAHOO.lang.isNull(elem.selectedIndex)&&elem.options[elem.selectedIndex].value&&elem.options[elem.selectedIndex].value!==""){return elem.options[elem.selectedIndex].value}else{return null}}}},setFieldContent:function(elem,content){elem=YUD.get(elem);if((elem.tagName.toLowerCase()==="input"&&elem.type&&(elem.type.match(/^text|hidden|password$/)))||(elem.tagName.toLowerCase()==="textarea")){if(YL.isValue(content)){elem.value=content}else{elem.value=""}}else{if(elem.tagName.toLowerCase()==="input"&&elem.type&&(elem.type==="radio"||elem.type==="checkbox")){elem.checked=Y.lang.isBoolean(content)?content:(elem.value==content)}else{if(elem.tagName.toLowerCase()==="select"&&elem.options){for(i=0;i<elem.options.length;i=i+1){if(elem.options[i].value==content){elem.options[i].selected=true}}}else{return false}}}return content},copyFieldContent:function(fromEl,toEl){var val=this.getFieldContent(fromEl)||IX.Dom.getTextContent(fromEl);YUD.batch(toEl,function(el){IX.Form.setFieldContent(el,val)||IX.Dom.setTextContent(el,val)})},submit:function(el){el=YUD.get(el);var ret=true;if(el.onsubmit){if(document.createEvent){var evObj=document.createEvent("Events");evObj.initEvent("submit",true,true);return el.dispatchEvent(evObj)}else{ret=el.onsubmit.call(el,{preventDefault:null,returnValue:null,target:null})}}if(ret!==false){el.submit();return true}return false},getFormFields:function(parentEl){parentEl=YUD.get(parentEl);if(parentEl.tagName.toLowerCase()=="form"){var r=parentEl.elements,a;if(!YL.isArray(r)){a=[];for(var i=0;i<r.length;i=i+1){if(r[i].tagName){a[i]=r[i]}}r=a}return r}var list=[],tags=["input","select","textarea"];if(IX.Lang.inArray(tags,parentEl.tagName.toLowerCase())){return[parentEl]}for(var i=0;i<tags.length;i=i+1){list=list.concat(YUD.getElementsBy(function(){return true},tags[i],parentEl))}return list},isValidEmail:function(str){str=Y.lang.trim(str);var at="@";var dot=".";var lat=str.indexOf(at);var lstr=str.length;var ldot=str.indexOf(dot);if(lat==-1||lat==0||lat==lstr||ldot==-1||ldot==0||ldot==lstr||str.indexOf(at,(lat+1))!=-1||str.substring(lat-1,lat)==dot||str.substring(lat+1,lat+2)==dot||str.indexOf(dot,(lat+2))==-1||str.indexOf(" ")!=-1){return false}return true},isInteger:function(str){return Y.lang.trim(str).match(/^\d+$/)},isValidURL:function(str){str=Y.lang.trim(str);var regexp=/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return regexp.test(str)},isValidPhone:function(str){var p=str.replace(/[-\s]/g,"");return(/^(\+\d{1,3})?(\(\d+\))?(\d{8,}|13\d{4,}|000)/).test(p)},isValidPostcode:function(str){return YAHOO.lang.trim(str).match(/^(\d{4})$/)},isEmpty:function(el){el=YUD.get(el);var fields=((el.item||Y.lang.isArray(el))&&(!el.tagName||el.tagName.toLowerCase()!=="select"))?el:[el];for(var i=0;i<fields.length;i=i+1){var e=fields[i];if((e.type&&e.type.match(/submit|button|hidden/i))||e.disabled){continue}else{if(!Y.lang.isNull(this.getFieldContent(e))){return false}}}return true},validateInt:function(el,msg){this.trim(el);if(!this.isEmpty(el)&&!this.isInteger(el.value)){return this.notifyInvalidInput(el,msg||this._getMsg("validate_integer"))}},validatePhone:function(el,msg){this.trim(el);if(!this.isEmpty(el)&&!this.isValidPhone(el.value)){return this.notifyInvalidInput(el,msg||this._getMsg("validate_phone"))}},validatePostcode:function(el,msg){this.trim(el);if(!this.isEmpty(el)&&!this.isValidPostcode(el.value)){return this.notifyInvalidInput(el,msg||this._getMsg("validate_postcode"))}},validateEmail:function(el,msg){this.trim(el);if(!this.isEmpty(el)&&!IX.Form.isValidEmail(el.value)){return this.notifyInvalidInput(el,msg||this._getMsg("validate_email"))}},validateURL:function(el,msg){if(!this.isEmpty(el)&&!this.isValidURL(el.value)){return this.notifyInvalidInput(el,msg||this._getMsg("validate_url"))}},validateLength:function(el,num,msg){this.trim(el);if(!this.isEmpty(el)&&num&&el.value.length<num){return this.notifyInvalidInput(el,msg||this._getMsg("validate_length",{num:num}))}},validateMandatory:function(el,msg,func){this.trim(el);if((!func||(func&&func()))&&this.isEmpty(el)){return this.notifyInvalidInput(el,msg||this._getMsg("validate_mandatory"))}return true},validateConfirm:function(el,compareEl,msg){el=YUD.get(el);compareEl=YUD.get(compareEl);if(this.getFieldContent(el)!=this.getFieldContent(compareEl)){return this.notifyInvalidInput(el,msg||this._getMsg("validate_confirm"))}},validateEmptyForm:function(el,msg){var f=el.tagName.toLowerCase()==="form"?el:el.form;if(this.isEmpty(f.elements)){var e=f===el?el.elements[0]:el;return this.notifyInvalidInput(e,msg||this._getMsg("validate_empty_form"))}},validateDate:function(el,msg){if(!this.isEmpty(el)){var date=new IX.Date(el.value);if(!(date.isValid()&&(el.value=date.dateString("dd/mm/yyyy")))){return this.notifyInvalidInput(el,msg||this._getMsg("validate_date"))}}return true},validateTime:function(el,msg){if(!this.isEmpty(el)){var date=new IX.Date("2007-01-01 "+el.value);if(!(date.isValid()&&(el.value=date.dateString("hh:ii")))){return this.notifyInvalidInput(el,msg||this._getMsg("validate_time"))}}},validateDateTime:function(el,msg){if(!this.isEmpty(el)){var date=new IX.Date(el.value);if(!(date.isValid()&&(el.value=date.dateString("dd/mm/yyyy hh:ii")))){return this.notifyInvalidInput(el,msg||this._getMsg("validate_date_time"))}}},validateDateBefore:function(el,compareEl,msg){return this._validateDateBeforeAfter(el,"before",compareEl,msg)},validateDateAfter:function(el,compareEl,msg){return this._validateDateBeforeAfter(el,"after",compareEl,msg)},validateDateWithinNext:function(el,num,unit,msg){if(!this.validateDate(el)){return false}if(!this.isEmpty(el)){var fDate=new IX.Date(el.value);beginDate=(new IX.Date).subtract(1,"day");endDate=(new IX.Date()).add(num,unit);if(!fDate.between(beginDate,endDate)){return this.notifyInvalidInput(el,msg||this._getMsg("validate_date_within_next",{num:num,unit:unit}))}}},toAusStandardDate:function(el){var str=this.getFieldContent(el)||IX.Dom.getTextContent(el);if(str){str=(new IX.Date(str)).dateString("dd/mm/yyyy");el.tagName.toLowerCase()==="input"?el.value=str:IX.Dom.setTextContent(el,str)}},toISODate:function(el){var str=this.getFieldContent(el)||IX.Dom.getTextContent(el);if(str){str=new IX.Date(str).dateString("yyyy-mm-dd");el.tagName.toLowerCase()==="input"?el.value=str:IX.Dom.setTextContent(el,str)}},pickDateFor:function(el){el=YAHOO.util.Dom.get(el);var calElem;if(!(calElem=IX.Dom.getCustomAtt(el,"date_picker.calElem"))){calElem=IX.Dom.setCustomAtt(el,"date_picker.calElem",document.createElement("div")),el.parentNode.appendChild(calElem);YAHOO.util.Dom.setStyle(calElem,"position","absolute");var r=YAHOO.util.Dom.getRegion(el);YAHOO.util.Dom.setXY(calElem,[r.left,r.bottom]);YAHOO.util.Event.addListener(document,"mousedown",function(e){if(!IX.Dom.getCustomAtt(this,"calendarUp")){return }if(!IX.Dom.eventInsideOf(this,e)){YAHOO.util.Dom.setStyle(this,"display","none")}IX.Dom.setCustomAtt(this,"calendarUp",false)},calElem,true)}var calObj;if(!(calObj=IX.Dom.getCustomAtt(el,"date_picker.calObj"))){calObj=IX.Dom.setCustomAtt(el,"date_picker.calObj",new IX.Form.DatePicker(calElem,el));calObj.selectEvent.subscribe(function(t,a,o){o.hide()},calObj,true);calObj.render()}calObj.show();IX.Dom.setCustomAtt(calElem,"calendarUp",true)},submitOnEnterHandler:function(el,event){var key=event.which||event.keyCode;if(event&&(key!=13||!el.form)){return true}var ret=true;if(ret&&el.onblur){if(document.createEvent){var evObj=document.createEvent("Events");evObj.initEvent("blur",true,true);ret=el.dispatchEvent(evObj)}else{ret=el.onblur.call(el,event)}}if(ret!==false){IX.Form.submit(el.form);return true}return false},setDisabled:function(el,disabled){disabled=disabled===false?false:true;YUD.batch(el,function(el){YUD.batch(IX.Form.getFormFields(el),function(el){el.disabled=disabled})})},addMultiSelectDeleteFields:function(el){if(IX.Form.hiddenDeleteFields[el.id]){for(var i=0;i<IX.Form.hiddenDeleteFields[el.id].length;i=i+1){var f=IX.Form.hiddenDeleteFields[el.id][i];f.parentNode.removeChild(f)}IX.Form.hiddenDeleteFields[el.id]=[]}var nCache={};for(var i=0;el.elements&&i<el.elements.length;i=i+1){var field=el.elements[i];if(field.type==="select-multiple"&&field.selectedIndex===-1){this._addHiddenDeleteField(field)}else{if(field.type==="checkbox"||field.type==="radio"){if(!field.name||(field.name&&nCache[field.name])){continue}nCache[field.name]=1;var sameNameArr=document.getElementsByName(field.name),empty=true;for(var k=0;k<sameNameArr.length;k=k+1){if(sameNameArr[k].checked){empty=false;break}}if(empty){this._addHiddenDeleteField(field)}}}}},_addHiddenDeleteField:function(el){var dField=document.createElement("input");dField.type="hidden";el.form.appendChild(dField);dField.setAttribute("name",el.name+"_delete");if(el.id){dField.id=el.id+"_delete"}dField.value=1;el.form.id=el.form.id||YUD.generateId();IX.Form.hiddenDeleteFields[el.form.id]=IX.Form.hiddenDeleteFields[el.form.id]||[];IX.Form.hiddenDeleteFields[el.form.id].push(dField)},_getMsg:function(clss,obj){var msg=this.VLDN_MSG[clss];if(obj&&YAHOO.lang.isObject(obj)){msg=YAHOO.lang.substitute(msg,obj)}return msg},_validateDateBeforeAfter:function(el,beforeAfter,compareEl,msg){if(!this.validateDate(el)){return false}if(!this.isEmpty(el)){var fDate=new IX.Date(el.value),cDate=new IX.Date(compareEl?(this.getFieldContent(compareEl)||IX.Dom.getTextContent(compareEl)):new Date()),msgArg={};if(!eval("fDate."+beforeAfter+"(cDate)")){msgArg[beforeAfter]=cDate.isToday()?"today":cDate.dateString("dd/mm/yyyy");return this.notifyInvalidInput(el,msg||this._getMsg("validate_date_"+beforeAfter,msgArg))}}}}}();IX.Form.Group=function(groupName){this.name=groupName;this.elements=[];this.ids={}};IX.Form.Group.prototype.add=function(el){el=YUD.get(el);el.id=el.id||YUD.generateId();if(!this.ids[el.id]){this.elements.push(el);this.ids[el.id]=true}};IX.Form.Group.prototype.isEmpty=function(){return IX.Form.isEmpty(this.elements)};IX.Form.Group.prototype.numFilled=function(){var c=0;for(var i=0;i<this.elements.length;i=i+1){c=c+(IX.Form.isEmpty(this.elements[i])?0:1)}return c};IX.Form.DatePicker=function(cEl,fEl){var calObj=new IX.Calendar(cEl);fEl=YAHOO.util.Dom.get(fEl);if(!IX.Form.isEmpty(fEl)){calObj.select(fEl.value)}YAHOO.util.Event.addListener(fEl,"change",function(e){if(!IX.Form.isEmpty(this.fEl)&&IX.Form.validateDate(this.fEl)){this.cal.select(this.fEl.value);var selDates=this.cal.getSelectedDates();if(selDates.length>0){var firstDate=new IX.Date(selDates[0],this.cal);this.cal.cfg.setProperty("pagedate",firstDate.dateString("mm/yyyy"));this.cal.render()}}},{fEl:fEl,cal:calObj},true);calObj.selectEvent.subscribe(function(type,args,obj){var date=new IX.Date(args[0][0],obj.cal);obj.field.value=date.dateString("dd/mm/yyyy");obj.field.select()&&IX.Form.focus(obj.field)},{cal:calObj,field:fEl},true);return calObj}}});