/**
* @author:aliued-wd junbiao.zhujb
*/
/**
* 给数组扩展add方法.
* @method add
* @param {Object} obj 需要add的对象.
*/
Array.prototype.add = function(obj){var add_flag = true;for(var i=0;i<this.length;i++){if(this[i]==obj){add_flag = false;break;}}if(add_flag==true){this[this.length] = obj;}}
Namespace.register("Ali.util.move");
Namespace.register("Ali.util.typesetdiv");
Namespace.register("Ali.widget.movebox");
Namespace.register("Ali.widget.cookie");
(function(){
Ali.widget.cookie = {
/**
* 新增或者修改cookie.
* @param {Object} name cookie名.
* @param {Object} value cookie值.
* @param {Object} time 有效时间单位为毫秒.
*/
newAndModif:function(name,value,time){
if(time!=null&&this.time!=''){
document.cookie = name+"="+value+"; expires="+this.createTime(time)+";";
}else{
document.cookie = name+"="+value+"; expires=Fri, 31 Dec 2100 23:59:59 GMT;";
}
},
/**
* 创建cookie的有效时间.
* @param {Object} time
*/
createTime:function(time){
var nowTime = new Date();
time = parseInt(time) + parseInt(nowTime.getTime());
var needTime = new Date(time);
return needTime.toGMTString();
},
getValue:function(name){
if(document.cookie){
var cookieStrArr = document.cookie.split("; ");
for(var i=0;i<cookieStrArr.length;i++){
if(cookieStrArr[i].split("=")[0]==name){
return cookieStrArr[i].split("=")[1];
}
}
}else{
return null;
}
}
}
})();
/**
* 重构DIV位置的静态类.
* @class typesetdiv
*/
(function(){
var temptop = 0;
var templeft = 0;
var marginTop = 7;
var totallHeight = 0;
var offsetHeight = 0;
var offsetLeft = 0;
var ua = navigator.userAgent.toLowerCase(),isIE = (ua.indexOf('msie') > -1);
Ali.util.typesetdiv = {
/**
* 重新构建对象el，下标签名为targetName的，className为className的所有对象的绝对定位.
* @param {Object} el
* @param {String} className
* @param {Int} gap 间隔距离.
* @param {String} targetName
*/
build:function(el,className,gap,targetName){
totallHeight = 0;
if(isIE){offsetHeight = 2;}else{offsetLeft=1;}
marginTop = gap;
var tdl = el.getElementsByTagName(targetName);
for(var i=0;i<tdl.length;i++){
if(Ali.util.move.comprise(tdl[i].className,className)){
tdl[i].style.position = "absolute";
if(i==0){
temptop = YAHOO.util.Dom.getRegion(tdl[i].parentNode).top;
templeft = YAHOO.util.Dom.getRegion(tdl[i].parentNode).left;
tdl[i].style.top = temptop-offsetHeight+5 +"px"
totallHeight = totallHeight + (YAHOO.util.Dom.getRegion(tdl[i]).bottom-YAHOO.util.Dom.getRegion(tdl[i]).top);
}else{
totallHeight = totallHeight + (YAHOO.util.Dom.getRegion(tdl[i]).bottom-YAHOO.util.Dom.getRegion(tdl[i]).top);
tdl[i].style.top = temptop-offsetHeight +"px"
}
tdl[i].style.left = templeft+offsetLeft + "px";
temptop = temptop + (YAHOO.util.Dom.getRegion(tdl[i]).bottom - YAHOO.util.Dom.getRegion(tdl[i]).top) + marginTop;
}
}
el.style.height = totallHeight + "px";
},
rebuild:function(movebox,cookieValue){
if(isIE){}else{offsetLeft=1;}
totallHeight = 0;
offsetHeight = 23;
var mb_arr = cookieValue.split("&");
for(var i=0;i<mb_arr.length;i++){
$(mb_arr[i]).style.position = "absolute";
if(i==0){
temptop = YAHOO.util.Dom.getRegion(movebox).top;
templeft = YAHOO.util.Dom.getRegion(movebox).left;
$(mb_arr[i]).style.top = temptop+5 +"px"
totallHeight = totallHeight + (YAHOO.util.Dom.getRegion($(mb_arr[i])).bottom-YAHOO.util.Dom.getRegion($(mb_arr[i])).top);
}else{
totallHeight = totallHeight + (YAHOO.util.Dom.getRegion($(mb_arr[i])).bottom-YAHOO.util.Dom.getRegion($(mb_arr[i])).top);
$(mb_arr[i]).style.top = temptop +"px"
}
$(mb_arr[i]).style.left = templeft+offsetLeft + "px";
temptop = temptop + (YAHOO.util.Dom.getRegion($(mb_arr[i])).bottom - YAHOO.util.Dom.getRegion($(mb_arr[i])).top) + marginTop;
}
movebox.style.height = totallHeight + offsetHeight + "px";
Ali.util.move.init("right_1_content",mb_arr);
}
};
})();
/**
* 移动类.
* @class move
*/
(function(){
/**
* 当前触发的movebox对象.
* @property movebox
* @private
* @type object
*/
var movebox = null;
/**
* 当前页面包含的movebox对象组.
* @property moveboxs
* @private
* @type Array
*/
var moveboxs = new Array();
Ali.util.move = {
init:function(id,mb_arr){
var movebox = new Ali.widget.movebox(id);
for(var i=0;i<mb_arr.length;i++){
movebox.list.add($(mb_arr[i]));
}
moveboxs.add(movebox);
},
/**
* 向moveboxs中增加movebox.
* @method add
* @param {Object} mb movebox
*/
add:function(mb){
moveboxs.add(mb);
},
/**
* 向上移动当前对象在整个对象中的位置，并交换互相的位置.
* @method moveUp
* @param {Object} m_b movebox的DOM对象.
* @param {Object} now 当前准备移动的DOM对象,包含在m_b里面.
*/
moveUp:function(m_b,now){
movebox = this.getMoveBox(m_b);
if(this.getUp(now)!=null){
var startPoints = YAHOO.util.Dom.getXY(now);
var endPoints = YAHOO.util.Dom.getXY(this.getUp(now));
var startRegion = YAHOO.util.Dom.getRegion(now);
var endRegion = YAHOO.util.Dom.getRegion(this.getUp(now));
this.moving(now,endPoints);
this.moving(this.getUp(now),this.getRealPoints(startRegion,endRegion,startPoints,endPoints));
this.change(now,this.getUp(now));
}
Ali.widget.cookie.newAndModif("moveboxStr",this.toString());
},
/**
* 向下移动当前对象在整个对象中的位置，并交换互相的位置.
* @method moveDown
* @param {Object} m_b movebox的DOM对象.
* @param {Object} now 当前准备移动的DOM对象,包含在m_b里面.
*/
moveDown:function(m_b,now){
movebox = this.getMoveBox(m_b);
if(this.getDown(now)!=null){
var startPoints = YAHOO.util.Dom.getXY(now);
var endPoints = YAHOO.util.Dom.getXY(this.getDown(now));
var startRegion = YAHOO.util.Dom.getRegion(now);
var endRegion = YAHOO.util.Dom.getRegion(this.getDown(now));
this.moving(this.getDown(now),startPoints);
this.moving(now,this.getRealPoints(endRegion,startRegion,endPoints,startPoints));
this.change(now,this.getDown(now));
}
Ali.widget.cookie.newAndModif("moveboxStr",this.toString());
},
/**
* 获取向下移动层应该移到的坐标点位置.
* @method getRealPoints
* @param {Object} uR 移动前上面部分的区域对象.
* @param {Object} dR 移动前下面部分的区域对象.
* @param {Object} uP 移动前上面部分的对象位置.
* @param {Object} dP 移动前下面部分的对象位置.
*/
getRealPoints:function(uR,dR,uP,dP){
var uH = uR.bottom-uR.top;
var dH = dR.bottom-dR.top;
var uW = uR.right-uR.left;
var dW = dR.right-dR.left;
var midH = dP[1]-uP[1]-uH;
return [uP[0]+(uW-dW),uP[1]+(uH-dH)];
},
/**
* 移动后改变movebox数组内部的元素顺序,其实就是替换2个移动的DOM对象在movebox数组中的位置.
* @method change
* @param {Object} start 主动移动的DOM对象.
* @param {Object} end 被动移动的DOM对象.
*/
change:function(start,end){
var s_index = this.getIndex(start);
var e_index = this.getIndex(end);
var s_className = start.className;
var e_className = end.className;
var s_c_className = start.getElementsByTagName("li")[0].className;
var e_c_className = end.getElementsByTagName("li")[0].className;
start.className = e_className;
end.className = s_className;
start.getElementsByTagName("li")[0].className = e_c_className;
end.getElementsByTagName("li")[0].className = s_c_className;
if(s_index!=-1&&e_index!=-1){
movebox.list[s_index] = end;
movebox.list[e_index] = start;
movebox.version++;
}
if(this.getMoveBoxIndex()!=-1){
moveboxs[this.getMoveBoxIndex()] = movebox;
}
},
/**
* 获取当前的movebox在moveboxs的位置.
* @method getMoveBoxIndex
* @return {int}
*/
getMoveBoxIndex:function(){
for(var i=0;i<moveboxs.length;i++){
if(moveboxs[i].id==movebox.id){
return i;
}
}
return -1;
},
/**
* @method getMoveBox
* @param {Object} moveObj
*/
getIndex:function(moveObj){
for(var i=0;i<movebox.list.length;i++){
if(movebox.list[i]==moveObj){
return i;
}
}
return -1;
},
/**
* 根据当前movebox的DOM对象获得movebox对象，如果不存在则新初始化一个，存在的话就返回存在的.
* @method getMoveBox
* @param {Object} m_b movebox的DOM对象.
*/
getMoveBox:function(m_b){
if(this.isHave(m_b)){
return this.isHave(m_b);
}else{
var movebox = new Ali.widget.movebox(m_b.id);
var temp_list = m_b.getElementsByTagName("div");
for(var i=0;i<temp_list.length;i++){
if(this.comprise(temp_list[i].className,"movechildren")){
movebox.list.add(temp_list[i]);
}
}
moveboxs.add(movebox);
return movebox;
}
},
/**
* 判断包含方法.
* @method comprise
* @param {Object} talStr
* @param {Object} compStr
*/
comprise:function(talStr,compStr){
if(talStr.indexOf(compStr)!=-1){
return true;
}else{
return false;
}
},
/**
* 重新构建当前movebox对象.
* @method rebuild
* @param {Object} m_b 当前movebox对象.
* @param {Object} newNode 新的节点对象.
* @param {Object} now 当前节点对象.
*/
rebuild:function(m_b,newNode,now){
if(this.isHave(m_b)){
movebox = this.isHave(m_b);
movebox = movebox.list.insert(newNode,this.getIndex(now));
}
},
/**
* 根据ID判断当前movebox的DOM对象是否已经存在.
* @method isHave
* @param {Object} id 当前movebox的DOM对象的ID.
*/
isHave:function(m_b){
for(var i=0;i<moveboxs.length;i++){
if(moveboxs[i].name==m_b.id){
return moveboxs[i];
}
}
return null;
},
/**
* 向上获取当前对象的临近的对象.
* @method getUp
* @param {Object} now 当前对象.
*/
getUp:function(now){
for(var i=0;i<movebox.list.length;i++){
if(movebox.list[i]==now){
if(i>0){
return movebox.list[i-1];
}else{
return null;
}
}
}
},
/**
* 向下获取当前对象的临近的对象.
* @method getDown
* @param {Object} now 当前对象.
*/
getDown:function(now){
for(var i=0;i<movebox.list.length;i++){
if(movebox.list[i]==now){
if(i<movebox.list.length-1){
return movebox.list[i+1];
}else{
return null;
}
}
}
},
/**
* 移动el到points指定的位置.
* @method moving
* @param {Object} el 要移动的对象.
* @param {Object} points 指定的位置坐标.
*/
moving:function(el,points){
var anim = new YAHOO.util.Motion(el,{points: {to:points}},1,YAHOO.util.Easing.easeBothStrong);
anim.animate(anim);
},
toString:function(){
var tempStr = "";
for(var i=0;i<movebox.list.length;i++){
tempStr = tempStr + movebox.list[i].id + "&";
}
tempStr = tempStr.substring(0,tempStr.length-1);
return tempStr;
}
};
})();
/**
* 移动的组合类.
* @class movebox
* @param {Object} name 整个movebox的ID名称.
*/
Ali.widget.movebox = function(name){
this.name = name;
this.list = new Array();
this.size = 0;
this.version = 0;
this.obj = null;
}
