var Tapestry={FORM_VALIDATE_EVENT:"tapestry:formvalidate",FORM_PREPARE_FOR_SUBMIT_EVENT:"tapestry:formprepareforsubmit",FORM_PROCESS_SUBMIT_EVENT:"tapestry:formprocesssubmit",FIELD_VALIDATE_EVENT:"tapestry:fieldvalidate",FOCUS_CHANGE_EVENT:"tapestry:focuschange",ZONE_UPDATED_EVENT:"tapestry:zoneupdated",DEBUG_ENABLED:false,CONSOLE_DURATION:10,pageLoaded:false,waitForPage:function(c){if(Tapestry.pageLoaded){return}Event.extend(c||window.event).stop();var e=$(document.body);var d=new Element("div",{"class":"t-dialog-overlay"});d.setOpacity(0);e.insert({top:d});new Effect.Appear(d,{duration:0.2,from:0});var a=new Element("div",{"class":"t-page-loading-banner"}).update(Tapestry.Messages.pageIsLoading);d.insert({top:a});var b=function(){new Effect.Fade(d,{duration:0.2,afterFinish:function(){d.remove()}})};document.observe("dom:loaded",b);if(Tapestry.pageLoaded){b.call(null)}},onDOMLoaded:function(a){document.observe("dom:loaded",a)},onDomLoadedCallback:function(){Tapestry.pageLoaded=true;Tapestry.ScriptManager.initialize();$$(".t-invisible").each(function(a){a.hide();a.removeClassName("t-invisible")});$$("INPUT","SELECT","TEXTAREA").each(function(b){var a=$T(b);if(!a.observingFocusChange){b.observe("focus",function(){if(b!=Tapestry.currentFocusField){document.fire(Tapestry.FOCUS_CHANGE_EVENT,b);Tapestry.currentFocusField=b}});a.observingFocusChange=true}});$$("INPUT[type=submit]").each(function(b){var a=$T(b);if(!a.trackingClicks){b.observe("click",function(){$T(b.form).lastSubmit=b});a.trackingClicks=true}})},init:function(a){$H(a).each(function(b){var d=b.key;var c=Tapestry.Initializer[d];if(c==undefined){Tapestry.error(Tapestry.Messages.missingInitializer,{name:d});return}b.value.each(function(e){if(!Object.isArray(e)){e=[e]}c.apply(this,e)})})},error:function(b,a){Tapestry.invokeLogger(b,a,Tapestry.Logging.error)},warn:function(b,a){Tapestry.invokeLogger(b,a,Tapestry.Logging.warn)},debug:function(b,a){Tapestry.invokeLogger(b,a,Tapestry.Logging.debug)},invokeLogger:function(b,c,a){if(false){if(c!=undefined){b=b.interpolate(c)}a.call(this,b)}},loadScriptsInReply:function(reply,callback){var redirectURL=reply.redirectURL;if(redirectURL){if(/^https?:/.test(redirectURL)){window.location=redirectURL;return}window.location.pathname=redirectURL;return}Tapestry.ScriptManager.addStylesheets(reply.stylesheets);Tapestry.ScriptManager.addScripts(reply.scripts,function(){callback.call(this);if(reply.script){eval(reply.script)}Tapestry.onDomLoadedCallback()})},ajaxFailureHandler:function(a){var b=a.getHeader("X-Tapestry-ErrorMessage");Tapestry.error(Tapestry.Messages.communicationFailed+b);Tapestry.debug(Tapestry.Messages.ajaxFailure+b,a)},ajaxRequest:function(b,a){return new Ajax.Request(b,{onSuccess:function(e,d){if(Tapestry.windowUnloaded){return}if(!e.request.success()){Tapestry.error(Tapestry.Messages.ajaxRequestUnsuccessful);return}try{a.call(this,e,d)}catch(c){Tapestry.error(Tapestry.Messages.clientException+c)}},onException:Tapestry.ajaxFailureHandler,onFailure:Tapestry.ajaxFailureHandler})},findZoneManager:function(b){var a=$T(b).zoneId;return Tapestry.findZoneManagerForZone(a)},findZoneManagerForZone:function(a){var b=$(a);if(!a){Tapestry.error(Tapestry.Messages.missingZone,{id:a});return null}var c=$T(a).zoneManager;if(!c){Tapestry.error(Tapestry.Messages.noZoneManager,b);return null}return c},rebuildURL:function(b){if(b.match(/^https?:/)){return b}if(!b.startsWith("/")){Tapestry.error(Tapestry.Messages.pathDoesNotStartWithSlash,{path:b});return b}var a=window.location;return a.protocol+"//"+a.host+b},stripToLastSlash:function(a){var b=a.lastIndexOf("/");return a.substring(0,b+1)},formatLocalizedNumber:function(c,b){var d=Tapestry.decimalFormatSymbols.minusSign;var e=Tapestry.decimalFormatSymbols.groupingSeparator;var f=Tapestry.decimalFormatSymbols.decimalSeparator;var a="";c.strip().toArray().each(function(g){if(g==d){a+="-";return}if(g==e){return}if(g==f){if(b){throw Tapestry.Messages.notAnInteger}g="."}else{if(g<"0"||g>"9"){throw Tapestry.Messages.invalidCharacter}}a+=g});return Number(a)},markScriptLibrariesLoaded:function(a){$(a).each(function(b){var c=Tapestry.rebuildURL(b);Tapestry.ScriptManager.virtualScripts.push(c)})}};Element.addMethods({isDeepVisible:function(a){var b=$(a);while(true){if(!b.visible()){return false}if(b.tagName=="FORM"){break}b=$(b.parentNode)}return true}});Element.addMethods("FORM",{getFormEventManager:function(b){b=$(b);var c=$T(b);var a=c.formEventManager;if(a==undefined){a=new Tapestry.FormEventManager(b);c.formEventManager=a}return a},sendAjaxRequest:function(d,e,f){d=$(d);f=Object.clone(f||{});f.onFailure|=Tapestry.ajaxFailureHandler;var c=d.getElements().reject(function(g){return g.tagName=="INPUT"&&g.type=="submit"});var b=Form.serializeElements(c,true);var a=$T(d).lastSubmit;if(a&&a.name){b[a.name]=$F(a)}Object.extend(b,f.parameters);f.parameters=b;return new Ajax.Request(e,f)}});Element.addMethods(["INPUT","SELECT","TEXTAREA"],{getFieldEventManager:function(b){b=$(b);var c=$T(b);var a=c.fieldEventManager;if(a==undefined){a=new Tapestry.FieldEventManager(b);c.fieldEventManager=a}return a},showValidationMessage:function(a,b){a=$(a);a.getFieldEventManager().showValidationMessage(b);return a},removeDecorations:function(a){$(a).getFieldEventManager().removeDecorations();return a},addValidator:function(b,a){b.observe(Tapestry.FIELD_VALIDATE_EVENT,function(c){try{a.call(this,c.memo.translated)}catch(d){b.showValidationMessage(d)}});return b}});Tapestry.Initializer={ajaxFormLoop:function(a){var b=$(a.rowInjector);$(a.addRowTriggers).each(function(c){$(c).observe("click",function(d){$(b).trigger();Event.stop(d)})})},formLoopRemoveLink:function(a){var c=$(a.link);var b=a.fragment;c.observe("click",function(d){Event.stop(d);var e=function(f){var i=$(b);var h=$T(i).formFragment;if(h!=undefined){h.hideAndRemove()}else{var g=Tapestry.ElementEffect.fade(i);g.options.afterFinish=function(){i.remove()}}};Tapestry.ajaxRequest(a.url,e)})},linkZone:function(b,a,c){b=$(b);$T(b).zoneId=a;if(b.tagName=="FORM"){b.getFormEventManager().preventSubmission=true;b.observe(Tapestry.FORM_PROCESS_SUBMIT_EVENT,function(){var e=Tapestry.findZoneManager(b);if(!e){return}var d=function(f){e.processReply(f.responseJSON)};b.sendAjaxRequest(c,{onSuccess:d})});return}b.observe("click",function(d){Event.stop(d);var e=Tapestry.findZoneManager(b);if(!e){return}e.updateFromURL(c)})},validate:function(a,b){a=$(a);$(a.form).getFormEventManager();$(a).getFieldEventManager();b.each(function(g){var f=g[0];var e=g[1];var d=g[2];var c=Tapestry.Validator[f];if(c==undefined){Tapestry.error(Tapestry.Messages.missingValidator,{name:f,fieldName:a.id});return}c.call(this,a,e,d)})},zone:function(a){new Tapestry.ZoneManager(a)},formFragment:function(a){new Tapestry.FormFragment(a)},formInjector:function(a){new Tapestry.FormInjector(a)},linkTriggerToFormFragment:function(a,b){a=$(a);if(a.type=="radio"){$(a.form).observe("click",function(){$T(b).formFragment.setVisible(a.checked)});return}a.observe("click",function(){$T(b).formFragment.setVisible(a.checked)})}};Tapestry.Validator={required:function(b,a){$(b).getFieldEventManager().requiredCheck=function(c){if(c.strip()==""){$(b).showValidationMessage(a)}}},numericformat:function(b,a,c){$(b).getFieldEventManager().translator=function(e){try{return Tapestry.formatLocalizedNumber(e,c)}catch(d){$(b).showValidationMessage(a)}}},minlength:function(b,c,a){b.addValidator(function(d){if(d.length<a){throw c}})},maxlength:function(b,c,a){b.addValidator(function(d){if(d.length>a){throw c}})},min:function(b,a,c){b.addValidator(function(d){if(d<c){throw a}})},max:function(b,a,c){b.addValidator(function(d){if(d>c){throw a}})},regexp:function(b,a,c){var d=new RegExp(c);b.addValidator(function(e){if(!d.test(e)){throw a}})}};Tapestry.ErrorPopup=Class.create({BUBBLE_VERT_OFFSET:-34,BUBBLE_HORIZONTAL_OFFSET:-20,BUBBLE_WIDTH:"auto",BUBBLE_HEIGHT:"39px",initialize:function(b){this.field=$(b);this.innerSpan=new Element("span");this.outerDiv=$(new Element("div",{id:this.field.id+":errorpopup","class":"t-error-popup"})).update(this.innerSpan).hide();var a=$(document.body);a.insert({bottom:this.outerDiv});this.outerDiv.absolutize();this.outerDiv.observe("click",function(c){this.ignoreNextFocus=true;this.stopAnimation();this.outerDiv.hide();this.field.activate();Event.stop(c)}.bindAsEventListener(this));this.queue={position:"end",scope:this.field.id};Event.observe(window,"resize",this.repositionBubble.bind(this));document.observe(Tapestry.FOCUS_CHANGE_EVENT,function(c){if(this.ignoreNextFocus){this.ignoreNextFocus=false;return}if(c.memo==this.field){this.fadeIn();return}this.fadeOut()}.bind(this))},showMessage:function(a){this.stopAnimation();this.innerSpan.update(a);this.hasMessage=true;this.fadeIn()},repositionBubble:function(){var a=this.field.cumulativeOffset();this.outerDiv.setStyle({top:(a[1]+this.BUBBLE_VERT_OFFSET)+"px",left:(a[0]+this.BUBBLE_HORIZONTAL_OFFSET)+"px",width:this.BUBBLE_WIDTH,height:this.BUBBLE_HEIGHT})},fadeIn:function(){if(!this.hasMessage){return}this.repositionBubble();if(this.animation){return}this.animation=new Effect.Appear(this.outerDiv,{queue:this.queue,afterFinish:function(){this.animation=null;if(this.field!=Tapestry.currentFocusField){this.fadeOut()}}.bind(this)})},stopAnimation:function(){if(this.animation){this.animation.cancel()}this.animation=null},fadeOut:function(){if(this.animation){return}this.animation=new Effect.Fade(this.outerDiv,{queue:this.queue,afterFinish:function(){this.animation=null}.bind(this)})},hide:function(){this.hasMessage=false;this.stopAnimation();this.outerDiv.hide()}});Tapestry.FormEventManager=Class.create({initialize:function(a){this.form=$(a);this.form.onsubmit=this.handleSubmit.bindAsEventListener(this)},handleSubmit:function(b){var a=$T(this.form);a.validationError=false;var c=null;this.form.getElements().each(function(d){var e=$T(d).fieldEventManager;if(e!=undefined){var f=e.validateInput();if(f&&!c){c=d}}});this.form.fire(Tapestry.FORM_VALIDATE_EVENT,this.form);if(a.validationError){Event.stop(b);if(c){c.activate()}a.lastSubmit=null;return false}this.form.fire(Tapestry.FORM_PREPARE_FOR_SUBMIT_EVENT,this.form);if(this.preventSubmission){Event.stop(b);this.form.fire(Tapestry.FORM_PROCESS_SUBMIT_EVENT);return false}return true}});Tapestry.FieldEventManager=Class.create({initialize:function(a){this.field=$(a);var b=this.field.id;this.label=$(b+"-label");this.icon=$(b+"-icon");this.translator=Prototype.K;document.observe(Tapestry.FOCUS_CHANGE_EVENT,function(c){if(Tapestry.currentFocusField==this.field&&this.field.form==c.memo.form){this.validateInput()}}.bindAsEventListener(this))},removeDecorations:function(){this.field.removeClassName("t-error");if(this.label){this.label.removeClassName("t-error")}if(this.icon){this.icon.hide()}if(this.errorPopup){this.errorPopup.hide()}},showValidationMessage:function(a){$T(this.field).validationError=true;$T(this.field.form).validationError=true;this.field.addClassName("t-error");if(this.label){this.label.addClassName("t-error")}if(this.icon){if(!this.icon.visible()){new Effect.Appear(this.icon)}}if(this.errorPopup==undefined){this.errorPopup=new Tapestry.ErrorPopup(this.field)}this.errorPopup.showMessage(a)},validateInput:function(){if(this.field.disabled){return false}if(!this.field.isDeepVisible()){return false}var a=$T(this.field);var c=$F(this.field);a.validationError=false;if(this.requiredCheck){this.requiredCheck.call(this,c)}if(!a.validationError&&!c.blank()){var b=this.translator(c);if(!a.validationError){this.field.fire(Tapestry.FIELD_VALIDATE_EVENT,{value:c,translated:b})}}if(!a.validationError){this.field.removeDecorations()}return a.validationError}});Tapestry.ElementEffect={none:function(a){},show:function(a){return new Effect.Appear(a)},highlight:function(a){},slidedown:function(a){return new Effect.SlideDown(a)},slideup:function(a){return new Effect.SlideUp(a)},fade:function(a){return new Effect.Fade(a)}};Tapestry.ZoneManager=Class.create({initialize:function(a){if(Object.isString(a)){a={element:a}}this.element=$(a.element);this.showFunc=Tapestry.ElementEffect[a.show]||Tapestry.ElementEffect.show;this.updateFunc=Tapestry.ElementEffect[a.update]||Tapestry.ElementEffect.highlight;$T(this.element).zoneManager=this;var b=this.element.select(".t-zone-update");this.updateElement=b.first()||this.element},show:function(b){this.updateElement.update(b);var a=this.element.visible()?this.updateFunc:this.showFunc;a.call(this,this.element);this.element.fire(Tapestry.ZONE_UPDATED_EVENT)},processReply:function(a){Tapestry.loadScriptsInReply(a,function(){a.content&&this.show(a.content);Object.keys(a.zones).each(function(d){var b=Tapestry.findZoneManagerForZone(d);if(b){var c=a.zones[d];b.show(c)}})}.bind(this))},updateFromURL:function(a){var b=function(c){this.processReply(c.responseJSON)}.bind(this);Tapestry.ajaxRequest(a,b)}});Tapestry.FormFragment=Class.create({initialize:function(a){if(Object.isString(a)){a={element:a}}this.element=$(a.element);$T(this.element).formFragment=this;this.hidden=$(a.element+":hidden");this.showFunc=Tapestry.ElementEffect[a.show]||Tapestry.ElementEffect.slidedown;this.hideFunc=Tapestry.ElementEffect[a.hide]||Tapestry.ElementEffect.slideup;var b=$(this.hidden.form);b.getFormEventManager();$(b).observe(Tapestry.FORM_PREPARE_FOR_SUBMIT_EVENT,function(){if(!this.element.isDeepVisible()){this.hidden.value=""}}.bind(this))},hide:function(){if(this.element.visible()){this.hideFunc(this.element)}},hideAndRemove:function(){var a=this.hideFunc(this.element);a.options.afterFinish=function(){this.element.remove()}.bind(this)},show:function(){if(!this.element.visible()){this.showFunc(this.element)}},toggle:function(){this.setVisible(!this.element.visible())},setVisible:function(a){if(a){this.show();return}this.hide()}});Tapestry.FormInjector=Class.create({initialize:function(a){this.element=$(a.element);this.url=a.url;this.below=a.below;this.showFunc=Tapestry.ElementEffect[a.show]||Tapestry.ElementEffect.highlight;this.element.trigger=function(){var b=function(c){var f=c.responseJSON;var d=new Element(this.element.tagName,{"class":this.element.className});var e={};e[this.below?"after":"before"]=d;Tapestry.loadScriptsInReply(f,function(){this.element.insert(e);d.update(f.content);d.id=f.elementId;this.showFunc(d)}.bind(this))}.bind(this);Tapestry.ajaxRequest(this.url,b);return false}.bind(this)}});Tapestry.ScriptLoadMonitor=Class.create({initialize:function(a,b){this.callback=b;this.loaded=0;this.toload=a.length;var c=this;a.each(function(d){if(Prototype.Browser.IE){var e=false;d.onreadystatechange=function(){if(!e&&(this.readyState=="loaded"||this.readyState=="complete")){e=true;c.loadComplete(d)}}}else{d.onload=c.loadComplete.bindAsEventListener(c,d)}});if(this.toload==0){this.callback.call(this)}},loadComplete:function(){this.loaded++;if(this.loaded==this.toload){this.callback.call(this)}}});Tapestry.ScriptManager={virtualScripts:$A([]),initialize:function(){this.emulated=false;if(!document.scripts){this.emulated=true;document.scripts=new Array();$$("script").each(function(a){document.scripts.push(a)})}},contains:function(c,b,a){return $A(c).any(function(e){var d=e[b];if(!d||d.blank()){return false}var f=Prototype.Browser.IE?Tapestry.rebuildURL(d):d;return f==a});return false},addScripts:function(a,b){var d=new Array();if(a){var c=this.emulated;var e=$$("head").first();a.each(function(f){var g=Tapestry.rebuildURL(f);if(Tapestry.ScriptManager.virtualScripts.member(g)){return}if(Tapestry.ScriptManager.contains(document.scripts,"src",g)){return}var h=new Element("script",{src:g,type:"text/javascript"});e.insert({bottom:h});d.push(h);if(c){document.scripts.push(h)}})}new Tapestry.ScriptLoadMonitor(d,b)},addStylesheets:function(b){if(!b){return}var a=$$("head").first();$(b).each(function(c){var d=Tapestry.rebuildURL(c.href);if(Tapestry.ScriptManager.contains(document.styleSheets,"href",d)){return}var e=new Element("link",{type:"text/css",rel:"stylesheet",href:d});if(c.media!=undefined){e.writeAttribute("media",c.media)}a.insert({bottom:e})})}};Tapestry.Logging={toggle:function(){},hide:function(){},resize:function(){},clear:function(){},move:function(){},debug:function(a){},warn:function(a){},info:function(a){},error:function(a){},profile:function(a){var b=new Date();return b}};function $T(c){var b=$(c);var a=b._tapestry;if(!a){a={};b._tapestry=a}return a}Tapestry.onDOMLoaded(Tapestry.onDomLoadedCallback);Event.observe(window,"beforeunload",function(){Tapestry.windowUnloaded=true});
