/**
 * CrowdQueue application
 *
 * @author Ollie Maitland <ollie@byng-systems.com>
 * @copyright Byng Systems LLP
 * @version 0.3
 */
var Queue=new Class({meta:{name:"CrowdSurge",version:"0.1.0",author:"ollie@byng-systems.com",copyright:"Byng Systems LLP",date:"2008-11-21"},icons:{loader:"/html/admin/images/indicators/loading.gif"}});Queue.implement(ByngApp);Byng.setApp(new Queue);Byng.setTransit(new ByngTransit);window.addEvent("domready",function(){var a=$("queue-input");if($chk(a)&&a.value){Queue.ui.start();Queue.track=new Queue.track({queueId:a.value,queueForm:$("queue-pass")})}if($("queue-status")){Queue.ui.registerStatus($("queue-status"))}if($("queue-opening-time")){Queue.ui.registerOpeningTime($("queue-opening-time"))}if($("queue-url")){setTimeout(function(){window.location=$("queue-url").getAttribute("href")},2000)}});
Queue.ui={heartbeat:10000,pauseCycle:false,unsupported:"Your browser is not recommended for usage on this site and you may experience issues on the queue",held:false,timings:{openingTime:null,accessTime:null,accessOpenDelay:900},queueClosed:false,queueStatus:null,start:function(){if(Browser.Engine.gecko){if([].contains(Browser.Engine.version)){alert(Queue.ui.unsupported)}}if(Browser.Engine.trident){if([5.5].contains(Browser.Engine.version)){alert(Queue.ui.unsupported)}}if($("panes")){Queue.panes=new panes("buttons","panes",{rightOversized:100});$("previous").addEvent("click",Queue.panes.previous.bind(Queue.panes));$("next").addEvent("click",Queue.panes.next.bind(Queue.panes))}if($("pbar")&&$("pbar").hasClass("disabled")==false){Queue.pb=new dwProgressBar({container:$("pbar"),startPercentage:10,speed:2500,boxID:"box",percentageID:"perc",displayID:"text",displayText:true});Queue.pb.set(0)}$$(".tips").each(function(c,b){var d=c.get("title").split("::");c.store("tip:title",d[0]);c.store("tip:text",d[1])});var a=new Tips($$(".tips"),{offsets:{y:19,x:7},showDelay:100,hideDelay:10});Queue.ui.cycle.delay(10000)},registerOpeningTime:function(a){if($type(a)=="element"){var b=parseInt(a.get("value"));Queue.ui.timings.openingTime=new Date(b*1000);Queue.ui.timings.accessTime=new Date((b-Queue.ui.timings.accessOpenDelay)*1000);Queue.ui.pollOpening.delay(this)}},pollOpening:function(){if(Queue.ui.timings.openingTime){var a=new Date();var b=a.getTime();if(b>=Queue.ui.timings.accessTime.getTime()){$$("input").removeClass("disabled").setProperty("disabled",false);Queue.ui.setStatus("This queue is open for you to login")}else{if(Queue.ui.queueClosed==false){$$("input").addClass("disabled").setProperty("disabled",true);Queue.ui.setStatus("This queue opens at "+Queue.ui.timings.openingTime.toLocaleString());Queue.ui.queueClosed=true}Queue.ui.pollOpening.delay(5000,this)}}},registerStatus:function(a){Queue.ui.queueStatus=a},setStatus:function(a,b){if(!Queue.ui.queueStatus){return}Queue.ui.currentStatus=a;Queue.ui.queueStatus.getElement("h1").set("text",a);if(b){Queue.ui.queueStatus.getElement("div").addClass(b)}},cycle:function(){if(Queue.ui.pauseCycle==false){Queue.panes.next.bind(Queue.panes)()}setTimeout(Queue.ui.cycle,Queue.ui.heartbeat)},destroy:function(){window.location="/queue"},setHeld:function(a){if(Queue.ui.held==true&&a==false){Queue.ui.pauseCycle=false;Queue.panes.panes.pop();Queue.panes.recalcWidths();Queue.panes.changeTo(Queue.panes.panes.length,true)}else{if(Queue.ui.held==false&&a==true){Queue.ui.toPane({cls:"queue-held",msg:""})}else{}}Queue.ui.held=a},toPane:function(b){var c=Queue.panes.panes.getLast().clone().set("html",b.msg).addClass(b.cls).removeClass("queue-waiting").injectInside($("content"));var a=new Element("li").set("text","spare");a.injectInside($("buttons"));Queue.panes.buttons.push(a);Queue.panes.panes.push(c);Queue.panes.recalcWidths();Queue.panes.changeTo(Queue.panes.panes.length,true);Queue.ui.pauseCycle=true},dispatch:function(a,b,c){window.parent.location.href=this.queueDispatch.substitute({queueId:a,queueToken:b,queueName:c})},queueDispatch:"https://crowdsurge.com/{queueName}?queueId={queueId}&queueToken={queueToken}"};
Queue.states={ERRORED:"0",JOINED:"1",ACTIVE:"2",JUMPED:"3",DISPATCHED:"4",INVALID_PASS:"5",HELD:"6"};Queue.track=new Class({Implements:[Options,Events],queuePass:null,options:{queueForm:$empty,heartbeat:{lo:2000,hi:8000},timerbeat:1000},counter:0,secs:100,active:true,initialize:function(b){this.setOptions(b);this.addEvent("error",function(e){if($type(e)=="array"){e=e.join("\n")}alert(e)});if($type(this.options.queueForm)=="element"){this.options.queueForm.addEvent("submit",this.registerQueuePass.bind(this)).getElement("#queue-pass-input").addEvent("focus",function(){});if(this.options.queueForm.hasClass("popup")){Queue.ui.pauseCycle=true;var d=new Element("div");this.options.queueForm.injectInside(d);d.inject($("panes"),"before")}try{var a=$("queue-pass-input");if(a.get("value")){this.queuePass=a.get("value")}else{a.focus()}}catch(c){}this.heartbeat.delay(500,this)}},heartbeat:function(){if(!this.request){this.request=new ByngRequest().setUri("/status")}Byng.transit.post({request:this.request,onComplete:this.update.bind(this)},{queuePass:this.queuePass});this.counter++},update:function(a){try{if(this.isActive()==false){return}var f=new ByngXml(a);var b=f.getCode();if(b==0){return Queue.ui.destroy()}var c=f.getParam("status");switch(c){case Queue.states.ERRORED:return Queue.ui.destroy();break;case Queue.states.HELD:return Queue.track.populate(f);break;case Queue.states.ACTIVE:return Queue.track.populate(f);break;case Queue.states.JUMPED:return Queue.track.jumped(f);break;case Queue.states.DISPATCHED:return Queue.track.dispatch(f);break;case Queue.states.INVALID_PASS:this.fireEvent("error",f.getParam("error"));this.queuePass=null;return Queue.track.populate(f);break;default:alert("Unknown state")}}catch(d){alert(d.message)}},populate:function(c){var b=c.getParam("payload");var a=c.getParam("queueStatus");if(b.wait==null){this.secs=null}else{this.secs=parseInt(b.wait)}if(b.progress){this.progress=b.progress}this.updateTime();if(this.counter<10||this.progress>90){setTimeout(this.heartbeat.bind(this),this.options.heartbeat.lo);this.options.timecounter=false}else{setTimeout(this.heartbeat.bind(this),this.options.heartbeat.hi);if(this.options.timecounter==false){setTimeout(this.timebeat.bind(this),this.options.timerbeat);this.options.timecounter=true}}if(a&&(a!=Queue.ui.queueStatus)){this.setStatus(a)}this.options.queueForm.removeClass("loading")},timebeat:function(){if(this.options.timecounter==false){return}this.secs=this.secs-parseInt(this.options.timerbeat/1000);if(this.secs>0){this.updateTime();setTimeout(this.timebeat.bind(this),this.options.timerbeat)}else{this.secs=0}},updateTime:function(){var a="";var b=parseInt(this.secs/60);if(b>1){secs=parseInt(this.secs-(b*60));a+=b+" minute"+(b>1?"s ":" ")}else{secs=this.secs}if($chk(secs)&&$type(secs)!="undefined"){a+=secs+" second"+(secs>0?"s":"")}else{a+="queue paused..."}$("time_remaining").set("text",a);if(this.progress!=null){if(Queue.pb){Queue.pb.set(parseInt(this.progress))}}},jumped:function(e){var b=e.getParam("queuePass");if(b==this.queuePass){var a=new Element("span",{id:"queue-pass-done"});var c=this.options.queueForm.getElement("#queue-pass-submit");a.injectAfter(c);c.setProperty("disabled","disabled");this.options.queueForm.removeClass("loading").addClass("valid");if($("panes").getElement("#queue-pass")){this.options.queueForm.injectAfter($("panes"))}this.setStatus("You have joined the queue");this.queuePass=null}this.populate(e);var d=$("heading");if(d){d.removeClass("hide")}},dispatch:function(c){this.stopQueue();if(Queue.pb){Queue.pb.set(100)}var b=c.getParam("payload");var a=c.getParam("queue");Queue.ui.dispatch(this.options.queueId,b.queue_token,a)},registerQueuePass:function(a){a.stop();$(a.target).addClass("loading");this.queuePass=a.target.getElement("#queue-pass-input").value},stopQueue:function(){this.active=false},startQueue:function(){this.active=true},isActive:function(){return this.active},setStatus:function(a,b){Queue.ui.setStatus(a,b)}});