var identity=(typeof identity=="undefined")?{}:identity;identity.app=function(){var r={},model={},view={},controller={},validation={},panel,mask,glow="",$,addListener,removeListener,statusListenerIds={},cancelListenerId,userfeedback,panelState="closed";var css_class_panelSpinner="id-panel-working",css_class_panelAnimating="id-panel-animating",css_class_formSpinner="working-spinner",css_class_panelContent="c",css_class_panelNoHeader="panel-noHeader",css_class_panelContentHead="hd",css_class_panelContentFoot="ft",css_id_loginForm_username="identity_username",css_id_loginForm_password="identity_password",css_id_loginForm_remember_me="identity_remember_me",css_id_status="id-status",css_element_status=["#",css_id_status].join(""),css_element_notificationArea="#blq-pre-mast",css_element_notificationClose="#idNotifyClose",css_element_panel=".panel-identity",css_element_panelContent=[css_element_panel," .",css_class_panelContent].join(""),css_element_formSpinner=[css_element_panel," .working-spinner"].join(""),css_element_backLink=[css_element_panel," a.id-back"].join(""),css_element_loginLink=[css_element_panel," a.id-login"].join(""),css_element_loginLink_span=[css_element_loginLink," span"].join(""),css_element_registerLink=[css_element_panel," a.id-register"].join(""),css_element_registerLink_span=[css_element_registerLink," span"].join(""),css_element_helpLink=[css_element_panel," a.id-help"].join(""),css_element_explainLink=[css_element_panel," .id-explain-dob a"].join(""),css_element_termsLink=[css_element_panel," a.id-terms"].join(""),css_element_termsLink_span=[css_element_termsLink," span"].join(""),css_element_loginForm=[css_element_panel," #id-login-form"].join(""),css_element_loginForm_username=[css_element_loginForm," input#",css_id_loginForm_username].join(""),css_element_loginForm_password=[css_element_loginForm," input#",css_id_loginForm_password].join(""),css_element_loginForm_remember_me=[css_element_loginForm," input#",css_id_loginForm_remember_me].join(""),css_element_cancelButton=[css_element_panel," #id-actions .negative"].join(""),css_element_buttonSubmit=[css_element_panel," #id-actions .positive"].join(""),css_element_status_loginLink="a#idLogin";var status_url=["/users/widget/status/?ptrt=",window.location].join("");var Controller=function(){this.views={};this.currentView=""};Controller.prototype.getView=function(viewName){if(!(viewName in this.views)&&view[viewName]){this.views[viewName]=new view[viewName](controller)}return this.views[viewName]};Controller.prototype.emptyViewCache=function(){var viewIndex,view;for(viewIndex in this.views){view=this.views[viewIndex];view.emptyCache()}};Controller.prototype.isDate16YearsAgo=function(day,month,year){if(day>0&&month>0&&year>0){var now=new Date();if((now.getFullYear()-year)>16){return false}else{if((now.getFullYear()-year)<16){return true}else{if((now.getMonth()+1)>month){return false}else{if((now.getMonth()+1)<month){return true}else{if(now.getDate()>=day){return false}else{if(now.getDate()<day){return true}}}}}}}else{return false}};Controller.prototype.scrollToEventLinkTarget=function(e){if(typeof e!="undefined"){var originator=$(e.attachedTo);var href=originator.attr("href");if(originator.length&&href){target=href.substring(href.indexOf("#"));if(href.indexOf("#")!=-1&&target.length){var scrolltop=identity.util.getScrollPosition("y");window.location=target;window.scrollTo(0,scrolltop)}}}};Controller.prototype.decodeSecureFormCookie=function(data,fieldNames){if(!data.match(/^[lms]$/i)&&!data.match(/^[abc](\|[a-z]{2}([a-z]{2})?)+$/i)){return false}var json={};data=data.split("|");if(data[0]=="m"){migrationUrl=[idProperties.secureServer,"/users/migration"].join("");if("migrationVars" in identity){migrationUrl=[migrationUrl,"?ptrt=",identity.migrationVars.ptrt,"&target_resource=",identity.migrationVars.target_resource].join("")}window.location=migrationUrl}else{if(data[0]=="l"){controller.handleAccountLocked()}else{if(data[0]=="s"){controller.handleSessionExpired()}else{if(data[0]=="a"){json._error=true;json._valid=false}else{if(data[0]=="b"){json._error=false;json._valid=false}else{if(data[0]=="c"){json._error=false;json._valid=true}}}}}}for(var i=1;i<data.length;i++){var field=data[i].charAt(0);var fieldstatus=data[i].charAt(1);var fieldhint=(data[i].length>2)?identity.app.lang[data[i].substr(2,2)]:"";field=fieldNames[field];json[field]={};if(fieldstatus=="a"){json[field]._error=true;json[field]._valid=false}else{if(fieldstatus=="b"){json[field]._error=false;json[field]._valid=false}else{if(fieldstatus=="c"){json[field]._error=false;json[field]._valid=true}}}json[field].container=["#",field,"-container"].join("");json[field].message=fieldhint;json[field].messageContainer=["#",field,"-container .hint"].join("")}return json};Controller.prototype.handleLogin=function(e){if(e){e.preventDefault()}var thisView=this.getView("LoginView");thisView.nonJSEquiv=[idProperties.dynamicServer,"/users/login?ptrt=",window.location].join("");thisView.show()};Controller.prototype.handleAccountLocked=function(e){if(e){e.preventDefault()}var thisView=this.getView("LockedView");thisView.nonJSEquiv=["/users/login/locked?ptrt=",window.location].join("");thisView.show()};Controller.prototype.handleSessionExpired=function(e){if(e){e.preventDefault()}var thisView=this.getView("SessionExpiredView");thisView.nonJSEquiv=["/users/error/sessionexpired?ptrt=",window.location].join("");thisView.show()};Controller.prototype.handleLoginFormSubmit=function(e){var ctrl=this;var thisView=this.getView("LoginView");if(e){e.preventDefault()}thisView.validation.validate("submit",{onSuccess:function(){var sf=new identity.forms.SecureForm(thisView.config.secureFormSettings.form,{secureUrl:thisView.config.secureFormSettings.secureUrl,handleResult:function(args){thisView.hideFormSpinner();if(args._valid){var e=new glow.events.Event();glow.events.fire(identity,"login",e)}else{ctrl.getView("LoginView").validation.processValidationResult(args);controller.handleErrorFailures()}}});thisView.showFormSpinner();sf.submit(ctrl.decodeSecureFormCookie)},onFailure:function(){controller.handleErrorFailures()}})};Controller.prototype.handleLoginFormUsernameBlur=function(e){this.getView("LoginView").validation.validate("blur",{id:css_id_loginForm_username,onFailure:controller.handleErrorFailures,onSuccess:function(){controller.handleErrorSuccess(css_id_loginForm_username)}})};Controller.prototype.handleLoginFormPasswordBlur=function(e){this.getView("LoginView").validation.validate("blur",{id:css_id_loginForm_password,onFailure:controller.handleErrorFailures,onSuccess:function(){controller.handleErrorSuccess(css_id_loginForm_password)}})};Controller.prototype.handleOpenHelpDrawer=function(e){if(e){e.preventDefault()}var self=this;glow.net.get("/users/help.js",{onLoad:function(response){panel.getDrawer().update(["<div>",response.text(),"</div>"].join("")).open({onComplete:function(){self.scrollToEventLinkTarget(e)}})}})};Controller.prototype.handleOpenTermsDrawer=function(e){var self=this;if(e){e.preventDefault()}glow.net.get("/users/register/terms.js",{onLoad:function(response){panel.getDrawer().update(["<div>",response.text(),"</div>"].join("")).open({onComplete:function(){self.scrollToEventLinkTarget(e)}})}})};Controller.prototype.handleCloseDrawer=function(e){if(e){e.preventDefault()}panel.getDrawer().close()};Controller.prototype.handleShowDrawer=function(e){if(e){e.preventDefault()}panel.getDrawer().show()};Controller.prototype.handleHideDrawer=function(e){if(e){e.preventDefault()}panel.getDrawer().hide()};Controller.prototype.handleErrorFailures=function(){$("form.id-form .error").each(function(i){var element=$(this),hint=element.get(".hint"),context=element.get("input, select").filter(function(i){return $(this).attr("type")!="hidden"});context.each(function(){userfeedback.hide("hint",$(this).attr("id"))});userfeedback.error(hint.text(),context).show()})};Controller.prototype.handleErrorSuccess=function(key){userfeedback.hide("error",key)};Controller.prototype.removeAllErrors=function(){userfeedback.hideAll();userfeedback.flushRegister()};view.View=function(controller){this.controller=controller;this.loaded=false;userfeedback.hideAll()};view.View.prototype.show=function(){controller.removeAllErrors();if(panelState=="closed"){mask=(typeof mask=="undefined")?(new glow.widgets.Mask()):mask;var status=$(css_element_status)}else{controller.currentView.validation.stopAll()}if(typeof (panel)=="undefined"){panel=new idPanel(glow.dom.create("<p></p>"),{closeOnMaskClick:false,width:"355px",theme:"identity",mask:mask});if(glow.env.ie>5){$("div.glow111-panel-preload").css("display","none")}}var self=this;var onDrawerReady=function(){var prevHeight=panel.container.get(css_element_panelContent).height();panel.hideContent();if(panelState!="open"){panel.container.get(css_element_panel).css("width","100px").parent().css("width","100px").get([".",css_class_panelContent].join("")).css("height","65px")}else{panel.container.get(css_element_panelContent).css("height",prevHeight)}self.showSpinner();panel.container.addClass(css_class_panelAnimating);if(!self.loaded||self.config.useViewCache===false){identity.status.showSpinner();if(!self.loaded){panelState="loading";glow.net.get(self.configUrl,{onLoad:function(r){self.config=r.json();self.show_pt2()},onError:function(){window.location="/users/"},timeout:6000})}else{self.show_pt2()}}else{self.show_pt3()}};if(panel.hasDrawer()){panel.getDrawer().close({onComplete:onDrawerReady})}else{onDrawerReady()}};view.View.prototype.show_pt2=function(){if(!this.loaded||this.config.useViewCache===false){panelState="loading";var self=this;glow.net.get([this.config.contentUrl,"?callback={callback}"].join(""),{onLoad:function(data){self.config.content=data.text();self.config.saveState="";identity.status.hideSpinner();self.show_pt3()}})}else{this.show_pt3()}};view.View.prototype.show_pt3=function(){panel.showContent();if(!this.loaded||this.config.useViewCache===false){this.loaded=true}if(this.controller.currentView){this.controller.currentView.removeListeners()}var newContent;if(this.config.saveState!==""){newContent=glow.dom.create(this.config.saveState);this.config.saveState=""}else{newContent=glow.dom.create(this.config.content)}var labels=newContent.get("label");labels.each(function(){if($(this).get("span.hint").length===0){$(this).append('<span class="hint"><span class="t"></span><span class="b"></span></span>')}});var self=this;panel.showWith(newContent,{width:this.config.width,callback:function(){panel.container.removeClass(css_class_panelAnimating);self.hideSpinner();self.show_pt4()}})};view.View.prototype.show_pt4=function(){if(!this.validation&&this.config.validation){this.validation=new identity.forms.Validator({onFailure:controller.handleErrorFailures});this.validation.parseChecksObject(this.config.validation)}panel.show();this.eventListenerIds=[];this.addEvents();this.controller.currentView=this;panel.newpanel=false;identity.app.fixLayout();panel.setPosition();if(glow.env.ie&&glow.env.ie<=7){panel.content.get("div.c").css("zoom",1)}panelState="open";var self=this;setTimeout(function(){self.sendFocus()},50)};view.View.prototype.hide=function(e){if(e){e.preventDefault()}if(panelState=="open"){panelState="close_anim";panel.container.addClass(css_class_panelAnimating);panel.newpanel=true;if(controller.currentView.validation){controller.currentView.validation.stopAll()}controller.handleHideDrawer();controller.removeAllErrors();this.removeListeners();var self=this;panel.hide();panelState="closed"}};view.View.prototype.sendFocus=function(){var focusElement=$(this.config.focusId);if(focusElement.length){focusElement[0].focus()}};view.View.prototype.removeListeners=function(){for(var eid in this.eventListenerIds){glow.events.removeListener(this.eventListenerIds[eid])}};view.View.prototype.saveState=function(){panel.body.get("input, select, textarea").each(function(){var formItem=glow.dom.get(this);var itemType=formItem.attr("type");if(itemType=="text"||itemType=="password"){formItem.attr("value",formItem.val())}else{if(itemType=="checkbox"||itemType=="radio"){if(typeof (formItem.val())=="string"){formItem.attr("checked","checked")}else{formItem.removeAttr("checked")}}else{if(formItem.is("select")){formItem.get("option").each(function(){var thisOpt=$(this);if(formItem.val()==thisOpt.attr("value")){formItem.attr("selected","selected")}else{formItem.removeAttr("selected")}})}else{if(formItem.is("textarea")){formItem.html(formItem.val())}}}}});var panelHeader=panel.header.html();var panelBody=panel.body.html();var panelFooter=panel.footer.html();if(glow.env.ie){panelHeader=panelHeader.replace(/__[^"\s]+"[^"\s]+"/g,"");panelBody=panelBody.replace(/__[^"\s]+"[^"\s]+"/g,"");panelFooter=panelFooter.replace(/__[^"\s]+"[^"\s]+"/g,"")}this.config.saveState=[panelHeader,panelBody,panelFooter].join("")};view.View.prototype.deleteState=function(){this.config.saveState=""};view.View.prototype.emptyCache=function(){this.deleteState();this.config.content="";this.loaded=false};view.View.prototype.showSpinner=function(){panel.container.get(css_element_panelContent).addClass(css_class_panelSpinner)};view.View.prototype.hideSpinner=function(){panel.container.get(css_element_panelContent).removeClass(css_class_panelSpinner)};view.View.prototype.showFormSpinner=function(){var submitButton=$(css_element_buttonSubmit);var spinner=submitButton.parent().append(['<span class="',css_class_formSpinner,'">Working...</span>'].join("")).get([".",css_class_formSpinner].join(""));spinner.css("top",[(((submitButton.offset().top-submitButton.parent().offset().top)+(submitButton.height()/2))-(spinner.height()/2)),"px"].join("")).css("left",[((submitButton.offset().left-submitButton.parent().offset().left-spinner.width())-5),"px"].join(""))};view.View.prototype.hideFormSpinner=function(){$(css_element_formSpinner).remove()};view.LoginView=function(){arguments.callee.base.apply(this,arguments);this.configUrl="/users/configuration/login.js"};view.LoginView.prototype.addEvents=function(){this.eventListenerIds[this.eventListenerIds.length]=addListener($(css_element_registerLink_span),"mouseover",function(e){$(this).addClass("hovered")});this.eventListenerIds[this.eventListenerIds.length]=addListener($(css_element_registerLink_span),"mouseout",function(e){$(this).removeClass("hovered")});this.eventListenerIds[this.eventListenerIds.length]=addListener($(css_element_cancelButton),"click",this.hide,this);this.eventListenerIds[this.eventListenerIds.length]=addListener($(css_element_helpLink),"click",controller.handleOpenHelpDrawer,controller);this.eventListenerIds[this.eventListenerIds.length]=addListener($(css_element_loginForm),"submit",controller.handleLoginFormSubmit,controller);this.eventListenerIds[this.eventListenerIds.length]=addListener($(css_element_loginForm_username),"blur",controller.handleLoginFormUsernameBlur,controller);this.eventListenerIds[this.eventListenerIds.length]=addListener($(css_element_loginForm_password),"blur",controller.handleLoginFormPasswordBlur,controller);var targets=[css_element_loginForm_username,css_element_loginForm_password,css_element_loginForm_remember_me];for(var i=0;i<targets.length;i++){userfeedback.setPanel(targets[i],this.eventListenerIds)}};view.LockedView=function(){arguments.callee.base.apply(this,arguments);this.configUrl="/users/configuration/locked.js"};view.LockedView.prototype.addEvents=function(){this.eventListenerIds[this.eventListenerIds.length]=addListener($(css_element_cancelButton),"click",this.hide,this)};view.SessionExpiredView=function(){arguments.callee.base.apply(this,arguments);this.configUrl="/users/configuration/sessionexpired.js"};view.SessionExpiredView.prototype.addEvents=function(){this.eventListenerIds[this.eventListenerIds.length]=addListener($(css_element_buttonSubmit),"click",this.hide,this)};var Userfeedback=function(){this.panels={};this.panelAnims={};this.template='<div class="panel-id-hint"><div class="{type}"><div class="infoPanel-pointerT"></div><div class="infoPanel-pointerL"></div><div class="infoPanel-pointerR"></div><div class="panel-hd"></div><div class="panel-bd"></div><div class="panel-ft"></div><div class="infoPanel-pointerB"></div></div></div>';this.dummyTemplate='<div style="position:absolute;top:0px;left:0px;visibility:hidden" id="id-height-calculate" class="panel-id-hint glowNoMask blq-rst"><div class="light"><div class="infoPanel-pointerT"></div><div class="infoPanel-pointerL"></div><div class="infoPanel-pointerR"></div><div class="panel-hd"></div><div class="panel-bd"><p></p></div><div class="panel-ft"></div><div class="infoPanel-pointerB"></div></div></div>'};Userfeedback.prototype.hint=function(content,context){return this.create(content,context,"hint")};Userfeedback.prototype.error=function(content,context){return this.create(content,context,"error")};Userfeedback.prototype.setPanel=function(target,eventListenerIds){var context=$(target),hint=context.parent().get(".hint"),infopanel,hintText;if(!hint.length||hint.text()==""){var altHint=context.parent().parent().get("legend .hint");if(altHint.length&&altHint.text()!=""){hintText=altHint.text()}else{hintText=""}}else{hintText=hint.text()}if(hintText){infopanel=userfeedback.hint(hintText,context);eventListenerIds[eventListenerIds.length]=addListener(context,"focus",function(){if(!context.parent().parent().hasClass("error")&&!(context.parent().parent().is("fieldset")&&context.parent().parent().parent().hasClass("error"))){userfeedback.updateOffset(infopanel,context);infopanel.setPosition();if(this.panelAnims.hint&&this.panelAnims.hint[context.attr("id")]){try{this.panelAnims.hint[context.attr("id")].stop();this.panelAnims.hint[context.attr("id")].goTo(0)}catch(e){}}infopanel.show()}},this);eventListenerIds[eventListenerIds.length]=addListener(context,"blur",function(){userfeedback.hide("hint",context.attr("id"))},this)}};Userfeedback.prototype.create=function(text,context,type){context=$(context);this.panels[type]=this.panels[type]||{};if(this.panels[type][context.attr("id")]&&this.panels[type][context.attr("id")].body.get("p").text()==text){return this.panels[type][context.attr("id")]}else{var panelKey=context.attr("id");var containerCheck=context.parent().parent();if(containerCheck[0].nodeName.toLowerCase()=="fieldset"){context=containerCheck.parent()}else{if(containerCheck.hasClass("checkbox")){context=containerCheck}}if(this.panels[type][panelKey]){this.panels[type][panelKey].hide();this.panels[type][panelKey].container.remove()}this.panels[type][panelKey]=new idInfoPanel(glow.dom.create(["<p>",text,"</p>"].join("")),{context:context,returnTo:"",pointerPosition:"l",focusOnShow:false,modal:false,template:glow.lang.interpolate(this.template,{type:type}),pointerRegisters:{l:{x:0,y:(this.calculateHeight(text)/2)}}});this.panels[type][panelKey].content.addClass("blq-rst");this.updateOffset(this.panels[type][panelKey],context);return this.panels[type][panelKey]}};Userfeedback.prototype.updateOffset=function(infopanel,context){var offsetX,offsetY=14,containerCheck;containerCheck=context.parent().parent();if(containerCheck[0].nodeName.toLowerCase()=="fieldset"){offsetY=context.offset().top-containerCheck.parent().offset().top;context=containerCheck.parent();offsetX=context[0].offsetWidth-2}else{if(containerCheck.hasClass("checkbox")){offsetY=context.offset().top-containerCheck.offset().top;context=containerCheck;offsetX=context[0].offsetWidth-7}else{offsetX=context[0].offsetWidth+4}}infopanel.setOffsetInContext({x:offsetX,y:offsetY})};Userfeedback.prototype.calculateHeight=function(text){var containerElement=$("#id-height-calculate");if(!containerElement[0]){containerElement=glow.dom.create(this.dummyTemplate).appendTo($("body"))}containerElement.get(".panel-bd p").text(text);return containerElement.height()};Userfeedback.prototype.setPosition=function(){for(type in this.panels){for(hint in this.panels[type]){this.panels[type][hint].setPosition()}}};Userfeedback.prototype.hide=function(type,key){if(this.panels[type]&&this.panels[type][key]){var element=this.panels[type][key];this.panelAnims[type]=this.panelAnims[type]||{};this.panelAnims[type][key]=glow.anim.css(element.container,0.3,{opacity:{to:0}});glow.events.addListener(this.panelAnims[type][key],"complete",function(){element.hide();element.container.css("opacity",1)});this.panelAnims[type][key].start();return true}else{return false}};Userfeedback.prototype.hideAll=function(){for(type in this.panels){for(hint in this.panels[type]){this.hide(type,hint)}}};Userfeedback.prototype.flushRegister=function(){this.panels={}};userfeedback=new Userfeedback();r.parseStatusLinks=function(){if(statusListenerIds.login){removeListener(statusListenerIds.login)}var login=$(css_element_status_loginLink);if(login.length){statusListenerIds.login=addListener(login,"click",function(e){e.preventDefault();if(panelState=="closed"&&!identity.status.hasChanged()){controller.handleLogin(e)}},controller)}};r.extendViews=function(){glow.lang.extend(view.LoginView,view.View,view.LoginView.prototype);glow.lang.extend(view.LockedView,view.View,view.LockedView.prototype);glow.lang.extend(view.SessionExpiredView,view.View,view.SessionExpiredView.prototype)};r.getPanel=function(){return panel};r.showPanel=function(panelToShow,e){switch(panelToShow){case"login":controller.getView("LoginView").show();break;default:break}};r.getCSS=function(css){if(css.substr(0,3)=="css"&&eval(["typeof(",css,")=='string'"].join(""))){return eval(css)}else{return false}};r.fixLayout=function(){if(glow.env.webkit){$("#identity_date_of_birth-container legend").css("margin-left","0").css("margin-right","0")}};r.init=function(g){glow=g;$=glow.dom.get;addListener=glow.events.addListener;removeListener=glow.events.removeListener;var self=this;glow.net.get("/users/configuration/error_codes.json",{onLoad:function(r){response=r.json();if(response.codes){self.lang=response.codes}},onError:function(r){}});this.extendViews();controller=new Controller();addListener(identity,"login",function(e){controller.getView("LoginView").hideFormSpinner();controller.currentView.hide()});glow.events.addKeyListener("ESC","press",function(){if(panel.isVisible()){controller.currentView.hide()}});identity.app.parseStatusLinks()};return r}();