/*
*	Silk Toolbox v0.01 (alpha)
*	
*	adamnfish 2008
*	http://silk.adamnfish.com/
*	
*	MIT style licence
*/


var Silk=function(){};(function(){this.version=0.02;this.namespace="Silk";this.modules=["Slideshow","Slideshow","Scroll","LinkChopper","Font"];this.installed=function(module){return this.modules.some(function(present){return module.toLowerCase()==present.toLowerCase();});};var RExp_sel=/^\.|^#|^.+\s.+$/;var setControls=function(fns,object){fns.each(function(fn){var els=object.options[fn];switch($type(object.options[fn])){case"string":els=els.test(RExp_sel)?$$(els):$(els);case"element":els.addEvent('click',function(e){e.stop();object[fn]();});}});};Number.implement({mod:function(base){var num=this%base;return num<0?num+base:num;}});Array.implement({shuffle:function(){for(var i=1,j=this.length;i<j;i++){var nextKey=$random(0,j-i);this.push(this[nextKey]);this.splice(nextKey,1);}
return this;},permute:function(order){for(var i=0,j=this.length;i<j;i++){this[(i+order).mod(j)+j]=this[i];}
this.splice(0,j);return this;}});this.box=(function(){}).call(this.box);var fontCount=0;this.Font=new Class({Implements:[Options],options:{useCookie:true,start:1,fx:{duration:200,link:"cancel"},cookie:{path:'/',duration:365}},initialize:function(els,sizes,options){this.setOptions(options);this.els=$$($(els)||els);this.sizes=sizes.sort(function(a,b){return a-b;});if(this.options.useCookie){this.instance=fontCount++;this.cookie=new Cookie('Silk.Font.'+this.instance,this.options.cookie);this.current=(this.cookie.read()||this.options.start).toInt();}
this.fx=new Fx.Elements(this.els,this.options.fx).set(this.makeObj());setControls(["increase","decrease","max","min"],this);},change:function(by){this.current=(this.current+by).limit(0,this.sizes.length-1);this.fx.start(this.makeObj());if(this.options.useCookie){this.cookie.write(this.current);}},increase:function(){this.change(1);},decrease:function(){this.change(-1);},max:function(){this.change(this.sizes.length-this.current-1);},min:function(){this.change(-this.current);},set:function(value){this.change(value-this.current);},makeObj:function(){var o={};this.els.each(function(el,i){o[i]={fontSize:this.sizes[this.current]};}.bind(this));return o;}});this.Scroll=new Class({Extends:Fx.Scroll,initialize:function(options,context){context=context||document;var doc=context.getDocument(),win=context.getWindow();this.parent(doc,options);this.links=this.options.links?$$(this.options.links):$$(doc.links);var location=win.location.href.match(/^[^#]*/)[0]+'#';this.links.each(function(link){if(link.href.indexOf(location)!=0){return;}
var anchor=link.href.substr(location.length);if(anchor&&$(anchor)){this.useLink(link,anchor);}},this);},useLink:function(link,anchor){link.addEvent('click',function(event){event.stop();this.anchor=anchor;this.toElement(anchor);var anchor_el=$(anchor);anchor_el.id+='_';window.setTimeout(function(){anchor_el.id=anchor;},0);}.bind(this));}});this.Slideshow=new Class({Implements:[Events,Options],options:{displayDuration:15,transitionDuration:2000,nextChoice:'randomOrder',onTransitionStart:$empty,onTransitionEnd:$empty},initialize:function(el,paths,options){this.setOptions(options);this.current=$(el);if((this.z=this.current.getStyle('z-index'))=='auto'){this.current.setStyle('z-index',this.z=2);}
this.imgs=this.options.nextChoice=='randomOrder'?paths.shuffle():paths;this.count=0;this.styles=this.current.style.cssText;this.attrs=this.current.getProperties('id','class','alt','title','width','height');this.start();},start:function(){this.timer=this.change.bind(this).delay(this.options.displayDuration*1000);this.loaded=this.waiting=0;var nextKey=this.options.nextChoice=='random'?$random(0,this.imgs.length):this.count;this.next=new Asset.image(this.imgs[nextKey%this.imgs.length],{onload:function(){this.next.setProperties(this.attrs);this.next.style.cssText=this.styles;this.loaded=1;if(this.waiting){this.change();}}.bind(this)});this.count+=1;},stop:function(){this.timer=$clear(this.timer);},change:function(){if(this.loaded){this.current.set('tween',{duration:this.options.transitionDuration,onComplete:function(){this.next.setStyle('z-index',this.z);this.current.destroy();this.current=this.next;this.fireEvent('onTransitionEnd',10);this.start();}.bind(this)});this.next.setStyle('z-index',this.z-1);this.next.injectAfter(this.current);this.current.tween('opacity',0);this.fireEvent('onTransitionStart',10);}else{this.waiting=1;}}});this.Sideshow=new Class({Implements:Options,options:{speed:5,imgHeight:134,loadingSrc:'',loadingHTML:'Loading<br/>',clickLocation:false},initialize:function(el,imgs,options){this.setOptions(options);this.el=$(el).setStyle('overflow','hidden').empty();if(this.el.getStyle('position')=='static'){this.el.setStyle('position','relative');}
this.container=new Element('div',{styles:{textAlign:'center'}}).inject(this.el).set('html',this.options.loadingHTML);if(this.options.clickLocation){this.container.addEvent('click',function(){document.location=this.options.clickLocation;}.bind(this));this.container.setStyle('cursor','pointer');}
if(this.options.loadingSrc){this.loading=new Element('img',{src:this.options.loadingSrc,alt:'loading',styles:{margin:'10px auto'}}).injectInside(this.container);}
this.paths=imgs.shuffle();this.widths=[];this.totalWidth=0;this.pictureSet=new Element('div',{styles:{position:'absolute',top:'0px',left:'0px',height:this.options.imgHeight}});this.imgs=new Asset.images(this.paths,{onComplete:function(){this.imgs.each(function(img,i){this.widths[i]=Math.floor(this.imgs[i].width*(this.options.imgHeight/this.imgs[i].height));this.imgs[i].setStyles({position:'absolute','top':'0px','left':this.totalWidth,height:this.options.imgHeight,width:this.widths[i],'msInterpolationMode':'bicubic'});this.totalWidth+=this.widths[i];},this);$$(this.imgs).injectInside(this.pictureSet);this.pictureSet.setStyle('width',this.totalWidth);this.slides=[this.pictureSet.clone().injectInside(this.container),this.pictureSet.clone().setStyle('left',this.totalWidth).injectInside(this.container)];this.duration=15*this.totalWidth*(10/this.options.speed);this.effect=new Fx.Elements($$(this.slides),{duration:this.duration,transition:Fx.Transitions.linear,onComplete:function(){this.start();}.bind(this)});this.pauseEffect={};this.start();}.bind(this)});setControls(["pause"],this);},start:function(){this.effect.start({'0':{left:[0,-this.totalWidth]},'1':{left:[this.totalWidth,0]}});},pause:function(){if(this.effect.timer){this.effect.cancel();}else if(this.pauseEffect.timer){this.pauseEffect.cancel();}else{this.restart();}},restart:function(){var position=this.slides[1].getStyle('left').toInt();var duration=this.duration*(position/this.totalWidth);this.pauseEffect=new Fx.Elements($$(this.slides),{duration:duration,transition:Fx.Transitions.linear,onComplete:function(){this.start();}.bind(this)}).start({'0':{left:[position-this.totalWidth,-this.totalWidth]},'1':{left:[position,0]}});}});var callbacks=['onFlowPlayerReady','onClipDone','onClipChanged','onLoadBegin','onStreamNotFound','onPlay','onStop','onPause','onResume','onCuePoint','onStartBuffering','onBufferFull','onBufferFlush','onMetaData'];var stacks={};var player_register=1;callbacks.each(function(callback){stacks[callback]=[];window[callback]=function(){var args=arguments;stacks[callback].each(function(fn){fn.run(args);});};});var addCallback=this.addCallback=function(callback,fn,bind){stacks[callback].push(fn);};var addCallbacks=this.addCallbacks=function(obj){for(callback in obj){stacks[callback].push(obj[callback]);}};this.Player=new Class({Implements:[Options,Events],flashVars:{type:'application/x-shockwave-flash',pluginspage:'http://www.adobe.com/go/getflashplayer',quality:'high',allowscriptaccess:'always',allowfullscreen:false,width:320,height:240,bgcolor:'#000000'},options:{playerVars:{autoPlay:false,loop:false,autoRewind:true,controlsOverVideo:'ease',initialScale:'scale',autoBuffering:true,useNativeFullScreen:true,usePlayOverlay:true,showMenu:false,showPlayButton:true,controlBarGloss:'low',showFullScreenButton:false,menuItems:'[1, 1, 1, 1, 0, 0, 0]'},controls:false,thumb:false,onFail:$empty,onFlowPlayerReady:$empty,onClipDone:$empty,onClipChanged:$empty,onLoadBegin:$empty,onStreamNotFound:$empty,onPlay:$empty,onStop:$empty,onPause:$empty,onResume:$empty,onCuePoint:$empty,onBufferFull:$empty,onBufferFlush:$empty,onMetaData:$empty,onStartPlaying:$empty,onStopPlaying:$empty},initialize:function(container,flashVars,playlist,options){this.container=$(container);this.current=0;this.ready=false;this.playing=false;this.stack=[];this.playlist=[];flashVars=$type(flashVars)=='string'?{src:flashVars}:flashVars;this.flashVars=$merge(this.flashVars,flashVars);this.flashVars.onFail=this.options.onFail;this.setOptions(options);this.playerVars=this.options.playerVars;this.playerId=player_register++;if(this.options.controls){this.createControls(this.options.controls);}
this.thumb=this.options.thumb||this.playerVars.splashImageFile;if(this.playerVars.videoFile){this.playlist.push({url:this.playerVars.videoFile});if(this.playerVars.splashFileImage){this.playlist[0].thumb=this.playerVars.splashFileImage;}}
if(playlist){this.makePlaylist(playlist);}
delete this.playerVars.splashImageFile;delete this.playerVars.videoFile;var check_onStartPlaying=(function(clip){if(clip.playerId==this.playerId){this.playing=true;if(this.ready&&this.api.getIsPlaying()){this.fireEvent('startPlaying',clip);}}}).bind(this);var check_onStopPlaying=(function(clip){if(clip.playerId==this.playerId){this.playing=false;this.fireEvent('stopPlaying',clip);}}).bind(this);addCallbacks({onFlowPlayerReady:function(){(function(){if(this.api.getVersion){this.fireEvent('flowPlayerReady');if(this.stack){this.stack.each(function(fn){fn();});this.stack=[];}
this.api.setPlayerId(this.playerId);this.ready=true;}}).delay(300,this);}.bind(this),onPlay:check_onStartPlaying,onResume:check_onStartPlaying,onClipDone:check_onStopPlaying,onClipChanged:check_onStopPlaying,onPause:check_onStopPlaying});callbacks.each(function(callback){if(callback!="onFlowPlayerReady"){addCallback(callback,function(clip){if(clip.playerId==this.playerId){this.fireEvent(Events.removeOn(callback),clip);}}.bind(this));}},this);this.injectVideo(0);},injectVideo:function(i){this.ready=false;this.playing=false;var playlist=[];var videoFile=this.playlist[i].url;var thumbFile=this.playlist[i].thumb||this.thumb;if(thumbFile){playlist.push({url:thumbFile,overlayId:'play'});}
playlist.push({url:videoFile});this.api=this.embed(this.container,this.flashVars,{config:$merge(this.playerVars,{playList:playlist})});this.current=i;},embed:function(container,flashVars,config){return flashembed(container,flashVars,config);},makePlaylist:function(target){switch($type(target)){case"object":this.playlist=[target];break;case"array":if(target.setStyle){target.each(this.addLinks,this);}else{this.playlist=target;}
break;case"string":if(target.test(/^\.|^#/)){var links=$$(target);links.each(function(link,i){this.addLink(link,i);}.bind(this));break;}else if(!$(target)){if(target!=this.playerVars.videoFile){this.playlist.push({url:target});}
break;}
case"element":var list=$(target);if(list.get('tag')=='ul'){var lis=list.getElements('li');lis.each(function(li,i){var a=li.getElement('a.play')||li.getElement('a');if(a){this.addLink(a,i);}}.bind(this));break;}else{list.getElements('a').each(this.addLink,this);}
default:return false;}},addLink:function(link,i){this.playlist.push({url:link.href});if(this.thumb){this.playlist[this.playlist.length-1].thumb=this.thumb;}
var j=this.playlist.length-1;$(link).addEvent('click',function(e){e.stop();this.play(j);}.bind(this));},createControls:function(controls){var valid=['play','pause','toggle','forward','backwards','stop','prev','next'];$H(controls).each(function(control,name){if(valid.contains(name)&&$(control)){$(control).addEvent('click',function(e){e.stop();this[name]();}.bind(this));}}.bind(this));},remote:function(method,args){if(this.ready){return this.api[method](args)||this;}else{this.stack.push(this.remote.pass([method,args],this));return false;}},play:function(i){if($chk(i)&&i!=this.current){this.injectVideo(i);this.stack.push(this.play.bind(this));}else{this.remote('DoPlay');}
return this;},pause:function(){this.remote('Pause');return this;},toggle:function(){if(this.ready){if(this.playing){this.pause();}else{this.play();}}else{this.stack.push(function(){this.toggle();}.bind(this));}
return this;},seek:function(time){var duration=this.remote('getDuration');return $type(duration)=="number"?this.remote('Seek',time.limit(0,duration.floor())):false;},move:function(inc,dir){inc=inc||5;var time=this.remote('getTime');return $chk(time)?this.seek(time.toFloat()+(inc*dir)):false;},forward:function(inc){this.move(inc,1);return this;},backwards:function(inc){this.move(inc,-1);return this;},stop:function(){this.remote('DoStop');return this;},next:function(){this.fireEvent('stopPlaying');this.play((this.current+1).mod(this.playlist.length));},prev:function(){this.fireEvent('stopPlaying');this.play((this.current-1).mod(this.playlist.length));}});Element.implement({chopLinks:function(chopLength,threshold){chopLength=chopLength||8;threshold=threshold||30;var wrapSymbol=(Browser.Engine.webkit||Browser.Engine.presto)?"&#8203;":"<wbr />";this.getElements('a').each(function(link){var newLink=link.clone(false,true).cloneEvents(link);newLink.href=link.href;$each(link.childNodes,function(node){switch($type(node)){case"textnode":node.nodeValue.split(/\s+/).each(function(word,i){if(i){newLink.appendText("\n");}
if(word.length>threshold){for(var j=0,k=(word.length/chopLength).floor();j<=k;j++){var append=word.substr((j*chopLength),chopLength);if(append){newLink.appendText(append).innerHTML+=wrapSymbol;}}}else if(word.length){newLink.appendText(word);}});break;case"element":newLink.grab(node);}});newLink.replaces(link);link.destroy();});return this;}});}).apply(Silk);