var Flo={version:"0.1"};Flo.Events=Class.create({init:function(a,b){if(!a){throw new Error("An event type is required.");}this.type=a;this.data=b||{};this.target=null;},getTarget:function(){return this.target;},setTarget:function(a){this.target=a;return this;},getType:function(){return this.type;},getData:function(){return this.data;}});Flo.EventDispatcher=Class.create({init:function(){this.events=null;},_hasListener:function(a){if(this.events==undefined){return false;}return(this.events[a]!=null)&&(this.events[a].length>0);},dispatchEvent:function(d){if(this._hasListener(d.getType())){var b=this.events[d.getType()].slice();var e=null;var c=null;if(d.getTarget()==null){d.setTarget(this);}for(var a=0;a<b.length;a++){e=b[a].listener;if(e!=null){b[a].func.apply(e,[d]);}}}return this;},addEventListener:function(a,b){if(this.events==undefined){this.events=new Object();}if(this.events[a]==undefined){this.events[a]=new Array();}this.removeEventListener(a,b);this.events[a].push({listener:this,func:b});return this;},removeEventListener:function(c,d){if(this._hasListener(c)){var b=this.events[c];for(var a=0;a<b.length;a++){if((b[a].listener==this)&&(b[a].func==d)){delete b[a];return;}}}}});Flo.Validator={patterns:{email:/(^[a-z]([a-z_\.]*)@([a-z_\.]*)([.][a-z]{3})$)|(^[a-z]([a-z_\.]*)@([a-z_\.]*)(\.[a-z]{3})(\.[a-z]{2})*$)/i,phone:/^(\(\d{3}\)|\d{3})\s?\d{3}\-?\d{4}$/,numeric:/(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/,integer:/(^-?\d\d*$)/,zipcode:/(^\d{5}$)|(^\d{5}-\d{4}$)/},scenarios:{email:{method:function(a){return Flo.Validator.patterns.email.test(a);},message:"Invalid email addresss. ex. username@domain.com."},phone:{method:function(a){return Flo.Validator.patterns.phone.test(a);},message:"Invalid phone number format. ex. (123) 456-7890."},numeric:{method:function(a){return Flo.Validator.patterns.number.test(a);},message:"The value entered must not contain alpha character."},integer:{method:function(a){return Flo.Validator.patterns.integer.test(a);},message:"The value entered must not contain alpha characters and negative number."},zipcode:{method:function(a){return Flo.Validator.patterns.zipcode.test(a);},message:"Invalid zip code. ex. 78664 or 78664-1234."},nonempty:{method:function(a){a=$.trim(a);return(a==""&&a.length==0);},message:"The value entered must not be empty."}},getDefaultMessage:function(a){try{return this.scenarios[a].message;}catch(b){}return"";},validate:function(b,a){try{return this.scenarios[b].method.apply(this,[a]);}catch(c){}}};Flo.Dialog=Class.create(Flo.EventDispatcher.prototype,{init:function(c,d,b,a){this.sup();this.opened=true;this.yesLabel=b||"Yes";this.noLabel=a||"No";this.append=d||false;this.originalHtml=c;if(c&&!d){this.html=c;}else{this.html=$(this.getHtml());}$.fn.colorbox({html:this.html,open:true,opacity:0.7,overlayClose:false});this.html.find(".confirm").click($.hitch(this,function(f){var e=(f.target.id=="yes")?"flo.event.dialog.confirm_yes":"flo.event.dialog.confirm_no";this.dispatchEvent(new Flo.Events(e));}));$().bind("cbox_closed",$.hitch(this,function(){this.opened=false;this.dispatchEvent(new Flo.Events("flo.event.dialog.close"));}));},addMessage:function(a){var b=$("#colorbox #message");if(b.find("span").length){b.find("span").html(a);}else{b.append("<span>"+a+"</span>");}b.find("span").hide().fadeIn(500);},isOpen:function(){return this.opened;},close:function(){$.fn.colorbox.close();},getHtml:function(){var b="Are you sure you want to continue?";var a='<div class="dialog-content"><p class="confirm">@content@</p><p class="confirm"><button id="yes" class="corner-all confirm">'+this.yesLabel+'</button> <button id="no" class="corner-all confirm">'+this.noLabel+"</button></p><div>";if(this.append){a=a.replace("@content@",this.originalHtml);}else{a=a.replace("@content@",b);}return a;}});Flo.Widget=Class.create(Flo.EventDispatcher.prototype,{init:function(a){this.sup();this.id=null;this.cid=null;this.uid=new Date()*2;this.form=null;this.key=null;this.area=null;this.applyAll=false;this.postData={};this.html="";this.dialog=null;this.createUrl="";this.deleteUrl="";this.editUrl="";this.deleteMessage="";this.eventToDispatch="";this.submitting=false;},setId:function(a){this.id=a;return this;},getId:function(){return this.id;},setKey:function(a){this.key=a;return this;},getKey:function(){return this.key;},setArea:function(a){this.area=a;return this;},getArea:function(){return this.area;},setBaseData:function(b){for(var a in b){this.postData[a]=b[a];}return this;},getUID:function(){return this.uid;},setCreateUrl:function(a){this.createUrl=a;return this;},setDeleteUrl:function(a){this.deleteUrl=a;return this;},setEditUrl:function(a){this.editUrl=a;return this;},setContentId:function(a){this.cid=a;return this;},getContentId:function(){return this.cid;},setApplyAll:function(a){this.applyAll=a;return this;},setDeleteMessage:function(a){this.deleteMessage=a;return this;},addContent:function(a){if(typeof a=="object"){this.html=a;}else{this.html=$(a);}this.html.addClass("layout-item").attr("uid",this.getUID());if(this.html.hasClass("editable")){this.html.append('<div class="buttons"><button class="edit corner-all">edit</button> <button class="delete corner-all">x</button></div>');this.html.find("button.edit").click($.hitch(this,this._getSettings));this.html.find("button.delete").click($.hitch(this,this._confirmDelete));}},addFormHtml:function(a){this.form=new Flo.Form($(a),true,true);this.form.addEventListener("flo.event.form.success",$.hitch(this,this._formSavedHandler));this.form.addEventListener("flo.event.form.failure",$.hitch(this,this._formFailedHandler));this.form.addEventListener("flo.event.form.beforeSubmit",$.hitch(this,this.dispatchEvent));this.dialog=new Flo.Dialog(this.form.getElement());this.dialog.addEventListener("flo.event.dialog.close",$.hitch(this,function(){this.dispatchEvent(new Flo.Events("flo.event.dialog.close",this));}));this.dispatchEvent(new Flo.Events("flo.event.dialog.initialized",this));return this;},getContent:function(){return this.html;},getForm:function(){return this.form.getElement();},create:function(){if(!this.createUrl){throw new Error("A valid create URL is required");return;}this._setPostData();this.eventToDispatch="flo.event.widget.created";this._callService(this.createUrl);return this;},remove:function(){if(!this.deleteUrl){throw new Error("A valid delete URL is required");return;}this._setPostData();this.eventToDispatch="flo.event.widget.deleted";this._callService(this.deleteUrl);},_confirmDelete:function(){this.dialog=new Flo.Dialog(this.deleteMessage,true);this.dialog.addEventListener("flo.event.dialog.confirm_no",function(){this.close();});this.dialog.addEventListener("flo.event.dialog.confirm_yes",$.hitch(this,this.remove));},_getSettings:function(){if(!this.editUrl){throw new Error("A valid edit settings URL is required.");}var a=this;$.get(this.editUrl,{id:this.getId()},function(b){if(b.success){a.addFormHtml(b.data.html);}},"json");},_setPostData:function(){this.postData.key=this.key;this.postData.area=this.area;if(this.id){this.postData.id=this.id;}if(this.cid){this.postData.cid=this.cid;}if(this.applyAll){this.postData.applyAll=true;}},_formSavedHandler:function(b){var a=$(b.data.html);a.addClass("layout-item").attr("uid",this.getUID());this.html.replaceWith(a);this.addContent(a);if(this.dialog){this.dialog.close();}this.dispatchEvent(new Flo.Events("flo.event.widget.saved",b.data));},_formFailedHandler:function(a){this.dispatchEvent(new Flo.Events("flo.event.widget.save_error",a));},_resultHandler:function(a){if(a.success){this.dispatchEvent(new Flo.Events(this.eventToDispatch,a.data));}else{this.dispatchEvent(new Flo.Events("flo.event.failure",a.data));}if(this.dialog!=null&&this.dialog.isOpen()){this.dialog.close();}this.submitting=false;},_callService:function(a){if(!this.submitting){this.submitting=true;$.post(a,this.postData,$.hitch(this,this._resultHandler),"json");}}});Flo.Validation=Class.create({init:function(a){this.form=a;this.elements=this.getRequiredFields();},getRequiredFields:function(){var a=[];this.form.find(":input").each(function(){var b=$(this);if(b.attr("flo:validate")!=undefined){a.push(b);}});return a;},validate:function(){var a=function(c){if(c.attr("flo:message")!=undefined){return c.attr("flo:message");}return Flo.Validator.getDefaultMessage(c.attr("flo:validate"));};var b=[];$.each(this.elements,function(c,d){if(!Flo.Validator.validate(d.attr("flo:validate"),d.val())){b.push({element:d,message:a(d)});}});return b.length==0;}});Flo.ToolBar=Class.create(Flo.EventDispatcher.prototype,{init:function(c,b,a){this.sup();this.toolbar=$("#"+c);this.toolbarHeight=this.toolbar.height();this.layout=b;this.panel=null;this.options=a||{verticalGap:25};this._initToolbar();this._initLayout();},addActionsPanel:function(a){this.panel=a;this.panel.addEventListener("flo.events.panel.progress",$.hitch(this,this._initLayout));this._initLayout();},getElement:function(){return this.toolbar;},hide:function(c){var a=this;var b=function(){a.toolbar.css("height","0");a._initLayout();};if(c){setTimeout($.hitch(this,function(){this.toolbar.fadeOut(500,b);}),1500);}else{this.toolbar.fadeOut(0,b);}return this;},show:function(){this.toolbar.css("height",this.toolbarHeight);this.toolbar.fadeIn(0);this._initLayout();return this;},height:function(){return this.toolbarHeight;},_initToolbar:function(){this.toolbar.find("a").click($.hitch(this,function(c){var b=$(c.target);if(b.attr("flo:action")){var a="flo.event.menu.builder_change";if(b.hasClass("publish")){a="flo.event.menu.publish";}this.dispatchEvent(new Flo.Events(a,{action:b.attr("flo:action")}));return false;}}));},_initLayout:function(){var b=parseFloat(this.toolbar.css("padding-top"))+parseFloat(this.toolbar.css("padding-bottom"));var a=this.panel?this.panel.getHeight():0;this.layout.getContainer().css({paddingTop:this.toolbar.height()+b+a+this.options.verticalGap});}});Flo.ActionsPanel=Class.create(Flo.EventDispatcher.prototype,{init:function(a){this.sup();this.panel=$(this.getHtml());this.toolbar=a;this.toolbar.getElement().after(this.panel);this.toolbar.addActionsPanel(this);this.animateInterval=null;this._bindElements();},addChildPanel:function(a){var a=$(a);this.panel.find(".content ul").append(a);this.panel.find(".content ul #"+a.attr("id")).wrap("<li></li>");this.showChild(a.attr("id"));},contains:function(a){return this.getChild(a).length;},getChild:function(a){return this.panel.find(".content ul li #"+a);},showChild:function(a){this.panel.find(".content ul li").hide();this.getChild(a).parent("li").show();},getHtml:function(){return'<div id="actions-panel" class="show"><div class="content"><ul></ul></div><a id="toggle" class="corner-b"><span>hide</span></a></div>';},getHeight:function(){var a=this.getElement();return parseFloat(a.height())+parseFloat(a.css("marginTop"))+a.find("#toggle").height();},getElement:function(){return $("#actions-panel");},_bindElements:function(){var d=true;var a=this.panel;var b=this;var c=function(){b.animateInterval=setInterval(function(){if(d){clearInterval(b.animateInterval);}b.dispatchEvent(new Flo.Events("flo.events.panel.progress"));},5);};a.find("#toggle").click($.hitch(this,function(e){d=false;if(a.hasClass("show")){a.animate({marginTop:-(a.height())+2},500,null,function(){a.removeClass("show").addClass("hide");a.find("#toggle").text("show");d=true;});}else{a.animate({marginTop:0},500,null,function(){a.removeClass("hide").addClass("show");a.find("#toggle").text("hide");});}c();}));}});Flo.Form=Class.create(Flo.EventDispatcher.prototype,{init:function(a,d,b){this.sup();this.form=a;if(typeof a!="object"){this.form=$("#"+a);}if(!this.form){return;}this.formId=null;this.form.attr("onsubmit","return false;");this.ajax=b||false;this.submitting=false;this.ajaxDataType="json";this.firstFieldFocus=d||false;this.validator=new Flo.Validation(this.form);if(this.firstFieldFocus){try{this.form.find(":input:not(:hidden):first").focus();}catch(c){}}this._bindElements();},setVisible:function(a){if(a){this.form.show();}else{this.form.hide();}},setId:function(a){this.id=a;this.form.attr("flo:id",a);return this;},getId:function(){return this.formId;},serialize:function(){return this.form.serialize();},submit:function(a){this.form.unbind("submit");this.form.submit($.hitch(this.form,a));return this;},validate:function(){return this.validator.validate();},reset:function(){this.form.find(":input").each(function(a,b){b=$(b);if(!(/(image|submit|hidden)/.test(b.attr("type")))){if(b.attr("default")){b.val(b.attr("default"));}else{b.val("");}}if(b.is(":checked")){b.attr("checked","");}});return this;},_bindElements:function(){this.form.submit($.hitch(this,this._formSubmit));},_formSubmit:function(){if(this.validate()){this.dispatchEvent(new Flo.Events("flo.event.form.beforeSubmit"));if(this.ajax){if(!this.submitting){this.submitting=true;$.ajax({url:this.form.attr("action"),data:this.serialize(),type:this.form.attr("method"),dataType:this.ajaxDataType,success:$.hitch(this,function(b,a){if(b.success){this.dispatchEvent(new Flo.Events("flo.event.form.success",b.data));}else{this.dispatchEvent(new Flo.Events("flo.event.form.failure",b.data));}this.submitting=false;}),error:$.hitch(this,function(b,a,c){this.dispatchEvent(new Flo.Events("flo.event.form.error",{status:a,request:b,errorThrown:c}));this.submitting=false;})});}}else{this.form.submit();}return false;}},getElement:function(){return this.form;},setAjaxDataType:function(a){this.ajaxDataType=a;return this;}});Flo.Layout=Class.create(Flo.EventDispatcher.prototype,{init:function(a,b){this.sup();this.container=$("#"+a);this.dropOverClass="area-hover";this.droppableClass="droppable";this.moveableClass="moveable-widget";this.dragPlaceHolder="drag-outline";this.acceptableClass="widget";this.areaOutText="Drag Widgets Here";this.emptySpan='<span class="empty not-moveable-widget">'+this.areaOutText+"</span>";this.widgets={};this.isBuilder=(b==undefined)?true:b;if(this.isBuilder){this.areas=$(".floarea:not(.disabled)");this._initLayout();}},_doOut:function(b,c){var a=$(b.target);a.find("."+this.droppableClass).removeClass(this.dropOverClass);},_doDrop:function(c,d){var a=$(c.target);var b=$(d.draggable);this._doOut(a);this.dispatchEvent(new Flo.Events("flo.event.layout.drop",{key:b.attr("flo:key"),area:a.attr("id")}));},_doOver:function(b,c){var a=$(b.target);a.find("."+this.droppableClass).addClass(this.dropOverClass);},_itemReceived:function(c,d){var a=$(c.target);var b=a.parent(".floarea");a.find(".empty").remove();this._updateWidgetArea(a.find(".layout-item").attr("uid"),b.attr("id"));this._addEmptyElement();},_itemPositionUpdate:function(a,b){this._itemReceived(a,b);this.dispatchEvent(new Flo.Events("flo.event.layout.reorder"));},_updateWidgetArea:function(c,b){for(var e in this.widgets){var d=this.widgets[e].length;for(var a=0;a<d;a++){var f=this.widgets[e][a];if(f.getUID()==c){f.setArea(b);}}}},_itemStartSort:function(b,c){var a=$(c.item);$(c.placeholder).css({height:a.height()});},_itemDragOver:function(b,c){var a=$(b.target);a.find(".empty").empty();},_itemDragOut:function(a,b){this._addEmptyElement();},_addEmptyElement:function(){var a=this;this.areas.each(function(b,c){c=$(c);if(!c.find(".widget-item").length){c.find("."+a.droppableClass).html(a.emptySpan);}});},_widgetDeleted:function(e){var a=this;var f=e.target;this.areas.each(function(g,h){h=$(h);h.find("div[uid="+f.getUID()+"]").remove();});for(var d in this.widgets){var c=this.widgets[d].length;for(var b=0;b<c;b++){if(this.widgets[d][b].getUID()==f.getUID()){this.widgets[d].splice(b,1);break;}}}this._addEmptyElement();},_initLayout:function(){var a=this;this.areas.each(function(b,c){c=$(c);if(!c.children().length){c.html('<div class="'+a.droppableClass+'">'+a.emptySpan+"</div>");}else{c.children().wrapAll('<div class="'+a.droppableClass+'"></div>');}c.droppable({accept:"."+a.acceptableClass,drop:$.hitch(a,a._doDrop),out:$.hitch(a,a._doOut),over:$.hitch(a,a._doOver)});c.find("."+a.droppableClass).sortable({connectWith:"."+a.droppableClass,placeholder:a.dragPlaceHolder,scroll:true,cursor:"move",tolerance:"pointer",cancel:".not-moveable-widget",over:$.hitch(a,a._itemDragOver),out:$.hitch(a,a._itemDragOut),receive:$.hitch(a,a._itemReceived),update:$.hitch(a,a._itemPositionUpdate),start:$.hitch(a,a._itemStartSort)}).disableSelection();});},getContainer:function(){return this.container;},getWidgetByUID:function(b){for(var d in this.widgets){var c=this.widgets[d].length;for(var a=0;a<c;a++){if(this.widgets[d][a].getUID()==b){return this.widgets[d][a];}}}return null;},getPositionData:function(){var a=this;if(this.widgets){var b="";this.areas.each(function(c,d){$(d).find(".widget-item").each(function(e,f){var g=a.getWidgetByUID($(f).attr("uid"));b+='<input name="widget['+g.getId()+'][sort]" value="'+(e+1)+'"/><input name="widget['+g.getId()+'][area]" value="'+d.id+'"/>';});});return $(b).serialize();}return null;},getWidgets:function(){return this.widgets;},registerWidget:function(a){if(a.getArea()==null){throw new Error("This widget must define an area. See Widget::setArea().");return;}if(this.widgets[a.getArea()]==undefined){this.widgets[a.getArea()]=new Array();}this.widgets[a.getArea()].push(a);a.addEventListener("flo.event.widget.deleted",$.hitch(this,this._widgetDeleted));a.addEventListener("flo.event.dialog.initialized",$.hitch(this,this.dispatchEvent));a.addEventListener("flo.event.dialog.close",$.hitch(this,this.dispatchEvent));a.addEventListener("flo.event.form.beforeSubmit",$.hitch(this,this.dispatchEvent));return this;},appendAfterAjax:function(b){var a=this.container.find("#"+b.getArea());var c=a.find("."+this.droppableClass);if(c.find(".empty").length){c.empty();}c.prepend(b.getContent());this.dispatchEvent(new Flo.Events("flo.event.layout.reorder"));return this;}});Flo.Carousel=Class.create(Flo.EventDispatcher.prototype,{init:function(d,b,a){this.sup();this.id=d;this.currentPosition=0;this.moving=false;this.widgets=b;this.parent=null;this.container=$('<div id="'+d+'" class="carousel"><div class="left"><button class="previous"><</button></div><div class="wrapper left"></div><div class="left"><button class="next">></button></div></div>');this.previous=this.container.find("button.previous");this.next=this.container.find("button.next");this.options={itemWidth:150,itemHeight:30,buttonWidth:20,spacing:8,rows:3,columns:4,center:true};this.columnToTurnOff=0;if(a){for(var c in a){this.options[c]=a[c];}}this.totalPositions=Math.ceil(this.getTotalWidgets()/(this.options.rows*this.options.columns));if(this.totalPositions==1){this.next.hide();this.previous.hide();}},create:function(){this._buildItems();this._resize();this._bindElements();this._checkState();},getId:function(){return this.id;},setParent:function(a){this.parent=a;return this;},getWidgetElements:function(){return this.container.find(".widget");},moveNext:function(){if(!this.next.hasClass("disabled")){this.container.find(".wrapper").css("overflow","hidden");this.columnToTurnOff=this.currentPosition;this.currentPosition++;this._moveToPosition();this.container.find(".column:eq("+this.currentPosition+")").show();this.dispatchEvent(new Flo.Events("flo.event.carousel.next"));}},movePrevious:function(){if(!this.previous.hasClass("disabled")){this.container.find(".wrapper").css("overflow","hidden");this.columnToTurnOff=this.currentPosition;this.currentPosition--;this._moveToPosition();this.container.find(".column:eq("+this.currentPosition+")").show();this.dispatchEvent(new Flo.Events("flo.event.carousel.previous"));}},getElement:function(){return this.container;},getTotalWidgets:function(){return this.widgets.length;},getWidgets:function(){return this.widgets;},_checkState:function(){if(this.currentPosition<=0){this.previous.addClass("disabled");}else{this.previous.removeClass("disabled");}if((this.currentPosition+1)>=this.totalPositions){this.next.addClass("disabled");}else{this.next.removeClass("disabled");}this.container.find("button").css({opacity:1,cursor:"pointer"});this.container.find("button.disabled").css({opacity:0.5,cursor:"default"});},_moveToPosition:function(){if(!this.moving){var a=this.container.find(".wrapper");this.moving=true;this.container.find(".column").animate({marginLeft:-(this.currentPosition*a.width())},500,null,$.hitch(this,function(){this.moving=false;this._checkState();a.css("overflow",$.browser.msie?undefined:null);this.container.find(".column:eq("+this.columnToTurnOff+")").hide();this.dispatchEvent(new Flo.Events("flo.event.carousel.move_complete"));}));}},_buildItems:function(){var g=this.getTotalWidgets();var c="";var f=0;for(var b=0;b<g;b++){var e=this.widgets[b];var a=(f%this.options.columns==0&&b>0)?" clear":"";var d=((f+1)%this.options.columns==0&&b>0)?" last":"";if(b%(this.options.columns*this.options.rows)==0){c+='<div class="column">';}c+='<div class="widget'+a+d+'" flo:key="'+e.key+'"><p class="carousel-item">'+e.name+' <a class="small widget-tips" title="'+e.description+'">(i)</a></p></div>';if((b+1)%(this.options.columns*this.options.rows)==0){c+="</div>";}if(b%this.options.columns==0){f=0;}f++;}if(g%(this.options.columns*this.options.rows)>0){c+="</div>";}c+='<div class="clear"></div>';this.container.find(".wrapper").html(c);},_containerWidth:function(){return((this.options.columns-1)*this.options.spacing)+(this.options.columns*this.options.itemWidth);},_containerHeight:function(){return((this.options.rows-1)*this.options.spacing)+(this.options.rows*this.options.itemHeight);},_move:function(){var e=this.container.find(".wrapper");var b=this.container.parent();var c=$(document).width();var a=this._containerWidth()+parseFloat(e.css("marginLeft"))+parseFloat(e.css("marginRight"));var d=parseFloat(this.parent.css("paddingLeft"))+parseFloat(this.parent.css("paddingRight"));this.container.css({position:"relative",left:Math.floor((c-a-(this.options.buttonWidth*2)-d)/2)});},_resize:function(){var a=this;var b=this.container.find(".column");var c=this.container.find(".widget");this.container.find(".wrapper").css({position:"relative",margin:"0 5px",width:this._containerWidth(),height:this._containerHeight()});b.each(function(e,d){$(this).css({width:a._containerWidth(),height:a._containerHeight(),position:"absolute",left:e*a._containerWidth()});if(e!=a.currentPosition){$(this).css("display","none");}});c.css({width:this.options.itemWidth,height:this.options.itemHeight,marginRight:this.options.spacing,marginBottom:this.options.spacing,visibility:"visible"});c.find("p").css({lineHeight:(this.options.itemHeight-2)+"px"});this.container.find(".widget.last").css({marginRight:0});this.container.find("button").css({width:this.options.buttonWidth,height:this._containerHeight()});if(this.options.center){this._move();$(window).resize($.hitch(this,this._move));}},_bindElements:function(){this.next.click($.hitch(this,this.moveNext));this.previous.click($.hitch(this,this.movePrevious));}});Flo.TabManager=Class.create(Flo.EventDispatcher.prototype,{init:function(c,b){this.tab=$("#"+c);this.options={selected:0,tabSpacing:3};if(b!=undefined){for(var a in b){this.options[a]=b[a];}}this.tab.find("ul li").css({marginRight:this.options.tabSpacing});this.tab.find("li a").click($.hitch(this,this._tabClickHandler));this.showTab(this.options.selected);},showTabById:function(a){if($("#tabs-"+a).length){this.tab.find(".tab-content").hide();$("#tabs-"+a).show();this.tab.find("li a").each(function(){var c=$(this);var b=c.attr("href").split("#")[1];if(b=="tabs-"+a){c.parent().addClass("selected");}else{c.parent().removeClass("selected");}});}},showTab:function(b){var a=this;this.tab.find("ul li").each(function(e,f){var d=$(f).find("a");d.attr("index",e);var c=d.attr("href").split("#")[1];var g=$("#"+c);if(e==b){$(f).addClass("selected");g.show();}else{$(f).removeClass("selected");g.hide();}});},_tabClickHandler:function(a){this.showTab($(a.target).attr("index"));return false;}});Flo.PhotoSlider=Class.create(Flo.EventDispatcher.prototype,{init:function(f,e,b){this.slider=$("#"+f);this.options={playDuration:5000,animationSpeed:1500,captionHeight:50,autoHide:true,captionSlideSpeed:600,enableClick:true};if(b){for(var c in b){this.options[c]=b[c];}}this.width=this.slider.parent().width();this.height=this.slider.parent().height();this.slider.after('<div class="caption hoverable"><h5></h5><p class="photo-desc"></p></caption>');this.slider.find("img").addClass("slider-image");this.slider.after('<div class="paginator corner-all hoverable"> <button class="previous corner-all hoverable"><img src="/images/icons/arrow_previous.png" /></button> <button class="pause corner-all hoverable"><img src="/images/icons/pause.png" /></button> <button class="next corner-all hoverable"><img src="/images/icons/arrow_next.png" /></button></div>');this.slider.after('<div class="mousearea hoverable"></div>');this.mousearea=this.slider.parent().find(".mousearea");this.mousearea.css({width:this.width,height:this.height,opacity:0.01});if(this.options.enableClick){this.mousearea.css("cursor","pointer");this.mousearea.click($.hitch(this,function(){var g=this._getImage(this.currentIndex);var h=g.find("a").attr("href");try{window.location=h;}catch(i){console.log("invalid url");}}));}var d=this.slider.parent();var a=this;d.find(".paginator button").click($.hitch(this,this._handlePagination));d.find(".paginator").hover(function(){$(this).css("opacity",0.8);},function(){$(this).css("opacity",0.5);});this.caption=this.slider.parent().find(".caption");this.caption.css("width",this.width);this.data=e;this.interval=null;this.currentIndex=0;this.totalImages=this.slider.find("li img").length;this.animating=false;this.flagClearInterval=false;this.queues=[];this._initSlider();this._startTimer();if(this.options.autoHide){this._initAutoHide();}},moveNext:function(){if(!this.animating){if(this.flagClearInterval){window.clearInterval(this.interval);}var a=this.currentIndex+1;if(this.currentIndex>=(this.totalImages-1)){a=0;}this._animateFade(this.currentIndex,a,true);}else{this.queues.push("next");}return this;},movePrevious:function(){if(!this.animating){if(this.flagClearInterval){window.clearInterval(this.interval);}var a=this.currentIndex-1;if(this.currentIndex==0){a=this.totalImages-1;}this._animateFade(this.currentIndex,a,false);}else{this.queues.push("previous");}return this;},_handlePagination:function(b){var a=$(b.target);if(a.hasClass("previous")){if(this.flagClearInterval){this.flagClearInterval=true;}this.movePrevious();}else{if(a.hasClass("next")){if(this.flagClearInterval){this.flagClearInterval=true;}this.moveNext();}else{if(a.find("img").attr("src").match(/pause/)){a.html('<img src="/images/icons/icon_play.png" />');window.clearInterval(this.interval);}else{a.html('<img src="/images/icons/pause.png" />');this._startTimer();}}}return this;},_initAutoHide:function(){this._bindAutoHide();this.mousearea.hover($.hitch(this,this._showCaption),$.hitch(this,this._bindAutoHide));return this;},_bindAutoHide:function(){setTimeout($.hitch(this,this._hideCaption),2000);return this;},_showCaption:function(){var a=this;this.caption.animate({bottom:0},{queue:false,duration:this.options.captionSlideSpeed});return this;},_hideCaption:function(){var b=this;var a=this.caption.height()+parseInt(this.caption.css("paddingTop"))+parseInt(this.caption.css("paddingBottom"));this.caption.animate({bottom:-a},{queue:false,duration:this.options.captionSlideSpeed});return this;},_setDataByIndex:function(a){var b=this.data[a];this.caption.find("h5").html(b.title);this.caption.find("p.photo-desc").html(b.description);this.dispatchEvent(new Flo.Events("flo.events.slider.changed",b));},_animateFade:function(d,b,c){this.animating=true;this._getImage(d).fadeOut(this.options.animationSpeed);var a=this;this._setDataByIndex(b);this._getImage(b).fadeIn(this.options.animationSpeed,function(){if(c){if(a.currentIndex>=(a.totalImages-1)){a.currentIndex=0;}else{a.currentIndex++;}}else{if(a.currentIndex<=0){a.currentIndex=a.totalImages-1;}else{a.currentIndex--;}}a.animating=false;a.flagClearInterval=false;if(a.queues.length){if(a.queues[0]=="next"){a.moveNext();}else{if(a.queues[0]=="previous"){a.movePrevious();}}a.queues.shift();}});},_startTimer:function(){var a=this;this.interval=window.setInterval($.hitch(this,this.moveNext),this.options.playDuration);return this;},_initSlider:function(){this.slider.find("li").hide();this._getImage(0).show();this._setDataByIndex(this.currentIndex);return this;},_getImage:function(a){return this.slider.find("li:eq("+a+")");}});