// forms.js - last modified: August 01 2010 00:17:23.

/*************************************************
* 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;i<arguments.length;i++)if(arguments[i])this.attach(arguments[i]);},attach:function(clearable){this.collection[this.idx]=clearable;return this.idx++;},detach:function(index){delete this.collection[index];},clear:function(){try{for(i in this.collection){this.collection[i].clear();delete this.collection[i];}}catch(e){}}});if(typeof system!="object")
var system=new Object;if(typeof system.tools!="object")
system.tools=new Object;String.prototype.trim=function()
{return this.replace(new RegExp("^\\s+|\\s+$","gi"),"");};system.tools.is_ie=function()
{return(navigator.appName=="Microsoft Internet Explorer");};system.tools.get_var_object=function(obj)
{var name;if(typeof obj!="object")obj=document.getElementById(obj);if(!obj)return undefined;return obj;};system.tools._$=$;var $=system.tools.get_var_object;system.tools.noConflict=function(){$=system.tools._$;};system.tools.get_var_style=function(v){return($(v).style);};if(!$S)var $S=system.tools.get_var_style;var $position=system.tools.get_elem_offset=function(obj)
{obj=$(obj);var l=0,t=0;do{l+=obj.offsetLeft;t+=obj.offsetTop;obj=obj.offsetParent;}while(obj);return{left:l,top:t};}
var $reposition=system.tools.set_elem_position=function(elem,x,y)
{elem=$(elem);elem.style.left=x+'px';elem.style.top=y+'px';}
system.tools.in_array=function(value,arr)
{for(i=0;i<arr.length;i++)
{debug("checking "+value+" against "+arr[i]);if(arr[i]===value);return true;}
return false;}
system.tools.switch_image=function(obj,new_src)
{$img_obj=system.tools.get_var_object(obj);$img_obj.src=new_src;};system.tools.iframe_shim=function(frame,iframe_id)
{try
{if(!system.tools.is_ie())return;frame=$(frame);var iframe=$(iframe_id);if(!iframe)
{iframe=document.createElement("iFrame");iframe.setAttribute("id",iframe_id);iframe.setAttribute("src","javascript:false;");iframe.setAttribute("scrolling","no");iframe.setAttribute("frameborder","0");iframe.style.filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';iframe.style.position="absolute";document.body.appendChild(iframe);}
if(frame.style.zIndex<1)
frame.style.zIndex=1;iframe.style.width=frame.offsetWidth?frame.offsetWidth+"px":frame.style.width;iframe.style.height=frame.offsetHeight?frame.offsetHeight+"px":frame.style.height;iframe.style.top=frame.style.top!=''?frame.style.top:'0';iframe.style.left=frame.style.left!=''?frame.style.left:'0';iframe.style.zIndex=frame.style.zIndex-1;iframe.style.display="";return iframe;}
catch(e){}};function showConsole(opts)
{var width=opts.width?opts.width:350;var height=opts.height?opts.height:100;var _top=opts.top!=null?opts.top:screen.height/2-height/2;var _left=opts.left!=null?opts.left:screen.width/2-width/2;var content=opts.content;var url=opts.url!=null?opts.url:'';var title=opts.title?opts.title:'Console';var windowname=opts.windowname?opts.windowname:'console';var sb=opts.sb?1:0;var rs=opts.rs?1:0;top.consoleRef=window.open(url,windowname,'width='+width+',height='+height+(_top?'top='+_top+',':'')+(_left?'left='+_left+',':'')+',menubar=0,toolbar=0,status=0,scrollbars='+sb+',resizable='+rs);if(top.consoleRef&&content)
{top.consoleRef.document.writeln('<html><head><title>Permissions Failure</title></head><body bgcolor=white onLoad="self.focus()">'+content+'</body></html>');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<itms.length;i++)
e.push(system.events.add(itms[i],evttype,handler));return e;};var $detach=system.events.remove=function(hook)
{if(hook[0].removeEventListener)hook[0].removeEventListener(hook[1],hook[2],hook[3]);if(hook[1].substring(0,2)!="on")hook[1]="on"+hook[1];if(hook[0].detachEvent)hook[0].detachEvent(hook[1],hook[2]);};var $halt=system.events.halt=function(evt)
{if(!evt)return;if(evt.stopPropagation)evt.stopPropagation()
else event.cancelBubble=true;if(evt.preventDefault)evt.preventDefault()
else event.returnValue=false;};system.events.prevent_default=function(evt)
{if(evt.preventDefault)evt.preventDefault();else event.returnValue=false;};system.events.translate=function(e)
{if(!e)return{};try
{var crap=system.tools.is_ie();e.target=crap?window.event.srcElement:e.target;e.event=crap?window.event:e;e.type=crap?window.event.type:e.type;e.layer_x=crap?window.event.offsetX:e.layerX;e.layer_y=crap?window.event.offsetY:e.layerY;e.page_x=crap?window.event.x:e.pageX;e.page_y=crap?window.event.y:e.pageY;e.screen_x=crap?window.event.screenX:e.screenX;e.screen_y=crap?window.event.screenY:e.screenY;e.key=crap?window.event.keyCode:e.which;e.button=crap?window.event.button:e.which;e.shift_key=crap?window.event.shiftKey:e.modifiers|Event.SHIFT_MASK;e.ctrl_key=crap?window.event.ctrlKey:e.modifiers|Event.ALT_MASK;e.alt_key=crap?window.event.altKey:e.modifiers|Event.ALT_MASK;e.translated=true;}
catch(ex){}
return e;};system.events.invoke=function(obj,observer,args){return function(){observer.apply(obj,args);};};var Observer=Class.prepare({initialize:function(element,eventName,handler)
{this.element=element;this.eventName=eventName;this.handler=handler;this.hook=$attach(element,eventName,handler);},clear:function(){try{$detach(this.hook);}catch(e){}}});$attach(window,"unload",system.events.cache.flush);if(typeof system!="object")
var system=new Object;if(typeof system.forms!="object")
system.forms=new Object;system.forms.form_manager={id_prefix:'_field',id_registry:0,form_registry:{},onsubmit:new EventContext,register_form:function(form)
{if(!form instanceof system.forms.form)
throw new Error("form must be an instance of system.forms.form");this.form_registry[form.name]=form;},remove_form:function(form)
{if(!form instanceof system.forms.form)
throw new Error("form must be an instance of system.forms.form");this.form_registry[form.name]=null;},handle_submit:function(form,evt)
{if(!form.validate())
{system.events.halt(evt);if(form.submit_element)
form.display_message(form.submit_element,form.submit_error);else if(system.forms.form_manager.last_click_event)
form.display_message(system.forms.form_manager.last_click_event.target,form.submit_error);}
else try{form.onsubmit.invoke(evt);this.onsubmit.invoke(form,evt);}catch(e){alert('error: '+e.message);}},last_click_event:false,register_submit:function(element){system.events.add($(element),'click',form_mgr.default_click_event);},default_click_event:function(evt){system.forms.form_manager.last_click_event=system.events.translate(evt);}};var form_mgr=system.forms.form_manager;system.forms.form=Class.prepare({onsubmit:new EventContext,initialize:function(opts)
{try
{this.element=$(opts.element);if(typeof this.element!="object")
throw new Error("form ID not found");this.name=this.element.id;this.events=[];this.invoke=function(obj,observer,args){return function(){observer.apply(obj,[arguments[0],args]);};};this.handle_submit=function(form){return function(){form_mgr.handle_submit(form,arguments[0]);};};localsubmit=this.handle_submit(this);this.events.push(system.events.add(this.element,"submit",localsubmit));this.opts=opts;this.bound=false;this.enable_submit=true;this.field_list=new Array;this.$=this.F=this.field_registry=new Object;this.errors=false;this.group_list=new Array;this.statusbar=opts.statusbar;this.error_list=new Array;this.form_rules=new Array;this.element.managed=true;this.submit_element=$(opts.submit_element);this.submit_error=opts.submit_error==null?"Errors on this form prevent it from being submitted":opts.submit_error;if(opts['bind'])this.bind(opts['bind']);form_mgr.register_form(this);if(opts.register)this.register_all_fields(opts);else this.events.concat(system.events.add_by_type(document,'INPUT','click',form_mgr.default_click_event));}
catch(e){system.debug.trace("system.forms.form: "+e,"error");}},register_field:function(field)
{if(!field instanceof system.forms.field)throw new Error("field must be an instance of system.forms.field");if(this.field_registry[field.element.id]instanceof system.forms.field)
{var old_field=this.field_registry[field.element.id];old_field.unlink();field.index=old_field.index;field.next_field=old_field.next_field;field.prev_field=old_field.prev_field;if(field.prev_field)field.prev_field.next_field=field;if(field.next_field)field.next_field.prev_field=field;this.field_registry[field.element.id]=field;this.field_list[field.index]=field;}
else
{this.field_registry[field.element.id]=field;field.index=this.field_list.length;this.field_list[this.field_list.length]=field;if(this.last_field_inserted){this.last_field_inserted.next_field=field;field.prev_field=this.last_field_inserted;}
this.last_field_inserted=field;}
if(this.bound)field.bind(this.bound_object);},register_field_group:function(group)
{if(!field instanceof system.forms.field_group)throw new Error("field must be an instance of system.forms.field_group");this.group_list.push(group);},register_form_rule:function(rule)
{if(!rule instanceof system.forms.rules.rule)throw new Error("rule must be an instance of system.forms.rules.rule");this.form_rules.push(rule);},validate:function()
{this.error_list=new Array;for(var i=0;i<this.field_list.length;i++)
{this.field_list[i].initialized=true;this.field_list[i].validate();this.field_list[i].hilight();if(this.field_list[i].error)this.error_list.push(this.field_list[i].message);}
if(this.error_list.length)this.errors=true;else this.errors=false;return!this.errors;},display_message:function(target,message){if(this.statusbar)this.statusbar.show($(target),(message?message:this.submit_error));},hide_message:function(){if(this.statusbar)this.statusbar.hide();},check_modified:function(hilight)
{for(var i=0;i<this.field_list.length;i++)
{this.field_list[i].check_modified();if(hilight)this.field_list[i].hilight();if(this.field_list[i].modified)return true;}
return false;},bind:function(obj,get,initial,validate,hilight)
{this.bound=true;this.bound_object=obj;for(var i=0;i<this.field_list.length;i++)
this.field_list[i].bind(obj,get,initial,validate,hilight);},update:function(get,initial,validate,hilight)
{for(var i=0;i<this.field_list.length;i++)
this.field_list[i].update(get,initial,validate,hilight);},register_all_fields:function(opts)
{var itms=[];var l=this.element.getElementsByTagName('*');for(var i=0;i<l.length;i++)
{if(!opts['include_disabled']&&(l[i].disabled||l[i].readonly))continue;if((l[i].tagName=='INPUT'&&(l[i].type!='submit'&&l[i].type!='button'&&l[i].type!='image'))||l[i].tagName=='SELECT'||l[i].tagName=='TEXTAREA'){itms.push(l[i]);}
if(l[i].tagName=='INPUT'&&l[i].type!='hidden')this.events.concat(system.events.add(l[i],'click',form_mgr.default_click_event));}
opts.form=this;for(var i=0;i<itms.length;i++)
this.create_field(itms[i],opts);},create_field:function(element,opts)
{opts.element=element;return new system.forms.field(opts);},reset:function(clear)
{this.hide_message();for(var i=0;i<this.field_list.length;i++)
this.field_list[i].reset(clear);},clear:function()
{this.hide_message();for(var i=0;i<this.field_list.length;i++)
this.field_list[i].unlink();for(var i=0;i<this.events.length;i++)
system.events.remove(this.events[i]);form_mgr.remove_form(this);},unlink:function(){this.clear();},first_field:function(){return this.field_list[0];},prev_field:function(field){return field.prev_field;},next_field:function(field){return field.next_field;},last_field:function(){return this.field_list[this.field_list.length-1];}});var form=system.forms.form;system.forms.field=Class.prepare({initialize:function(opts)
{try
{if(!opts.form instanceof system.forms.form)throw new Error("'form' must be a form object");this.form=opts.form;this.element=$(opts.element);if(typeof(this.element)=='object')
if(this.element.id.length==0)
this.element.id=form_mgr.id_prefix+(form_mgr.id_registry++);this.id=this.element.id;this.bound=false;this.nullable=true;this.field_rules=new Array;if(typeof(this.element)!="object")throw new Error("'element' ("+typeof(this.element)+") must be a form element");this.prev_field=null;this.next_field=null;this.cfg(opts);var e=[],add=system.events.add,el=this.event_target,f=this.form;if(el.type!='hidden')
{e.push(add(el,"mouseover",f.invoke(this,this.mouseover)));e.push(add(el,"mouseout",f.invoke(this,this.mouseout)));e.push(add(el,"keydown",f.invoke(this,this.keydown)));e.push(add(el,"keyup",f.invoke(this,this.keyup)));e.push(add(el,"focus",f.invoke(this,this.focus)));e.push(add(el,"blur",f.invoke(this,this.blur)));}
e.push(add(this.element,"change",f.invoke(this,this.change)));this.events=e;this.form.register_field(this);}
catch(e){system.debug.trace("system.forms.field: "+e,"error");}},mouseover:function(evt){if(this.form.statusbar)this.form.statusbar.field_message(this);},mouseout:function(evt){if(this.form.statusbar)this.form.statusbar.hide();},keydown:function(evt){if((evt?evt.which:window.event.keyCode)==13){this.update_status();this.hilight();system.events.halt(evt);}},keyup:function(evt){if(this.ilock){this.ilock=false;return;}if(this.initialized){this.validate(false);this.update_status();this.hilight();}},focus:function(evt)
{if(this.initialized){this.validate(false);this.update_status();this.hilight();}
if(this.prev_field instanceof system.forms.field)
{var field=this.prev_field;do{if(!field.initialized)field.validate(false);field.hilight();field.initialized=true;}while(field=field.prev_field);}},blur:function(evt){this.validate(true);this.hilight();this.initialized=true;if(this.form.statusbar)this.form.statusbar.hide();},change:function(evt){this.validate(true);this.hilight();},check_modified:function(){return this.modified=(this.get(false)!=this.get(true));},validate:function(format)
{if(this.element.disabled)return this.error=false;for(var i=0;i<this.field_rules.length;i++)
if(!this.field_rules[i].test())
return this.error;this.validator.validate(this,format);this.check_modified();this.update(true);return this.error;},hilight:function()
{if(this.error)this.style_target.className=this.error_class;else if(this.warning)this.style_target.className=this.warning_class;else if(this.modified)this.style_target.className=this.modified_class;else this.style_target.className=this.normal_class;},update_status:function(){if(this.form.statusbar)this.form.statusbar.field_message(this);else this.element.title=this.message;},register_field_rule:function(rule)
{if(!rule instanceof system.forms.rules.rule)
throw new Error("rule must be an instance of system.forms.rules.rule");this.field_rules.push(rule);},reset:function(clear)
{if(clear)
{this.element.value=this.nullable?null:'';this.update(true);}
this.style_target.className=this.normal_class;this.modified=this.warning=this.error=false;this.message='';this.initial_checked_state=this.element.checked;this.initial_value=this.element.value;this.initialized=this.opts['default_init']?true:false;if(this.form.statusbar)this.form.statusbar.hide();},set:function(value,initial,validate,hilight)
{if(this.is_checkbox)
{value=!value||value==0||value==''?false:true;if(initial)this.initial_checked_state=value;this.element.checked=value;}
else
{value=value?value:'';if(initial)this.initial_value=value;this.element.value=value;}
if(validate)this.validate(true);this.check_modified();if(hilight)this.hilight();},get:function(initial)
{if(this.is_checkbox)
return initial?this.initial_checked_state:this.element.checked;else
return initial?(this.initial_value!=''?this.validator.unformat(this.initial_value):(this.nullable?null:'')):(this.element.value!=''?this.validator.unformat(this.element.value):(this.nullable?null:''));},bind:function(obj,get,initial,validate,hilight)
{this.bound=true;this.bound_object=obj;if(get!=null)this.update(get,initial,validate,hilight);},update:function(get,initial,validate,hilight)
{if(!this.bound||!this.bound_object)return;if(get)this.bound_object[this.element.name]=this.get();else this.set(this.bound_object[this.element.name],initial,validate,hilight);},clear:function()
{this.style_target.className=this.normal_class;for(var i=0;i<this.events.length;i++)
system.events.remove(this.events[i]);},unlink:function(){this.clear();},cfg:function(opts)
{if(this.opts){Object.extend(this.opts,opts);opts=this.opts;}else this.opts=opts;this.element=$(opts.element);if(typeof(this.element)!="object")
throw new Error("'element' ("+typeof(this.element)+") must be a form element");this.is_checkbox=this.element.tagName=='INPUT'&&this.element.type=='checkbox';this.nullable=opts.nullable!=null?opts.nullable:false;this.initialized=opts['default_init']?true:false;this.initial_value=this.element.value;this.validator=opts.validator!=null?opts.validator:system.forms.validation.unspecified;this.element.field=this;if(opts['bind'])this.bind(opts['bind']);this.initial_checked_state=this.element.checked;this.required=opts.required;this.error=this.warning=this.modified=false;this.style_target=opts.style_target==null?this.element:$(opts.style_target);this.style_target.field=this;this.event_target=opts.event_target==null?this.element:$(opts.event_target);this.event_target.field=this;this.name=opts.name!=null?opts.name:this.event_target.title;this.original_class=this.style_target.className;this.normal_class=opts.classname?this.original_class+' '+opts.classname:this.original_class;this.modified_class=this.original_class+' '+this.normal_class+'_modified';this.warning_class=this.original_class+' '+this.normal_class+'_warning';this.error_class=this.original_class+' '+this.normal_class+'_error';}});var field=system.forms.field;system.forms.field_group=Class.prepare({initialize:function(o)
{try
{if(!o.form instanceof system.forms.form)
throw new Error("'form' must be a form object");this.form=o.form;if(!o.fields instanceof Array)
throw new Error("'fields' must be an Array object");this.fields=o.fields;this.disabled=false;this.locked=false;this.hidden=false;this.enable=function(enable){for(field in this.fields)field.element.disabled=!enable;this.disabled=!enable;};this.lock=function(lock){for(field in this.fields)field.element.readonly=lock;this.locked=lock;};this.hide=function(hide){for(field in this.fields)field.element.style.visibility=hide?"hidden":"visible";this.hidden=hide;};this.form.register_field_group(this);}
catch(e){system.debug.trace("system.forms.form_manager.field_group: "+e,"error");}}});var field_group=system.forms.field_group;system.forms.rules=new Object;var form_rules=system.forms.rules;system.forms.rules.rule=Class.prepare({initialize:function(o)
{this.form=o.form;this.criteria=o.criteria;this.enabled=o.enabled==null||o.enabled?true:false;this.enable=function(enable){this.enabled=enable;};this.message=o.message;this.group=o.group;var fs=this.group.fields;for(var i=0;i<fs.length;i++)fs[i].register_field_rule(this);this.test=function()
{if(this.enabled)return this.criteria(this,o);return true;};this.form.register_form_rule(this);}});var form_rule=system.forms.rules.rule;system.forms.validation={};var validators=system.forms.validation;var empty_string=/^\s*$/;system.forms.validation.check_required_field=function(f)
{f.error=false;f.message="";if(f.element.type=='radio')
{if(eval(f.required))
{var itms=document.getElementsByName(f.element.name);for(var i=0,checked=false;i<itms.length;i++)if(itms.item(i).checked==true)checked=true;if(!checked){f.error=true;f.message=f.name+": please select an option";return false;}}}
else if(f.element.type=='checkbox'){if(!f.element.checked&&eval(f.required)){f.error=true;f.message=f.name+" must be checked";return false;}}
else if(empty_string.test(f.element.value)){if(eval(f.required)){f.error=true;f.message=f.name+" is required";return false;}}
return true;};system.forms.validation.unspecified={name:'unspecified',format:function(v){return v;},unformat:function(v){return v;},validate:function(f){f.error=false;system.forms.validation.check_required_field(f);}};system.forms.warning_notification=new Object;system.forms.warning_notification.tooltip=function(opts)
{this.frame=opts.frame;this.container=opts.container;this.x=opts.x;this.y=opts.y;this.initialized=false;this.message="";this.field_message=function(f)
{if(!(f instanceof system.forms.field))
{this.hide();return;}
if(f.warning||f.error)
this.show(f.event_target,f.message);else{this.hide();}};this.show=function(target,message)
{var offset=system.tools.get_elem_offset(target);system.tools.set_elem_position($(this.frame),offset.left+this.x,offset.top+this.y);if($(this.container).innerHTML!=message)
$(this.container).innerHTML=message;$(this.frame).style.visibility="visible";this.iframe=system.tools.iframe_shim($(this.frame),"iFrameShimElement");};this.hide=function(){$(this.frame).style.visibility="hidden";if(this.iframe){this.iframe.style.display="none";}};};var form_tooltip=system.forms.warning_notification.tooltip;system.forms.rules.one_or_more=function(r)
{var er=true;var fs=r.group.fields;for(var i=0;i<fs.length;i++)
if(!empty_string.test(fs[i].element.value))er=false;for(var i=0;i<fs.length;i++)
{fs[i].error=er;fs[i].message=rule.message=rule.message;fs[i].initialized=true;fs[i].hilight();}
return!er;};if(!system.forms.validation)
system.forms.validation={};var validators=system.forms.validation;system.forms.validation.integer={name:'integer',expr:/integer/,test:function(f){return this.expr.test(f.element.className);},format:function(v){return parseInt(v);},unformat:function(value){return value;},validate:function(f,fmt)
{f.error=false;if(empty_string.test(f.element.value)){system.forms.validation.check_required_field(f);return;}
f.warning=false;f.error=false;f.message="";if(fmt)f.element.value=this.format(f.element.value);if(isNaN(f.element.value,10)){f.error=true;f.message="Error: Not a valid number";return;}}};system.forms.validation.ccnumber={name:'ccnumber',expr:/ccnumber/,test:function(f){return this.expr.test(f.element.className);},error_message:'Error: Not a valid credit card number',warning_message:'Warning: This card number format is not recognized',format:function(v){return v.replace(/[^\d]+/ig,"");},unformat:function(value){return value;},validate:function(f,fmt)
{f.error=false;if(empty_string.test(f.element.value)){system.forms.validation.check_required_field(f);return;}
f.warning=false;f.error=false;f.message="";if(fmt)f.element.value=this.format(f.element.value);if(isNaN(parseInt(f.element.value,10))){f.error=true;f.message=this.error_message;return;}
var len=f.element.value.length;var first=f.element.value.substring(0,1);if(!(len==15&&first=='3')&&!(len==16&&first>='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<f.element.value.length;j++)
if(f.element.value.charAt(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<f.element.value.length;j++)
if(f.element.value.charAt(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);}});