/**
 * RokSlideshow Module
 *
 * @package		Joomla
 * @subpackage	RokSlideshow Module
 * @copyright Copyright (C) 2009 RocketTheme. All rights reserved.
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see RT-LICENSE.php
 * @author RocketTheme, LLC
 *
 */

var Slideshow=new Class({
    version:'4.1',
    options:{
        captions:true,
        externals:false,
        showTitleCaption:true,
        classes:['prev','next','active'],
        duration:[2000,4000],
        path:'/',
        navigation:false,
        pan:100,
        resize:true,
        thumbnailre:[/\./,'t.'],
        transition:Fx.Transitions.Sine.easeInOut,
        type:'fade',
        zoom:50,
        loadingDiv:true,
        removeDiv:true
    },
    styles:{
        caps:{
            div:{
                opacity:0,
                position:'absolute',
                width:'100%',
                margin:0,
                left:0,
                bottom:0,
                height:40,
                background:'#333',
                color:'#fff',
                textIndent:0
            },
            h2:{
                color:'red',
                padding:0,
                fontSize:'80%',
                margin:0,
                margin:'2px 5px',
                fontWeight:'bold'
            },
            p:{
                padding:0,
                fontSize:'60%',
                margin:'2px 5px',
                color:'#eee'
            }
        }
    },
    initialize:function(el,options){
        this.setOptions($merge({
            onClick:this.onClick.bind(this)
        },options));
        if(!this.options.images)return;
        this.options.pan=this.mask(this.options.pan);
        this.options.zoom=this.mask(this.options.zoom);
        this.el=$(el).empty();
        this.caps={
            div:new Element('div',{
                styles:this.styles.caps.div,
                'class':'captionDiv'
            }),
            h2:new Element('h2',{
                styles:this.styles.caps.h2,
                'class':'captionTitle'
            }),
            p:new Element('p',{
                styles:this.styles.caps.p,
                'class':'captionDescription'
            })
        };
        this.fx=[];
        var trash=new ImageLoader(this.el,this.options.images,{
            loadingDiv:this.options.loadingDiv,
            onComplete:this.start.bind(this),
            path:this.options.path,
            removeDiv:this.options.removeDiv
        })
    },
    start:function(){
        this.imgs=$A(arguments);this.a=this.imgs[0].clone().set({
            styles:{
                display:'block',
                position:'absolute',
                left:0,
                'top':0,
                zIndex:1
            }
        }).injectInside(this.el);var obj=this.a.getCoordinates();this.height=this.options.height||obj.height;this.width=this.options.width||obj.width;this.el.setStyles({
            display:'block',
            position:'relative',
            width:this.width
        });this.el.empty();this.el.adopt((new Element('div',{
            styles:{
                display:'block',
                overflow:'hidden',
                position:'relative',
                width:this.width,
                height:this.height
            }
        })).adopt(this.a));this.resize(this.a,obj);
        this.b=this.a.clone().setStyle('opacity',0).injectAfter(this.a);
        var url1=this.options.images[0].url;
        var url2=this.options.images[1].url;
        var a=new Element('a',{
            href:this.options.images[0].url,
            'styles':{
                'position':'absolute',
                'top':0,
                'left':0,
                'opacity':1,
                'z-index':1,
                'width':this.width,
                'height':this.height,
                'display':'block'
            }
        }).inject(this.a,'before').adopt(this.a);
        var b=new Element('a',{
            href:this.options.images[0].url,
            'styles':{
                'position':'absolute',
                'top':0,
                'left':0,
                'opacity':1,
                'z-index':2,
                'width':this.width,
                'height':this.height,
                'display':'block'
            }
        }).inject(a,'after').adopt(this.b);
        a.setStyle('cursor',(url1!='#'&&url1!='')?'pointer':'default');
        b.setStyle('cursor',(url2!='#'&&url2!='')?'pointer':'default');
        if(this.options.externals){
            a.setProperty('target','_blank');b.setProperty('target','_blank')
        };
        this.mask=this.a.clone().setStyle('opacity',1).injectAfter(b);
        this.mask.set({
            styles:{
                zIndex:99999
            },
            src:'/images/stories/ayonikImages/slideshow_mask.png'
        })

        this.timer=[0,0];
        this.navigation();
        this.direction='left';
        this.curr=[0,0];
        $(document.body).adopt(new Element('div',{
            id:'hiddenDIV',
            styles:{
                visibility:'hidden',
                height:0,
                width:0,
                overflow:'hidden',
                opacity:0
            }
        }));this.loader=this.imgs[0];$('hiddenDIV').adopt(this.loader);this.load()
    },
    load:function(fast){
        if($time()>this.timer[0]){
            this.img=(this.curr[1]%2)?this.b:this.a;this.img.setStyles({
                opacity:0,
                width:'auto',
                height:'auto',
                zIndex:this.curr[1]
            });this.img.getParent().setStyle('z-index',this.curr[1]);var url=this.options.images[this.curr[0]].url;this.img.setStyle('cursor',(url!='#'&&url!='')?'pointer':'default');if(url!='#'&&url!=''){
                this.img.getParent().setProperty('href',url)
            }this.img.setProperties({
                src:this.loader.src,
                title:this.loader.title,
                alt:this.loader.alt
            });this.resize(this.img,this.loader);if(fast){
                this.img.setStyles({
                    top:0,
                    left:0,
                    opacity:1
                });this.captions();this.loaded();return
            }this.captions();this[this.options.type.test(/push|wipe/)?'swipe':'kens']();this.loaded()
        }else{
            this.timeout=this.load.delay(100,this)
        }
    },
    loaded:function(){
        if(this.ul){
            this.ul.getElements('a[name]').each(function(a,i){
                a[(i===this.curr[0]?'add':'remove')+'Class'](this.options.classes[2])
            },this)
        }this.direction='left';this.curr[0]=(this.curr[0]+1)%this.imgs.length;this.curr[1]++;this.timer[0]=$time()+this.options.duration[1]+(this.options.type.test(/fade|push|wipe/)?this.options.duration[0]:0);this.timer[1]=$time()+this.options.duration[0];this.loader=this.imgs[this.curr[0]];$('hiddenDIV').empty().adopt(this.loader);this.load()
    },
    kens:function(){
        this.img.setStyles({
            bottom:'auto',
            right:'auto',
            left:'auto',
            top:'auto'
        });var arr=['left top','right top','left bottom','right bottom'].getRandom().split(' ');arr.each(function(p){
            this.img.setStyle(p,0)
        },this);var zoom=this.options.type.test(/zoom|combo/)?this.zoom():{};var pan=this.options.type.test(/pan|combo/)?this.pan(arr):{};this.fx.push(this.img.effect('opacity',{
            duration:this.options.duration[0]
        }).start(1));this.fx.push(this.img.effects({
            duration:this.options.duration[0]+this.options.duration[1]
        }).start($merge(zoom,pan)))
    },
    zoom:function(){
        var n=Math.max(this.width/this.loader.width,this.height/this.loader.height);var z=(this.options.zoom==='rand')?Math.random()+1:(this.options.zoom.toInt()/100.0)+1;var eh=Math.ceil(this.loader.height*n);var ew=Math.ceil(this.loader.width*n);var sh=(eh*z).toInt();var sw=(ew*z).toInt();return{
            height:[sh,eh],
            width:[sw,ew]
        }
    },
    pan:function(arr){
        var ex=this.width-this.img.width,ey=this.height-this.img.height;var p=this.options.pan==='rand'?Math.random():Math.abs((this.options.pan.toInt()/100)-1);var sx=(ex*p).toInt(),sy=(ey*p).toInt();var x=this.width/this.loader.width>this.height/this.loader.height;var obj={};obj[arr[x?1:0]]=x?[sy,ey]:[sx,ex];return obj
    },
    swipe:function(){
        var arr,p0={},p1={},x;this.img.setStyles({
            left:'auto',
            right:'auto',
            opacity:1
        }).setStyle(this.direction,this.width);if(this.options.type==='wipe'){
            this.fx.push(this.img.effect(this.direction,{
                duration:this.options.duration[0],
                transition:this.options.transition
            }).start(0))
        }else{
            arr=[this.img,this.curr[1]%2?this.a:this.b];p0[this.direction]=[this.width,0];p1[this.direction]=[0,-this.width];if(arr[1].getStyle(this.direction)==='auto'){
                x=this.width-arr[1].getStyle('width').toInt();arr[1].setStyle(this.direction,x);arr[1].setStyle(this.direction==='left'?'right':'left','auto');p1[this.direction][0]=x
            }this.fx.push(new Fx.Elements(arr,{
                duration:this.options.duration[0],
                transition:this.options.transition
            }).start({
                '0':p0,
                '1':p1
            }))
        }
    },
    captions:function(img){
        img=img||this.img;if(!this.options.captions||(!img.title&&!img.alt))return;this.el.getFirst().adopt(this.caps.div.adopt(this.caps.h2,this.caps.p));(function(){
            if(this.options.showTitleCaption)this.caps.h2.setHTML(img.title);this.caps.p.setHTML(img.alt);this.caps.div.setStyle('zIndex',img.getStyle('zIndex')*2||10);this.capsHeight=this.capsHeight||this.options.captionHeight||this.caps.div.offsetHeight;var fx=this.caps.div.effects().set({
                'height':0
            }).start({
                opacity:0.7,
                height:this.capsHeight
            });(function(){
                fx.start({
                    opacity:0,
                    height:0
                })
            }).delay(1.00*(this.options.duration[1]-this.options.duration[0]))
        }).delay(0.75*(this.options.duration[0]),this)
    },
    navigation:function(){
        if(!this.options.navigation)return;var i,j,atemp;var fast=this.options.navigation.test(/fast/);this.ul=new Element('ul');var li=new Element('li'),a=new Element('a');if(this.options.navigation.test(/arrows/)){
            this.ul.adopt(li.clone().adopt(a.clone().addClass(this.options.classes[0]).addEvent('click',function(){
                if(fast||$time()>this.timer[1]){
                    $clear(this.timeout);if(fast){
                        this.fx.each(function(fx){
                            fx.time=0;fx.options.duration=0;fx.stop(true)
                        })
                    }this.direction='right';this.curr[0]=(this.curr[0]<2)?this.imgs.length-(2-this.curr[0]):this.curr[0]-2;this.timer=[0];this.loader=this.imgs[this.curr[0]];this.load(fast)
                }
            }.bind(this))))
        }if(this.options.navigation.test(/arrows\+|thumbnails/)){
            for(i=0,j=this.imgs.length;i<j;i++){
                atemp=a.clone().setProperty('name',i);if(this.options.navigation.test(/thumbnails/))atemp.setStyle('background-image','url('+this.imgs[i].src+')');if(i===0)a.className=this.options.classes[2];atemp.onclick=function(i){
                    if(fast||$time()>this.timer[1]){
                        $clear(this.timeout);if(fast){
                            this.fx.each(function(fx){
                                fx.time=0;fx.options.duration=0;fx.stop(true)
                            })
                        }this.direction=(i<this.curr[0]||this.curr[0]===0)?'right':'left';this.curr[0]=i;this.timer=[0];this.loader=this.imgs[this.curr[0]];this.load(fast)
                    }
                }.pass(i,this);this.ul.adopt(li.clone().adopt(atemp))
            }
        }if(this.options.navigation.test(/arrows/)){
            this.ul.adopt(li.clone().adopt(a.clone().addClass(this.options.classes[1]).addEvent('click',function(){
                if(fast||$time()>this.timer[1]){
                    $clear(this.timeout);if(fast){
                        this.fx.each(function(fx){
                            fx.time=0;fx.options.duration=0;fx.stop(true)
                        })
                    }this.timer=[0];this.load(fast)
                }
            }.bind(this))))
        }this.ul.injectInside(this.el)
    },
    onClick:function(e){
        e=new Event(e).stop();var cur=this.curr[1]%this.imgs.length;var index=this.curr[1]==0?1:cur==0?this.imgs.length:cur;var url=this.options.images[index-1].url;if(url=='#'||url=='')return;window.location.href=url
    },
    mask:function(val,set,lower,higher){
        if(val!='rand'){
            val=val.toInt();val=isNaN(val)||val<lower||val>higher?set:val
        }return val
    },
    resize:function(obj,to){
        var n;if(this.options.resize){
            n=Math.max(this.width/to.width,this.height/to.height);obj.setStyles({
                height:Math.ceil(to.height*n),
                width:Math.ceil(to.width*n)
            })
        }
    }
});Slideshow.implement(new Options);var ImageLoader=new Class({
    version:'.5-olmo-ver',
    options:{
        loadingDiv:false,
        loadingPrefix:'loading images: ',
        loadingSuffix:'',
        path:'',
        removeDiv:true
    },
    initialize:function(container,sources,options){
        this.setOptions(options);this.loadingDiv=(this.options.loadingDiv)?$(container):false;this.images=[];this.index=0;this.total=sources.length;if(this.loadingDiv){
            this.loadingText=new Element('div').injectInside(this.loadingDiv);this.progressBar=new Element('div',{
                styles:{
                    width:100,
                    padding:1,
                    margin:'5px auto',
                    textAlign:'left',
                    overflow:'hidden',
                    border:'solid 1px #333'
                }
            }).adopt(new Element('div',{
                styles:{
                    width:'0%',
                    height:10,
                    backgroundColor:'#333'
                }
            })).injectInside(this.loadingDiv)
        }this.loadImages.delay(200,this,[sources])
    },
    reset:function(){
        this.index=0;if(this.loadingDiv){
            this.progressBar.getFirst().setStyle('width','0%');this.loadingText.setHTML(this.options.loadingPrefix)
        }
    },
    loadImages:function(sources){
        var self=this;this.reset();this.images=[];this.sources=sources;this.timer=setInterval(this.loadProgress.bind(this),100);for(var i=0,j=sources.length;i<j;i++){
            this.images[i]=new Asset.image((this.sources[i].path||this.options.path)+this.sources[i].file,{
                title:self.sources[i].title,
                alt:self.sources[i].desc,
                'onload':function(){
                    self.index++
                },
                'onerror':function(){
                    self.index++;self.images.splice(i,1)
                },
                'onabort':function(){
                    self.index++;self.images.splice(i,1)
                }
            })
        }
    },
    loadProgress:function(){
        if(this.loadingDiv){
            this.loadingText.setHTML(this.options.loadingPrefix+this.index+'/'+this.total+this.options.loadingSuffix);this.progressBar.getFirst().setStyle('width',(!this.total?0:this.index.toInt()*100/this.total)+'%')
        }if(this.index>=this.total){
            this.loadComplete()
        }
    },
    loadComplete:function(){
        $clear(this.timer);if(this.loadingDiv){
            this.loadingText.setHTML('Loading Complete');if(this.options.removeDiv){
                this.loadingText.empty().remove();this.progressBar.empty().remove()
            }
        }this.fireEvent('onComplete',this.images)
    },
    cancel:function(){
        $clear(this.timer)
    }
});ImageLoader.implement(new Events,new Options);