function CompleteRedirect(){}CompleteRedirect.prototype.handle=function(progress){var url=progress.iframe.contentWindow.location.href;if(url!=""||!(url.startsWith("about:"))){window.location.href=url;}};function CompleteOverlay(){}CompleteOverlay.prototype.handle=function(progress){var progressDocument=progress.iframe.contentDocument;var overlay=Elements.getElementById("overlay");var div=progressDocument.getElementById("complete");if(div==null){var redirect=new CompleteRedirect();redirect.handle(progress);}else{overlay.innerHTML=(new CSSScrubber()).prepareStylesForOverlay(div.innerHTML);Tracking.track(progressDocument);}};function Progress(element,completeHandler){this.element=element;this.completeHandler=completeHandler;this.attachToEvents();this.url="/four-kit/progress.c4";}Progress.prototype.attachToEvents=function(){var formElements=this.element.elements;var url=formElements["form-action"].value;var self=this;this.element.onsubmit=function(){self.createIframe();self.setFormTarget();self.showProgress();Progress.monitorUpload(url);};};Progress.prototype.createIframe=function(){this.iframe=Elements.create('<iframe name="progress" class="progress"></iframe>');Elements.insertBefore(this.element,this.iframe);var self=this;this.iframe.addEventListener("load",function(){self.completeHandler.handle(self);},false);};Progress.prototype.setFormTarget=function(){this.element.setAttribute("target",this.iframe.getAttribute("name"));};Progress.prototype.showProgress=function(){this.overlay=new UrlOverlay(this.url,"small",false);var self=this;this.overlay.setDisplayHandler(function(){self.addFilenames();});this.overlay.setCloseHandler(function(){self.cancel();});this.overlay.show();};Progress.prototype.addFilenames=function(){var filenamesContainer=Elements.getElementById("upload-filenames");if(filenamesContainer!=null){filenamesContainer.innerHTML=this.convertFilesToList();}};Progress.prototype.convertFilesToList=function(){var builder=new StringBuilder();builder.append("<ul>");Array.each(this.element.elements,function(item){if(item.type=="file"){builder.append("<li>").append(Path.extractFilename(item.value)).append("</li>");}});builder.append("</ul>");return builder.toString();};Progress.prototype.cancel=function(){Elements.remove(this.iframe);};Progress.monitorUpload=function(url){window.setTimeout("Progress.checkUploadProgress('"+url+"')",5000);};Progress.checkUploadProgress=function(url){var parameters=new Parameters();parameters.add("decorator","none");parameters.add("resourceReference",url);var request=new RequestMessage("GET","/four-kit/upload/progress.c4");request.asyncSend(parameters,function(responseContent){var responseText=responseContent.getText();Progress.updateUploadProgress(url,responseText);});};Progress.updateUploadProgress=function(url,responseText){var status=Elements.getElementById("upload-status");if(status){var index=responseText.indexOf("/");if(index>0){var uploaded=parseFloat(responseText.substring(0,index));var total=parseFloat(responseText.substring(index+1,responseText.length));var percentage=Math.round(uploaded/total*100);responseText="Upload "+percentage+"% complete";status.innerHTML=responseText;Progress.monitorUpload(url);}else{if(responseText=="Failed"){window.location.reload();}else{status.innerHTML=responseText;}}}};function Overlay(size,displayClose){this.size=size||"small";this.displayClose=typeof (displayClose)=="boolean"?displayClose:true;this.displayHandler=function(){};this.closeHandler=function(){};}Overlay.prototype.show=function(html){this.close();this.hideSelectElementsBehindOverlay();this.createOverlay((new CSSScrubber()).prepareStylesForOverlay(html));this.addClose();this.createOverlaid();this.displayHandler();if(jQuery){jQuery("#advert-top").css({visibility:"hidden"});jQuery("#advert-mpu").css({visibility:"hidden"});jQuery("#advert-skyscraper").css({visibility:"hidden"});}};Overlay.prototype.hideSelectElementsBehindOverlay=function(){};Overlay.prototype.createOverlay=function(html){var overlayHtml=new StringBuilder();overlayHtml.append('<div id="overlay" class="overlay overlay-').append(this.size).append('">');overlayHtml.append('<div id="overlay-head" class="overlay-head" ></div>');overlayHtml.append('<div id="overlay-content" >');overlayHtml.append(html);overlayHtml.append("</div>");this.overlayDiv=Elements.create(overlayHtml.toString());document.body.appendChild(this.overlayDiv);this.overlayDiv.style.marginTop="-"+(this.overlayDiv.clientHeight/2)+"px";};Overlay.prototype.createOverlaid=function(){this.overlaidDiv=Elements.create('<div id="overlaid" class="overlaid"></div>');document.body.appendChild(this.overlaidDiv);this.overlaidDiv.style.height=document.body.scrollHeight;};Overlay.prototype.addClose=function(){if(this.displayClose){var head=Elements.getElementById("overlay-head");var closeLink=Elements.create('<a id="overlay-close" href="">Close</a>');head.appendChild(closeLink);var self=this;closeLink.addEventListener("click",function(event){if(jQuery){jQuery("#advert-top").css({visibility:"visible"});jQuery("#advert-mpu").css({visibility:"visible"});jQuery("#advert-skyscraper").css({visibility:"visible"});}self.close();self.closeHandler();event.preventDefault();},false);}};Overlay.prototype.close=function(){Elements.remove(Elements.getElementById("overlay"));Elements.remove(Elements.getElementById("overlaid"));if(jQuery){jQuery("#advert-mpu").show();}};Overlay.prototype.setDisplayHandler=function(handler){this.displayHandler=handler;};Overlay.prototype.setCloseHandler=function(handler){this.closeHandler=handler;};function OverlayMixins(){}OverlayMixins.setDisplayHandler=function(handler){this.overlay.setDisplayHandler(handler);};OverlayMixins.setCloseHandler=function(handler){this.overlay.setCloseHandler(handler);};OverlayMixins.attachToEvent=function(type){var self=this;this.element.addEventListener(type,function(event){self.show();event.preventDefault();},false);};OverlayMixins.close=function(){this.overlay.close();};function UrlOverlay(url,size,displayClose){this.url=url;this.overlay=new Overlay(size,displayClose);}UrlOverlay.prototype.show=function(){var request=new RequestMessage("get",this.url);var self=this;request.asyncSend(this.getParameters(),function(responseContent){self.overlay.show(responseContent.getText());});};UrlOverlay.prototype.setDisplayHandler=OverlayMixins.setDisplayHandler;UrlOverlay.prototype.setCloseHandler=OverlayMixins.setCloseHandler;UrlOverlay.prototype.getParameters=Parameters.forBody;UrlOverlay.prototype.close=OverlayMixins.close;function LinkOverlay(element,size,displayClose){this.element=element;this.overlay=new UrlOverlay(this.element.href,size,displayClose);this.attachToEvent("click");}LinkOverlay.prototype.show=function(){this.overlay.show();};LinkOverlay.prototype.attachToEvent=OverlayMixins.attachToEvent;LinkOverlay.prototype.getParameters=Parameters.forBody;LinkOverlay.prototype.setDisplayHandler=OverlayMixins.setDisplayHandler;LinkOverlay.prototype.setCloseHandler=OverlayMixins.setCloseHandler;LinkOverlay.prototype.close=OverlayMixins.close;function FormOverlay(element,size,displayClose){this.element=element;this.overlay=new Overlay(size,displayClose);this.attachToAllSubmitButtons();}FormOverlay.prototype.show=function(submit){var params=this.getParameters();params.add(submit.name,submit.value);var form=new Html.Form(this.element,params);var self=this;form.submit(function(responseMessage){self.overlay.show(responseMessage.getText());});};FormOverlay.prototype.attachToAllSubmitButtons=function(){var submits=Array.filter(this.element.elements,function(input){return input.type=="submit";});submits=Elements.fixAll(submits);var self=this;submits.each(function(submit){submit.addEventListener("click",function(event){self.show(submit);event.preventDefault();},false);});};FormOverlay.prototype.getParameters=Parameters.forBody;FormOverlay.prototype.setDisplayHandler=OverlayMixins.setDisplayHandler;FormOverlay.prototype.setCloseHandler=OverlayMixins.setCloseHandler;FormOverlay.prototype.close=OverlayMixins.close;function Include(element,withHead){this.element=element;if(withHead){this.includeHead();}this.include();}Include.prototype.include=function(){var parts=this.element.href.split("#");var url=parts[0];var id=parts[1];var request=new RequestMessage("get",url);var parameters=new Parameters();if(id){parameters.add("decorator","extractor").add("decorator.property-name","div."+id);}else{parameters.add("decorator","body");}parameters.add("success",asRelative(window.location));parameters.add("failure",asRelative(window.location));var self=this;request.asyncSend(parameters,function(responseMessage){if(responseMessage.isSuccess()){var elementText=responseMessage.getText();self.showResponse(elementText);}});};Include.prototype.includeHead=function(){var parts=this.element.href.split("#");var url=parts[0];var request=new RequestMessage("get",url);var parameters=new Parameters();parameters.add("decorator","head");parameters.add("success",asRelative(window.location));parameters.add("failure",asRelative(window.location));request.asyncSend(parameters,function(responseMessage){var elementText=responseMessage.getText();Elements.addToHead(Elements.createFragment(elementText));});};function asRelative(location){var href=location.href;var toRemove=location.protocol+"://"+location.host;return href.substr(toRemove.length-1);}Include.prototype.showResponse=function(html){Elements.replace(this.element,html);Behaviour.reapply();};function Focuser(element){this.element=element;this.errors=[];this.warnings=[];this.infos=[];this.focusElements=[];this.focusFirstElement();}Focuser.prototype.focusFirstElement=function(){var self=this;Elements.forEachTagName(this.element,["*"],function(element){var classes=new ClassName(element);if(element.tabIndex==-1){return ;}if(classes.contains("focusElement")){self.focusElements.add(element);}if(classes.contains("error")){self.errors.add(element);}if(classes.contains("warning")){self.warnings.add(element);}if(classes.contains("info")){self.infos.add(element);}});this.focusFirst(this.focusElements.concat(this.errors.concat(this.warnings).concat(this.infos)));};Focuser.prototype.focusFirst=function(items){for(var i=0;i<items.length;i++){var item=items[i];try{item.focus();break;}catch(e){}}};function InputValidator(element,id){this.element=element;this.id=id;}InputValidator.prototype.validate=function(){var parameters=new Parameters();parameters.add("decorator","extractor").add("decorator.property-name","div."+this.id);var self=this;new Html.Form(this.element.form,parameters).submit(function(responseMessage){self.showResponse(responseMessage);});};InputValidator.prototype.showResponse=function(responseMessage){var elementToReplace=Elements.getElementById(this.id);Elements.replace(elementToReplace,responseMessage.getText());Behaviour.apply();};function FieldValidator(element,id){InputValidator.apply(this,arguments);this.attachToEvent();}FieldValidator.prototype=new InputValidator();FieldValidator.prototype.attachToEvent=function(){var self=this;this.element.onblur=function(){self.validate();};};function ButtonValidator(element,id,label){InputValidator.apply(this,arguments);this.createButton(label);}ButtonValidator.prototype=new InputValidator();ButtonValidator.prototype.createButton=function(label){var button=Elements.create("<input type='button' value='"+label+"'/>");Elements.insertAfter(this.element,button);var self=this;button.onclick=function(){self.validate();};};function ElementDisabler(element,id){this.element=element;this.id=id;if(this.element.checked!=undefined&&!this.element.checked){this.toggleElementsInContainer();}this.attachToEvents();}ElementDisabler.prototype.attachToEvents=function(){var self=this;this.element.addEventListener("click",function(){self.toggleElementsInContainer();},false);};ElementDisabler.prototype.toggleElementsInContainer=function(){var target=Elements.getElementById(this.id);var self=this;Elements.forEachTagName(target,["*"],function(element){self.toggle(element);});};ElementDisabler.prototype.toggle=function(element){if(element.nodeType==Node.ELEMENT_NODE){this.toggleClassName(element);this.toggleDisabled(element);}};ElementDisabler.prototype.toggleDisabled=function(element){if(typeof (element.disabled)=="boolean"){element.disabled=!element.disabled;}};ElementDisabler.prototype.toggleClassName=function(element){var classes=new ClassName(element);if(classes.contains("disabled")){classes.removeClass("disabled");}else{classes.addClass("disabled");}};function LimitTextSize(element,maxCharacters){this.element=element;this.maxCharacters=maxCharacters;this.attachToEvent();}LimitTextSize.prototype.attachToEvent=function(){var self=this;if(this.element.onkeyup){this.nextOnKeyUp=this.element.onkeyup;}this.element.onkeyup=function(){self.checkLimitAndForward();};};LimitTextSize.prototype.checkLimitAndForward=function(){if(this.element.value.length>this.maxCharacters){this.element.value=this.element.value.substring(0,this.maxCharacters);return false;}if(this.nextOnKeyUp){this.nextOnKeyUp();}};function CharacterCounter(element,maxCharacters){this.element=element;this.maxCharacters=maxCharacters;this.targetId="characters-remaining-count"+this.element.getAttribute("id");this.addCharacterCounterDisplay();this.attachToEvent();}CharacterCounter.prototype.addCharacterCounterDisplay=function(){var label=Elements.create('<p class="character_count">(<span id="'+this.targetId+'">'+this.getRemainingCharacters()+"</span> characters left.)</p>   ");Elements.insertBefore(Elements.getElementById("comment-component"),label);};CharacterCounter.prototype.getRemainingCharacters=function(){if(this.element.value.length>this.maxCharacters){this.element.value=this.element.value.substring(0,this.maxCharacters);}return this.maxCharacters-this.element.value.length;};CharacterCounter.prototype.attachToEvent=function(){var self=this;this.element.onkeyup=function(){self.updateDisplay();};};CharacterCounter.prototype.updateDisplay=function(){var target=Elements.getElementById(this.targetId);target.innerHTML=this.getRemainingCharacters();};function TextAreaResizer(element){this.element=element;this.minRows=element.rows;this.maxRows=60;this.updateDisplay();this.attachToEvent();}TextAreaResizer.prototype.attachToEvent=function(){var self=this;this.element.onkeyup=function(){self.updateDisplay();};};TextAreaResizer.prototype.updateDisplay=function(){var lines=this.element.value.split("\n");var rows=0;for(var x=0;x<lines.length;x++){if(lines[x].length>=this.element.cols){rows+=Math.floor(lines[x].length/this.element.cols);}}rows+=lines.length;this.element.rows=Math.min(this.maxRows,Math.max(rows,this.minRows));};function DeleteConfirmationOverlay(element){this.element=element;this.size="small";this.overlay=new LinkOverlay(this.element,this.size,false);}function SendToFriend(element){this.element=element;this.size="large";this.overlay=new LinkOverlay(this.element,this.size);this.setDisplayHandler();}SendToFriend.prototype.setDisplayHandler=function(){var self=this;this.overlay.setDisplayHandler(function(){self.attachToFormOrLink();});};SendToFriend.prototype.attachToFormOrLink=function(){this.attachToForm();this.attachToLink();this.setDisplayHandler();};SendToFriend.prototype.attachToForm=function(){var form=Elements.getElementById("sendToFriendForm");if(form!=null){this.overlay=new FormOverlay(form,this.size);}};SendToFriend.prototype.attachToLink=function(){var shareAgainLink=Elements.getElementById("share-again");if(shareAgainLink!=null){this.overlay=new LinkOverlay(shareAgainLink,this.size);}};function LoginLinkOverLay(element){this.element=element;this.formId="login-overlay";this.size="large";this.targetName="login-overlay-target";this.loginLinkOverlay=new LinkOverlay(element,this.size,true);this.loginLinkOverlay.overlay.getParameters=function(){return Parameters.forBody().add("decorator.overlay","true");};this.attachToOverLay();}LoginLinkOverLay.prototype.getParameters=Parameters.forBody;LoginLinkOverLay.prototype.setDisplayHandler=OverlayMixins.setDisplayHandler;LoginLinkOverLay.prototype.attachToOverLay=function(){var self=this;this.loginLinkOverlay.setDisplayHandler(function(){self.attachToLinkLoginForm();});};LoginLinkOverLay.prototype.attachToLinkLoginForm=function(){this.createTargetIFrame();this.setupForm();};LoginLinkOverLay.prototype.createTargetIFrame=function(){var self=this;var iframe=Elements.create('<iframe name="'+this.targetName+'" ></iframe>');Elements.addToHead(iframe);iframe.addEventListener("load",function(){self.handleResult(iframe);},false);};LoginLinkOverLay.prototype.handleResult=function(iframe){var url=iframe.contentWindow.location.href;if(url!=""&&!(url.startsWith("about:"))){if(url.contains("/login.c4")){this.overlay=new Overlay(this.size);this.overlay.show(iframe.contentDocument.body.innerHTML);this.setupForm();}else{window.location.href=url;}}};LoginLinkOverLay.prototype.setupForm=function(){var form=Elements.getElementById(this.formId);form.appendChild(Elements.create('<input type="hidden" name="decorator" value="none" />'));form.appendChild(Elements.create('<input type="hidden" name="decorator.overlay" value="true" />'));form.setAttribute("target",this.targetName);};function LoginOverlay(element){this.size="large";this.formId="login-overlay";this.targetName="login-overlay-target";if(!(new CookieUser().username)){this.attachToInitalForm(element);}}LoginOverlay.prototype.attachToInitalForm=function(form){this.overlay=new FormOverlay(form,this.size);this.overlay.getParameters=function(){return Parameters.forBody().add("decorator.overlay","true");};var self=this;this.overlay.setDisplayHandler(function(){self.attachToLoginForm();});};LoginOverlay.prototype.attachToLoginForm=function(){this.createTargetIFrame();this.setupForm();};LoginOverlay.prototype.createTargetIFrame=function(){var self=this;var iframe=Elements.create('<iframe name="'+this.targetName+'" ></iframe>');Elements.addToHead(iframe);iframe.addEventListener("load",function(){self.handleResult(iframe);},false);};LoginOverlay.prototype.handleResult=function(iframe){var url=iframe.contentWindow.location.href;if(url!=""&&!(url.startsWith("about:"))){if(url.contains("/login.e4")){this.overlay=new Overlay(this.size);this.overlay.show(iframe.contentDocument.body.innerHTML);this.setupForm();}else{window.location.href=url;}}};LoginOverlay.prototype.setupForm=function(){var form=Elements.getElementById(this.formId);form.appendChild(Elements.create('<input type="hidden" name="decorator" value="none" />'));form.appendChild(Elements.create('<input type="hidden" name="decorator.overlay" value="true" />'));form.setAttribute("target",this.targetName);};function CookieUser(element){this.container=element;this.username=new Cookies().get("DisplayName");this.user_guid=new Cookies().get("UserGuid");}CookieUser.prototype.checkForLogin=function(){if(this.username){this.loggedIn();return ;}this.notLoggedIn();};CookieUser.prototype.extendSession=function(){var expiryTime=new Date();expiryTime.setMinutes(expiryTime.getMinutes()+parseInt(20));var cookieCutter=new Cookies();cookieCutter.set("DisplayName",this.username,null,null);cookieCutter.set("BBUserguid",this.user_guid,null,null);};CookieUser.prototype.notLoggedIn=function(){var outer=document.createElement("div");outer.setAttribute("id","columnA-section10");var divLogin=document.createElement("div");divLogin.className="login";var link1=document.createElement("a");link1.setAttribute("id","logInLink");link1.className="link";link1.setAttribute("href","/four-kit/login.c4?continueUsing=&amp;success=/four-kit/");link1.appendChild(document.createTextNode("Log in"));divLogin.appendChild(link1);outer.appendChild(divLogin);var divRegister=document.createElement("div");divRegister.className="register";var link2=document.createElement("a");link2.className="link";link2.setAttribute("id","registerLink");link2.setAttribute("href","/four-kit/registration/new.c4");link2.appendChild(document.createTextNode("Register"));divRegister.appendChild(link2);outer.appendChild(divRegister);while(this.container.firstChild){this.container.removeChild(this.container.firstChild);}this.container.appendChild(outer);Behaviour.reapply();};CookieUser.prototype.loggedIn=function(){var html='<input id="user.guid" value="'+this.user_guid+'" type="hidden">';html+='<div class="logout">';html+='<div class="logoutLink">';html+='<form id="logout" action="/four-kit/logout.c4" method="post">';html+='<input id="logoutLink" name="logout" value="Log out" type="submit">';html+='<input name="success" value="/four-kit/index.html" id="success" type="hidden">';html+="</form>";html+="</div>";html+="</div>";html+='<div class="logoutusername">';html+='<a href="/four-kit/my/profile.c4" class="view_profile"><span id="viewProfile">'+this.username+"</span></a>";html+"</div>";this.container.innerHTML=html;};function User(){}User.contextRoot=function(){var pathname=window.location.pathname.split("/");return pathname[1];};User.isLoggedIn=function(){var request=new RequestMessage("GET","/"+this.contextRoot()+"/login-status.txt");var response=request.send(new Parameters());return Boolean.parse(response.getText());};function RemoveChallengeEntryField(element){this.element=element;this.attachToEvent();}RemoveChallengeEntryField.prototype.attachToEvent=function(){var self=this;this.element.onclick=function(e){if(confirm("Do you want to delete this field?")){self.updateHiddenRemoveField();new BrowserEvent(e).htmlTarget().form.submit();}};};RemoveChallengeEntryField.prototype.updateHiddenRemoveField=function(){Elements.getElementById("removeFieldIdentity").value=this.element.name;};function CSSScrubber(){}CSSScrubber.prototype.prepareStylesForOverlay=function(innerHtml){html=innerHtml||"";return html.replace(/purple-white-btn/g,"purple-btn").replace(/purple-white-action/g,"purple-action");};function ClickableContainer(targetLink,clickableDomElement){this.targetAnchorDomElement=targetLink;this.clickableDomElement=Elements.fix(clickableDomElement);this.attachEvents();}ClickableContainer.prototype.attachEvents=function(){var self=this;this.clickableDomElement.addEventListener("click",function(e){self.targetAnchorDomElement.click();},false);};