﻿//ajax组件
var ajax = new Object();
ajax.$x = function(url,method,onload,onerror,postStr,relate,stateArray){
	this.url = url;
	this.req = null;
	this.method = method;
	this.onload = onload;
	this.postStr = postStr;
	this.onerror = (onerror) ? onerror : this.defaultError;
	this.relate = relate;
	this.stateNum = (stateArray) ? stateArray : false;
	this.loadXMLDoc();
}
ajax.$x.prototype = {
	loadXMLDoc:function(){
		if(window.XMLHttpRequest){
			this.req = new XMLHttpRequest();
			if(this.req.overrideMimeType){
					this.req.overrideMimeType('text/xml');
			}
		}else if(window.ActiveXObject){
		    var MSXML = ["Msxml3.XMLHTTP","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
		    for(var i=0, j=MSXML.length; i<j; i++){
		        try{
		            this.req = new ActiveXObject(MSXML[i]);
		            break;
		        }catch(e){}
		    }
		}
		if(this.req){
			try{
				var loader = this;
				this.req.onreadystatechange = function(){
					loader.onReadyState.call(loader)
				}
				this.req.open(this.method,this.url,true);
				this.req.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
				this.req.send(this.postStr);
			}catch(err){
				this.onerror.call(this);
			}
		}
	},
	onReadyState:function(){
		var req = this.req;
		var ready = req.readyState;
		if(this.stateNum && ready >= 1 && ready <= 3){
			this.stateNum[ready-1].call(this);
		}else if(ready == 4){
			var httpStatus = req.status;
			if(httpStatus == 200 || httpStatus == 0){
				this.onload.call(this);
			}else{
				this.onerror.call(this);
			}
		}
	},
	defaultError:function(){
		alert("数据连接错误!"
			+ "\n\nreadyState: " + this.req.readyState
			+ "\nstatus: " + this.req.status
			+ "\nheafers: " + this.req.getAllResponseHeaders()
			)
	}
}
//给文本输入加入伸缩功能
function AddTextAreaSizeBar(){
    var oObj = document.getElementsByTagName("textarea");
    for(var i=0, j=oObj.length; i<j; i++){
        CreateSizeBar.call(oObj[i]);
    }
}
function CreateSizeBar(){
    var oDiv = document.createElement("div");
    oDiv.className = "sizebar";
    oDiv.appendChild(document.createElement("ins"));
    oDiv.invoke = this;
    oDiv.onmousedown = FlexSizeBar;
    this.parentNode.appendChild(oDiv);
}
function FlexSizeBar(e){
    if(!e)e = window.event;
    var intObjY = e.clientY;
    var Invoke = this.invoke;
    var InvokeDefaultHeight = Invoke.offsetHeight;
    if(this.setCapture){
			this.setCapture();
	}else if(window.captureEvents){
			window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
	}
    document.onmousemove = function(e){
        if(!e)e = window.event;
        var NewHeight = InvokeDefaultHeight + e.clientY - intObjY;
        if(NewHeight < 50)NewHeight = 50;
        BatchDiffStyle.call(Invoke,["height",NewHeight + "px"]);
    }
    document.onmouseup = function(e){
        if(this.releaseCapture){
            this.releaseCapture();
        }else if(window.captureEvents){
            window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
        }
        document.onmousemove = null;
        document.onmouseup = null;
    }
}
//初始化绑定伸缩特效事件
function InitFlexEffect(InitFun){
    this[0].Relate = this[1];
    this[1].Relate = this[0];
    InitFun.call(this[1]);
    if(this[1].style.display == "block")
        this[0].IsOpen = true;
    else
        this[0].IsOpen = false;
    this[0].onclick = FlexControlClick;
}
//绑定mouse click事件
function FlexControlClick(){
    if(this.IsOpen)
        this.Relate.Hidden();
    else
        this.Relate.Open();
}
//伸缩效果
function FlexEffect(){
    this.Beam = this.MaxHeight * this.Speed;
    this.Limit = this.MaxHeight - this.Beam;
    this.Open = function(){
        var oObj = this;
        this.InitOpen();
        this.setOpen = setInterval(function(){
            oObj.RealHeight = oObj.offsetHeight + oObj.Beam;
            if(oObj.RealHeight < oObj.Limit) 
                oObj.style.height = oObj.RealHeight + "px";
            else oObj.EndOpen();
        },this.Delay);
    }
    this.InitOpen = function(){
        this.ClearSetTime();
        this.RealHeight = 0;
        this.style.height = "1px";
        this.style.display = "block";
        this.Relate.blur();
    }
    this.EndOpen = function(){
        clearInterval(this.setOpen);
        this.style.height = this.MaxHeight + "px";
        this.Relate.IsOpen = true;
        this.Relate.className = "opened";
        this.Relate.blur();
        this.Record();
    }
    this.Hidden = function(){
        var oObj = this;
        this.InitHidden();
        this.setHidden = setInterval(function(){
            oObj.RealHeight = oObj.offsetHeight - oObj.Beam;
            if(oObj.RealHeight > 0)
                oObj.style.height = oObj.RealHeight + "px";
            else oObj.EndHidden();
        },this.Delay);
    }
    this.InitHidden = function(){
        this.ClearSetTime();
        this.RealHeight = this.MaxHeight;
        this.style.height = this.MaxHeight + "px";
        this.style.display = "block";
        this.Relate.blur();
    }
    this.EndHidden = function(){
        clearInterval(this.setHidden);
        this.style.display = "none";
        this.Relate.IsOpen = false;
        this.Relate.className = "";
        this.Record();
        this.Relate.blur();
    }
    this.ClearSetTime = function(){
        if(this.setOpen)clearInterval(this.setOpen);
        if(this.setHidden)clearInterval(this.setHidden);
    }
    this.Record = function(){
        document.cookie = this.CookieName + "=display=" + this.style.display + "; expires=" + AddDays(365) + "; path=/";
    }
}
function Drag(e){
    if(!e)e = window.event;
    var oObj = e.target?e.target:e.srcElement;
    if(this == oObj){
    	var intObjX = e.clientX - this.Relate.offsetLeft;
    	var intObjY = e.clientY - this.Relate.offsetTop;
			if(this.setCapture){
				this.setCapture();
			}else if(window.captureEvents){
				window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
			}
			document.onmousemove = function(e){
					if(!e)e = window.event;
					BatchDiffStyle.call(oObj.Relate,["left",e.clientX - intObjX + "px"]
									,["top",e.clientY - intObjY + "px"]);
			}
			document.onmouseup = function(e){
							if(this.releaseCapture){
								this.releaseCapture();
							}else if(window.captureEvents){
								window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
							}
							document.onmousemove = null;
							document.onmouseup = null;
			}
   }
}
//透明效果
function AlphaEffect(){
    this.Alpha = 10;
    this.Speed = 2;
    this.Delay = 10;
    this.Status = false;
    this.Clear = function(){
        if(this.TotalBoxStart)clearInterval(this.TotalBoxStart);
        if(this.TotalBoxEnd)clearInterval(this.TotalBoxEnd);
    }
    this.Show = function(){
        var oEvent = this;
        this.TotalBoxStart = setInterval(function(){
            oEvent.Alpha += oEvent.Speed;
            if(oEvent.Alpha >= 10){
                oEvent.Alpha = 10;
                SetAlpha(oEvent,oEvent.Alpha);
                oEvent.Clear();
                oEvent.Status = false;
                oEvent.ShowFun();
            }else{
               SetAlpha(oEvent,oEvent.Alpha);
            }
        },this.Delay);
    }
    this.Disappear = function(){
        this.Status = true;
        var oEvent = this;
        this.TotalBoxEnd = setInterval(function(){
            oEvent.Alpha -= oEvent.Speed;
            if(oEvent.Alpha <= 0){
                oEvent.Alpha = 0;
                SetAlpha(oEvent,oEvent.Alpha);
                oEvent.Clear();
                oEvent.DisappearFun();
                oEvent.Show();
            }else{
                SetAlpha(oEvent,oEvent.Alpha);
            }
        },this.Delay);
    }
}
//自动滚动效果
function AutoScroll(){
    this.Speed = 10;
    this.Delay = 10;
    this.Scroll = function(toTop){
        this.EndTop  = toTop;
        this.Clear();
        if(this.EndTop == this.scrollTop)return false;
        this.Scale = (this.EndTop - this.scrollTop)/this.Speed;
        var oEvent = this;
        this.ToScroll = setInterval(function(){
            oEvent.scrollTop += oEvent.Scale;
            if((oEvent.Scale > 0 && oEvent.scrollTop >= oEvent.EndTop)
                || (oEvent.Scale < 0 && oEvent.scrollTop <= oEvent.EndTop)){
                oEvent.SetStop();
            }
        },this.Delay);
    }
    this.SetStop = function(){
        this.Clear();
        this.scrollTop = this.EndTop;
    }
    this.Clear = function(){
        if(this.ToScroll)clearInterval(this.ToScroll);
    }
}
DomLoaded.load(Stadholder);
//定义总的站点事件
function Stadholder(){
    ExternalLinks();
    InitFlexEffect.call($("control","siteinfo"),InitSiteinfo);
}
//初始化顶部导航
function InitSiteinfo(){
    this.MaxHeight = 22;
    this.Speed = 0.08;
    this.Delay = 10;
    this.CookieName = "Siteinfo";
    FlexEffect.call(this);
}
