/*
更新: 10:03 2007-2-27
*/
var Module = Module||{};

var module=function(moduleId){
	this.elmId = moduleId;
	
	this.tabsId = this.elmId+'_tabs';
	this.contentIdPreText = this.elmId+'_content_';
	this.mTab = new Module.Tabs(this.tabsId, this.contentIdPreText);
};
/*
标签页的页面结构说明：
* 将id(例如: 'm_sample_01') 添加到div.md 中
* 在div.md_hd 中添加ul.mh_tabs，并添加id+'_tabs' (例如: 'm_sample_01_tabs')
* 在div.md_bd 中添加和标签一样多的div，并给它们添加id，id 命名是 div.md 中的id+'_content_x'(例如: 'm_sample_01_content_1' ~ ) 其中x 是这些div 的序号，从1 开始。除了第一个，其他几个都添加style="display: none;" 属性
添加脚本：
* (new module('m_sample_01')).initTabs();
*/
module.prototype.initTabs=function(){
		this.mTab.init();
	};
module.prototype.initTabsHover=function(){
		this.mTab.initHover();
	};

Module.Tabs=function(nodeId, contentIdPreText){
	var tabs= jQuery("#" + nodeId + " li"),
		tabCurI= 0;
	var tabCons= [];
	var tabBtns = [],
		tabBtn,
		tabEvent = "click";
	
	function changeContent(targetIndex){
		tabCons[tabCurI].css('display', 'none');
		tabCons[targetIndex].css('display', '');
		tabCurI = targetIndex;
	}

	function chgTab(targetIndex){
		try{
			if(targetIndex === tabCurI){return null;}
			tabs[tabCurI].removeClass('cur');
			tabs[targetIndex].addClass('cur');
			changeContent(targetIndex);
		}catch(ex){}
	}
	
	function initTabs(){
		tabs.each(function(i, _tab){
				_tab = tabs[i] = jQuery(_tab);
				tabCons[i] = jQuery("#" + contentIdPreText + (i + 1));
				if(i !== tabCurI){
					tabCons[i].css('display', 'none');
				}
				tabBtn = tabBtns[i] = _tab.find('a:first');
				tabBtn.attr("i", i);
				tabBtn[tabEvent](function(ev){
						chgTab(jQuery(this).attr("i") || 0);
						return false;
					});
			});
	}
	
	this.init=function(){
		initTabs();
	};
	this.initHover=function(){
		tabEvent = "mouseover";
		initTabs();
	};
};

/**
集合: kPage
更新: 10:24 2007-2-27
功能: 页面操作相关
函数列表: 
	fixColsHeight(col, opt) 对齐页面模块
	initFixColsHeight(opt) 调用[对齐页面模块]来对其所有模块
	
*/

var kPage={
	fixColsHeight: function(_row, opt){
		var maxH=0;
		var heights=[];
		var cols = jQuery(_row).children("div").filter(function(i){return (jQuery(this).attr("class").indexOf("col_") !== -1)});
		
		if(cols.length <= 1){return true;}
		
		cols.each(function(i, _col){
			var h = _col.offsetHeight;
			heights[i] = h;
			(h > maxH) && (maxH = h);
		});
		
		cols.each(function(i, _col){
			var hDiff = maxH - heights[i];
			if(hDiff > 0){
				var mb = jQuery("> div.md:last > div.md_bd", _col);
				if(mb.length > 0){
					mb.append(jQuery('<div class="vspace" style="height:' + hDiff + 'px;"></div>'))
				}
			}
		});
		
	},
	initFixColsHeight: function(opt){
		var pageBody = jQuery("#page_body");
		if(pageBody.length > 0){
			var pageRows = pageBody.children("div.column_wrapper");
			pageRows.each(function(i, _row){
				try{
					kPage.fixColsHeight(_row, opt);
				}catch(ex){}
			});
		}
	}
};

/*add by jay @ 2007-06-20 10:35*/
function initDropDown(elmId, tagName){
	if(!document.all || !elmId || !tagName){return null}
	jQuery('#' + elmId + ' ' + tagName).hover(function(){jQuery(this).addClass('hover')}, function(){jQuery(this).removeClass('hover')});
}

var ajaxLoadingImg = new Image();
ajaxLoadingImg.src="/Library/image/ajax-loader.gif";

/** 
 * 缓存 ajax 对 url 的请求，考虑是否加一个过期验证
 * 适合 html 片段、json 数据、xml 文件（需要再实现），
 * 不太适合 script 标签，而一般 script 标签也不是通过 ajax 来请求 :)
 */
var ajaxDataCache = {};

function ajaxTab(tabId, tabConId, opt){
	jQuery(function(){new AjaxTab(tabId, tabConId, opt)});
}
function AjaxTab(tabId, tabConId, opt){

	var tabs= jQuery("#" + tabId + " li"),
		tabCurI= 0,
		tabCon= jQuery("#" + tabConId),
		btns = tabs.find("> a:first"),
		tabUrls = [],
		tabEvent = "click";
	
	function changeContent(url){
		if(url in ajaxDataCache){
			tabCon.html(ajaxDataCache[url]);
		}else{
			jQuery.get(url, function(data){ajaxDataCache[url]= data;tabCon.html(data)})
		}
	}

	function chgTab(targetIndex){
		try{
			if(targetIndex == tabCurI){return null;}
			tabs[tabCurI].removeClass('cur');
			tabs[targetIndex].addClass('cur');
			changeContent(tabUrls[targetIndex]);
		    tabCurI = targetIndex;
		}catch(ex){}
	}
	
	function initTabs(){
		btns.each(function(i, _btn){
				_btn = btns[i] = jQuery(_btn);
				tabs[i]= jQuery(tabs[i]);
				_btn.attr("i", i);
				tabUrls[i] = _btn.attr("href");
				_btn.attr("href", "");
				_btn[tabEvent](function(ev){
						try{_btn[0].blur();}catch(ex){}
						chgTab(_btn.attr("i") || 0);
						return false;
					});
			});
	}
	initTabs();
}

/**
模块: 图像(水平翻页)滚动[imagePageView]
更新: 10:26 2007-2-27
参数: 
	@param  elm{String|Dom node}  需要添加滚动效果的模块
	@param  opt{Object}  动画效果的一些设置
返回值: {Object}
功能: 将图片列表滚动起来(水平滚动)
页面结构限制: 
	在 div.image_list_box 之外添加id
	每个id 下面只能有1 个ul
	每个ul 下面的图片必须足够多(不能在1 行完全显示)才会滚动
*/
function ImagePageView(elmId, opt){
    var $ = jQuery;
	var elmRoot;
	if(typeof elmId === 'string'){
		elmRoot= jQuery('#'+elmId);
	}else{
		elmRoot= jQuery(elmId);
	}
	if(!elmRoot.length){return;}
	
	var scrollSpeed= 2;// 1s/500px 单位 ms/px
	
	var scrollPropName= 'left',
		itemSizePropName= 'offsetLeft',
		viewAreaSizePropName= 'width';
	
	var scrollH = true;
	if(opt){
		if(('layout' in opt) && (opt.layout == 'v')){
            scrollH= false;
            scrollPropName= 'top';
    		itemSizePropName= 'offsetTop';
    		viewAreaSizePropName= 'height';
        }
	}
	
	var scrollerW= elmRoot.children('div.image_list_box'),
		scroller= scrollerW.children('ul'),
		items= scroller.children('li'),//所有图片框的集合
		itemNum= items.length,
		item0= items[0],
		itemCur;
    
    scrollerW.css('position', 'relative');
	scrollerW.css('overflow', 'hidden');
    
	var itemSize= items[1][itemSizePropName]- item0[itemSizePropName],
		viewAreaSize= scrollerW[viewAreaSizePropName]();
	
	if(scrollH){
        scroller.css('width', "9999px");
        scroller.css('float', "left");
        scroller.css('position', "relative");
    }else{
        scroller.css('position', "absolute");
    }
    
	scrollH && scrollerW.css(viewAreaSizePropName, viewAreaSize);
	
	
	var totalScrollSize= itemSize * itemNum;
	
	// 计算每次翻页的个数
	var scrollPageNum= Math.floor(viewAreaSize/itemSize),
		totalPageNum= Math.ceil(itemNum/scrollPageNum),
		scrollDuration= scrollSpeed * scrollPageNum * itemSize,
		curPageNum= 0;
	
	function _scroll(){
		if (navBtns) {
            navBtns.each(function(i, _btn){
                jQuery(_btn).removeClass('current');
            });
            jQuery(navBtns[curPageNum]).addClass('current');
        }
		scroller.stop();
		var scrollProp= {};
		scrollProp[scrollPropName]= -items[scrollPageNum * curPageNum][itemSizePropName];// 目标位置应该是 目标页的第一个 item 的左坐标
		scroller.animate(scrollProp, {"duration": scrollDuration});
	}
	
    var btnPrev,
        btnNext;
    
    if (opt && opt.noBtn) {
    
    }
    else{
        if (opt) {
            if (opt.btnPrevExp) {
                btnPrev = elmRoot.find(opt.btnPrevExp);
            }
            if (opt.btnNextExp) {
               btnNext = elmRoot.find(opt.btnNextExp);
            }
        }
        if (!btnPrev) {
            btnPrev = jQuery('<a class="previous" style="top:15px;" href="">&lt;&lt;</a>');
            btnNext = btnPrev.clone().html('&gt;&gt;').attr('class', 'next');
            
            elmRoot.append(btnPrev).append(btnNext);
            btnPrev.css('left', -5);
            btnNext.css('left', elmRoot.width() - btnNext.width() + 5);
            btnNext.css('right', 'auto');
        }
    }
    
    if (btnPrev) {
        // 翻页按钮
        btnPrev.click(function(){//图像选择列表  前n 张，需要向左移动，则style.left 应该减小
            this.blur();
            if (curPageNum > 0) {
                curPageNum--;
                _scroll();
            }
            return false;
        });
    }
	if (btnNext) {
        btnNext.click(function(){//图像选择列表  前n 张，需要向左移动，则style.left 应该减小
            this.blur();
            if (curPageNum < (totalPageNum - 1)) {
                curPageNum++;
                _scroll();
            }
            return false;
        });
    }
	
    var navBtnW,
        _mh,
        navBtns;
	if (opt && opt.noNavBtn) {}
    else {
        navBtnW = jQuery('<div class="image_page_view_nav" style="top:7px;"></div>');
        _mh = elmRoot.parents('div.md').children('div.md_hd');
        navBtns = [];
        
        var i = 0;
        while (i < totalPageNum) {
            (function(i){
                var _item = jQuery('<a href=""></a>');
                navBtns.push(_item);
                if (curPageNum == i) {
                    _item.attr('class', 'current');
                }
                _item.appendTo(navBtnW);
                _item.attr('i', i);
                _item.click(function(){
                    curPageNum = parseInt(_item.attr('i')) || 0;
                    _scroll();
                    return false;
                });
            })(i);
            i++;
        }
        navBtnW.css('left', ((_mh[0].offsetWidth - navBtnW[0].offsetWidth) / 2));
        _mh.css('position', 'relative');
        _mh.append(navBtnW);
        navBtns = jQuery(navBtns);
    }
}

function imagePageView(elmId, opt){
	var _f= new ImagePageView(elmId, opt);
	_f= null;
}
function imagePageViewV(elmId, opt){
    opt = opt || {};
    (!opt.layout) && (opt.layout = 'v');
	var _f= new ImagePageView(elmId, opt);
	_f= null;
}
/*
模块: 图像水平滚动[imageScroll]
更新: 10:26 2007-2-27
参数: 
	@param  elm{String|Dom node}  需要添加滚动效果的模块 id
	@param  opt{Object}  动画效果的一些设置
返回值: {Object}
功能: 将图片列表滚动起来(水平滚动)
页面结构限制: 
	在 div.image_list_box 之外添加id
	每个id 下面只能有1 个ul
	每个ul 下面的图片必须足够多(不能在1 行完全显示)才会滚动
*/

function ImageScroll(elmId, opt){
	var elmRoot;
	if(typeof elmId === 'string'){
		elmRoot= jQuery('#'+elmId);
	}else{
		elmRoot= jQuery(elmId);
	}
	if(!elmRoot.length){return;}
	var scrollDir= 'l';
	var scrollSpeed= 15;//1000/50 单位 ms/px
	var scrollPropName= 'left',
		itemSizePropName= 'offsetLeft',
		viewAreaSizePropName= 'width';

	var aviableDir= {'l':'l',
					 'left':'l',
					 'r':'r',
					 'right':'r',
					 'b':'b',
					 'bottom':'b',
					 't':'t',
					 'top':'t'};
	if(opt){
		('dir' in opt) && (opt.dir in aviableDir) && (scrollDir = aviableDir[opt.dir]);
	}
	var scrollH= (scrollDir === 'r' || scrollDir === 'l');
	if(!scrollH){
		scrollPropName= 'top';
		itemSizePropName= 'offsetTop';
		viewAreaSizePropName= 'height';
	}
    
	var items= elmRoot.find('> div > ul > li'),//所有图片框的集合
		itemNum= items.length,

		scroller= items.parent(),//存放图片的ul, 滚动动画就是靠控制它的位置来实现的(滚动的整体)
		scrollerW= scroller.parent(),
		item0= items[0],
		itemSize= items[1][itemSizePropName] - item0[itemSizePropName],//一个图片框的宽度,
		viewAreaSize= scrollerW[viewAreaSizePropName]();

	if(scrollH && (scroller.height() < (1.2 * items.height()))){//如果没有2 行，则返回
		return;
	}

	if(scrollH){
		scrollerW.css({ 'width':viewAreaSize,
						'position':'relative',
						'overflow':'hidden'});
		scroller.css({'width':9999, 'position':'relative'});
	}else{
		elmRoot.css('overflow', 'hidden');
		scroller.css('position', 'relative');
	}

	jQuery.each(items.slice(0, Math.ceil(viewAreaSize / itemSize)),
			 function(i, _item){
				 scroller.append(_item.cloneNode(true));
			 });
	items= scroller.children('li');
	var scrollArea= [0, -items[itemNum][itemSizePropName]];
	// 如果是向 左 或是 下 滚动，则互换滚动值域
	if(scrollDir === 'r' || scrollDir === 'b'){
		scrollArea[2]= scrollArea[0];
		scrollArea[0]= scrollArea[1];
		scrollArea[1]= scrollArea[2];
		scrollArea.length= 2;
	}

	function getScrollDuration(){
		return Math.abs(scrollSpeed * ((parseInt(scroller.css(scrollPropName), 10) || 0) - scrollArea[1]));
	}
	
    // 这个地方比较诡异，需要注意
	var scrollProp= {};
	scrollProp[scrollPropName]= scrollArea[1];
	scroller.css(scrollPropName, scrollArea[0]);
	function _scroll(){
		scroller.animate(scrollProp,
						 {"duration": getScrollDuration(),
						  "easing": "linear",
						  'complete': function(){scroller.css(scrollPropName, scrollArea[0]);_scroll();}
						 });
	}
    
	function startScroll(start){
		scroller.stop();
		// 明确给定说 start 才 start
		(start === true) && _scroll();
	}
	scrollerW.hover(startScroll, function(){startScroll(true);});
	startScroll(true);
}

function imageScroll(elmId, opt){
	jQuery(function(){
		var _f= new ImageScroll(elmId, opt);
		_f= null;
	});
}
function imageScrollV(elmId, opt){
	jQuery(function(){
		if(!opt || !('dir' in opt)){
			opt= {'dir': 't'};
		}
		var _f= new ImageScroll(elmId, opt);
		_f= null;
	});
}
/**
模块: 图像浏览[imageView]
更新: 10:26 2007-2-27
参数: 
	@param  elmId{String|Dom node}  要添加动画的element
	@param  opt{Object}  一些属性设置
返回值: {Object}
功能: 缩略图滚动(水平)浏览，点击大图切换
*/

function ImageView(elmId, opt){
	var elmRoot;
	if(typeof elmId === 'string'){
		elmRoot= jQuery('#'+elmId);
	}else{
		elmRoot= jQuery(elmId);
	}
	if(!elmRoot.length){return;}
	var scrollSpeed= 2;// 1s/500px 单位 ms/px
	var scrollPropName= 'left',
		scrollH= true,
		itemSizePropName= 'offsetLeft',
		viewAreaSizePropName= 'width';
	if(opt){
		('layout' in opt) && (opt.layout === 'v') && (scrollH= false);
	}
	
	if(!scrollH){
		scrollPropName= 'top';
		itemSizePropName= 'offsetTop';
		viewAreaSizePropName= 'height';
	}
	var scrollPart= elmRoot.children('div.pic_list_box'),
		items= scrollPart.find('li'),//所有图片框的集合
		itemNum= items.length,

		scroller= items.parent(),//存放图片的ul, 滚动动画就是靠控制它的位置来实现的(滚动的整体)
		scrollerW= scroller.parent(),
		item0= items[0],
		itemCur,
		itemSize= items[1][itemSizePropName]- item0[itemSizePropName],
		viewAreaSize= scrollPart[viewAreaSizePropName]()-56;// 好像只有水平的用到了，垂直的用不到
	
	scrollerW.css(viewAreaSizePropName, viewAreaSize);
	
	if(scrollH){
		
	}else{
		scrollPart.css('overflow', 'hidden');
	}
	
	scroller.css('position', 'relative');
	
	var totalScrollSize= itemSize * itemNum;
	
	// 计算每次翻页的个数
	var scrollPageNum= Math.floor(viewAreaSize/itemSize),
		totalPageNum= Math.ceil(itemNum/scrollPageNum),
		scrollDuration= scrollSpeed * scrollPageNum * itemSize,
		curPageNum= 0;
	
	var dataShowPart= elmRoot.children('div.text_box');//大图片显示区域
	
	//console.log(dataShowPart);return;
	
	var dataShowPic= dataShowPart.find('img'),
		dataShowTxt= dataShowPart.find('div.text_data');
	
	var btnPrev= scrollPart.children('a.previous'),
		btnNext= scrollPart.children('a.next');
	
	function _scroll(){
		var scrollProp= {};
		scrollProp[scrollPropName]= -items[scrollPageNum * curPageNum][itemSizePropName];// 目标位置应该是 目标页的第一个 item 的左坐标
		scroller.animate(scrollProp, {"duration": scrollDuration});
	}
	
	// 翻页按钮
	btnPrev.click(function(){//图像选择列表  前n 张，需要向左移动，则style.left 应该减小
		this.blur();
		if(curPageNum > 0){
			curPageNum--;
			_scroll();
		}
		return false;
	});
	btnNext.click(function(){//图像选择列表  前n 张，需要向左移动，则style.left 应该减小
		this.blur();
		if(curPageNum < (totalPageNum - 1)){
			curPageNum++;
			_scroll();
		}
		return false;
	});
	
	var datas= {};
	
	items.each(function(i, _item){
			_item= jQuery(_item);
			_item.attr('i', i);
			_item.hover(function(){_item.addClass('hover')}, function(){_item.removeClass('hover')});
			_item.click(function(){
					itemCur && itemCur.removeClass('cur');
					itemCur= _item;
					_item.addClass('cur');
					var itemData= datas[_item.attr('i')];
					dataShowPic.attr('src', itemData.img.attr('href')).parent().attr('href', itemData.img.attr('title'));
					dataShowTxt.html(itemData.txt);
					return false;
				});
			
			(!itemCur) && (_item.attr('class').indexOf('cur') !== -1) && (itemCur= _item);
			
			datas[_item.attr('i')]= {
					'img': _item.children('a'),
					'txt': _item.children('div.hide').html()
				};// 这样做 key 不知是否会有问题
			_item.children('div.hide').remove();
		});
}

function imageView(elmId, opt){
	jQuery(function(){
		var _f= new ImageView(elmId, opt);
		_f= null;
	});
}

function imageView_v(elmId, opt){
	jQuery(function(){
		var _f= new ImageView(elmId, {'layout': 'v'});
		_f= null;
	});
}
/**
 图像(渐隐渐显)浏览
 */
function ImageTransform(elmId){
    var elmRoot;
    if (typeof elmId === 'string') {
        elmRoot = jQuery('#' + elmId);
    }
    else {
        elmRoot = jQuery(elmId);
    }
    if (!elmRoot.length) {
        return;
    }
    
    var items = elmRoot.children('div.image_list_box'), itemNum = items.length, iCur = 0;
    
    items.each(function(i, _item){
        _item = jQuery(_item);
        items[i] = _item;
        (i !== 0) && _item.css('display', 'none');
    });
    
    var item0 = items[0], item$ = items[itemNum - 1];
    
    var delayTime = 5000;
    function nextItem(){
        var ic = iCur;
        iCur += 1;
        if (iCur >= itemNum) {
            iCur = 0;
        }
        items[ic].animate({
            'opacity': 0.1
        }, {
            "duration": 700,
            'complete': function(){
                items[ic].css('display', 'none');
                items[iCur].css('display', '');
                items[iCur].animate({
                    'opacity': 1
                }, {
                    "duration": 700,
                    'complete': function(){
                        setTimeout(nextItem, delayTime);
                    }
                });
            }
        });
    }
    setTimeout(nextItem, delayTime);
}

function image_transform(elmId, opt){
    jQuery(function(){
        new ImageTransform(elmId, opt);
    });
}
function ImageSlide2(a){
	var $ = jQuery;
	var elmRoot = $("#"+a),
		tbs = elmRoot.find("tbody");
	if(tbs.length < 2){
		return;
	}
	
	var datas = [],
		curIndex = 0,
		delayTime = 5000,
		autoSlide = true,
		hoverPause = false,
		isHover = false;
	var d_image = $("div.mainImage", tbs[0]),
		d_page = $("div.page", tbs[0]),
		d_text = $("div.textDesc", tbs[0]);
	datas.push([d_image.html(), d_text.html()]);
	$("tr", tbs[1]).each(function(a, b){
		var c = $("td", b);
		datas.push([c[0].innerHTML, c[1].innerHTML]);
	});
	tbs[1].parentNode.removeChild(tbs[1]);
	function buidPage(){
		btnsStr = [];
		for(var i = 0, iM = datas.length; i < iM; i++){
			var _i = i + 1;
			if(i == curIndex){
				btnsStr.push('<b>'+_i+'</b>');
			}else{
				btnsStr.push('<a href="#'+_i+'" onclick="'+btnEvFn+'('+i+');return false;">'+_i+'</a>');
			}
		}
		d_page.html(btnsStr.join(" "));
	}
	
	function show(targetIndex){
		if(autoSlide){
			clearTimeout(timer);
			timer = setTimeout(_slide, delayTime);
		}
		curIndex = targetIndex;
		(curIndex >= datas.length) && (curIndex = 0);
		(curIndex < 0) && (curIndex = datas.length - 1);
		d_image.html(datas[curIndex][0]);
		d_text.html(datas[curIndex][1]);
		buidPage();
	}
	var id = imageSlide2.instanceId++;
	imageSlide2[id] = {"show": show};
	var btnEvFn = 'imageSlide2[\''+ id +'\'].show';
	
	buidPage();
	var timer = null;
	function _slide(){
		if(hoverPause && isHover){
			clearTimeout(timer);
			timer = setTimeout(_slide, delayTime);
			return;
		}
		show(curIndex+1);
	}
	autoSlide && setTimeout(_slide, delayTime);
	
	elmRoot.hover(function(){isHover = true}, function(){isHover = false});
}
function imageSlide2(a){
	jQuery(function(){ImageSlide2(a)});
}
imageSlide2.instanceId = 0;/*encode: utf-8*/

function accordion(elmId, opt){
	jQuery(function(){
		new Accordion(elmId, opt);
	});
}
function Accordion(elmId, opt){
	var elmRoot;
	if(typeof elmId === 'string'){
		elmRoot= jQuery('#'+elmId);
	}else{
		elmRoot= jQuery(elmId);
	}
	if(!elmRoot.length){return;}
	var btnExp= '> ul > li > h3',
		itemExp= '> ul > li',
        curClassName= 'cur',
        elmHover;
	if(opt){
		('btnExp' in opt) && (btnExp = opt.btnExp);
        ('itemExp' in opt) && (itemExp = opt.itemExp);
        ('curClassName' in opt) && (curClassName = opt.curClassName);
        
        // {'elmExp': '> ul > li', 'className': 'hover'}
        ('hover' in opt) && (elmHover = opt.hover);
	}
    
	var items= elmRoot.find(itemExp),
		btns= elmRoot.find(btnExp),
		curItem,
		heightCur,
		heightNormal;
	
    if(elmHover && elmHover.elmExp){
        elmRoot.find(elmHover.elmExp).hover(function(){jQuery(this).addClass(elmHover.className)}, function(){jQuery(this).removeClass(elmHover.className)})
    }
    
    items.each(function(i, _item){
			_item= jQuery(_item);
			/*
			console.log('_item.height is: ' + _item.height());
			console.log('_item.css(\'height\') is: ' + _item.css('height'));
			console.log('_item[0].offsetHeight is: ' + _item[0].offsetHeight);
			*/
			var btn= jQuery(btns[i]);
			btn.attr('i', i);
			_item.attr('i', i);
			_item.css('overflow', 'hidden');
            if(_item.attr('class')){
				if(!curItem && (_item.hasClass(curClassName))){
					curItem= _item;
					heightCur= _item.height();
				}
				if(!heightNormal && (!_item.hasClass(curClassName))){
					heightNormal= _item.height();
				}
			}else{
				if(!heightNormal){
					heightNormal= _item.height();
					// - (parseInt(_item.css('paddingTop')) || 0 + parseInt(_item.css('paddingBottom')) || 0 + parseInt(_item.css('borderTopWidth')) || 0 + parseInt(_item.css('borderBottomWidth')) || 0)
				}
			}
			var animateItem;
			btn.click(function(){
					if(curItem === _item){return;}
					animateItem && animateItem.stop();
					
                    heightNormal = _item.height();
                    heightCur = curItem.height();
                    
                    curItem.css('height', heightCur);
					_item.css('height', heightNormal);
					
                    _item.addClass(curClassName);
					animateItem= curItem;
					curItem= _item;
                    
					//console.log(heightCur, heightNormal);
					animateItem.animate({'height': heightNormal},
										{
										'step2': function(n){
												_item.css('height', Math.max(Math.abs(heightCur + heightNormal - n), 0));
											},
										'duration': 300,
										'complete': function(){
												animateItem.removeClass(curClassName);
												animateItem.css('height', '');
												_item.css('height', '');
											}
										});
					return false;
				});
		});
        
	//alert(heightCur);
	//alert(heightNormal);
}/*
功能: 将图片列表滚动起来(水平滚动)
页面结构限制: 
	在 div.title_list_box 添加id，并指定 height
	每个id 下面只能有1 个ul
	每个ul 下面的列表必须足够多(不能在1 屏完全显示)才会滚动
*/

function TextScroll(elmId, opt){
	
	var elmRoot= jQuery('#'+elmId);
	if(elmRoot.length == 0){return;}
	
	var scroller = elmRoot.find('> ul'),
		items = scroller.find('> li'),
		itemNum = items.length,
		iCur = 0;
	scroller.css('position', 'absolute');
	scroller.html(scroller.html() + scroller.html());
	items= scroller.find('> li');
    
    var scHeight = elmRoot[0].offsetHeight;
    
	function getScrollDuration(){
		return Math.abs(50 * ((parseInt(scroller.css('top'), 10) || 0) - scrollArea[1]));
	}
    
    var scrollPropName = 'top';
    var scrollArea= [0, -items[itemNum].offsetTop];
    
    // 这个地方比较诡异，需要注意
	var scrollProp= {};
	scrollProp[scrollPropName]= scrollArea[1];
    scroller.css(scrollPropName, scrollArea[0]);
	function _scroll(){
		scroller.animate(scrollProp,
						 {"duration": getScrollDuration(),
						  "easing": "linear",
						  'complete': function(){scroller.css(scrollPropName, scrollArea[0]);_scroll();}
						 });
	}
    
	function startScroll(start){
		scroller.stop();
		// 明确给定说 start 才 start
		(start === true) && _scroll();
	}
	elmRoot.hover(startScroll, function(){startScroll(true);});
	startScroll(true);
}

function textScroll(elmId, opt){
	jQuery(function(){
		var _f= new TextScroll(elmId, opt);
		_f= null;
	});
}
