// forms.js - last modified: February 07 2012 16:17:15. /************************************************* * Javascript System Library * Copyright (C) 2005-2007 Jason Mingl (Ratheous) *************************************************/ if(!Object.clone) Object.clone=function(source) {var dest={};for(var property in source) {dest[property]=source[property];} return dest;};Object.extend=function(dest,source) {for(var property in source) {dest[property]=source[property];} return dest;};var Class={create:function(){return function(){this.initialize.apply(this,arguments);}}};Class.prepare=function(definition) {var obj=Class.create();Object.extend(obj.prototype,definition);return obj;};Class.extend=function(parent,definition) {var child=Class.create();Object.extend(child.prototype,parent.prototype);Object.extend(child.prototype,definition);return child;};Class.supplement=function(child,parent,definition) {Object.extend(child.prototype,parent.prototype);Object.extend(child.prototype,definition);};Class.override=function(dest,overrides) {if(!dest.prototype.parent)dest.prototype.parent={};for(var p in overrides) {if(dest.prototype[p]&&!dest.prototype.parent[p]) dest.prototype.parent[p]=dest.prototype[p];dest.prototype[p]=overrides[p];} return dest;};Class.subclass=function(parent,overrides) {var child=Class.create();for(var p in parent.prototype) child.prototype[p]=parent.prototype[p];child.prototype.parent={};for(var p in overrides) {if(child.prototype[p]) child.prototype.parent[p]=child.prototype[p];child.prototype[p]=overrides[p];} return child;};Object.extend(Function.prototype,{timeoutid:0,bind:function() {if(arguments.length<2&&arguments[0]===undefined)return this;var __method=this,object=arguments[0];return function(){return __method.apply(object,arguments);}},delay:function() {var args=arguments,__method=this,object=args[0],timeout=args[1];delete args[0];delete args[1];return window.setTimeout(function(){return __method.apply(object,args);},timeout);},replaceDelay:function() {var args=arguments,__method=this,object=args[0],timeout=args[1];delete args[0];delete args[1];window.clearTimeout(this.timeoutid);return this.timeoutid=window.setTimeout(function(){return __method.apply(object,args);},timeout);},clearDelay:function(){window.clearTimeout(this.timeoutid);}});var EventContext=Class.prepare({initialize:function(){this.idx=0;this.events=new Object;},attach:function(callback,context){this.events[++this.idx]={method:callback,context:context};return this.idx;},detach:function(idx){delete this.events[idx];},invoke:function(){for(i in this.events)this.events[i].method.apply(this.events[i].context,arguments);},clear:function(){for(i in this.events)try{delete this.events[i];}catch(e){}}});var ClearableCollection=Class.prepare({idx:0,collection:{},initialize:function(){for(var i=0;iPermissions Failure'+content+'');top.consoleRef.document.close();}};function iif(value,def){return value!=null?value:(def!=null?def:'');};if(typeof system.debug!="object") system.debug=new Object;system.debug.trace=function(){};system.debug.status=function(){};if(typeof system!="object") var system=new Object;if(typeof system.events!="object") system.events=new Object;system.events.cache=new Object;system.events.cache.event_list=[];system.events.cache.add=function(element,type,handler) {system.events.cache.event_list.push(arguments);return arguments;};system.events.cache.flush=function() {var itm;for(var i=system.events.cache.event_list.length-1;i>=0;i--) {itm=system.events.cache.event_list[i];if(itm[0].removeEventListener)itm[0].removeEventListener(itm[1],itm[2],itm[3]);if(itm[1].substring(0,2)!="on")itm[1]="on"+itm[1];if(itm[0].detachEvent)itm[0].detachEvent(itm[1],itm[2]);itm[0][itm[1]]=null;}};var $attach=system.events.add=function(element,type,handler) {try {element=$(element);if(element.addEventListener) {element.addEventListener(type,handler,false);return system.events.cache.add(element,type,handler);} else if(element.attachEvent) {element["e"+type+handler]=handler;element[type+handler]=function(){element["e"+type+handler](window.event);};element.attachEvent("on"+type,element[type+handler]);return system.events.cache.add(element,type,handler);}} catch(e){console.error('unable to attach '+type+' handler to '+element);}};system.events.add_by_type=function(root,element,evttype,handler) {var itms=root.getElementsByTagName(element);var e=[];for(var i=0;i='4'&&first<='6')) {f.warning=true;f.message=this.warning_message;return;}}};system.forms.validation.date={name:'date',expr:/date/,test:function(f){return this.expr.test(f.element.className);},format:function(v) {var mysql_date_fmt=/(\d{4})[./-](\d{2})[./-](\d{2})/;var std_date_fmt=/\d{2}[./-]\d{2}[./-]\d{4}/;var tryformat=true;var tv=v;if(mysql_date_fmt.test(tv)) {tv=tv.replace(/[^\d]+/ig,"");if(tv.length==8){tv=tv.slice(4,6)+"/"+tv.slice(6,8)+"/"+tv.slice(0,4);tryformat=false;}} else {tv=tv.replace(/[^\d]+/ig,"");if(tv.length==8){tv=tv.slice(0,2)+"/"+tv.slice(2,4)+"/"+tv.slice(4,8);tryformat=false;} else if(tv.length==6){tv=tv.slice(0,2)+"/"+tv.slice(2,4)+"/20"+tv.slice(4,6);tryformat=false;}} if(tryformat) {var date=new Date(Date.parse(tv));var month=date.getMonth()+1;month=month<10?'0'+month:month;var day=date.getDate();if(day<10)day="0"+day;var year=date.getFullYear();tv=month+"/"+day+"/"+year;} if(tv=="00/00/0000"||tv=="NaN/NaN/NaN") return v;return tv;},unformat:function(value){return value;},validate:function(f,fmt) {if(empty_string.test(f.element.value)){system.forms.validation.check_required_field(f);return;} if(fmt)f.element.value=this.format(f.element.value);f.warning=false;f.error=false;f.message="";var std_date_fmt=/\d{2}[/]\d{2}[/]\d{4}/;if(!std_date_fmt.test(f.element.value)) {f.error=true;f.message="Error: Invalid Date";return;} var today=new Date;var date=new Date(Date.parse(f.element.value));if(date.toString()=="Invalid Date"){f.error=true;f.message="Error: Invalid Date";} else if(date.getYear()>(today.getYear()+100)){f.warning=true;f.message="Warning: Date more than 100 years in the future! Possibly an error...";} else if(date.getYear()<(today.getYear()-10)){f.warning=true;f.message="Warning: Date is more than 10 years in the past";}}};system.forms.validation.phone_number={name:'phone_number',expr:/phone/,test:function(f){return this.expr.test(f.element.className);},telephone_number:/[0-9 ()-]+$/,format:function(value) {value=this.unformat(value);if(value.length==7)value=value.slice(0,3)+"-"+value.slice(3,7);else if(value.length==10)value="("+value.slice(0,3)+") "+value.slice(3,6)+"-"+value.slice(6,10);else if(value.length==11)value=value.slice(0,1)+" ("+value.slice(1,4)+") "+value.slice(4,7)+"-"+value.slice(7,11);return value;},unformat:function(value){return value.replace(/[^\d]+/ig,"");},validate:function(f,fmt) {if(empty_string.test(f.element.value)){system.forms.validation.check_required_field(f);return;} if(fmt)f.element.value=this.format(f.element.value);f.warning=false;f.error=false;f.message="";for(var j=0,numdigits=0;j='0'&&f.element.value.charAt(j)<='9') numdigits++;if(!this.telephone_number.test(f.element.value)){f.error=true;f.message="Error: not a valid telephone number. Characters permitted are digits, space and ()-";} else if(numdigits<10){f.error=true;f.message="Error: "+numdigits+" digits - valid length is 10-11 digits";} else if(numdigits>11){f.error=true;f.message="Error: "+numdigits+" digits - valid length is 10-11 digits";}}};system.forms.validation.currency={name:'currency',expr:/currency/,test:function(f){return this.expr.test(f.element.className);},error_message:"Error: Invalid currency value",currency_fmt:/^\-?\(?\$\d+\.\d+\)?$/,format:function(v) {if(v=="")return v;v=new String(v);if(v.search(/[^\-^\(^\)^\$^.^\d]/i)!=-1)return v;var neg=v.search(/\(/)!=-1||v.search(/-/)!=-1;v=v.replace(/[\(\)\-\$]/ig,"");v=String(Math.abs(v));var decimals;if((pos=v.search(/\./i))!=-1)decimals=(v.length-pos)-1;if(decimals) {if(decimals==1)v="$"+v+"0";else if(decimals==2)v="$"+v;else {v=v.replace(/[.]+/ig,"");var decimal_val=v.substr(pos,decimals);var whole_number=v.substr(0,v.length-decimals);dec_temp=decimal_val.substr(0,2)+"."+decimal_val.substr(2,decimals-2);dec_temp=Math.round(dec_temp);v="$"+whole_number+"."+(dec_temp<10?"0"+dec_temp:dec_temp);}} else{v=v.replace(/[^\d]+/ig,"");v="$"+v+".00";} if(neg)return"("+String(v)+")";else return v;},unformat:function(value){return parseFloat(value.replace(/[^\d\.]+/g,''));},validate:function(f,fmt) {if(empty_string.test(f.element.value)){system.forms.validation.check_required_field(f);return;} if(fmt)f.element.value=this.format(f.element.value);f.warning=false;f.error=false;f.message="";if(!this.currency_fmt.test(f.element.value)){f.error=true;f.message=this.error_message;}}};system.forms.validation.email={name:'email',expr:/\bemail\b/,test:function(f){return this.expr.test(f.element.className);},error_message:"Error: Invalid email address",warning_message:"Warning: Unusual email address",email_common:/^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/,format:function(v){return v;},unformat:function(value){return value;},validate:function(f) {if(empty_string.test(f.element.value)){system.forms.validation.check_required_field(f);return;} f.element.value=f.element.value.trim();f.warning=false;f.error=false;f.message="";if(!this.email_common.test(f.element.value)){f.error=true;f.message=this.error_message;}}};system.forms.validation.looseemail={name:'looseemail',expr:/\blooseemail\b/,test:function(f){return this.expr.test(f.element.className);},warning_message:"Warning: Email does not appear to be valid",email_common:/^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/,format:function(v){return v;},unformat:function(value){return value;},validate:function(f) {if(empty_string.test(f.element.value)){system.forms.validation.check_required_field(f);return;} f.element.value=f.element.value.trim();f.warning=false;f.error=false;f.message="";if(!this.email_common.test(f.element.value)){f.warning=true;f.message=this.warning_message;}}};system.forms.validation.zipcode={name:'zipcode',expr:/zipcode/,test:function(f){return this.expr.test(f.element.className);},format:function(value) {value=value.replace(/[^\d]+/ig,"");if(value.length==9)value=value.slice(0,5)+"-"+value.slice(5,9);return value;},unformat:function(value){return value;},validate:function(f,fmt) {if(empty_string.test(f.element.value)){system.forms.validation.check_required_field(f);return;} if(fmt)f.element.value=this.format(f.element.value);f.warning=false;f.error=false;f.message='';for(var j=0,numdigits=0;j='0'&&f.element.value.charAt(j)<='9') numdigits++;if(numdigits!=5&&numdigits!=9){f.error=true;f.message="Error: "+numdigits+" digits. Valid length is 5 or 9 digits";}}};Class.override(system.forms.form,{validators:{},register_validator:function(validator) {try {this.validators[validator.name]=validator;}catch(e){console.error('form::register_validator ('+validator+'): '+e.message);}},create_field:function(element,opts) {try {var newopts=Object.clone(opts);if(/\bignore\b/.test(element.className))return;if(/\bst-ucid\b/.test(element.className))newopts.style_target=$('_'+element.id)||element.id;else if(/\bst-parent\b/.test(element.className))newopts.style_target=element.parentNode;if(/\brequired\b/.test(element.className))newopts.required=true;if(element.alt)newopts.style_target=$(element.alt)||element.id;for(i in this.validators) if(this.validators[i].expr.test(element.className)) newopts.validator=this.validators[i];this.parent.create_field.apply(this,[element,newopts]);}catch(e){console.error('form::create_field : '+e.message);}}});Class.override(system.forms.form,{initialize:function(opts) {this.register_validator(validators.phone_number);this.register_validator(validators.email);this.parent.initialize.apply(this,[opts]);}});jQuery(document).ready (function() {try {var tp=/(\d+)\-(\d+)/.exec(jQuery('#warning').attr('class'));var tooltip=new form_tooltip({frame:"warning",container:"warning_container",x:-tp[1],y:-tp[2]});jQuery('form.validate').each(function(){new form({element:this,register:true,statusbar:tooltip,submit_error:'Form error(s) found, please correct.'});});}catch(e){console.error(e.message);}});