/* typo */
var JCaption = new Class({
	initialize: function(selector)
	{
		this.selector = selector;

		var images = $$(selector);
		images.each(function(image){ this.createCaption(image); }, this);
	},

	createCaption: function(element)
	{
		var caption   = document.createTextNode(element.title);
		var container = document.createElement("div");
		var text      = document.createElement("p");
		var width     = element.getAttribute("width");
		var align     = element.getAttribute("align");

		if(!width) {
			width = element.width;
		}

		text.appendChild(caption);
		element.parentNode.insertBefore(container, element);
		container.appendChild(element);
		if ( element.title != "" ) {
			container.appendChild(text);
		}
		container.className   = this.selector.replace('.', '_');
		container.className   = container.className + " " + align;
		container.setAttribute("style","float:"+align);
		container.style.width = width + "px";

	}
});

document.caption = null
window.addEvent('load', function() {
  var caption = new JCaption('img.caption')
  document.caption = caption
});

/* base */
var YOOBase = {
    matchDivHeight: function(selector, minWidth) {
        var maxHeight = 0;
        var matchDivs = [];
        var selectors = selector.split(" ");
        var elements = selectors.shift();
        var script = '';
        selectors.each(function(el, i) {
            script += '.getElement("' + el + '")'
        });
        $ES(elements).each(function(element, i) {
            eval('matchDivs.push(element' + script + ');')
        });
        matchDivs.each(function(div, i) {
            if (!$chk(div)) return;
            var divHeight, divPadding;
            if (div.offsetHeight) {
                divHeight = div.offsetHeight;
                divPadding = 0;
                divPadding += div.getStyle('padding-top').toInt();
                divPadding += div.getStyle('padding-bottom').toInt();
                divHeight -= divPadding;
                divBorder = 0;
                divBorder += div.getStyle('border-top-width').toInt();
                divBorder += div.getStyle('border-bottom-width').toInt();
                divHeight -= divBorder
            } else if (div.style.pixelHeight) {
                divHeight = div.style.pixelHeight
            }
            maxHeight = Math.max(maxHeight, divHeight)
        });
        if (minWidth != undefined) {
            maxHeight = Math.max(maxHeight, minWidth)
        }
        matchDivs.each(function(div, i) {
            if (!$chk(div)) return;
            if (window.ie6) {
                div.setStyle('height', maxHeight + 'px')
            } else {
                div.setStyle('min-height', maxHeight + '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 && el.getElement(elementFx)) {
                elfx = el.getElement(elementFx)
            };
            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);

/* acccordion menu */
var YOOAccordionMenu = new Class({
    initialize: function(togglers, elements, options) {
        this.setOptions({
            accordion: 'default'
        },
        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() {
            	if(span.hasClass('glow')) { span.removeClass('glow'); }else {span.addClass('glow');}
                fx.toggle()
            })
        }.bind(this))
    }
});

YOOAccordionMenu.implement(new Options);

/* fancymenu */
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,
            colorSelector: ['red', 'pink', 'blue', 'green', 'orange', 'yellow', 'lilac', 'turquoise'],
            itemSelector: 'li.level1',
            activeSelector: 'li.active'
        },
        options);
        this.menu = $(menu),
        this.current = this.menu.getElement(this.options.activeSelector);
        this.li = [];
        this.div = [];
        this.menu.getElements(this.options.itemSelector).each(function(item, i) {
            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));
            if (this.options.mode == 'move') {
                item.addEvent('mouseleave',
                function() {
                    this.mouseleaveItem(this.current, i)
                }.bind(this))
            } else {
                item.addEvent('mouseleave',
                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.options.colorSelector.each(function(col, i) {
            if (item.hasClass(col)) {
                css += ' bg-' + col
            }
        });
        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.li[i] = new Element('li', {
            'class': css
        }).adopt(this.div[i]).injectInside(this.menu);
        this.li[i].fx = this.li[i].effects(this.options)
    },
    setCurrent: function(item) {
        this.li[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) {
        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) {
        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.li[i].fx.custom({
            'left': [this.li[i].offsetLeft, item.offsetLeft],
            'width': [this.li[i].offsetWidth, item.offsetWidth]
        })
    },
    fadeFx: function(item, i, show) {
        if (show) {
            this.li[i].fx.setOptions(this.options);
            this.li[i].fx.set({
                'left': item.offsetLeft,
                'width': item.offsetWidth
            });
            this.li[i].fx.custom({
                'opacity': [0, 1]
            })
        } else {
            var dur = this.options.duration * 2;
            this.li[i].fx.setOptions({
                duration: dur
            });
            this.li[i].fx.custom({
                'opacity': [1, 0]
            })
        }
    },
    slideFx: function(item, i, show) {
        var offset = this.options.slideOffset;
        if (show) {
            this.li[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);

/* dropdownmenu */
var YOODropdownMenu = new Class({
    initialize: function(element, options) {
        this.setOptions({
            mode: 'default',
            duration: 600,
            transition: Fx.Transitions.linear,
            wait: false
        },
        options);
        var reset = {
            'width': 0,
            'height': 0,
            'opacity': 0
        };
        switch (this.options.mode) {
        case 'width':
            reset = {
                'width': 0,
                'opacity': 0
            };
            break;
        case 'height':
            reset = {
                'height': 0,
                'opacity': 0
            };
            break
        }
        $$(element).each(function(li) {
            var ul = li.getElement('ul');
            if (ul) {
                var fx = new Fx.Styles(ul, this.options);
                var styles = ul.getStyles('width', 'height', 'opacity');
                ul.setStyles(reset);
                li.addEvents({
                    mouseenter: function() {
                        var parent = li.getParent();
                        if (parent.getStyle('overflow') == 'hidden') parent.setStyle('overflow', 'visible');
                        fx.element.setStyle('overflow', 'hidden');
                        fx.start(styles)
                    },
                    mouseleave: function() {
                        fx.stop();
                        ul.setStyles(reset)
                    }
                })
            }
        }.bind(this))
    }
});
YOODropdownMenu.implement(new Options);

/* tools */
var Tools = {
		
	start: function() {
		
		/* Match height of div tags */
		Tools.setDivHeight();

		/* Accordion menu */
		new YOOAccordionMenu('div#middle ul.menu li.toggler', 'ul.accordion', { accordion: 'slide' });

		/* Morph: color settings */
		var page = $('page');
		
		var enterColor = '#B45046';
		if (page.hasClass('green'))     enterColor = '#97AF82';
		if (page.hasClass('pink'))      enterColor = '#B995B1';
		if (page.hasClass('orange'))    enterColor = '#D1934E';
		if (page.hasClass('blue'))      enterColor = '#639FB7';
		if (page.hasClass('yellow'))    enterColor = '#AEAC57';
		if (page.hasClass('lilac'))     enterColor = '#87829D';
		if (page.hasClass('turquoise')) enterColor = '#789696';
		if (page.hasClass('black'))     enterColor = '#3C372D';
		
		/* Smoothscroll */
		new SmoothScroll({ duration: 500, transition: Fx.Transitions.Expo.easeOut });
	},

	/* Include script */
	include: function(library) {
		$ES('script').each(function(s, i){
			var src  = s.getProperty('src');
			var path = '';
			if (src && src.match(/yoo_tools\.js(\?.*)?$/)) path = src.replace(/yoo_tools\.js(\?.*)?$/,'');
			if (src && src.match(/template\.js\.php(\?.*)?$/)) path = src.replace(/template\.js\.php(\?.*)?$/,'');
			if (path != '') document.write('<script language="javascript" src="' + path + library + '" type="text/javascript"></script>');
		});
	},

	/* Match height of div tags */
	setDivHeight: function() {
		YOOBase.matchDivHeight('div.topbox div.deepest', 40);
		YOOBase.matchDivHeight('div.bottombox div.deepest', 40);
		YOOBase.matchDivHeight('div.maintopbox div.deepest', 40);
		YOOBase.matchDivHeight('div.mainbottombox div.deepest', 40);
		YOOBase.matchDivHeight('div.contenttopbox div.deepest', 40);
		YOOBase.matchDivHeight('div.contentbottombox div.deepest', 40);
	}

};

/* Add functions on window load */
window.addEvent('domready', Tools.start);

/* Load IE6 fix */
if (window.ie6) {
	Tools.include('addons/ie6fix.js');
	Tools.include('addons/ie6png.js');
	Tools.include('ie6fix.js');
}

