/**
* @author chuangui.xiecg
* @version 2009-11-25
*/
/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.7.0
*/
(function(){var B=YAHOO.util;var A=function(D,C,E,F){if(!D){}this.init(D,C,E,F);};A.NAME="Anim";A.prototype={toString:function(){var C=this.getEl()||{};var D=C.id||C.tagName;return(this.constructor.NAME+": "+D);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(C,E,D){return this.method(this.currentFrame,E,D-E,this.totalFrames);},setAttribute:function(C,F,E){var D=this.getEl();if(this.patterns.noNegatives.test(C)){F=(F>0)?F:0;}if("style" in D){B.Dom.setStyle(D,C,F+E);}else{if(C in D){D[C]=F;}}},getAttribute:function(C){var E=this.getEl();var G=B.Dom.getStyle(E,C);if(G!=="auto"&&!this.patterns.offsetUnit.test(G)){return parseFloat(G);}var D=this.patterns.offsetAttribute.exec(C)||[];var H=!!(D[3]);var F=!!(D[2]);if("style" in E){if(F||(B.Dom.getStyle(E,"position")=="absolute"&&H)){G=E["offset"+D[0].charAt(0).toUpperCase()+D[0].substr(1)];}else{G=0;}}else{if(C in E){G=E[C];}}return G;},getDefaultUnit:function(C){if(this.patterns.defaultUnit.test(C)){return"px";}return"";},setRuntimeAttribute:function(D){var I;var E;var F=this.attributes;this.runtimeAttributes[D]={};var H=function(J){return(typeof J!=="undefined");};if(!H(F[D]["to"])&&!H(F[D]["by"])){return false;}I=(H(F[D]["from"]))?F[D]["from"]:this.getAttribute(D);if(H(F[D]["to"])){E=F[D]["to"];}else{if(H(F[D]["by"])){if(I.constructor==Array){E=[];for(var G=0,C=I.length;G<C;++G){E[G]=I[G]+F[D]["by"][G]*1;}}else{E=I+F[D]["by"]*1;}}}this.runtimeAttributes[D].start=I;this.runtimeAttributes[D].end=E;this.runtimeAttributes[D].unit=(H(F[D].unit))?F[D]["unit"]:this.getDefaultUnit(D);return true;},init:function(E,J,I,C){var D=false;var F=null;var H=0;E=B.Dom.get(E);this.attributes=J||{};this.duration=!YAHOO.lang.isUndefined(I)?I:1;this.method=C||B.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=B.AnimMgr.fps;this.setEl=function(M){E=B.Dom.get(M);};this.getEl=function(){return E;};this.isAnimated=function(){return D;};this.getStartTime=function(){return F;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(B.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds){this.totalFrames=1;}B.AnimMgr.registerElement(this);return true;};this.stop=function(M){if(!this.isAnimated()){return false;}if(M){this.currentFrame=this.totalFrames;this._onTween.fire();}B.AnimMgr.stop(this);};var L=function(){this.onStart.fire();this.runtimeAttributes={};for(var M in this.attributes){this.setRuntimeAttribute(M);}D=true;H=0;F=new Date();};var K=function(){var O={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};O.toString=function(){return("duration: "+O.duration+", currentFrame: "+O.currentFrame);};this.onTween.fire(O);var N=this.runtimeAttributes;for(var M in N){this.setAttribute(M,this.doMethod(M,N[M].start,N[M].end),N[M].unit);}H+=1;};var G=function(){var M=(new Date()-F)/1000;var N={duration:M,frames:H,fps:H/M};N.toString=function(){return("duration: "+N.duration+", frames: "+N.frames+", fps: "+N.fps);};D=false;H=0;this.onComplete.fire(N);};this._onStart=new B.CustomEvent("_start",this,true);this.onStart=new B.CustomEvent("start",this);this.onTween=new B.CustomEvent("tween",this);this._onTween=new B.CustomEvent("_tween",this,true);this.onComplete=new B.CustomEvent("complete",this);this._onComplete=new B.CustomEvent("_complete",this,true);this._onStart.subscribe(L);this._onTween.subscribe(K);this._onComplete.subscribe(G);}};B.Anim=A;})();YAHOO.util.AnimMgr=new function(){var C=null;var B=[];var A=0;this.fps=1000;this.delay=1;this.registerElement=function(F){B[B.length]=F;A+=1;F._onStart.fire();this.start();};this.unRegister=function(G,F){F=F||E(G);if(!G.isAnimated()||F==-1){return false;}G._onComplete.fire();B.splice(F,1);A-=1;if(A<=0){this.stop();}return true;};this.start=function(){if(C===null){C=setInterval(this.run,this.delay);}};this.stop=function(H){if(!H){clearInterval(C);for(var G=0,F=B.length;G<F;++G){this.unRegister(B[0],0);}B=[];C=null;A=0;}else{this.unRegister(H);}};this.run=function(){for(var H=0,F=B.length;H<F;++H){var G=B[H];if(!G||!G.isAnimated()){continue;}if(G.currentFrame<G.totalFrames||G.totalFrames===null){G.currentFrame+=1;if(G.useSeconds){D(G);}G._onTween.fire();}else{YAHOO.util.AnimMgr.stop(G,H);}}};var E=function(H){for(var G=0,F=B.length;G<F;++G){if(B[G]==H){return G;}}return -1;};var D=function(G){var J=G.totalFrames;var I=G.currentFrame;var H=(G.currentFrame*G.duration*1000/G.totalFrames);var F=(new Date()-G.getStartTime());var K=0;if(F<G.duration*1000){K=Math.round((F/H-1)*G.currentFrame);}else{K=J-(I+1);}if(K>0&&isFinite(K)){if(G.currentFrame+K>=J){K=J-(I+1);}G.currentFrame+=K;}};};YAHOO.util.Bezier=new function(){this.getPosition=function(E,D){var F=E.length;var C=[];for(var B=0;B<F;++B){C[B]=[E[B][0],E[B][1]];}for(var A=1;A<F;++A){for(B=0;B<F-A;++B){C[B][0]=(1-D)*C[B][0]+D*C[parseInt(B+1,10)][0];C[B][1]=(1-D)*C[B][1]+D*C[parseInt(B+1,10)][1];}}return[C[0][0],C[0][1]];};};(function(){var A=function(F,E,G,H){A.superclass.constructor.call(this,F,E,G,H);};A.NAME="ColorAnim";A.DEFAULT_BGCOLOR="#fff";var C=YAHOO.util;YAHOO.extend(A,C.Anim);var D=A.superclass;var B=A.prototype;B.patterns.color=/color$/i;B.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;B.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;B.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;B.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;B.parseColor=function(E){if(E.length==3){return E;}var F=this.patterns.hex.exec(E);if(F&&F.length==4){return[parseInt(F[1],16),parseInt(F[2],16),parseInt(F[3],16)];}F=this.patterns.rgb.exec(E);if(F&&F.length==4){return[parseInt(F[1],10),parseInt(F[2],10),parseInt(F[3],10)];}F=this.patterns.hex3.exec(E);if(F&&F.length==4){return[parseInt(F[1]+F[1],16),parseInt(F[2]+F[2],16),parseInt(F[3]+F[3],16)];
}return null;};B.getAttribute=function(E){var G=this.getEl();if(this.patterns.color.test(E)){var I=YAHOO.util.Dom.getStyle(G,E);var H=this;if(this.patterns.transparent.test(I)){var F=YAHOO.util.Dom.getAncestorBy(G,function(J){return !H.patterns.transparent.test(I);});if(F){I=C.Dom.getStyle(F,E);}else{I=A.DEFAULT_BGCOLOR;}}}else{I=D.getAttribute.call(this,E);}return I;};B.doMethod=function(F,J,G){var I;if(this.patterns.color.test(F)){I=[];for(var H=0,E=J.length;H<E;++H){I[H]=D.doMethod.call(this,F,J[H],G[H]);}I="rgb("+Math.floor(I[0])+","+Math.floor(I[1])+","+Math.floor(I[2])+")";}else{I=D.doMethod.call(this,F,J,G);}return I;};B.setRuntimeAttribute=function(F){D.setRuntimeAttribute.call(this,F);if(this.patterns.color.test(F)){var H=this.attributes;var J=this.parseColor(this.runtimeAttributes[F].start);var G=this.parseColor(this.runtimeAttributes[F].end);if(typeof H[F]["to"]==="undefined"&&typeof H[F]["by"]!=="undefined"){G=this.parseColor(H[F].by);for(var I=0,E=J.length;I<E;++I){G[I]=J[I]+G[I];}}this.runtimeAttributes[F].start=J;this.runtimeAttributes[F].end=G;}};C.ColorAnim=A;})();
/*
TERMS OF USE - EASING EQUATIONS
Open source under the BSD License.
Copyright 2001 Robert Penner All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
YAHOO.util.Easing={easeNone:function(B,A,D,C){return D*B/C+A;},easeIn:function(B,A,D,C){return D*(B/=C)*B+A;},easeOut:function(B,A,D,C){return -D*(B/=C)*(B-2)+A;},easeBoth:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B+A;}return -D/2*((--B)*(B-2)-1)+A;},easeInStrong:function(B,A,D,C){return D*(B/=C)*B*B*B+A;},easeOutStrong:function(B,A,D,C){return -D*((B=B/C-1)*B*B*B-1)+A;},easeBothStrong:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B*B*B+A;}return -D/2*((B-=2)*B*B*B-2)+A;},elasticIn:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return -(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;},elasticOut:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return B*Math.pow(2,-10*C)*Math.sin((C*F-D)*(2*Math.PI)/E)+G+A;},elasticBoth:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F/2)==2){return A+G;}if(!E){E=F*(0.3*1.5);}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}if(C<1){return -0.5*(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;}return B*Math.pow(2,-10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E)*0.5+G+A;},backIn:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*(B/=D)*B*((C+1)*B-C)+A;},backOut:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*((B=B/D-1)*B*((C+1)*B+C)+1)+A;},backBoth:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}if((B/=D/2)<1){return E/2*(B*B*(((C*=(1.525))+1)*B-C))+A;}return E/2*((B-=2)*B*(((C*=(1.525))+1)*B+C)+2)+A;},bounceIn:function(B,A,D,C){return D-YAHOO.util.Easing.bounceOut(C-B,0,D,C)+A;},bounceOut:function(B,A,D,C){if((B/=C)<(1/2.75)){return D*(7.5625*B*B)+A;}else{if(B<(2/2.75)){return D*(7.5625*(B-=(1.5/2.75))*B+0.75)+A;}else{if(B<(2.5/2.75)){return D*(7.5625*(B-=(2.25/2.75))*B+0.9375)+A;}}}return D*(7.5625*(B-=(2.625/2.75))*B+0.984375)+A;},bounceBoth:function(B,A,D,C){if(B<C/2){return YAHOO.util.Easing.bounceIn(B*2,0,D,C)*0.5+A;}return YAHOO.util.Easing.bounceOut(B*2-C,0,D,C)*0.5+D*0.5+A;}};(function(){var A=function(H,G,I,J){if(H){A.superclass.constructor.call(this,H,G,I,J);}};A.NAME="Motion";var E=YAHOO.util;YAHOO.extend(A,E.ColorAnim);var F=A.superclass;var C=A.prototype;C.patterns.points=/^points$/i;C.setAttribute=function(G,I,H){if(this.patterns.points.test(G)){H=H||"px";F.setAttribute.call(this,"left",I[0],H);F.setAttribute.call(this,"top",I[1],H);}else{F.setAttribute.call(this,G,I,H);}};C.getAttribute=function(G){if(this.patterns.points.test(G)){var H=[F.getAttribute.call(this,"left"),F.getAttribute.call(this,"top")];}else{H=F.getAttribute.call(this,G);}return H;};C.doMethod=function(G,K,H){var J=null;if(this.patterns.points.test(G)){var I=this.method(this.currentFrame,0,100,this.totalFrames)/100;J=E.Bezier.getPosition(this.runtimeAttributes[G],I);}else{J=F.doMethod.call(this,G,K,H);}return J;};C.setRuntimeAttribute=function(P){if(this.patterns.points.test(P)){var H=this.getEl();var J=this.attributes;var G;var L=J["points"]["control"]||[];var I;var M,O;if(L.length>0&&!(L[0] instanceof Array)){L=[L];}else{var K=[];for(M=0,O=L.length;M<O;++M){K[M]=L[M];}L=K;}if(E.Dom.getStyle(H,"position")=="static"){E.Dom.setStyle(H,"position","relative");}if(D(J["points"]["from"])){E.Dom.setXY(H,J["points"]["from"]);
}else{E.Dom.setXY(H,E.Dom.getXY(H));}G=this.getAttribute("points");if(D(J["points"]["to"])){I=B.call(this,J["points"]["to"],G);var N=E.Dom.getXY(this.getEl());for(M=0,O=L.length;M<O;++M){L[M]=B.call(this,L[M],G);}}else{if(D(J["points"]["by"])){I=[G[0]+J["points"]["by"][0],G[1]+J["points"]["by"][1]];for(M=0,O=L.length;M<O;++M){L[M]=[G[0]+L[M][0],G[1]+L[M][1]];}}}this.runtimeAttributes[P]=[G];if(L.length>0){this.runtimeAttributes[P]=this.runtimeAttributes[P].concat(L);}this.runtimeAttributes[P][this.runtimeAttributes[P].length]=I;}else{F.setRuntimeAttribute.call(this,P);}};var B=function(G,I){var H=E.Dom.getXY(this.getEl());G=[G[0]-H[0]+I[0],G[1]-H[1]+I[1]];return G;};var D=function(G){return(typeof G!=="undefined");};E.Motion=A;})();(function(){var D=function(F,E,G,H){if(F){D.superclass.constructor.call(this,F,E,G,H);}};D.NAME="Scroll";var B=YAHOO.util;YAHOO.extend(D,B.ColorAnim);var C=D.superclass;var A=D.prototype;A.doMethod=function(E,H,F){var G=null;if(E=="scroll"){G=[this.method(this.currentFrame,H[0],F[0]-H[0],this.totalFrames),this.method(this.currentFrame,H[1],F[1]-H[1],this.totalFrames)];}else{G=C.doMethod.call(this,E,H,F);}return G;};A.getAttribute=function(E){var G=null;var F=this.getEl();if(E=="scroll"){G=[F.scrollLeft,F.scrollTop];}else{G=C.getAttribute.call(this,E);}return G;};A.setAttribute=function(E,H,G){var F=this.getEl();if(E=="scroll"){F.scrollLeft=H[0];F.scrollTop=H[1];}else{C.setAttribute.call(this,E,H,G);}};B.Scroll=D;})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.7.0",build:"1799"});
/**
* FD.widget.SidePoper
*
* 边界浮出类
* 限制：
* 		1、此类对象限于viewport边界附近的浮出和隐去
* 		2、必须包含js/core/fdev.js(不依赖js/core/yui/animation.js)
* 		3、如果未提供必要的css设置（触点样式）则还需要包含css/widget/sidepoper.css文件
* 调用方法：
FD.widget.SidePoper.init('SidePop-1','http://blog.china.alibaba.com/misc/pop/searchPop.html?keywords=mp3',{dockSide:0,baseline:1,bias:300,expandDir:0,initWidth:353,initHeight:280,remainArea:26});
FD.widget.SidePoper.init('SidePop-2','<div>...</div>',{dockSide:0,baseline:1,bias:300,expandDir:0,initWidth:353,initHeight:280,remainArea:26});
*
*
* @author 	balibell
* @link    http://www.fdev-lib.cn/
*/
FD.widget.SidePop = function (id,cont,cfg){
this.init(id,cont,cfg);
}
FD.widget.SidePop.defConfig = {
originWidth : null,						/* 对象区域完全宽度 */
originHeight : null,					/* 对象区域完全高度 */
initWidth : null,						/* 对象区域初始宽度 */
initHeight : null,						/* 对象区域初始高度 */
remainArea : 32,						/* 收起后，保留的区域宽度 */
initTop : null,							/* 对象初始的top值 默认为null值情况下，如果baseline==1 则浮出对象从底部弹出*/
btnset : 3,								/* 设置功能按钮 0-无 1-有关闭功能 2-有展开缩小功能 3-有前面两个功能*/
scroll : 1,								/* 是否跟随滚动轴滚动 1-是 0-否*/
initExe : 0,							/* 初始化完毕执行的方法 0-不执行任何方法 1-执行maxIt() 2-执行minIt() 3-执行close()*/
exeDelay : 0,							/* 初始化完毕执行的方法 延迟执行 ms为单位*/
doAfterClose : null,					/* 关闭后执行 */
dockSide : 1,							/* 停靠方向 0-左边停靠  >1-右边停靠*/
departure : 0,							/* 偏离停靠边的距离 值为center时 居中*/
baseline : 0,							/* 0:上基线-viewport上边界；1:下基线-viewport下边界；2:上基线，原位置顶部之下开始随滚动轴滚动 */
isFixed : 0,							/* 是否使用position:fixed 属性*/
bias :0,								/* 偏离基线的距离 值为middle时 居中*/
expandDir : 0,							/* 展开方向 0-上下 1-左右*/
expandSpeed : 0.1,						/* 展开或隐去的速度 */
floatSpeed : 0.2,						/* 滚动跟随的速度 */
defaultShell : 0,						/* 0-无外框 1-使用默认的外框 */
shellBlank : 8,							/* 当defaultShell 生效时，此参数表示外框和内容间非展开方向上的留白 */
zIndex : 1000							/* 浮出层zindex */
};
//SidePop类 purge 函数，可根据对象id purge 对象或，全部 purge
FD.widget.SidePop.purge = function (id){
//实例化该类的purge 对象
var p = new FD.widget.SidePop('sidePop-purge','',{});
var i = p.registry.length;
while( i-- > 0 ){
if(id && p.registry[i].obj.id == id ){ //如果根据id 查找到相应对象
p.registry[i].close(); //目标对象关闭
p.close();	//purge 对象关闭
p.registry.pop(); //对象注册数组弹出 purge 对象
p.registry[i] = p.registry[p.registry.length-1]; //目标对象置换到对象注册数组尾部
p.registry.pop();//弹出目标对象
return;
}else if(!id){
p.registry[i].close(); //如果没有传入特定id，循环关闭所有对象
}
}
p.close();//purge 对象关闭
if( id && i == 0 ){
p.registry.pop(); //有传入id，但未寻获与id对应的对象，则执行 对象注册数组弹出 purge 对象
}else{
p.registry = []; //未传入id，清空对象注册数组。 还有一种情况，传入了id，并且寻找到对象，在之上 return 出去了
}
}
FD.widget.SidePop.prototype = {
registry : [],
init: function (id,cont,cfg){
this.config = FD.common.applyIf(cfg||{}, FD.widget.SidePop.defConfig);
/*************************
功能区字符串生成
*************************/
var btns = ['none','none','none'];
//根据btnset 设置功能区按钮
if(this.config.btnset == 1){
btns[2] = '';
}else if(this.config.btnset == 2){
btns[0] = '';
}else if(this.config.btnset > 2){
btns[2] = '';
btns[0] = '';
}
//浮出控制栏字符串，提供关闭、最小化、还原功能，依赖样式
var strBar = ['<div id="',id,'-bar" class="f-sidebar"><a id="',id,'-min" class="f-sidemin" style="display:',btns[0],'" href="javascript:void(0)" target="_self"></a><a id="',id,'-res" class="f-sideres" style="display:',btns[1],'" href="javascript:void(0)" target="_self"></a><a id="',id,'-close" class="f-sideclose" style="display:',btns[2],'" href="javascript:void(0)" target="_self"></a></div>'].join('');
/*************************
创建对象节点
*************************/
//如果对象id不存在，新建div，为浮出层最外层div，并设置其id
if(!(this.obj = FYG(id))){
//如果未设置初始宽（高）度，则取值100
this.config.initWidth = this.config.initWidth || 100;
this.config.initHeight = this.config.initHeight || 100;
this.config.originWidth = this.config.originWidth || this.config.initWidth;
this.config.originHeight = this.config.originHeight || this.config.initHeight;
this.obj = document.createElement('div');
this.obj.id = id;
//页面加载对象
document.body.appendChild(this.obj);
var d = this.config.defaultShell;
var strShellTop = d ? '<div class="f-sidepop"><div class="tt f-sidepop-tt"><div class="ttl"></div><div class="ttr"></div><div class="ttc">'+d+'<p></p></div><div class="ttr"></div></div><div class="f-sidepop-cont"><div class="f-sidepop-contin">' : '';
var strShellBot =  d ? '' : '</div></div></div>'
var s = d ? this.config.expandDir == 0 ? [this.config.shellBlank,this.config.remainArea] : [this.config.remainArea,this.config.shellBlank] : [0,0];
var cw = [];
cw[0] = this.config.expandDir == 1 && d ? this.config.initWidth : this.config.originWidth;
cw[1] = this.config.expandDir == 0 && d ? this.config.initHeight : this.config.originHeight;
//浮出内容字符串 strCont
//情况1：传入cont 为url地址，调用 iframe 模式
//情况2：传入cont 为html代码，调用非 iframe 模式
var strCont = cont.match(/^http:\/\//g) ?
/*  iframe 模式*/['<iframe id="',id,'-cont" src="',cont,'" frameborder="0" scrolling="no" width="',cw[0] - s[0],'" height="',cw[1]  - s[1],'" ></iframe>'].join('') :
/*非iframe 模式*/['<div id="',id,'-cont" style="overflow:hidden;width:',cw[0] - s[0],'px;height:',cw[1] - s[1],'px;">',cont,'</div>'].join('');
//装载内容，浮出内容字符串 + 浮出控制栏字符串
this.obj.innerHTML = [strShellTop,strCont,strShellBot,strBar].join('');
}else{
if(YAHOO.lang.isString(cont) && cont){
if(cont.match(/^http:\/\//g)){
//iframe 模式
FYG(id+'-cont').src = cont;
}else{
//普通容器模式
FYG(id+'-cont').innerHTML = cont;
}
}
this.obj.style.display = 'block';
//如果未设置初始宽（高）度，则取值offsetWidth（offsetHeight）
var w =  parseInt(0 + FYD.getStyle(this.obj,'borderLeftWidth')) + parseInt(0 + FYD.getStyle(this.obj,'borderRightWidth'))
this.config.initWidth = this.config.initWidth || this.obj.offsetWidth - w;
this.config.initHeight = this.config.initHeight || this.obj.offsetHeight - w;
this.config.originWidth = this.config.originWidth || this.config.initWidth;
this.config.originHeight = this.config.originHeight || this.config.initHeight;
//为已存在的对象添加功能区（最小化、还原、关闭）
var barobj = document.createElement('span');
barobj.innerHTML = strBar;
this.obj.appendChild(barobj);
}
this.expandObj = d ? FYG(id+'-cont') : this.obj;
/*************************
对象基本属性设置
*************************/
this.obj.style.position = 'absolute';
this.obj.style.overflow = 'hidden';
this.obj.style.zIndex = this.config.zIndex;
this.obj.style.width = this.config.initWidth + 'px';
this.obj.style.height = this.config.initHeight + 'px';
this.config.departure = this.config.departure == 'center' ? ( FYD.getViewportWidth() - this.obj.offsetWidth )/2 : this.config.departure;
this.config.bias = this.config.bias == 'middle' ? ( FYD.getViewportHeight() - this.obj.offsetHeight )/2 : this.config.bias;
if(YAHOO.env.ua.ie == 6 && this.config.baseline == 0 || YAHOO.env.ua.ie == 7 && this.config.baseline == 1 || YAHOO.env.ua.opera && this.config.baseline == 0){
this.config.bias += 2
}else if(YAHOO.env.ua.ie == 6 && this.config.baseline == 1 || YAHOO.env.ua.opera && this.config.baseline == 1){
this.config.bias -= 2
}
this.obj.style.left = this.config.dockSide ? 'auto' : this.config.departure + 'px';
this.obj.style.right = this.config.dockSide ? this.config.departure + 'px' : 'auto';
/*************************
功能区按钮事件绑定
*************************/
//临时对象，方便事件绑定。以下绑定功能区按钮相关事件
var _this = this;
//关闭按钮事件绑定
FYE.on(_this.obj.id+'-close','click',function (){
_this.close();
_this.doAfterClose();
return false;
});
//最小化按钮事件绑定
FYE.on(_this.obj.id+'-min','click',function (){
_this.minIt();
return false;
});
//恢复按钮事件绑定
FYE.on(_this.obj.id+'-res','click',function (){
_this.maxIt();
return false;
});
/*************************
随滚动轴滚动的参数设定
*************************/
//设置初始状态的top 值，之前已设置过 position:absolute;
this.obj.style.top =  (this.config.initTop == null ? this.config.baseline == 0 ? 0 : FYD.getViewportHeight() + FYD.getDocumentScrollTop() : this.config.initTop) + 'px';
this.firstScroll = this.lastScroll = -this.config.bias; //firstScroll lastScroll 在 scrollWidth 方法中使用
if(this.config.baseline == 2){//如果 baseline == 2 当滚动轴滚动至对象原来位置的下方，开始有效浮动
this.obj.style.top = 0;
this.obj.style.position = 'relative';
//this is new
if(this.config.isFixed == 1){
this.firstLeftX = FYD.getX(this.obj);
var vhold = document.createElement('div');
this.obj.parentNode.insertBefore(vhold,this.obj);
vhold.appendChild(this.obj);
FYD.setStyle(vhold,'height',this.obj.offsetHeight + 'px');
}
///////////////////
}else if(this.config.baseline == 1){//如果 baseline == 1 基线为viewport 底部，此时bias 为距离底部的高度
this.lastScroll = this.obj.offsetHeight - FYD.getViewportHeight() -  FYD.getDocumentScrollTop();
this.firstScroll = this.lastScroll - this.config.bias;
}
this.aTop =  FYD.getY(this.obj);
//timer控制器，在最小化、恢复原状过程中起作用
this.expandTimer = null;
//timer控制器，在滚动跟随过程中起作用
this.scrollTimer = null;
//this.expandObj 对象当前高（宽）度，在显示或隐去过程中改变，与对象高度实时保持一致
//当defaultShell 生效时，this.expandObj 指代内容对象，不包括外框。
if(this.config.expandDir == 0){ //垂直方向展开收拢
this.size = d ? this.config.initHeight - this.config.remainArea : this.config.initHeight;
}else if(this.config.expandDir == 1){//水平方向展开收拢
this.size = d ? this.config.initWidth - this.config.remainArea : this.config.initWidth;
}
//根据initExe设置执行相关方法
if(this.config.initExe == 1){
setTimeout(function (){
_this.maxIt();
},this.config.exeDelay)
}else if(this.config.initExe == 2){
setTimeout(function (){
_this.minIt();
},this.config.exeDelay)
}else if(this.config.initExe == 3){
setTimeout(function (){
if(FYD.getStyle(this.obj,'display') == 'none'){return}
_this.close();
_this.doAfterClose();
},this.config.exeDelay)
}
//根据scroll设置执行相关方法
if(this.config.scroll){
this.scrollWith();
}
this.registry.push(this) //将新对象 push 入对象注册数组，即注册新对象
},
/*
功能区功能之 关闭功能
*/
close: function (){
//清除各种timer
clearTimeout(this.expandTimer);
clearInterval(this.scrollTimer);
FYE.purgeElement(this.obj.id+'-res')
FYE.purgeElement(this.obj.id+'-min')
FYE.purgeElement(this.obj.id+'-close')
//将对象设为隐藏
FYD.setStyle(this.obj,'display','none');
var tmp;
if(tmp=FYG(this.obj.id+'-bar')){
FYG(this.obj.id+'-bar').parentNode.removeChild(tmp)
}
},
/*
关闭功能辅助，关闭后执行
*/
doAfterClose: function (){
if(YAHOO.lang.isFunction(this.config.doAfterClose)){
this.config.doAfterClose();
}
},
/*
功能区功能之 最小化功能
*/
minIt: function (){
var _this = this;
//		if(FYU.Anim){
//			var an = _this.config.expandDir ? new FYU.Anim(_this.obj,{
//				width : { from : _this.size , to : _this.config.remainArea }
//			},2*_this.config.expandSpeed) : new FYU.Anim(_this.obj,{
//				height : { from : _this.size , to : _this.config.remainArea }
//			},2*_this.config.expandSpeed)
//			an.animate();
//			an.onComplete.subscribe(function (){
//				//设置最小化、恢复等功能区按钮状态
//				FYD.setStyle(_this.obj.id+'-min','display','none');
//				FYD.setStyle(_this.obj.id+'-res','display','block');
//			});
//			an.onTween.subscribe(function (){
//				_this.size = _this.config.expandDir ? parseInt(_this.obj.style.width) : parseInt(_this.obj.style.height);
//			});
//		}else{
//最小化过程函数，递归调用自身，满足条件跳出递归
(function _minIt(){
var theRemain = _this.config.defaultShell ? 0 : _this.config.remainArea;
var condition = [_this.size <= theRemain];
//满足条件跳出递归，条件1：对象当前高度小于等于对象预留高（宽）度（仅显示标题状态）
if(condition[0]){
window.clearTimeout(_this.expandTimer);
//设置最小化、恢复等功能区按钮状态
FYD.setStyle(_this.obj.id+'-min','display','none');
FYD.setStyle(_this.obj.id+'-res','display','block');
//innerCall(0);
//跳出递归
return;
}
//计算每单位时间内移动的距离，其值等于伪速率乘以对象当前高度
var len = _this.config.expandSpeed * _this.size;
len = len < 1 ? 1 : len;
//对象当前高度数值计算，满足条件1，其值等于对象预留高（宽）度，不满足条件1，其值自减len
_this.size = _this.size - len <= theRemain ? theRemain : _this.size - len;
//设置对象高度
if( _this.config.expandDir ){
_this.expandObj.style.width = _this.size + 'px';
if( _this.config.defaultShell ){
_this.obj.style.width = _this.size + _this.config.remainArea + 'px'
}
}else{
_this.expandObj.style.height = _this.size + 'px';
if( _this.config.defaultShell ){
_this.obj.style.height = _this.size + _this.config.remainArea + 'px'
}
}
//递归调用自身
_this.expandTimer = window.setTimeout(_minIt,10);
})();
//		}
},
/*
功能区功能之 还原功能
*/
maxIt: function (){
var _this = this;
//		if(FYU.Anim){
//			var an = _this.config.expandDir ? new FYU.Anim(_this.obj,{
//				width : { from : _this.size , to : _this.config.originWidth }
//			},2*_this.config.expandSpeed) : new FYU.Anim(_this.obj,{
//				height : { from : _this.size , to : _this.config.originHeight }
//			},2*_this.config.expandSpeed);
//			an.animate();
//			an.onComplete.subscribe(function (){
//				//设置最小化、恢复等功能区按钮状态
//				FYD.setStyle(_this.obj.id+'-min','display','block');
//				FYD.setStyle(_this.obj.id+'-res','display','none');
//			});
//			an.onTween.subscribe(function (){
//				_this.size = _this.config.expandDir ? parseInt(_this.obj.style.width) : parseInt(_this.obj.style.height);
//			});
//		}else{
//最小化过程函数，递归调用自身，满足条件跳出递归
(function _maxIt(){
var theOrigin = _this.config.expandDir ?  _this.config.originWidth : _this.config.originHeight;
theOrigin -= _this.config.defaultShell ? _this.config.remainArea : 0;
var condition = [_this.size >= theOrigin]
//满足条件跳出递归，条件1：对象当前高度大于等于对象原始高度（完全显示状态）
if(condition[0]){
window.clearTimeout(_this.expandTimer);
//设置最小化、恢复等功能区按钮状态
FYD.setStyle(_this.obj.id+'-min','display','block');
FYD.setStyle(_this.obj.id+'-res','display','none');
//					FYD.setStyle(_this.obj,'visibility','hidden');
//					FYD.setStyle(_this.obj,'visibility','visible');
//跳出递归
return;
}
//计算每单位时间内移动的距离，其值等于伪速率乘以对象原始高度，为匀速
var len = _this.config.expandSpeed * theOrigin;
len = len < 1 ? 1 : len;
_this.size = _this.size + len >= theOrigin ? theOrigin : _this.size + len;
//设置对象高度
if( _this.config.expandDir ){
_this.expandObj.style.width = _this.size + 'px';
if( _this.config.defaultShell ){
_this.obj.style.width = _this.size + _this.config.remainArea + 'px'
}
}else{
_this.expandObj.style.height = _this.size + 'px';
if( _this.config.defaultShell ){
_this.obj.style.height = _this.size + _this.config.remainArea + 'px'
}
}
//递归调用自身
_this.expandTimer = window.setTimeout(_maxIt,10);
})();
//		}
},
/*
浮动对象随滚动轴滚动
*/
scrollWith : function(){
var _this = this;
//this is new
if(YAHOO.env.ua.ie != 6 && _this.config.baseline != 2  && _this.config.isFixed == 1){
FYD.setStyle(_this.obj,'position','fixed');
return;
}
//////////////
_this.scrollTimer = window.setInterval(function (){
var dscrtop = FYD.getDocumentScrollTop();
var a = _this.config.baseline;
var perlen;
var fall = _this.obj.offsetHeight - FYD.getViewportHeight();
fall  = fall < 0 ? 0 : fall;
if(a == 0){//baseline == 0 以viewport 顶部为基线
perlen = _this.config.floatSpeed*(dscrtop - _this.lastScroll - _this.aTop - fall);
}else if(a == 1){//baseline == 1  以viewport 底部为基线
perlen = _this.config.floatSpeed*(- _this.lastScroll  + _this.firstScroll + FYD.getViewportHeight() + dscrtop - _this.obj.offsetHeight - _this.aTop );
}else{//baseline == 2 特殊处理 以viewport 顶部为基线
//this is new
var tmpsp = _this.config.floatSpeed*(dscrtop - _this.aTop - _this.lastScroll - fall);
if(dscrtop - _this.aTop > 0 || (FYD.getY(_this.obj)) > _this.aTop){
if(YAHOO.env.ua.ie != 6 && _this.config.isFixed == 1){
perlen = 0;
FYD.setStyle(_this.obj,'position','fixed');
FYD.setStyle(_this.obj,'left',_this.firstLeftX + 'px');
}else{
perlen = tmpsp;
}
}else{
if(YAHOO.env.ua.ie != 6 && _this.config.isFixed == 1){
perlen = 0;
FYD.setStyle(_this.obj,'position','relative');
FYD.setStyle(_this.obj,'left',0);
}else{
perlen = 0;
}
}
//////////////
}
if( perlen > -0.2 && perlen < 0.2 ){
return
}else{
perlen = perlen>0 ? Math.ceil(perlen) : perlen=Math.floor(perlen)
}
_this.obj.style.top = parseInt(_this.obj.style.top) + perlen + "px"
if(a > 1 && parseInt(_this.obj.style.top) <= 0){//baseline == 2 特殊处理 以viewport 顶部为基线
_this.obj.style.top = 0;
_this.lastScroll = _this.firstScroll;
}else{
_this.lastScroll += perlen;
}
},10);
}
}
/**
* SidePoper 的封装，创建不同的 SidePop 对象
*/
FD.widget.SidePoper = new function() {
this.init = function(id,cont,cfg) {
return new FD.widget.SidePop(id,cont,cfg);
}
}
;(function(){
FD.namespace('HolesaleHeadTp');
var SELLER_AREA_TIME = null;
FD.HolesaleHeadTp={
/**
* 导航初始化集合
*/
init:function(){
with(FD.HolesaleHeadTp){
writeLoginInfo();
navInit();
sellerAreaInit();
setHome();
addFav();
selectType();
searchInput();
setheadUrl();
}
},
/**
* 统一替换小额批发标题对应的链接
*/
setheadUrl:function(){
$D.getElementsByClassName('pf-logo')[0].getElementsByTagName('A')[0].href = "http://page.china.alibaba.com/cp/cp4.html";
},
/**
* 用户登录信息操作
*/
writeLoginInfo:function(){
if(getCookie('__last_loginid__')){
$D.get('user-nick').innerHTML = getCookie('__last_loginid__');
if(getCookie('__cn_logon__') && getCookie('__cn_logon__')==='true')	{
$D.setStyle(['ali-login','ali-register'],'display','none');
$D.setStyle(['ali-loginout'],'display','inline');
}
}
/**
* 获取cookie
* @method getCookie
*/
function getCookie(name) {
var value = document.cookie.match('(?:^|;)\\s*'+name+'=([^;]*)');
return value ? unescape(value[1]): '';
}
},
/**
* 快速导航tab事件处理
*/
navInit:function(){
var re_class_name = /j-cureent|j-cureent-l/;
$E.on($$('#pf-trade li'),'mouseover',function(){
if(!re_class_name.test(this.className)){
if(this.getAttribute('islong')=='true'){
$D.addClass(this,'j-hover-l');
}else{
$D.addClass(this,'j-hover');
}
}
});
$E.on($$('#pf-trade li'),'mouseout',function(){
if(!re_class_name.test(this.className)){
$D.removeClass(this,'j-hover-l');
$D.removeClass(this,'j-hover');
}
});
},
/**
* 买家专区浮动层事件处理
*/
sellerAreaInit:function(){
$E.on('seller-area','mouseover',function(){
clearTimeout(SELLER_AREA_TIME);
$D.setStyle('seller-tool','display','block');
if(!$('pf-c-nav'))$D.setStyle('pf-es','display','none');
});
$E.on('seller-area','mouseout',function(){
SELLER_AREA_TIME = setTimeout(function(){
$D.setStyle('seller-tool','display','none');
if(!$('pf-c-nav'))$D.setStyle('pf-es','display','block');
},200);
});
$E.on('seller-tool','mouseover',function(){
clearTimeout(SELLER_AREA_TIME);
if(!$('pf-c-nav'))$D.setStyle('pf-es','display','none');
});
$E.on('seller-tool','mouseout',function(){
SELLER_AREA_TIME = setTimeout(function(){
$D.setStyle('seller-tool','display','none');
if(!$('pf-c-nav'))$D.setStyle('pf-es','display','block');
},200);
});
$E.on($$("#seller-tool li"),'mouseover',function(){
$D.addClass(this,'pf-hover');
});
$E.on($$("#seller-tool li"),'mouseout',function(){
$D.removeClass(this,'pf-hover');
});
$E.on($$('#pf-assistant li'),'mouseover',function(){
if(this.id!='seller-area'){
$D.addClass(this,'p-hover');
}
});
$E.on($$('#pf-assistant li'),'mouseout',function(){
if(this.id!='seller-area'){
$D.removeClass(this,'p-hover');
}
});
$D.addClass($D.getLastChild($D.getFirstChild('seller-tool')),'pb-last');
},
/**
* 设为首页(非IE下，调整为加入收藏夹)
*/
setHome:function(){
var t = document.title, u = 'http://page.china.alibaba.com/cp/cp4.html';
$E.on($('set-home'),'click',function(e){
$E.preventDefault(e);
try{
if(YAHOO.env.ua.ie){
this.style.behavior = 'url(#default#homepage)';
this.setHomePage(u);
}else{
if (window.sidebar) {
window.sidebar.addPanel(t, u, '');
} else if( window.external ) {
window.external.AddFavorite(u, t);
}
}
}catch(e){};
});
},
/**
* 加入收藏夹
*/
addFav:function() {
$E.on('add-fav','click',function(e){
$E.preventDefault(e);
try {
var title = document.title;
var url = window.location.href;
if (window.sidebar) {
window.sidebar.addPanel(title, url, '');
} else if (window.external) {
window.external.AddFavorite(url, title);
}
} catch (e) {}
});
},
/**
* 动态模拟下拉框操作
*/
selectType:function(){
$E.on($$('#j-type-list li'),'mouseover',function(){
$D.setStyle(this,'backgroundColor','#FCD9BB');
});
$E.on($$('#j-type-list li'),'mouseout',function(){
$D.setStyle(this,'backgroundColor','#fff');
});
$E.on($$('#j-type-list li'),'click',function(){
$('j-current-type').innerHTML = this.innerHTML;
$D.setStyle('j-type-list','display','none');
$D.setStyle('j-current-type','borderBottom','none');
if(this.getAttribute('type')=='pf'){
$('j-alisearch').action = 'http://search.china.alibaba.com/search/business_search.htm';
}else{
$('j-alisearch').action = 'http://search.china.alibaba.com/search/offer_search.htm';
}
});
$E.on('j-current-type','click',function(){
$D.setStyle('j-type-list','display','block');
$D.setStyle(this,'borderBottom','1px solid #fff');
});
$E.on(document,'click',function(e) {
var currentDiv=$E.getTarget(e);
try{
while(currentDiv!=document) {
if(currentDiv.id==='j-current-type') {
return;
} else {
currentDiv=currentDiv.parentNode;
}
}
$D.setStyle('j-type-list','display','none');
$D.setStyle('j-current-type','borderBottom','none');
}catch(e){}
});
},
/**
* 搜索框时间操作
*/
searchInput:function(){
$E.on('jsearch-input-tab','focus',function(){
if(this.value=='请输入关键字'){
this.value='';
this.style.color='#000';
}
});
},
/**
* 设置导航一级某个tab选中
* @param {String} 导航tab id
*/
initRootNavigation:function(id){
if($(id)){
if($(id).getAttribute("islong")){
$D.addClass(id,"j-cureent-l")
}else{
$D.addClass(id,"j-cureent")
}
}
if(!$('pf-c-nav')||$D.getStyle('pf-c-nav','display')=='none'){
$D.setStyle(['pf-ws','pf-es'],'display','block');
}
},
/**
* 设置一级导航右侧tab选中
* @param {int} 从左到右第几个
*/
initRightNavgation:function(num){
var lis = $("pf-assistant").getElementsByTagName('li');
if(num>=0&&num<lis.length){
$D.addClass(lis[num],"pf-hover");
}
},
/**
* 设置导航二级左侧和右侧的tab选中
* @param {Array|String}
*/
initQuickNav:function(tabArr){
if(YAHOO.lang.isArray(tabArr)){
for(var i = 0,l =tabArr.length; i<tabArr.length;i++){
if($(tabArr[i])){
$D.addClass(tabArr[i],"j-select");
}
}
}else if(YAHOO.lang.isString(tabArr)&&$(tabArr)){
$D.addClass(tabArr,"j-select")
}else{
return;
}
},
/**
* 表单提交验证
*/
searchFormSubmit:function(){
if(YAHOO.lang.trim($('jsearch-input-tab').value)=="请输入关键字"||YAHOO.lang.trim($('jsearch-input-tab').value)==''){
alert('请输入关键字');
$('jsearch-input-tab').focus();
return false;
}else{
return true;
}
}
}
})();
/**
* 重写slider
*/
/**
* 初始化对象属性和行为
* @method init
* @param {Object} container 容器对象或ID
* @param {Object} config 配置参数
*/
FD.widget.Slide = function(container, config) {
this.init(container, config);
}
FD.widget.Slide.defConfig = {
sliderClass: 'f-slider',			/* 幻灯影片ul的className */
triggersClass: 'f-slider-triggers',	/* 触点的className */
currentClass: 'current',			/* 当前触点的className */
eventType: 'click',					/* 触点接受的事件类型，默认是鼠标点击 */
btnEventType:'mouse',
timeDelay: 3,						/* 自动播放时间间隔 */
isAutoPlay: true,					/* 禁止自动播放 */
sliderHeight:null					/* 只有当无法正确获取高宽时，才需要设定 */,
previousBtn:"",
nextBtn:""
};
FD.widget.Slide.prototype = {
/**
* 初始化对象属性和行为
* @method init
* @param {Object} container 容器对象或ID
* @param {Object} config 配置参数
*/
init: function(container, config) {
this.container = $(container);
this.config = FD.common.applyIf(config||{}, FD.widget.Slide.defConfig);
//获取ul列表（幻灯片组）
this.slidesUL = $D.getElementsByClassName(this.config.sliderClass, 'ul', this.container)[0];
if(!this.slidesUL) {
//取第一个 ul 子节点
this.slidesUL = $D.getFirstChild(this.container, function(node) {
return node.tagName.toLowerCase === 'ul';
});
}
this.slides = $D.getChildren(this.slidesUL); 	//只取直接的子<li>元素
if (this.slides.length <= 0) return;			//如果为空直接退出
this.delayTimeId = null;		/* eventType = 'mouse' 时，延迟的TimeId */
this.autoPlayTimeId = null;		/* 自动播放TimeId */
this.curSlide = -1;
this.sliding = false;	/* 滚动状态 */
this.pause = false;		/* 暂停状态 */
// 指定 fdev-Lib/css/widget/slider.css 中设定的 className
$D.addClass(this.container, this.config.sliderClass);
$D.addClass(this.slidesUL, 'f-slider-list');
$D.setStyle(this.slidesUL, 'height', (this.config.sliderHeight || this.container.offsetHeight) + 'px');
this.initSlides(); 		// 初始化幻灯片设置
this.initTriggers();	// 初始化触点设置
this.play(1);			// 从第一个开始滚动
this.npPlay();
if (this.config.isAutoPlay) this.autoPlay();
if (YAHOO.lang.isFunction(this.config.onInit)) this.config.onInit.call(this);
},
/**
* 根据幻灯片长度自动生成触点，包含在一个<ul>中，页面中CSS中必须有对应属性设置
* @method initTriggers
*/
initTriggers: function() {
var ul = document.createElement('ul');
ul.id=this.config.triggersClass;
this.container.appendChild(ul);
for (var i = 0, len = this.slides.length; i < len; ++i) {
var li = document.createElement('li');
li.innerHTML = i+1;
ul.appendChild(li);
}
$D.addClass(ul, this.config.triggersClass);
this.triggersUL = ul;	/* 将生成的ul列表赋值给触点 */
if (this.config.eventType == 'mouse') {
$E.on(this.triggersUL, 'mouseover', this.mouseHandler, this, true);
$E.on(this.triggersUL, 'mouseout', function(e){
clearTimeout(this.delayTimeId);
this.pause = false;
}, this, true);
} else {
$E.on(this.triggersUL, 'click', this.clickHandler, this, true);
}
},
/**
* 初始化幻灯片
* @method initSlides
*/
initSlides: function() {
$E.on(this.slides, 'mouseover', function(){this.pause = true;}, this, true);
$E.on(this.slides, 'mouseout', function(){this.pause = false;}, this, true);
$D.setStyle(this.slides, 'display', 'none');
},
/**
* 点击事件处理
* @param {Object} e Event对象
*/
clickHandler: function(e) {
var t = $E.getTarget(e);
var idx = parseInt(FD.common.stripTags(t.innerHTML));
//冒泡检查
while(t != this.container) {
if(t.nodeName.toUpperCase() == "LI") {
if (!this.sliding){
this.play(idx, true);
}
break;
} else {
t = t.parentNode;
}
}
},
/**
* 鼠标事件处理
* @param {Object} e Event 对象
*/
mouseHandler: function(e) {
var t = $E.getTarget(e);
var idx = parseInt(FD.common.stripTags(t.innerHTML));
while(t != this.container) {
if(t.nodeName.toUpperCase() == "LI") {
var self = this;
this.delayTimeId = setTimeout(function() {
self.play(idx, true);
self.pause = true;
}, (self.sliding?.5:.1)*1000);
break;
} else {
t = t.parentNode;
}
}
},
/**
* 播放指定页的幻灯片
* @param {Object} n 页数，也就是触点数字值
* @param {Object} flag 如果flag=true，则是用户触发的，反之则为自动播放
*/
play: function(n, flag) {
n = n - 1;
if (n == this.curSlide) return;	//如果就是当前项则直接退出
var curSlide = this.curSlide >= 0 ? this.curSlide : 0;
if (flag && this.autoPlayTimeId) clearInterval(this.autoPlayTimeId);
var triggersLis = this.triggersUL.getElementsByTagName('li');
if(triggersLis[curSlide]){
triggersLis[curSlide].className = '';
triggersLis[n].className = this.config.currentClass;
this.slide(n);
this.curSlide = n;
if (flag && this.config.isAutoPlay)this.autoPlay();
}
},
/**
* 切换幻灯片，最简单的切换就是隐藏/显示。
* 不同的效果可以覆盖此方法
* @see FD.widget.ScrollSlide
* @see FD.widget.FadeSlide
* @param {Object} n 页数
*/
slide: function(n) {
var curSlide = this.curSlide >= 0 ? this.curSlide : 0;
this.sliding = true;
$D.setStyle(this.slides[curSlide], 'display', 'none');
$D.setStyle(this.slides[n], 'display', 'inline');
this.sliding = false;
},
/**
* 设置自动播放
* @method autoPlay
*/
autoPlay: function() {
var self = this;
var callback = function() {
if ( !self.pause && !self.sliding ) {
// @important 获取下一个的算法
var n = (self.curSlide+1) % self.slides.length + 1;
self.play(n, false);
}
}
this.autoPlayTimeId = setInterval(callback, this.config.timeDelay * 1000);
},
npPlay:function(){
var self = this;
var type = this.config.btnEventType=="mouse"?"mouseover":"click";
$E.on(this.config.previousBtn,type,function(){
if (!self.pause && !self.sliding) {
if(self.curSlide!=0&&this.curSlide!=-1){
var temp = self.curSlide;
self.play(temp, false);
}
}
});
$E.on(this.config.nextBtn,type,function(){
if (!self.pause && !self.sliding) {
if(self.curSlide!=self.slides.length-1&&this.curSlide!=-1){
var temp = self.curSlide+2;
self.play(temp, false);
}
}
});
}
}
/**
* 滚动效果的幻灯片播放器
* @param {Object} container
* @param {Object} config
*/
FD.widget.ScrollSlide = function(container, config){
this.init(container, config);
}
YAHOO.extend(FD.widget.ScrollSlide, FD.widget.Slide, {
/**
* 覆盖父类的行为，不隐藏幻灯片
* CSS中注意设置 slidesUL overflow:hidden，保证只显示一幅幻灯
*/
initSlides: function() {
FD.widget.ScrollSlide.superclass.initSlides.call(this);
$D.setStyle(this.slides, 'display', 'inline');
},
/**
* 覆盖父类的行为，使用滚动动画
* @param {Object} n
*/
slide: function(n) {
var curSlide = this.curSlide >= 0 ? this.curSlide : 0;
var args = { scroll: {by:[0, this.slidesUL.offsetHeight*(n-curSlide)]} };
var anim = new $Y.Scroll(this.slidesUL, args, .5, $Y.Easing.easeOutStrong);
anim.onComplete.subscribe(function(){
this.sliding = false;
}, this, true);
anim.animate();
this.sliding = true;
}
});
/**
* 淡入淡出效果的幻灯片播放器
* @param {Object} container
* @param {Object} config
*/
FD.widget.FadeSlide = function(container, config){
this.init(container, config);
}
YAHOO.extend(FD.widget.FadeSlide, FD.widget.Slide, {
/**
* 覆盖父类的行为，设置幻灯片的position=absolute
*/
initSlides: function() {
FD.widget.FadeSlide.superclass.initSlides.call(this);
$D.setStyle(this.slides, 'position', 'absolute');
$D.setStyle(this.slides, 'top', this.config.slideOffsetY||0);
$D.setStyle(this.slides, 'left', this.config.slideOffsetX||0);
$D.setStyle(this.slides, 'z-index', 1);
$D.setStyle(this.slides, 'width', this.container.offsetWidth);
$D.setStyle(this.slides, 'height', this.container.offsetHeight);
},
/**
* 覆盖父类的行为，使用淡入淡出动画
* @param {Object} n
*/
slide: function(n) {
if (this.curSlide == -1) {
$D.setStyle(this.slides[n], 'display', 'block');
} else {
var curSlideLi = this.slides[this.curSlide];
$D.setStyle(curSlideLi, 'display', 'block');
$D.setStyle(curSlideLi, 'z-index', 10);
var fade = new $Y.Anim(curSlideLi, { opacity: { to: 0 } }, .5, $Y.Easing.easeNone);
fade.onComplete.subscribe(function(){
$D.setStyle(curSlideLi, 'z-index', 1);
$D.setStyle(curSlideLi, 'display', 'none');
$D.setStyle(curSlideLi, 'opacity', 1);
this.sliding = false;
}, this, true);
$D.setStyle(this.slides[n], 'display', 'block');
fade.animate();
this.sliding = true;
}
}
});
/**
* Slide 的封装，通过 effect 参数，创建不同的Slide对象
*/
FD.widget.Slider = new function() {
this.init = function(container, config) {
if (!container) return;	//没有显示对象直接退出
config = config || {};
if (config.effect == 'scroll') {
//效果显示为滚动
// <li>下包含<iframe>时，firefox显示异常
if (YAHOO.env.ua.gecko) {
if ($(container).getElementsByTagName('iframe').length > 0) {
return new FD.widget.Slide(container, config);
}
}
return new FD.widget.ScrollSlide(container, config);
}else if (config.effect == 'fade') {
//效果显示为淡入淡出
return new FD.widget.FadeSlide(container, config);
}else {
//没有效果直接变换
return new FD.widget.Slide(container, config);
}
}
};
FD.widget.tabSlider=function(id){
var liObjects = YAHOO.util.Dom. getElementsBy(function(){
return true;
},"li",id);
var q = "#"+id+" li";
var objs = YAHOO.util.Selector.query(q);
var toObjs = [];
for(var i=0;i<objs.length;i++){
toObjs[toObjs.length] = objs[i].getAttribute("togrid");
}
function closeAllGrid(){
YAHOO.util.Dom.setStyle(toObjs,"display","none");
}
YAHOO.util.Event.on(objs,"click",function(){
closeAllGrid();
YAHOO.util.Dom.removeClass(objs,"current");
YAHOO.util.Dom.addClass(this,"current");
var temp= this.getAttribute("togrid");
YAHOO.util.Dom.setStyle(temp,"display","block");
});
}
function aliclick(u,param)
{
var url = "http://stat.china.alibaba.com/tracelog/click.html";
return baseClick(url,param);
}
function etcclick(u, param) {
var url = "http://stat.china.alibaba.com/etclistquery.html";
return baseClick(url,param);
}
function eeclick(u, param) {
var url ="http://stat.china.alibaba.com/ee.html";
return baseClick(url,param);
}
function aliclickType(u, param){
var urlTxt = window.location.href;
if(urlTxt){
var urlType = urlTxt.substring(urlTxt.lastIndexOf('/')+1,urlTxt.lastIndexOf('.'));
}
aliclick(u, param+'_'+urlType);
}
function baseClick(url,param)
{
if (typeof window.dmtrack != "undefined") {
dmtrack.clickstat(url, param);
} else {
var d = new Date();
if (document.images) {
(new Image).src = url + param+'&time='+d.getTime();
}
}
return true;
}
/*
function aliclickType(u, param){
var urlTxt = window.location.href;
if(urlTxt){
var urlType = urlTxt.substring(urlTxt.lastIndexOf('/')+1,urlTxt.lastIndexOf('.'));
}
aliclick(u, param+'_'+urlType);
}
function aliclick(u, param) {
d = new Date();
if(document.images) {
var img_aliclick = new Image();
img_aliclick.src="http://stat.china.alibaba.com/tracelog/click.html" + param + "&time=" + d.getTime();
}
return true;
}
function etcclick(u, param) {
d = new Date();
if(document.images) {
var img_etc_aliclick = new Image();
img_etc_aliclick.src="http://stat.china.alibaba.com/etclistquery.html" + param + "&time=" + d.getTime();
}
return true;
}
function eeclick(u, param) {
d = new Date();
if (document.images) {
(new Image()).src = "http://stat.china.alibaba.com/ee.html" + param + "&time=" + d.getTime();
}
return true;
}
*/
