/*------------------------------------------------------------------------
# JA Helio for Joomla 1.5 - Version 1.2 - Licence Owner JA83938
# ------------------------------------------------------------------------
# Copyright (C) 2004-2008 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
# @license - Copyrighted Commercial Software
# Author: J.O.O.M Solutions Co., Ltd
# Websites:  http://www.joomlart.com -  http://www.joomlancers.com
# This file may not be redistributed in whole or significant part.
-------------------------------------------------------------------------*/
/*
Script: ja_newsmoo.js

Authors:
	Sam Birch

License:
	MIT-style license.

*/
var JANewsMoo = new Class({
	
	initialize: function(myElements,options){
		options = Object.extend({
			onClick: Class.empty,
			openSize: 0,
			openWidth: 200,
			openHeight: 200,
			smallSize: 100,
			itemSize: 0,
			open: -1,
			direction: 'vir', //hor: horizontal; vir: virtical
			animAttr: 'top',			
			transition: Fx.Transitions.quadOut
		}, options || {});
		this.myElements = myElements;
		this.options = options;
		options.getFx=function(from, to) {
			if(options.animAttr=='bottom') return {'bottom': [from, to]};
			if(options.animAttr=='top') return {'top': [from, to]};
			if(options.animAttr=='left') return {'left': [from, to]};
			if(options.animAttr=='right') return {'right': [from, to]};	
		};

		if (options.direction == 'hor') {
			options.styleAttr = 'width';
			options.openSize = options.openWidth;
			if (options.animAttr == 'top' || options.animAttr == 'left') options.animAttr = 'left';
			else  options.animAttr = 'right';
		}else{
			options.styleAttr = 'height';
			options.openSize = options.openHeight;
			if (options.animAttr == 'top' || options.animAttr == 'left') options.animAttr = 'top';
			else  options.animAttr = 'bottom';
		}
		options.itemSize = Math.round(((options.smallSize*(myElements.length-1))+options.openSize)/myElements.length);
		//Set wrapper attribute. 
		var el = $(myElements[0]);
		if (el && el.parentNode) {
			var parent = $(el.parentNode);
			if (options.direction == 'vir') {
				//parent.setStyle('width', options.openWidth);
				parent.setStyle('height', options.itemSize*myElements.length);
			}else{
				parent.setStyle('width', options.itemSize*myElements.length);
				//parent.setStyle('height', options.openHeight);
			}
			parent.setStyle('position', 'relative');
			parent.setStyle('overflow', 'hidden');
		}
		var fx = new Fx.Elements(myElements, {wait: false, duration: options.durationtime, transition: options.transition});
		myElements.each(function(el, i){
			//Set the initial position for all elements
			el.setStyle('position', 'absolute');
		  if (options.direction == 'hor') {
			 el.setStyle('width', options.openWidth);
			}else{
			 el.setStyle('height', options.openHeight);
			}
			if(options.open==-1){
				el.setStyle(options.animAttr, (i+1)*options.itemSize-options.openSize);
			}else{
				if (i < options.open){
					var bn = ((i+1)*options.smallSize-options.openSize);
				}else{
					var bn = (i*options.smallSize);
				}
				el.setStyle(options.animAttr, bn);
			}
			el.setStyle('z-index', 1000-i);
			
			el.addEvent('mouseover', function(e){
				e = new Event(e).stop();
				el.show();
			});
			
			el.addEvent('mouseout', function(e){
				e = new Event(e).stop();
				el.hide();
			});
			
			el.show = function(){
				var obj = {};
				var bc = el.getStyle(options.animAttr).toInt();
				var bn = (i*options.smallSize);
				if (bn != bc) {
					obj[i] = options.getFx(bc, bn);
// 					if(options.animAttr=='bottom') obj[i] = {'bottom': [bc, bn]};
// 					if(options.animAttr=='top') obj[i] = {'top': [bc, bn]};
// 					if(options.animAttr=='left') obj[i] = {'left': [bc, bn]};
// 					if(options.animAttr=='right') obj[i] = {'right': [bc, bn]};
				}
				myElements.each(function(other, j){
					if (other != el){
						if (j < i){
							var bn = ((j+1)*options.smallSize-options.openSize);
						}else{
							var bn = (j*options.smallSize);
						}
						var bc = other.getStyle(options.animAttr).toInt();
						if (bn != bc) {
							obj[j] = options.getFx(bc, bn);
// 							if(options.animAttr=='bottom') obj[j] = {'bottom': [bc, bn]};
// 							if(options.animAttr=='top') obj[j] = {'top': [bc, bn]};
// 							if(options.animAttr=='left') obj[i] = {'left': [bc, bn]};
// 							if(options.animAttr=='right') obj[i] = {'right': [bc, bn]};
						}
					}
				});
				fx.start(obj);
			};
			
			el.hide = function(){
				//return;
				var obj = {};
				if(options.open == -1){
					myElements.each(function(el,i){
						var bc = el.getStyle(options.animAttr).toInt();
						var bn = (i+1)*options.itemSize-options.openSize;
						if (bn != bc) {
							obj[i] = options.getFx(bc, bn);
						}
					});
					fx.start(obj);
				}
			};
		});
	},
		
	reset: function(){
		this.options.open = -1;
		this.myElements.each(function(el, i){
			el.hide();
		});
	}
	
});
