////////////////////// MMJS.SlideWindow /////////////////////
// Version : 0.1.1
// Require : jQuery 1.4.2
// Author : Albert.Lee [at] Mediaman.com.cn
// Last Modify : 2010.10.22
//////////////////////////////////////////////////////////

var MMJS = MMJS || {};

MMJS.SlideWindow =  function( args ){
	//init args
	args = args || {};

	var args_default = {
		//selector
		'list_sel':null,							//LIST
		'data_ul_sel':null,						//UL with the data
		'btn_page_prev_sel':null,			//PREV按钮
		'btn_page_next_sel':null,			//NEXT按钮
		//class
		'class_li_normal':'normal',			//li元素正常时的属性
		'class_li_hover':'hover',				//li元素hover时的属性
		'class_li_active':'active',			//li元素选中时的属性
		'class_btn_normal':'normal',		//按钮正常时的属性
		'class_btn_hover':'hover',			//按钮hover时的属性
		'class_btn_disable':'disable',	//按钮禁用时的属性
		//var
		'page_mode':'page',					//分页移动的数量 one|page|smo   smo = inshow minus one
		'pos_attr':'left',					//position变动的属性
		'block_px_attr':0,					//与pos_attr相关的属性的block的值
		'init_px_attr':0,						//与pos_attr相关的属性的初始值
		'num_inshow':0,							//窗口中显示的数量
		'animate_speed':'fast',			//动画速度
		'default_index':1,						//默认选中的项
		//switch
		'enable_block_click_roll':false,
		//auto play
		'autoplay_enable':true,
		'autoplay_interval':5000
	}
	
	args = jQuery.extend( args_default,args );
	jQuery.extend( this,args );
	
	this.init();

}


MMJS.SlideWindow.prototype.init = function(){
	var _cts = this;
	//init
	_cts.$wrap = jQuery(_cts.wrap_sel);
	_cts.$list = jQuery( _cts.list_sel ).css( _cts.pos_attr , _cts.init_px_attr );
	_cts.$data_ul = jQuery( _cts.data_ul_sel );
	_cts.$data_li_list = _cts.$data_ul.find( ' > li' );
	_cts.$btn_page_prev = jQuery( _cts.btn_page_prev_sel ).click( function(){ _cts.gotoPrevPage();return false; } ).focus(function(){this.blur();});
	_cts.$btn_page_next = jQuery( _cts.btn_page_next_sel ).click( function(){ _cts.gotoNextPage();return false; } ).focus(function(){this.blur();});
	
	_cts.count = _cts.$data_li_list.length;
	
	/* 分页参数 */
	switch( _cts.page_mode ){
		case 'one':
			_cts.page_check_num = 1;
			break;
		case 'page':
			_cts.page_check_num = _cts.num_inshow;
			break;
		case 'smo':
			_cts.page_check_num = _cts.num_inshow - 1;
			break;
	}
	
	
	/* 注册事件 */
	if ( _cts.enable_block_click_roll ){
		_cts.$data_li_list.each( function(index){ 
			$this = jQuery(this);
			index = index + 1;
			$this.data('li_index',index);
			$this.click(function(){_cts.goto(index)});
		});
	}
	
	/*
	_cts.$data_li_list.hover(
		function(){
			var $this = jQuery(this);
			if ( $this.hasClass(_cts.class_li_normal) ){
				$this.removeClass(_cts.class_li_normal);
				$this.data( 'last_li_status_class',_cts.class_li_normal );
			}else if( $this.hasClass(_cts.class_li_active) ){
				$this.removeClass(_cts.class_li_active);
				$this.data( 'last_li_status_class',_cts.class_li_active );
			}
			$this.addClass(_cts.class_li_hover);
		},
		function(){
			var $this = jQuery(this);
			var last_li_status_class = $this.data( 'last_li_status_class' );
			$this.removeClass(_cts.class_li_hover).addClass(last_li_status_class);
		}
	);
	*/
	_cts.$data_li_list.hover(function(){
		var $this = jQuery(this);
		$this.addClass(_cts.class_li_hover);
	},function(){
		var $this = jQuery(this);
		$this.removeClass(_cts.class_li_hover);
	});
	
	
	_cts.goto(_cts.default_index);
	_cts.checkPageNav();
	
	/* autoplay */
	/*
	if ( _cts.autoplay_enable ){
		_cts.autoplay_pause = false;
		_cts.$wrap.hover(function(){
			_cts.autoplay_pause = true;
		},function(){
			_cts.autoplay_pause = false;
		});
		setInterval(function(){
			if ( !_cts.autoplay_pause ){
				if ( _cts.cur_index >= _cts.count ){
					var goto_index = 1;
				}else{
					var goto_index = _cts.cur_index + 1;
				}
				_cts.goto(goto_index);
			}
		},_cts.autoplay_interval);
	}
	*/
	
}

MMJS.SlideWindow.prototype.goto = function( index ){
	var _cts = this;

	var index = parseInt( index );
	
	if ( _cts.count > 0 && _cts.count >= index ){
		_cts.prev_index = _cts.cur_index;
		_cts.cur_index = index;
		/* 设定li样式 */
		_cts.activeLi( index );
		/* 判断是否需要移动list */
		_cts.list_pos_offset = 0;
		if ( _cts.count > _cts.num_inshow ){
			if ( ( _cts.count - index ) < _cts.num_inshow ){
			//当前项右边元素加上自己的个数小于可见个数，则需要固定pos为最大值。
				_cts.list_pos_offset = ( _cts.count - _cts.num_inshow );
			}else{
			//否则将当前项放到最左边
				_cts.list_pos_offset = ( index - 1 );
			}
		}
		_cts.moveList();
		_cts.checkPageNav();
	}
}

MMJS.SlideWindow.prototype.gotoPrevPage = function(){
	var _cts = this;
	var target_offset = _cts.list_pos_offset - _cts.page_check_num;	
	if ( _cts.count > _cts.num_inshow ){
		_cts.list_pos_offset = target_offset < 0 ? 0 : target_offset;
		_cts.moveList();
		_cts.checkPageNav();
	}
}

MMJS.SlideWindow.prototype.gotoNextPage = function(){
	var _cts = this;
	var target_offset = _cts.list_pos_offset + _cts.page_check_num;
	if ( _cts.count > _cts.num_inshow ){
		_cts.list_pos_offset = ( target_offset > ( _cts.count - _cts.num_inshow ) ) ? ( _cts.count - _cts.num_inshow ) : target_offset;
		_cts.moveList();
		_cts.checkPageNav();
	}
}

MMJS.SlideWindow.prototype.moveList = function(){
	var _cts = this;
	var list_pos = _cts.list_pos_offset * _cts.block_px_attr + _cts.init_px_attr;
	var target_css = {};
	target_css[_cts.pos_attr] = list_pos;
	_cts.$list.animate( target_css, _cts.animate_speed );
	
}

MMJS.SlideWindow.prototype.activeLi = function( index ){
	var _cts = this;
	var $cur_li = _cts.$data_li_list.filter( ':eq('+(index-1)+')' );
	_cts.$data_li_list.removeClass( _cts.class_li_active ).removeClass( _cts.class_li_normal ).addClass( _cts.class_li_normal );
	$cur_li.removeClass( _cts.class_li_normal ).addClass( _cts.class_li_active );
}

MMJS.SlideWindow.prototype.activePageNav = function( direction,active ){
	var _cts = this;
	var $item = direction < 0 ? _cts.$btn_page_prev : _cts.$btn_page_next;
	$item.removeClass( _cts.class_btn_normal ).removeClass( _cts.class_btn_disable ).removeClass( _cts.class_btn_hover );
	active ? $item.addClass(_cts.class_btn_normal) : $item.addClass(_cts.class_btn_disable);
}

MMJS.SlideWindow.prototype.checkPageNav = function( direction,active ){
	var _cts = this;
	if ( typeof _cts.list_pos_offset == 'undefined' || isNaN(_cts.list_pos_offset) ){
		_cts.activePageNav( -1,false );
		_cts.activePageNav( 1,false );
	}else{
		if ( _cts.list_pos_offset <= 0 ){
			_cts.activePageNav( -1,false );
		}else{
			_cts.activePageNav( -1,true );
		}
		
		if ( _cts.list_pos_offset >= _cts.count - _cts.num_inshow ){
			_cts.activePageNav( 1,false );
		}else{
			_cts.activePageNav( 1,true );
		}
	}
}
