/*
 * Commons
 * Copyright(c), CBC Radio 3 - Phil Rabin.
 */


CBCR3.namespace("CBCR3.Commons.Controls");CBCR3.Commons.Controls.TinyMceCreator=Class.create({defaultText:"",hasClicked:false,initialize:function()
{if(!tinyMCE)
throw new Error("TinyMCE is not defined, please include the tiny mce plugin");},createEditor:function(textareaId,settings,defaultText)
{this.defaultText=defaultText;tinyMCE.settings=settings;tinyMCE.execCommand('mceAddControl',false,textareaId);},onInit:function(instance)
{$$(".mceToolbar").each(function(item){item.descendants().each(function(desc){desc.setAttribute("tabIndex","-1");});});instance.onActivate.add(this.onActivate.bind(this));},onSetupContent:function(editorId,body,doc)
{},onChange:function(instance)
{},onActivate:function(instance)
{}});

CBCR3.namespace("CBCR3.Commons.Controls");CBCR3.Commons.Controls.TwitterBox=Class.create({serviceMethod:null,container:null,initialize:function(options)
{this.serviceMethod=options.serviceMethod;this.container=$(options.container);},load:function()
{this.serviceMethod(this.onSuccess.bind(this),this.onFailure.bind(this));},onSuccess:function(response)
{this.updateStatus(response.Text,"Posted "+response.Date);},onFailure:function(response)
{this.updateStatus("Our Twitter feed is currently not available. Click here to view the CBC Radio 3 Twitter page","");},updateStatus:function(text,date)
{this.container.down(".tweetHeadline").update(text);this.container.down(".tweetDate").update(date);}});

CBCR3.namespace("CBCR3.Commons.LoginTasks");CBCR3.namespace("CBCR3.Commons.Controls");CBCR3.namespace("CBCR3.Commons.Controls.Events");CBCR3.Commons.Controls.Events={forgotPassword:"forgotPassword"};var loginPanelInstance;CBCR3.Commons.LoginTasks.launchLogin=function(message,options)
{if(loginPanelInstance==null)
loginPanelInstance=new CBCR3.Commons.Controls.LoginPanel(options);loginPanelInstance.setUserMessage(message);loginPanelInstance.open();loginPanelInstance.addEventListener(CBCR3.Commons.Controls.Events.forgotPassword,function(event){loginPanelInstance.close();forgotPassword();});}
CBCR3.Commons.Controls.LoginPanel=Class.create(CBCR3.Commons.EventDispatcher,{isOpen:false,panel:null,userMessage:"",options:{},usernameInput:null,passwordInput:null,modal:null,initialize:function($super,options)
{$super();this.options.loginUrl=options.loginUrl;this.options.returnUrl=options.returnUrl;this.options.signupUrl=options.signupUrl;},setUserMessage:function(userMessage)
{this.userMessage=userMessage;},open:function()
{if(this.modal!=null&&this.modal.isOpen)
return;this.panel=new Element("div",{className:"loginPanel"});$(document.body).insert({top:this.panel});this.panel.update(this.getTemplate().evaluate({userMessage:this.userMessage,action:CBCR3.Application.Config.applicationPath+this.options.loginUrl,returnUrl:this.options.returnUrl,signupUrl:CBCR3.Application.Config.applicationPath+this.options.signupUrl}));this.modal=new Control.Modal(this.panel,{overlayOpacity:0.75,className:'modalWindow',fade:false});this.modal.open();this.panel.down("#loginPanel_forgotPassword").observe("click",this.forgotPassword_Click.bind(this));this.panel.down("#loginPanel_close").observe("click",this.closePanel_Click.bind(this));this.panel.down("#loginPanel_login").observe("click",this.loginButton_Click.bind(this));this.usernameInput=this.panel.down("#loginPanel_username");this.usernameInput.observe("keypress",this.input_KeyPress.bind(this));this.usernameInput.focus();this.passwordInput=this.panel.down("#loginPanel_password");this.passwordInput.observe("keypress",this.input_KeyPress.bind(this));},closePanel_Click:function(event)
{this.close();},loginButton_Click:function(event)
{this.performLogin();},forgotPassword_Click:function(event)
{Event.stop(event);this.dispatchEvent(CBCR3.Commons.Controls.Events.forgotPassword);},input_KeyPress:function(event)
{if(event.keyCode==13){Event.stop(event);this.performLogin();}
if(event.keyCode==27){Event.stop(event);this.close();}},performLogin:function()
{this.panel.down("form").submit();},close:function()
{this.modal.close();this.panel==null;},getTemplate:function()
{return new Template("<div class=\"headerInfo\">"+"<div class=\"headerMessage\">You need to be logged in to do that</div>"+"<button type=\"button\" id=\"loginPanel_close\" class=\"imageButton loginClose\">Close</button>"+"</div>"+"<h3 class=\"thinHeader loginHeader\">Members Log In</h3>"+"<form method=\"post\" action=\"#{action}\">"+"<fieldset class=\"loginPanelForm\">"+"<div class=\"userMessage\">#{userMessage}</div>"+"<a href=\"#{signupUrl}\" class=\"label\">I don't have a cbc radio 3 membership yet.</a><br />"+"<div>"+"<label class=\"label\" for=\"loginPanel_username\">Screen name or email address:</label>"+"<input type=\"text\" class=\"textfield loginPanel_username\" name=\"username\" id=\"loginPanel_username\" tabindex=\"10\" />"+"</div>"+"<br class=\"clear\" />"+"<div>"+"<label class=\"label\" for=\"loginPanel_password\">Password:</label>"+"<input type=\"password\" class=\"textfield loginPanel_password\" name=\"password\" id=\"loginPanel_password\" tabindex=\"11\" />"+"</div>"+"<br class=\"clear\" />"+"<div class=\"defaultButton loginSubmitRight\" style=\"height:30px;\">"+"<button type=\"button\" id=\"loginPanel_login\" class=\"submitButton\" tabindex=\"12\">LOG IN</button>"+"</div>"+"<div class=\"loginSubmitLeft\">"+"<a href=\"#\" id=\"loginPanel_forgotPassword\">Forgotten your sign-up info?</a>"+"</div>"+"<br class=\"clear\" />"+"<input type=\"hidden\" name=\"flag\" value=\"true\" />"+"<input type=\"hidden\" name=\"returnUrl\" value=\"#{returnUrl}\" />"+"</fieldset>"+"</form>");}});

CBCR3.namespace("CBCR3.Commons.Controls");CBCR3.Commons.Controls.NameInputLookup=Class.create({serviceMethod:null,button:null,inputBox:null,statusBox:null,defaultText:null,initialize:function(options)
{this.serviceMethod=options.serviceMethod;this.inputBox=$(options.inputBox);this.button=$(options.trigger);this.button.observe("click",this.onClick.bind(this));this.statusBox=$(options.statusBox);this.defaultText=options.defaultText||"";},onClick:function(event)
{var inputName=this.inputBox.getValue();Event.stop(event);if(inputName.blank()||inputName==this.defaultText){this.statusBox.hide();return;}
this.serviceMethod(this.inputBox.getValue(),this.onSuccess.bind(this),this.onFailure.bind(this),this.inputBox.getValue());},onSuccess:function(response,context)
{if(response)
this.updateStatus(context+" is totally available! Oh, and here's a tip:","Make sure you've spelled it the way you want it, or THE ERROR WILL REVERBERATE THROUGH TIME, HURTING YOUR MIND IN FOUR DIMENSIONS.","available");else
this.updateStatus(context+" is not available","Check the spelling carefully or try choose another name.","notAvailable");},onFailure:function(response)
{alert("Something went wrong, please try refreshing the page");},updateStatus:function(message,tip,cssClass)
{this.statusBox.show();this.statusBox.update(this.getStatusTemplate().evaluate({cssClass:cssClass,message:message,tip:tip}));},getStatusTemplate:function()
{return new Template("<div class='statusMessage #{cssClass}'>#{message}</div>"+"<div class='statusTip'>#{tip}</div>");}});

CBCR3.namespace("CBCR3.Commons.Controls");CBCR3.Commons.Controls.InputPlaceHolder=Class.create({input:null,defaultText:null,options:null,placeHolderColor:"",textColor:"",initialize:function(element,defaultText,options)
{this.input=$(element);this.input.observe("focus",this.input_Focus.bind(this));this.input.observe("blur",this.input_Blur.bind(this));this.options=options||{};this.placeHolderColor=this.options.placeHolderColor||this.input.getStyle("color");this.textColor=this.input.getStyle("color");this.defaultText=defaultText;this.setPrimaryValue();},setOptions:function(options)
{},setPrimaryValue:function()
{if(this.input.value=="")
this.setBlur();},input_Focus:function()
{this.setFocus();},input_Blur:function()
{this.setBlur();},setFocus:function()
{if(this.input.getValue()==this.defaultText)
{this.input.value="";this.input.setStyle({color:this.textColor});}},setBlur:function()
{if(this.input.getValue().blank())
{this.input.value=this.defaultText;this.input.setStyle({color:this.placeHolderColor});}},getValue:function()
{if(!this.hasValue())
return"";return this.input.getValue();},hasValue:function()
{return(this.input.getValue()!=this.defaultText&&!this.input.getValue().blank());},setValue:function(value)
{if(value.empty())
this.input.getValue()=this.defaultText;else
this.input.getValue()=value;},reset:function()
{this.input.value="";this.setBlur();this.input.value=this.defaultText;}});

CBCR3.namespace("CBCR3.Commons.Controls");var forgotPasswordInstance;CBCR3.Commons.PasswordTasks={launchPasswordWindow:function(options)
{if(forgotPasswordInstance==null)
forgotPasswordInstance=new CBCR3.Commons.Controls.ForgotPassword(options.passwordUrl);forgotPasswordInstance.open();},closePasswordWindow:function()
{forgotPasswordInstance.close();}}
CBCR3.Commons.Controls.ForgotPassword=Class.create({modal:null,passwordUrl:"",initialize:function(passwordUrl)
{this.passwordUrl=passwordUrl;},open:function()
{if(this.modal!=null&&this.modal.isOpen)
return;var passwordPageUrl=CBCR3.Application.Config.applicationPath+this.passwordUrl;this.modal=new Control.Modal(passwordPageUrl,{overlayOpacity:0.75,className:'modalWindow',fade:false,width:320,height:210,iframe:true});this.modal.open();},close:function()
{this.modal.close();this.modal.destroy();}});

CBCR3.namespace("CBCR3.Commons.Controls");if(Autocompleter)
Autocompleter.Base.addMethods({markPrevious:function()
{if(this.index>0)this.index--;else this.index=this.entryCount-1;},markNext:function(){if(this.index<this.entryCount-1)this.index++;else this.index=0;},updateChoices:function(choices)
{if(!this.changed&&this.hasFocus){this.update.update(choices);Element.cleanWhitespace(this.update);Element.cleanWhitespace(this.update.down());if(this.update.firstChild&&this.update.down().childNodes){this.entryCount=this.update.down().childNodes.length;for(var i=0;i<this.entryCount;i++){var entry=this.getEntry(i);entry.autocompleteIndex=i;this.addObservers(entry);}}
else{this.entryCount=0;}
this.stopIndicator();this.index=0;if(this.entryCount==1&&this.options.autoSelect){this.selectEntry();this.hide();}
else{this.render();}}}});CBCR3.Commons.Controls.AutoCompleter=Class.create(Autocompleter.Base,{inputBox:null,searchMethod:null,urlTemplate:null,initialize:function(inputBox,updatePanel,options){this.inputBox=$(inputBox);this.inputBox.observe("keypress",this.onInputKeyPress.bind(this));this.searchMethod=options.searchMethod;this.urlTemplate=options.urlTemplate;$(options.trigger).observe("click",this.onSubmit.bind(this));this.baseInitialize(inputBox,updatePanel,{afterUpdateElement:this.onAfterUpdateElement.bind(this),onShow:this.onShow.bind(this),frequency:0.2});},onShow:function(element,update)
{Effect.Appear(update,{duration:0.15});},getUpdatedChoices:function(){this.startIndicator();this.searchMethod(this.element.value,this.onSuccess.bind(this),this.onFailed.bind(this),null);},onSuccess:function(response,context){this.updateChoices(this.createListFrom(response));},createListFrom:function(items)
{var ul=new Element("ul",{className:"alternatingList"});for(var i=0;i<items.length;i++)
ul.appendChild(this.createListItem(items[i],this.getAltClass(i)));return ul;},createListItem:function(item,altClass)
{var li=new Element("li",{className:altClass});li.setStyle({display:"block"});li.update(item);return li;},getAltClass:function(count)
{return(count%2==0)?"":"odd";},onInputKeyPress:function(event)
{if(!this.active&&event.keyCode=="13"){Event.stop(event);this.submitInput();}},onAfterUpdateElement:function(element,selected)
{this.submitInput();},onSubmit:function(event)
{this.submitInput();},submitInput:function()
{window.location.href=new Template(this.urlTemplate).evaluate({name:this.inputBox.getValue()});},onFailed:function(response,context){alert("AutoComplete failed. Please refresh the page and try again.")}});

CBCR3.namespace("CBCR3.Commons.Controls");CBCR3.Commons.Controls.ActionNotifier=Class.create({imageTable:null,initialize:function()
{this.imageTable=new Hash();this.imageTable.set("playlistPlayed","actionNotify_play.gif");this.imageTable.set("favouriteAdded","actionNotify_favourite.gif");},notify:function(type)
{var notifierContainer=new Element("div",{className:"actionNotifier"});var imgSrc=CBCR3.Application.Config.applicationPath+"/images/"+this.imageTable.get(type);notifierContainer.update(this.getTemplate().evaluate({imgSrc:imgSrc}));$(document.body).insert(notifierContainer);new Effect.Fade(notifierContainer,{duration:3.0});},getTemplate:function()
{var markup="<img src='#{imgSrc}' alt='Action' />";return new Template(markup);}});

CBCR3.namespace("CBCR3.Commons.Controls");CBCR3.Commons.Controls.FlashDetector=Class.create({modal:null,panel:null,hideButton:null,cookieName:"flashVersionOverride",initialize:function()
{if(!DetectFlashVer)
alert("can't find adobe flash detection script \n http://www.adobe.com/products/flashplayer/download/detection_kit/");},check:function()
{var reqVersion=CBCR3.Player.Configuration.flashVersion;var hasMinVersionIntalled=DetectFlashVer(reqVersion.major,reqVersion.minor,reqVersion.revision);if(!hasMinVersionIntalled&&!this.hasOverrideCookie())
this.notify();},notify:function()
{this.panel=new Element("div");this.panel.update(this.getTemplate({userVersion:GetSwfVer(),reqVersion:CBCR3.Player.Configuration.flashVersion.full}));this.hideButton=this.panel.down(".overrideLink a");this.hideButton.observe("click",this.onHideButtonClick.bind(this));$(document.body).insert(this.panel);this.modal=new Control.Modal(this.panel,{overlayOpacity:0.75,className:'modalWindow',fade:false});this.modal.open();},hasOverrideCookie:function()
{return CBCR3.Commons.Cookies.getValue(this.cookieName);},setOverrideCookie:function()
{CBCR3.Commons.Cookies.create(this.cookieName,"true",30);},onHideButtonClick:function(event)
{Event.stop(event);this.setOverrideCookie();this.modal.close();},getTemplate:function(variables)
{var markup="<div class='flashDetector'>"+"<div class='errorMessage'>The version of Flash that you are currently using is out of date, or you do not have Flash installed.</div>"+"<div class='versionMessage'>"+"We require at least Flash Player <strong>#{reqVersion}</strong> or higher to listen to our Web Radio streams. "+"Please consider updating Flash to get the best experience possible from Radio 3."+"</div>"+"<div class='flashLink'><a href='http://get.adobe.com/flashplayer/' target='_blank'>GET THE LASTEST VERSION OF FLASH NOW</a></div>"+"<div class='overrideLink'><a href='#'>I don't care, so don't show me this message again.</a></div>"+"</div>";return new Template(markup).evaluate(variables);}});
