var YOOBase = {
    matchHeight: function (elements, min) {
        var max = 0;
        $$(elements).each(function (element, i) {
            var height;
            if (element.offsetHeight) {
                height = element.offsetHeight
            } else if (element.style.pixelHeight) {
                height = element.style.pixelHeight
            }
            max = Math.max(max, height)
        });
        if (min != undefined) {
            max = Math.max(max, min)
        }
        $$(elements).each(function (element, i) {
            var offset = element.getStyle('padding-top').toInt() + element.getStyle('padding-bottom').toInt() + element.getStyle('border-top-width').toInt() + element.getStyle('border-bottom-width').toInt();
            var height = max - offset;
            var style = window.ie6 ? 'height' : 'min-height';
            element.setStyle(style, height + 'px')
        })
    }
};
var YOOMorph = new Class({
    initialize: function (element, enter, leave, enterFx, leaveFx, elementFx) {
        this.setOptions({
            duration: 500,
            transition: Fx.Transitions.expoOut,
            wait: false,
            ignoreClass: ''
        },
        enterFx);
        var options = this.options;
        $$(element).each(function (el, i) {
            var elfx = el;
            if (elementFx) {
                var elms = el.getElementsBySelector(elementFx);
                if (elms.length > 0) {
                    elfx = elms[0]
                }
            }
            var fx = new Fx.Styles(elfx, options);
            if (! ($chk(options.ignoreClass) && el.hasClass(options.ignoreClass))) {
                el.addEvent('mouseenter', function (e) {
                    fx.setOptions(options, enterFx).start(enter)
                });
                el.addEvent('mouseleave', function (e) {
                    fx.setOptions(options, leaveFx).start(leave)
                })
            }
        })
    }
});
YOOMorph.implement(new Options);
var YOOBackgroundFx = new Class({
    initialize: function (options) {
        this.setOptions({
            transition: Fx.Transitions.linear,
            duration: 9000,
            wait: false,
            colors: ['#FFFFFF', '#999999']
        },
        options);
        var body = new Element(document.body);
        var fx = body.effects(this.options);
        var index = 0;
        var colors = this.options.colors;
        var timer = animate.periodical(this.options.duration * 2);
        animate();

        function animate() {
            fx.start({
                'background-color': colors[index]
            });
            if (index + 1 >= colors.length) {
                index = 0
            } else {
                index++
            }
        }
    }
});
YOOBackgroundFx.implement(new Options);
/* end base js */
/* begin accordion menu js */
var YOOAccordionMenu = new Class({
    initialize: function (togglers, elements, options) {
        this.setOptions({
            accordion: 'default',
            onActive: function (tog) {
                tog.addClass('active');
                tog.getFirst().addClass('active')
            },
            onBackground: function (tog) {
                tog.removeClass('active');
                tog.getFirst().removeClass('active')
            }
        },
        options);
        this.togs = togglers;
        this.elms = elements;
        switch (this.options.accordion) {
        case 'slide':
            this.createSlide();
            break;
        default:
            this.createDefault()
        }
    },
    createDefault: function () {
        var options = {};
        if (!$defined(this.options.display) && !$defined(this.options.show)) {
            options = {
                show: -1
            }
        }
        $ES(this.togs).each(function (tog, i) {
            if (tog.hasClass('active')) options = {
                show: i
            }
        }.bind(this));
        var accordionMenu = new Fx.Accordion(this.togs, this.elms, $extend(this.options, options))
    },
    createSlide: function () {
        $ES(this.togs).each(function (tog, i) {
            var span = tog.getElement('span');
            var ul = tog.getElement(this.elms);
            var fx = new Fx.Slide(ul, {
                transition: Fx.Transitions.linear,
                duration: 250
            });
            if (! (tog.hasClass('active') || this.options.display == 'all' || this.options.display == i)) {
                fx.hide()
            }
            span.addEvent('click', function () {
                fx.toggle().chain(function () {
                    tog.toggleClass('active');
                    tog.getFirst().toggleClass('active')
                })
            })
        }.bind(this))
    }
});
YOOAccordionMenu.implement(new Options);
/* end accordion menu js */
/* begin fancy menu js */
var YOOFancyMenu = new Class({
    initialize: function (menu, options) {
        this.setOptions({
            transition: Fx.Transitions.sineInOut,
            duration: 500,
            wait: false,
            onClick: Class.empty,
            opacity: 1,
            mode: 'move',
            slideOffset: 30,
            itemSelector: 'li.level1',
            activeSelector: 'li.active',
            dropdownSelector: 'div.dropdown'
        },
        options);
        this.menu = $(menu);
        this.items = [];
        this.div = [];
        this.current = this.menu.getElement(this.options.activeSelector);
        this.menu.getElements(this.options.itemSelector).each(function (item, i) {
            var leaveevent = item.getElement(this.options.dropdownSelector) ? 'dropdownleave' : 'mouseleave';
            this.createBackground(item, i);
            item.addEvent('click', function (event) {
                this.clickItem(event, item)
            }.bind(this));
            item.addEvent('mouseenter', function () {
                this.mouseenterItem(item, i)
            }.bind(this));
            item.addEvent(leaveevent, function () {
                this.mouseleaveItem(item, i)
            }.bind(this))
        }.bind(this));
        if (this.options.mode == 'move') {
            if (this.current) {
                this.setCurrent(this.current)
            } else {
                var first = this.menu.getElement('li');
                first.addClass('active');
                first.addClass('current');
                this.setCurrent(first)
            }
        }
    },
    createBackground: function (item, i) {
        if (this.options.mode == 'move' && i != 0) return;
        var css = 'fancy ' + 'bg' + (i + 1);
        this.div[i] = new Element('div', {
            'class': 'fancy-1'
        }).adopt(new Element('div', {
            'class': 'fancy-2'
        }).adopt(new Element('div', {
            'class': 'fancy-3'
        })));
        this.div[i].fx = this.div[i].effects(this.options);
        this.items[i] = new Element('div', {
            'class': css
        }).adopt(this.div[i]).injectInside(this.menu);
        this.items[i].fx = this.items[i].effects(this.options)
    },
    setCurrent: function (item) {
        this.items[0].setStyles({
            'left': item.offsetLeft,
            'width': item.offsetWidth,
            'visibility': 'visible',
            'opacity': this.options.opacity
        });
        this.current = item
    },
    clickItem: function (event, item) {
        if (!this.current) this.setCurrent(item);
        this.current = item;
        this.options.onClick(new Event(event), item)
    },
    mouseenterItem: function (item, i) {
        if (item._fancyactive) return;
        item._fancyactive = true;
        switch (this.options.mode) {
        case 'fade':
            this.fadeFx(item, i, true);
            break;
        case 'slide':
            this.slideFx(item, i, true);
            break;
        default:
            this.moveFx(item, 0)
        }
    },
    mouseleaveItem: function (item, i) {
        if (this.options.mode == 'move') item = this.current;
        item._fancyactive = false;
        switch (this.options.mode) {
        case 'fade':
            this.fadeFx(item, i, false);
            break;
        case 'slide':
            this.slideFx(item, i, false);
            break;
        default:
            this.moveFx(item, 0)
        }
    },
    moveFx: function (item, i) {
        if (!this.current) return;
        this.items[i].fx.custom({
            'left': [this.items[i].offsetLeft, item.offsetLeft],
            'width': [this.items[i].offsetWidth, item.offsetWidth]
        })
    },
    fadeFx: function (item, i, show) {
        if (show) {
            this.items[i].fx.setOptions(this.options);
            this.items[i].fx.set({
                'left': item.offsetLeft,
                'width': item.offsetWidth
            });
            this.items[i].fx.custom({
                'opacity': [0, 1]
            })
        } else {
            var dur = this.options.duration * 2;
            this.items[i].fx.setOptions({
                duration: dur
            });
            this.items[i].fx.custom({
                'opacity': [1, 0]
            })
        }
    },
    slideFx: function (item, i, show) {
        var offset = this.options.slideOffset;
        if (show) {
            this.items[i].fx.set({
                'opacity': 1,
                'left': item.offsetLeft,
                'width': item.offsetWidth
            });
            this.div[i].fx.set({
                'margin-top': offset
            });
            this.div[i].fx.custom({
                'margin-top': [offset, 0]
            })
        } else {
            this.div[i].fx.set({
                'margin-top': 0
            });
            this.div[i].fx.custom({
                'margin-top': [0, offset]
            })
        }
    }
});
YOOFancyMenu.implement(new Options);
/* end fancy menu js */
/* begin dropdown menu js */
var YOODropdownMenu = new Class({
    initialize: function (element, options) {
        this.setOptions({
            mode: 'default',
            itemSelector: 'li',
            dropdownSelector: 'ul',
            duration: 600,
            remainTime: 800,
            remainClass: 'remain',
            transition: Fx.Transitions.linear,
            wait: false
        },
        options);
        var obj = this;
        this.menu = $(element);
        this.timer = null;
        this.dropdowns = [];
        this.remain = [];
        this.menu.addEvents({
            mouseenter: function (event) {
                obj.remain = [];
                obj.removeRemain(10)
            },
            mouseleave: function (event) {
                obj.remain.each(function (item) {
                    item.addClass(obj.options.remainClass)
                });
                obj.removeRemain(obj.options.remainTime)
            }
        });
        this.menu.getElements(this.options.itemSelector).each(function (item) {
            var dropdown = item.getElement(this.options.dropdownSelector);
            if (dropdown) {
                this.dropdowns.include(item);
                if (this.options.mode == 'slide') {
                    this.attachSlideFx(item, dropdown)
                } else {
                    this.attachDefaultFx(item, dropdown)
                }
                item.addEvents({
                    mouseenter: function (event) {
                        item._dropdownhover = true;
                        obj.remain = [];
                        if (!item.hasClass(obj.options.remainClass) && !window.opera) {
                            item.fireEvent('fx.dropdown')
                        }
                    },
                    mouseleave: function (event) {
                        item._dropdownhover = false;
                        if (obj.menu != event.relatedTarget && !obj.menu.hasChild(event.relatedTarget)) {
                            obj.remain.include(item)
                        } else {
                            item.fireEvent('dropdownleave')
                        }
                    }
                })
            }
        }.bind(this))
    },
    attachDefaultFx: function (item, dropdown) {
        var styles = dropdown.getStyles('width', 'height', 'opacity');
        var reset = {
            'width': 0,
            'height': 0
        };
        var fx = new Fx.Styles(dropdown, this.options);
        switch (this.options.mode) {
        case 'width':
            reset = {
                'width': 0
            };
            break;
        case 'height':
            reset = {
                'height': 0
            };
            break
        }
        item.addEvent('fx.dropdown', function () {
            fx.stop();
            fx.element.setStyles($extend(reset, {
                'opacity': 0,
                'overflow': 'hidden'
            }));
            fx.start(styles).chain(function () {
                fx.element.setStyles(styles)
            })
        })
    },
    attachSlideFx: function (item, dropdown) {
        var styles = dropdown.getStyles('width', 'height', 'opacity');
        var div = new Element('div').adopt(dropdown.getChildren()).injectInside(dropdown);
        var fx1 = new Fx.Styles(dropdown, this.options);
        var fx2 = new Fx.Styles(div, this.options);
        item.addEvent('fx.dropdown', function () {
            fx1.stop();
            fx1.element.setStyles({
                'height': 0,
                'overflow': 'hidden'
            });
            fx1.start(styles).chain(function () {
                fx1.element.setStyles(styles)
            });
            fx2.stop();
            fx2.element.setStyles({
                'margin-top': -styles.height.toInt()
            });
            fx2.start({
                'margin-top': 0
            })
        })
    },
    removeRemain: function (delaytime) {
        $clear(this.timer);
        this.timer = (function () {
            this.dropdowns.each(function (item) {
                if (item.hasClass(this.options.remainClass) && !item._dropdownhover) item.fireEvent('dropdownleave');
                item.removeClass(this.options.remainClass)
            }.bind(this))
        }).delay(delaytime, this)
    },
    matchHeight: function () {
        this.menu.getElements('li.level2 div.sub').each(function (sub) {
            var hover = sub.getParent().getElement('div.hover-box4');
            var height = Math.max(sub.getCoordinates().height, hover.getCoordinates().height);
            var elements = [sub, hover];
            elements.each(function (element) {
                var offset = element.getStyle('padding-top').toInt() + element.getStyle('padding-bottom').toInt() + element.getStyle('border-top-width').toInt() + element.getStyle('border-bottom-width').toInt();
                element.setStyle('height', height - offset)
            })
        })
    }
});
YOODropdownMenu.implement(new Events, new Options);
/* end dropdown menu js */
/* begin template js */
var YOOTemplate = {
		
	start: function() {

		/* Match height of div tags */
		YOOTemplate.matchHeights();

		/* Accordion menu */
		new YOOAccordionMenu('div#middle ul.menu li.toggler', 'ul.accordion', { accordion: 'slide' });

		/* Dropdown menu */
		var dropdown = new YOODropdownMenu('menu', { mode: 'slide', dropdownSelector: 'div.dropdown', transition: Fx.Transitions.Expo.easeOut });
		//dropdown.matchHeight();

		/* Fancy menu */
		new YOOFancyMenu('menu', { mode: 'fade', transition: Fx.Transitions.expoOut, duration: 500 });

		/* set hover color */
		var hoverColor;
		switch (YtSettings.color) {
			case 'green':
				hoverColor = '#8dc92a';
				break;
			case 'red':
				hoverColor = '#dd3321';
				break;
			case 'orange':
				hoverColor = '#ed771a';
				break;
			case 'pink':
				hoverColor = '#c92197';
				break;
			case 'turquoise':
				hoverColor = '#33b1cd';
				break;
			case 'carbon':
				hoverColor = '#515764';
				break;
			case 'comboblue':
				hoverColor = '#00bee5';
				break;
			case 'combogold':
				hoverColor = '#e9b44d';
				break;
			case 'comboleather':
				hoverColor = '#52412e';
				break;
			case 'combosunset':
				hoverColor = '#d36800';
				break;
			case 'comboorange':
				hoverColor = '#ed771a';
				break;
			default:
				hoverColor = '#2B86CA';
		}

		/* Morph: mod-black sub menu - level1 */
		var submenuEnter = { 'background-color': hoverColor };
		var submenuLeave = { 'background-color': '#ffffff' };

		new YOOMorph('div.mod-black ul.menu a.level1, div.mod-black ul.menu span.level1', submenuEnter, submenuLeave,
			{ transition: Fx.Transitions.expoOut, duration: 0 },
			{ transition: Fx.Transitions.sineIn, duration: 300 });
		
		/* Morph: mod-black sub menu - all levels */
		var submenuEnter = { 'color': '#000000' };
		var submenuLeave = { 'color': '#646464' };

		new YOOMorph('div.mod-black ul.menu span.bg', submenuEnter, submenuLeave,
			{ transition: Fx.Transitions.expoOut, duration: 0 },
			{ transition: Fx.Transitions.sineIn, duration: 300 });

		/* Morph: mod-line sub menu - level1 */
		var submenuEnter = { 'color': '#000000', 'padding-left': 5};
		var submenuLeave = { 'color': '#646464', 'padding-left': 0};

		new YOOMorph('div.mod-band ul.menu span.bg', submenuEnter, submenuLeave,
			{ transition: Fx.Transitions.expoOut, duration: 100 },
			{ transition: Fx.Transitions.sineIn, duration: 300 });

		/* Smoothscroll */
		new SmoothScroll({ duration: 500, transition: Fx.Transitions.Expo.easeOut });
	},

	/* Match height of div tags */
	matchHeights: function() {
		YOOBase.matchHeight('div.headerbox div.deepest', 20);
		YOOBase.matchHeight('div.topbox div.deepest', 20);
		YOOBase.matchHeight('div.bottombox div.deepest', 20);
		YOOBase.matchHeight('div.maintopbox div.deepest', 20);
		YOOBase.matchHeight('div.mainbottombox div.deepest', 20);
		YOOBase.matchHeight('div.contenttopbox div.deepest', 20);
		YOOBase.matchHeight('div.contentbottombox div.deepest', 20);
	}

};

/* Add functions on window load */
window.addEvent('domready', YOOTemplate.start);
/* end template js */
/* begin search js */
var YOOsearch = new Class({
    initialize: function (container, options) {
        this.setOptions({
            fieldText: 'search...',
            formSelector: 'form',
            fieldSelector: 'input.searchfield',
            closeSelector: 'button.search-close',
            resultsSelector: 'div.resultbox',
            msgResults: 'Search results',
            msgCategories: 'Search categories',
            msgNoResults: 'No results found',
            msgMoreResults: 'More results',
            url: 'index.php?option=com_search&tmpl=raw&type=json&ordering=&searchphrase=all'
        },
        options);
        this.form = $(container).getElement(this.options.formSelector);
        this.field = $(container).getElement(this.options.fieldSelector);
        this.close = $(container).getElement(this.options.closeSelector);
        this.resultbox = $(container).getElement(this.options.resultsSelector);
        this.sections = new Array();
        this.focussed = false;
        this.selection = false;
        this.observer = new Observer(this.field, this.processSearch.bind(this), {
            delay: 400
        });
        this.field.setProperty('autocomplete', 'off');
        this.field.addEvents({
            focus: this.toggleFocus.bind(this, [true]),
            blur: this.toggleFocus.bind(this, [false])
        });
        this.close.setStyle('display', 'none');
        this.close.addEvents({
            mousedown: this.clearSearch.bindWithEvent(this)
        })
    },
    requestSearch: function () {
        this.close.setStyle('display', 'inline');
        this.close.removeClass('search-close');
        this.close.addClass('search-loader')
    },
    clearSearch: function () {
        this.close.setStyle('display', 'none');
        this.field.value = this.options.fieldText;
        this.clearResults()
    },
    processSearch: function () {
        if (this.field.value) {
            var url = this.options.url;
            var ajaxRequest = new Ajax(url, {
                method: 'post',
                data: 'searchword=' + this.field.value,
                onRequest: this.requestSearch.bind(this),
                onComplete: this.processResults.bind(this)
            }).request()
        }
    },
    processResults: function (data) {
        this.clearResults();
        this.close.addClass('search-close');
        this.close.removeClass('search-loader');
        if (data) {
            data = Json.evaluate(data);
            var results = new Element('div', {
                'class': 'resultbox-bg'
            });
            if (data.categories.length > 0) {
                var section = this.createSection('search-categories', this.options.msgCategories);
                data.categories.each(function (res) {
                    this.createResult(res.title, res.text, res.url, res.image).injectInside(section)
                }.bind(this))
            }
            var section = this.createSection('search-results', this.options.msgResults);
            if (data.results.length > 0) {
                data.results.each(function (res) {
                    this.createResult(res.title, res.text, res.url).injectInside(section)
                }.bind(this))
            } else {
                this.createResult(this.options.msgNoResults, data.error, '#').injectInside(section)
            }
            this.sections.each(function (section, i) {
                section.injectInside(results)
            });
            results.injectInside(this.resultbox);
            this.createResultbox(data.results.length > 0).injectInside(this.resultbox)
        }
    },
    clearResults: function () {
        this.sections = new Array();
        this.select = false;
        this.resultbox.empty()
    },
    selectResult: function (state) {
        this.selection = state
    },
    createSection: function (css, name) {
        var div = new Element('div', {
            'class': css
        });
        var h3 = new Element('h3', {
            'class': 'search-header'
        }).setHTML(name).injectInside(div);
        var ul = new Element('ul', {
            'class': 'results'
        }).injectAfter(h3);
        this.sections.include(div);
        return ul
    },
    createResult: function (title, text, url, image) {
        var li = new Element('li');
        var a = new Element('a').setProperty('href', url).injectInside(li);
        if (image) var img = new Element('img').setProperty('src', image).injectInside(a);
        var h3 = new Element('h3').setHTML(title).injectInside(a);
        a.appendText(text);
        a.addEvents({
            mouseenter: this.selectResult.bind(this, [true]),
            mouseleave: this.selectResult.bind(this, [false])
        });
        return li
    },
    createResultbox: function (searchMore) {
        var bl = new Element('div', {
            'class': 'resultbox-bl'
        });
        var br = new Element('div', {
            'class': 'resultbox-br'
        }).injectInside(bl);
        var b = new Element('div', {
            'class': 'resultbox-b'
        }).injectInside(br);
        if (searchMore) {
            var a = new Element('a', {
                'class': 'search-more'
            }).injectInside(b);
            var span = new Element('span', {
                'class': 'search-more'
            }).injectInside(a);
            a.appendText(this.options.msgMoreResults);
            a.addEvents({
                mouseenter: this.selectResult.bind(this, [true]),
                mouseleave: this.selectResult.bind(this, [false]),
                mousedown: function () {
                    this.form.submit()
                }.bind(this)
            })
        }
        return bl
    },
    toggleFocus: function (state) {
        this.focussed = state;
        if (!state && !this.selection) this.clearResults()
    }
});
YOOsearch.implement(new Options);
var Observer = new Class({
    options: {
        periodical: false,
        delay: 1000
    },
    initialize: function (el, onFired, options) {
        this.setOptions(options);
        this.addEvent('onFired', onFired);
        this.element = $(el);
        this.listener = this.fired.bind(this);
        this.value = this.element.getValue();
        if (this.options.periodical) this.timer = this.listener.periodical(this.options.periodical);
        else this.element.addEvent('keyup', this.listener)
    },
    fired: function () {
        var value = this.element.getValue();
        if (this.value == value) return;
        this.clear();
        this.value = value;
        this.timeout = this.fireEvent.delay(this.options.delay, this, ['onFired', [value]])
    },
    clear: function () {
        $clear(this.timeout);
        return this
    }
});
Observer.implement(new Options);
Observer.implement(new Events);
/* end search js */
/* begin slideshow js */
var SlideShow = new Class({
	
	getOptions: function(){
		return {
			effect: 'fade', //fade|wipe|slide|random
			duration: 2000,
			transition: Fx.Transitions.linear,
			direction: 'right', //top|right|bottom|left|random
			color: false,
			wait: 5000,
			loop: false,
			thumbnails: false,
			thumbnailCls: 'outline',
			backgroundSlider: false,
			loadingCls: 'loading',
			onClick: false
		};
	},

	initialize: function(container, images, options){
		this.setOptions(this.getOptions(), options);
		
		this.container = $(container);
		this.container.setStyles({
			position: 'relative',
			overflow: 'hidden'
		});
		if(this.options.onClick){
			this.container.addEvent('click', function(){
				this.options.onClick(this.imageLoaded);
			}.bind(this));
		}
		
		
		this.imagesHolder = new Element('div').setStyles({
			position: 'absolute',
			overflow: 'hidden',
			top: this.container.getStyle('height'),
			left: 0,
			width: '0px',
			height: '0px',
			display: 'none'
		}).injectInside(this.container);
		
		if($type(images) == 'string' && !this.options.thumbnails){
			var imageList = [];
			$$('.'+images).each(function(el){
				imageList.push(el.src);
				el.injectInside(this.imagesHolder);
			},this);
			this.images = imageList;
			
		}else if($type(images) == 'string' && this.options.thumbnails){
			var imageList = [];
			var srcList = [];
			this.thumbnails = $$('.'+images);
			this.thumbnails.each(function(el,i){
				srcList.push(el.href);
				imageList.push(el.getElement('img'));
				el.href = 'javascript:;';
				el.addEvent('click',function(){
					this.stop();
					this.play(i);				 
				}.bind(this,el,i));
			},this);
			this.images = srcList;
			this.thumbnailImages = imageList;
			
			if(this.options.backgroundSlider){
				this.bgSlider = new BackgroundSlider(this.thumbnailImages,{mouseOver: false, duration: this.options.duration, className: this.options.thumbnailCls, padding:{top:0,right:-2,bottom:-2,left:0}});
				this.bgSlider.set(this.thumbnailImages[0]);
			}
		
		}else{
			this.images = images;
		}
		
		this.loading = new Element('div').addClass(this.options.loadingCls).setStyles({
			position: 'absolute',
			top: 0,
			left: 0,
			zIndex: 3,
			display: 'none',
			width: this.container.getStyle('width'),
			height: this.container.getStyle('height')
		}).injectInside(this.container);
		
		this.oldImage = new Element('div').setStyles({
			position: 'absolute',
			overflow: 'hidden',
			top: 0,
			left: 0,
			opacity: 0,
			width: this.container.getStyle('width'),
			height: this.container.getStyle('height')
		}).injectInside(this.container);
		
		this.newImage = this.oldImage.clone();
		this.newImage.injectInside(this.container);
		
		
		
		this.timer = 0;
		this.image = -1;
		this.imageLoaded = 0;
		this.stopped = true;
		this.started = false;
		this.animating = false;
	},
	
	load: function(){
		$clear(this.timer);
		this.loading.setStyle('display','block');
		this.image++;
		var img = this.images[this.image];
		delete this.imageObj;
		
		doLoad = true;
		this.imagesHolder.getElements('img').each(function(el){
			var src = this.images[this.image];
			if(el.src == src){
				this.imageObj = el;
				doLoad = false;
				this.add = false;
				this.show();
			}
		},this);
		
		if(doLoad){
			this.add = true;
			this.imageObj = new Asset.image(img, {onload: this.show.bind(this)});
		}
		
	},

	show: function(add){
		
		if(this.add){
			this.imageObj.injectInside(this.imagesHolder);
		}
		
		this.newImage.setStyles({
			zIndex: 1,
			opacity: 0
		});
		var img = this.newImage.getElement('img');
		if(img){
			img.replaceWith(this.imageObj.clone());
		}else{
			var obj = this.imageObj.clone();
			obj.injectInside(this.newImage);
		}
		this.imageLoaded = this.image;
		this.loading.setStyle('display','none');
		if(this.options.thumbnails){
			
			if(this.options.backgroundSlider){
				var elT = this.thumbnailImages[this.image];
				this.bgSlider.move(elT);
				this.bgSlider.setStart(elT);
			}else{
				this.thumbnails.each(function(el,i){
					el.removeClass(this.options.thumbnailCls);
					if(i == this.image){
						el.addClass(this.options.thumbnailCls);
					}
				},this);
			}
		}
		this.effect();
	},
	
	wait: function(){
		this.timer = this.load.delay(this.options.wait,this);
	},
	
	play: function(num){
		if(this.stopped){
			if(num > -1){this.image = num-1};
			if(this.image < this.images.length){
				this.stopped = false;
				if(this.started){
					this.next();
				}else{
					this.load();
				}
				this.started = true;
			}
		}
	},
	
	stop: function(){
		$clear(this.timer);
		this.stopped = true;
	},
	
	next: function(wait){
		var doNext = true;
		if(wait && this.stopped){
			doNext = false;
		}
		if(this.animating){
			doNext = false;
		}
		if(doNext){
			this.cloneImage();
			$clear(this.timer);
			if(this.image < this.images.length-1){
				if(wait){
					this.wait();
				}else{
					this.load();	
				}
			}else{
				if(this.options.loop){
					this.image = -1;
					if(wait){
						this.wait();
					}else{
						this.load();	
					}
				}else{
					this.stopped = true;
				}
			}
		}
	},
	
	previous: function(){
		if(this.imageLoaded == 0){
			this.image = this.images.length-2;	
		}else{
			this.image = this.imageLoaded-2;
		}
		this.next();
	},
	
	cloneImage: function(){
		var img = this.oldImage.getElement('img');
		if(img){
			img.replaceWith(this.imageObj.clone());
		}else{
			var obj = this.imageObj.clone();
			obj.injectInside(this.oldImage);
		}
		
		this.oldImage.setStyles({
			zIndex: 0,
			top: 0,
			left: 0,
			opacity: 1
		});
		
		this.newImage.setStyles({opacity:0});
	},
	
	
	effect: function(){
		this.animating = true;
		this.effectObj = this.newImage.effects({
			duration: this.options.duration,
			transition: this.options.transition
		});
		
		var myFxTypes = ['fade','wipe','slide'];
		var myFxDir = ['top','right','bottom','left'];
		
		if(this.options.effect == 'fade'){
			this.fade();
			
		}else if(this.options.effect == 'wipe'){
			if(this.options.direction == 'random'){
				this.setup(myFxDir[Math.floor(Math.random()*(3+1))]);
			}else{
				this.setup(this.options.direction);
			}
			this.wipe();
			
		}else if(this.options.effect == 'slide'){
			if(this.options.direction == 'random'){
				this.setup(myFxDir[Math.floor(Math.random()*(3+1))]);
			}else{
				this.setup(this.options.direction);
			}
			this.slide();
			
		}else if(this.options.effect == 'random'){
			var type = myFxTypes[Math.floor(Math.random()*(2+1))];
			if(type != 'fade'){
				var dir = myFxDir[Math.floor(Math.random()*(3+1))];
				if(this.options.direction == 'random'){
					this.setup(dir);
				}else{
					this.setup(this.options.direction);
				}
			}else{
				this.setup();
			}
			this[type]();
		}
	},
	
	setup: function(dir){
		if(dir == 'top'){
			this.top = -this.container.getStyle('height').toInt();
			this.left = 0;
			this.topOut = this.container.getStyle('height').toInt();
			this.leftOut = 0;
			
		}else if(dir == 'right'){
			this.top = 0;
			this.left = this.container.getStyle('width').toInt();
			this.topOut = 0;
			this.leftOut = -this.container.getStyle('width').toInt();
			
		}else if(dir == 'bottom'){
			this.top = this.container.getStyle('height').toInt();
			this.left = 0;
			this.topOut = -this.container.getStyle('height').toInt();
			this.leftOut = 0;
			
		}else if(dir == 'left'){
			this.top = 0;
			this.left = -this.container.getStyle('width').toInt();
			this.topOut = 0;
			this.leftOut = this.container.getStyle('width').toInt();
			
		}else{
			this.top = 0;
			this.left = 0;
			this.topOut = 0;
			this.leftOut = 0;
		}
	},
	
	fade: function(){
		this.effectObj.start({
			opacity: [0,1]
		});
		this.resetAnimation.delay(this.options.duration+90,this);
		if(!this.stopped){
		this.next.delay(this.options.duration+100,this,true);
		}
	},
	
	wipe: function(){
		this.oldImage.effects({
			duration: this.options.duration,
			transition: this.options.transition
		}).start({
			top: [0,this.topOut],
			left: [0, this.leftOut]
		})
		this.effectObj.start({
			top: [this.top,0],
			left: [this.left,0],
			opacity: [1,1]
		},this);
		this.resetAnimation.delay(this.options.duration+90,this);
		if(!this.stopped){
		this.next.delay(this.options.duration+100,this,true);
		}
	},
	
	slide: function(){
		this.effectObj.start({
			top: [this.top,0],
			left: [this.left,0],
			opacity: [1,1]
		},this);
		this.resetAnimation.delay(this.options.duration+90,this);
		if(!this.stopped){
		this.next.delay(this.options.duration+100,this,true);
		}
	},
	
	resetAnimation: function(){
		this.animating = false;
	}
	
});
SlideShow.implement(new Options);
SlideShow.implement(new Events);
/* end slideshow js */
