HW.Modules.load('Animate');
HW.Modules.load('Flash');

HW.Rotator = function(win,links,content,parent,active,left,right,width,num) {
	var ieVersion = 6;
	var reg = /(MSIE )([0-9\.]*)/;
	if(reg.exec(navigator.appVersion)) {
		var ieVersion = reg.exec(navigator.appVersion)[2];
	}
	if(ieVersion >= 5.5) {
		this.window = $(win);
		var o = this.window;
		while(!HW.hasClass(o,parent)) {
			o = o.parentNode;
		}
		HW.addClass(o,active);
		HW.addClass(this.window,active)
		this.content = $$(content,this.window,'div')[0];
		this.getLinks(links);
		this.leftLink = this.addLink(left,'left');
		this.rightLink = this.addLink(right,'right');
		this.width = width;
		this.content.style.width = num*this.width+'px';
		this.num = num;
	}
}

HW.Rotator.prototype = {
	active:0,
	links:[],
	getLinks:function(id) {
		var ul = $(id);
		if(ul) {
			var links = ul.getElementsByTagName('a');
			var lis = ul.getElementsByTagName('li');
			for(var i=0,j=links.length;i<j;i++) {
				var obj = this;
				(function(){
					var j = i;
					HW.attachEvent(links[i],'click',function(e){
						HW.preventDefault(e);
						if(obj.active != j) {
							obj.to = j;
							obj.change();
						}
					});
				})()
				this.links.push(lis[i]);
			}
		}
	},
	addLink:function(cls,dir) {
		var d = $$(cls,document.body,'div');
		var obj = this;
		if(d[0]) {
			HW.setStyle(d[0],{display:'block'});
			var a = d[0].getElementsByTagName('a')[0];
		}
		if(a) {
			HW.attachEvent(a,'click',function(e) {
				HW.preventDefault(e);
				if(dir == 'left') {
					obj.to = obj.active - 1;
				}
				if(dir == 'right') {
					obj.to = obj.active + 1;
				}
				obj.change();
			});
		}
		return a;
	},
	change:function() {
		this.to = (this.to+this.num)%this.num;
		if(!this.moving) {
			this.moving = true;
			var obj = this;
			this.slide(-1*this.to*this.width);
		}
	},
	slide:function(x) {
		var obj = this;
		new HW.Animate.Glide2(this.content,x,0,function() {obj.complete();},function(){return obj.getPos();},function(e,p){return obj.setPos(e,p);});
	},
	complete:function() {
		this.active = this.to;
		this.moving = false;
		if(this.links.length > 0) {
			for(var i=0,j=this.links.length;i<j;i++) {
				HW.removeClass(this.links[i],'selected');
			}
			HW.addClass(this.links[this.active],'selected');
		}
	},
	getPos:function() {
		var p = {}
		p.x = parseInt(this.content.style.left?this.content.style.left.replace('px',''):0);
		p.y = 0;
		return p;
	},
	setPos:function(e,p) {
		this.content.style.left = p.x+'px';
	}
}
