/*
slide version 1.0
Copyright 2011
Dual licensed under the MIT or GPL Version 2 licenses.
author "mxm145"
Email mxm145@163.com

example:
var a = new sildes({});
*/
slides = function(){
	function $(o){
		return document.getElementById(o);
	}
	function $$(o, tag){
		return $(o).getElementsByTagName(tag);
	}
	function addEvent(elm,evType,fn,useCapture){
		if(elm.addEventListener){
			elm.addEventListener(evType, fn, useCapture);
			return true;
		}else if(elm.attachEvent){
			var r = elm.attachEvent('on' + evType, fn);
			return r;
		}else{
			elm['on' + evtype] = fn;
		}
	}
	function Each(list,fun){
		for(var i=0,len=list.length;i<len;i++){
			fun(list[i],i);
		}
	}
	function slides(config){
		this.imgContainer   = config.imgContainer || 'H-slide1';
		this.thumbContainer = config.thumbContainer || 'H-slide3';
		this.speed          = config.speed || 5000;
		this.imgs           = $$(this.thumbContainer, 'li');
		this.imgIndex       = 0;
		this.isPause        = false;
		this.tt             = null;
		this.picNum         = config.picNum || 4;
		this.width          = config.width || 400;
		var that = this;
		Each(this.imgs,function(g,h){
			addEvent(g, 'mouseover', function(){
				that.play(h);
				that.isPause = true;
			});
			addEvent(g, 'mouseout', function(){
				that.isPause = false;
			});
		});
		this.auto();
	}
	slides.prototype = {
		play : function(l){
			if(this.imgIndex > (this.picNum - 1)) this.imgIndex = 0;
			if(arguments[0] == undefined){
				var j = this.imgIndex;
			}else{
				var j = l;
				this.imgIndex = l;
			}
			var imgList = $$(this.thumbContainer, 'li');
			var k = (j * this.width);
			this.move(-k);
			Each(imgList,function(c,d){
				if(d == j){
					c.className = 'action';
				}else{
					c.className = '';
				}
			});
			this.imgIndex ++;
		},
		auto : function(){
			var _this = this;
			if(!this.isPause){
				if(timer) clearTimeout(timer);
				this.play();
				var timer = setTimeout(function(){_this.auto();}, this.speed);
			}else{
				var timer = setTimeout(function(){_this.auto();}, 500);
			}
		},
		move : function(distance){
			clearTimeout(this.tt);
			var dis = $(this.imgContainer).style.left == '' ? 0 : $(this.imgContainer).style.left;
			var _this = this;
			dis = parseInt(dis, 10);
			var m = Math.abs(Math.round(Math.abs(distance) - Math.abs(dis)));
			if(m > 5) m = m / 5;
			if(dis > distance){
				$(this.imgContainer).style.left = (dis - m) + 'px';
				this.tt = setTimeout(function(){_this.move(distance);}, 10);
			}else if(dis < distance){
				$(this.imgContainer).style.left = (dis + m) + 'px';
				this.tt = setTimeout(function(){_this.move(distance);}, 10);
			}else{
				return;
			}
		}
	};
	return slides;
}();
