/* v0.2 sbHover Coyright Sitebuilder Finland Oy */
var sbHover = new Class({
	Implements: [Options],
	options: {
		yourOption	: '',
		hoverClass	: '.hover',
		speed		: 200,
		mode		: '',	//'clone'
		class		: 'hover',
		relative	: '',
		group		: false,
		groupItems		: []
		
	},
	initialize: function(el, options) {
		this.setOptions(options);
		if (this.options.relative == '') this.options.relative = document.body;
		this.items = el;
		if (this.items.length > 1){
			if (this.options.group && (this.options.groupItems.length == 0))  this.options.groupItems = this.items;
			this.items.each(function(el){
				this.hoverMe(el);
			}.bind(this));
		} else {
			this.hoverMe(el);
		}
	},
	hoverMe: function(el) {
		var that = this;
		if (this.options.mode == 'clone') {
			var pos = el.getCoordinates(this.options.relative);
			
			var wi = pos.right-pos.left-el.getStyle('padding-left').toInt()-el.getStyle('padding-right').toInt()-el.getStyle('border-left-width').toInt()-el.getStyle('border-right-width').toInt();
			var hi = pos.bottom-pos.top-el.getStyle('padding-top').toInt()-el.getStyle('padding-bottom').toInt()-el.getStyle('border-top-width').toInt()-el.getStyle('border-bottom-width').toInt();
			
			var clone = el.clone('true','true');
			clone.setStyles({'position':'absolute','top':pos.top,'height':hi, 'width':wi, 'left':pos.left,'opacity':0}).addClass(this.options.class).inject(this.options.relative);
			
			// tarkista onko display = block ja ellei ole niin laita rivinkorkeudeksi 20px;
			var di = el.getStyle('display');
			if (di != 'block') clone.setStyles({'line-height':20});
			
			clone.set('morph', {duration:this.options.speed, link: 'chain'});
			clone.addEvents({
				mouseout: function(){
					clone.morph({'opacity':0});
				}
			});
			var that = this;
			el.addEvents({
				mouseover: function(){
					clone.morph({'opacity':1});
				},
				mouseleave: function(event){
					that.checkStatus(event, el, clone, pos);
				}
			});
		}
		else {
			el.set('morph', {duration:this.options.speed, link: 'cancel'});
			el.addEvents({
				mouseover: function(){
					that.mouseOver(this);
				},
				mouseout: function(){
					that.mouseOut(this);
				},
				click: function(){
					that.mouseClick(this);
				}
			});
		}
	},
	checkStatus: function(event, el, clone, pos) {
		var pos2 = el.getCoordinates();
		if(event.page.y < pos2.top || event.page.y > pos2.bottom || event.page.x < pos2.left || event.page.x > pos2.right) {
			(function(e){
				clone.fireEvent('mouseout');
			}).delay(200);	// Delay after mouseover is checked
		}
	},
	mouseOver: function(el){
		if (this.options.group)	this.options.groupItems.erase(el).morph('.fade');
		el.morph('.hover');
	},
	mouseOut: function(el){
		if (this.options.group)	this.options.groupItems.include(el).morph('.normal');
		el.morph('.normal');
	},
	mouseClick:function(el){
		el.set('morph', {duration:this.options.speed/2});
		el.morph('.click').morph('.click');
		(function(){
			el.addClass('shadow').morph('.click').morph('.normal');
				(function(){
					el.removeClass('shadow');
				}).delay(100);
		}).delay(100);
		if (el == document.id('control')) {
			el.toggleClasses('play', 'pause');
		}
		
	}
});

Element.implement({
	hover: function(e, op) {
		var hover = new sbHover(this, op);
		if($type(e) != 'object') {
			hover.setOptions({class:e});
		}	
		else {
			hover.setOptions(e);
		}
		if($type(op) == 'object') hover.setOptions(op);
		return this
	}
});
Element.implement({
	toggleClasses: function(cl1, cl2) {
		if (this.hasClass(cl2)) {
			this.removeClass(cl2);
			this.addClass(cl1);
		}
		else {
			if (this.hasClass(cl1)) {
				this.removeClass(cl1);
				this.addClass(cl2);
			}
			else {
				this.addClass(cl1);
			}
		}
		return this
	}
});

window.addEvent('domready', function() {
	//var yourInstance = new sbHover($$('.ajaxBox'), {mode:'clone'});
	var albums = $$('ul.albumlist');
	albums.each(function(el){
		var hooveri = el.getElements('.thumb');
		var uusiHoover = new sbHover(hooveri, {group: true});
	});
	var albums = $$('ul.picturelist');
	albums.each(function(el){
		var hooveri = el.getElements('.thumb');
		var uusiHoover = new sbHover(hooveri, {group: true});
	});
});

/**
v0.2	Lisätty group
v0.1	Ensimmäinen versio
*/
