var Tapestry=new Object();Tapestry.default_invalid_field_handler=function(event,field,message)
{if(!event.abort&&!field.disabled)
{Tapestry.set_focus(field);window.alert(message);event.abort=true;event.cancel_handlers=true;}}
Tapestry.find=function(elementId)
{return document.getElementById(elementId);}
Tapestry.register_form=function(formId)
{var form=this.find(formId);form.events=new FormEventManager(form);}
Tapestry.onpresubmit=function(formId,handler)
{var form=this.find(formId);form.events.add_presubmit_handler(handler);}
Tapestry.onsubmit=function(formId,handler)
{var form=this.find(formId);form.events.add_submit_handler(handler);}
Tapestry.onpostsubmit=function(formId,handler)
{var form=this.find(formId);form.events.add_postsubmit_handler(handler);}
Tapestry.onreset=function(formId,handler)
{var form=this.find(formId);form.events.add_reset_handler(handler);}
Tapestry.onrefresh=function(formId,handler)
{var form=this.find(formId);form.events.add_refresh_handler(handler);}
Tapestry.oncancel=function(formId,handler)
{var form=this.find(formId);form.events.add_cancel_handler(handler);}
Tapestry.set_focus=function(field)
{if(typeof field=="string")
field=this.find(field);if(field.focus)
field.focus();if(field.select)
field.select();}
Tapestry.trim_field_value=function(fieldId)
{var field=this.find(fieldId);field.value=field.value.replace(/^\s+/g,'').replace(/\s+$/g,'');}
Tapestry.require_field=function(event,fieldId,message)
{var field=this.find(fieldId);if(field.value.length==0)
event.invalid_field(field,message);}
Tapestry.submit_form=function(form_id,field_name)
{var form=this.find(form_id);form.events.submit(field_name);}
function FormSubmitEvent(form,type,invalid_field_handler)
{this.form=form;this.type=type;this.abort=false;this.cancel_handlers=false;this.invalid_field_handler=invalid_field_handler;}
FormSubmitEvent.prototype.invalid_field=function(field,message)
{this.invalid_field_handler.call(window,this,field,message);}
FormSubmitEvent.prototype.toString=function()
{return"FormSubmitEvent["+this.form.name+" "+this.type+" "+this.abort+"]";}
function FormEventManager(form)
{this.form=form;this.handlers={};form.onsubmit=function(){return this.events.onsubmit_handler();};form.onreset=function(){return this.events.onreset_handler();};this.invalid_field_handler=Tapestry.default_invalid_field_handler;}
FormEventManager.prototype.add_handler=function(type,handler)
{var array=this.handlers[type];if(array==null)
{array=[];this.handlers[type]=array;}
array.push(handler);}
FormEventManager.prototype.invoke_handlers=function(type,eventObj)
{if(eventObj.cancel_handlers)return;var array=this.handlers[type];if(array==null)return;var length=array.length;for(var i=0;i<length;i++)
{var handler=array[i];handler.call(window,eventObj);if(eventObj.cancel_handlers)return;}}
FormEventManager.prototype.add_cancel_handler=function(handler)
{this.add_handler("cancel",handler);}
FormEventManager.prototype.cancel=function()
{var event=new FormSubmitEvent(this.form,"cancel",this.invalid_field_handler);this.invoke_handlers("cancel",event);if(event.abort==false)
{this.form.submitmode.value="cancel";this.form.onsubmit=null;this.form.submit();}}
FormEventManager.prototype.add_presubmit_handler=function(handler)
{this.add_handler("presubmit",handler);}
FormEventManager.prototype.add_submit_handler=function(handler)
{this.add_handler("submit",handler);}
FormEventManager.prototype.add_postsubmit_handler=function(handler)
{this.add_handler("postsubmit",handler);}
FormEventManager.prototype.submit=function(name)
{if(this.onsubmit_handler())
{this.form.onsubmit=null;this.form.submitname.value=name;this.form.submit();}}
FormEventManager.prototype.onsubmit_handler=function()
{var event=new FormSubmitEvent(this.form,"submit",this.invalid_field_handler);this.invoke_handlers("presubmit",event);this.invoke_handlers("submit",event);this.invoke_handlers("postsubmit",event);if(event.abort)
return false;this.form.submitmode.value="submit";this.form.submitname.value="";return true;}
FormEventManager.prototype.add_refresh_handler=function(handler)
{this.add_handler("submit",handler);this.add_handler("refresh",handler);}
FormEventManager.prototype.refresh=function(name)
{var event=new FormSubmitEvent(this.form,"refresh",this.invalid_field_handler);this.invoke_handlers("refresh",event);if(event.abort)
return;this.form.submitmode.value="refresh";this.form.submitname.value=name;this.form.onsubmit=null;this.form.submit();}
FormEventManager.prototype.add_reset_handler=function(handler)
{this.add_handler("reset",handler);}
FormEventManager.prototype.onreset_handler=function()
{var event=new FormSubmitEvent(this.form,"reset",this.invalid_field_handler);this.invoke_handlers("reset",event);return!event.abort;}
var GUI=new Object();GUI.find=function(elementId){return document.getElementById(elementId);}
GUI.show=function(ids,show){if(ids)
for(var i=0;i<ids.length;i++){var id=ids[i];if(id){var style=document.layers?document.layers[id]:document.getElementById?document.getElementById(id).style:document.all[id].style;style.display=show?'block':'none';}}}
GUI.propagateDisable=function(disabled,fieldIds,hideableId,formName,radioGroupNames){for(var i=0;i<fieldIds.length;i++){var field=this.find(fieldIds[i]);if(field)
field.disabled=disabled;}
if(formName&&radioGroupNames){for(var i=0;i<radioGroupNames.length;i++){var radioGroup=this.find(formName)[radioGroupNames[i]];for(var j=0;j<this.getRadioGroupLength(radioGroup);j++)
this.getRadio(radioGroup,j).disabled=disabled;}}
if(hideableId)
this.show([hideableId],!disabled)}
GUI.refreshOpener=function(){if(opener&&!opener.closed&&typeof(opener.refreshPage)!='undefined'){opener.refreshPage();window.focus();}}
GUI.getSelectedIndex=function(radioGroup){for(var i=0;i<this.getRadioGroupLength(radioGroup);i++)
if(this.getRadio(radioGroup,i).checked)
return i;return-1;}
GUI.getRadio=function(radioGroup,index){return typeof(radioGroup.length)=='number'?radioGroup[index]:index==0?radioGroup:null;}
GUI.getRadioGroupLength=function(radioGroup){return typeof(radioGroup.length)=='number'?radioGroup.length:radioGroup!=null?1:0;}
GUI.actionSelectorClicked=function(formName,radioGroupName,index){var radioGroup=this.find(formName)[radioGroupName];for(var i=0;i<this.getRadioGroupLength(radioGroup);i++){var div=this.find(radioGroupName+i);div.className=i==index?'selected':'unselected';if(i==index)
this.getRadio(radioGroup,i).checked=true;}
return false;}
function ActionSelectorPopupWindowRedirector(formName,radioGroupName,redirectors){function getRedirector(){var index=GUI.getSelectedIndex(GUI.find(formName)[radioGroupName]);if(0<=index&&index<redirectors.length)
return redirectors[index];return null;}
this.getWindowName=function(){var redirector=getRedirector();return redirector?redirector.getWindowName():'';}
this.getWindowFeatures=function(){var redirector=getRedirector();return redirector?redirector.getWindowFeatures():'';}
this.needsRedirect=function(){var redirector=getRedirector();return redirector?redirector.needsRedirect():false;}
this.preActivate=function(form){var redirector=getRedirector();if(redirector)
redirector.preActivate(form);}
this.postActivate=function(form){var redirector=getRedirector();if(redirector)
redirector.postActivate(form);}}
GUI.addOnLoad=function(function_){var old=window.onload;if(typeof old!='function')
window.onload=function_;else
window.onload=function(){if(old)
old();function_();}}
GUI.addOnKeyDown=function(input,function_){var old=input.onkeydown;if(typeof old!='function')
input.onkeydown=function_;else
input.onkeydown=function(){if(old)
old();function_();}}
GUI.addInputBackgroundHintHandler=function(id){GUI.addOnLoad(function(){var input=Tapestry.find(id);if(input.value)
input.style.backgroundImage='none';});GUI.addOnKeyDown(Tapestry.find(id),function(){this.style.backgroundImage='none';});}
var LinkExtensions=new Object();LinkExtensions.extendedLinkSubmit=function(formName,componentName,popupWindowRedirector){var form=Tapestry.find(formName);if(form.events.onsubmit_handler()){var popup=popupWindowRedirector&&popupWindowRedirector.needsRedirect();if(popup){var windowName=popupWindowRedirector.getWindowName();window.open('about:blank',windowName,popupWindowRedirector.getWindowFeatures());var targetOld=form.target;form.target=windowName;var submitnameOld=form.submitname.value;popupWindowRedirector.preActivate(form);Tapestry.submit_form(formName,componentName);popupWindowRedirector.postActivate(form);form.target=targetOld;form.submitname.value=submitnameOld;}else
Tapestry.submit_form(formName,componentName);}}
LinkExtensions.fieldSubmit=function(formName,fieldId,value){Tapestry.find(fieldId).value=value;Tapestry.submit_form(formName);}
function PopupWindowRedirector(windowName,windowFeatures,activationFlagName){this.getWindowName=function(){return windowName||'';}
this.getWindowFeatures=function(){return windowFeatures||'';}
this.needsRedirect=function(){return true;}
this.preActivate=function(form){if(activationFlagName)
form[activationFlagName].value='T';}
this.postActivate=function(form){if(activationFlagName)
form[activationFlagName].value='F';}}
function ExtendedFormSupportLibrary(){var CTRL_CODES=Array(8,9,16,17,20,35,36,37,40,46);var keyDown=0;function isInArray(array,n){for(i=0;i<array.length;i++)
if(array[i]==n)
return true;return false;}
function getEvent(evt){return(evt)?evt:((window.event)?window.event:"");}
function isCtrlCode(c){return isInArray(CTRL_CODES,c);}
function focusNext(input){input.form[(getIndex(input)+1)%input.form.length].focus();function getIndex(input){var index=-1,i=0,found=false;while(i<input.form.length&&index==-1)
if(input.form[i]==input)
index=i;else
i++;return index;}
return true;}
this.getEventSource=function(evt){evt=getEvent(evt);return evt.target||evt.srcElement;}
this.autoTab=function(input,len,e){if(input.value.length>=len&&!isCtrlCode(keyDown)){input.value=input.value.slice(0,len);focusNext(input);}
return true;}
this.onKeyDown=function(evt){var evt=getEvent(evt);keyDown=evt.keyCode;}
this.displayInputLength=function(input,maxLength,lengthDisplayInput,countDown){if(lengthDisplayInput){var length=input.value.length;lengthDisplayInput.value=countDown?maxLength-length:length;}}
this.limitInputLength=function(input,maxLength,lengthDisplayInput,countDown){var length=input.value.length;if(maxLength>-1&&length>maxLength){input.value=input.value.slice(0,maxLength);length=input.value.length;}
this.displayInputLength(input,maxLength,lengthDisplayInput,countDown);}}
var ExtendedFormSupport=new ExtendedFormSupportLibrary();
