// JavaScript Document 
var $_A = function (id) {
	return "string" == typeof id ? document.getElementById(id) : id;
};

var Class_A = {
  create_A: function() {
	return function() {
	  this.initialize_A.apply(this, arguments);
	}
  }
}

Object.extend_A = function(destination_A, source_A) {
	for (var property_A in source_A) {
		destination_A[property_A] = source_A[property_A];
	}
	return destination_A;
}

var TransformView_A = Class_A.create_A();
TransformView_A.prototype = {
  //容器对象,滑动对象,切换参数,切换数量
  initialize_A: function(container_A, slider_A, parameter_A, count_A, options) {
	if(parameter_A <= 0 || count_A <= 0) return;
	var oContainer_A = $_A(container_A), oSlider_A = $_A(slider_A), oThis_A = this;

	this.Index_A = 0;//当前索引
	
	this._timer_A = null;//定时器
	this._slider_A = oSlider_A;//滑动对象
	this._parameter_A = parameter_A;//切换参数
	this._count_A_A = count_A || 0;//切换数量
	this._target_A = 0;//目标参数
	
	this.SetOptions_A(options);
	
	this.Up_A = !!this.options.Up_A;
	this.Step_A = Math.abs(this.options.Step_A);
	this.Time_A = Math.abs(this.options.Time_A);
	this.Auto_A = !!this.options.Auto_A;
	this.Pause_A = Math.abs(this.options.Pause_A);
	this.onStart_A = this.options.onStart_A;
	this.onFinish_A = this.options.onFinish_A;
	
	oContainer_A.style.overflow = "hidden";
	oContainer_A.style.position = "relative";
	
	oSlider_A.style.position = "absolute";
	oSlider_A.style.top = oSlider_A.style.left = 0;
  },
  //设置默认属性
  SetOptions_A: function(options) {
	this.options = {//默认值
		Up_A:			true,//是否向上(否则向左)
		Step_A:		1,//滑动变化率
		Time_A:		0,//滑动延时
		Auto_A:		true,//是否自动转换
		Pause_A:	12000,//停顿时间(Auto_A为true时有效)
		onStart_A:	function(){},//开始转换时执行
		onFinish_A:	function(){}//完成转换时执行
	};
	Object.extend_A(this.options, options || {});
  },
  //开始切换设置
  Start: function() {
	if(this.Index_A < 0){
		this.Index_A = this._count_A_A - 1;
	} else if (this.Index_A >= this._count_A_A){ this.Index_A = 0; }
	
	this._target_A = -1 * this._parameter_A * this.Index_A;
	this.onStart_A();
	this.Move_A();
  },
  //移动
  Move_A: function() {
	clearTimeout(this._timer_A);
	var oThis_A = this, style = this.Up_A ? "top" : "left", iNow_A = parseInt(this._slider_A.style[style]) || 0, iStep_A = this.GetStep_A(this._target_A, iNow_A);
	
	if (iStep_A != 0) {
		this._slider_A.style[style] = (iNow_A + iStep_A) + "px";
		this._timer_A = setTimeout(function(){ oThis_A.Move_A(); }, this.Time_A);
	} else {
		this._slider_A.style[style] = this._target_A + "px";
		this.onFinish_A();
		if (this.Auto_A) { this._timer_A = setTimeout(function(){ oThis_A.Index_A++; oThis_A.Start(); }, this.Pause_A); }
	}
  },
  //获取步长
  GetStep_A: function(iTarget_A, iNow_A) {
	var iStep_A = (iTarget_A - iNow_A) / this.Step_A;
	if (iStep_A == 0) return 0;
	if (Math.abs(iStep_A) < 1) return (iStep_A > 0 ? 1 : -1);
	return iStep_A;
  },
  //停止
  Stop_A: function(iTarget_A, iNow_A) {
	clearTimeout(this._timer_A);
	this._slider_A.style[this.Up_A ? "top" : "left"] = this._target_A + "px";
  }
};

window.onload=function(){
	function Each_A(list_A, fun_A){
		for (var i = 0, len_A = list_A.length; i < len_A; i++) { fun_A(list_A[i], i); }
	};
	
	var objs_A = $_A("idNum_A").getElementsByTagName("li");
	
	var tv_A = new TransformView_A("idTransformView_A", "idSlider_A", 450, 10, {
		onStart_A : function(){ Each_A(objs_A, function(o, i){ o.className = tv_A.Index_A == i ? "on" : ""; }) }//按钮样式
	});
	
	tv_A.Start();
	
	Each_A(objs_A, function(o, i){
		o.onmouseover = function(){
			o.className = "on";
			tv_A.Auto_A = false;
			tv_A.Index_A = i;
			tv_A.Start();
		}
		o.onmouseout = function(){
			o.className = "";
			tv_A.Auto_A = true;
			tv_A.Start();
		}
	})
	
	////////////////////////test2
	
	//var objs2 = $_A("idNum2_A").getElementsByTagName("li");
//	
//	var tv2 = new TransformView_A("idTransformView_A2", "idSlider_A2", 555, 5, {
//		onStart_A: function(){ Each_A(objs2, function(o, i){ o.className = tv2.Index_A == i ? "on" : ""; }) },//按钮样式
//		Up_A: false
//	});
//	
//	tv2.Start();
//	
//	Each_A(objs2, function(o, i){
//		o.onmouseover = function(){
//			o.className = "on";
//			tv2.Auto_A = false;
//			tv2.Index_A = i;
//			tv2.Start();
//		}
//		o.onmouseout = function(){
//			o.className = "";
//			tv2.Auto_A = true;
//			tv2.Start();
//		}
//	})
	
	//$_A("idStop").onclick = function(){ tv2.Auto_A = false; tv2.Stop_A(); }
//	$_A("idStart").onclick = function(){ tv2.Auto_A = true; tv2.Start(); }
//	$_A("idNext").onclick = function(){ tv2.Index_A++; tv2.Start(); }
//	$_A("idPre").onclick = function(){ tv2.Index_A--;tv2.Start(); }
//	$_A("idFast").onclick = function(){ if(--tv2.Step_A <= 0){tv2.Step_A = 1;} }
//	$_A("idSlow").onclick = function(){ if(++tv2.Step_A >= 10){tv2.Step_A = 10;} }
//	$_A("idReduce").onclick = function(){ tv2.Pause_A-=1000; if(tv2.Pause_A <= 0){tv2.Pause_A = 0;} }
//	$_A("idAdd").onclick = function(){ tv2.Pause_A+=1000; if(tv2.Pause_A >= 5000){tv2.Pause_A = 5000;} }
//	
//	$_A("idReset").onclick = function(){
//		tv2.Step_A = Math.abs(tv2.options.Step_A);
//		tv2.Time = Math.abs(tv2.options.Time);
//		tv2.Auto_A = !!tv2.options.Auto_A;
//		tv2.Pause_A = Math.abs(tv2.options.Pause_A);
//	}
	
}

