var q = {};

function $qe(id) {
	var a = (typeof id == "string")?document.getElementById(id+""):id;
	if(a != null) {
		return a;
	}
	else {
		return null;
	}
}

function $qc(id) {
	return document.createElement(id+"");
}

function $qn(n) {
	return document.getElementsByName(n+"");
}

function $qt(p, t) {
	return p.getElementsByTagName(t);
}

function trace(msg) {
	try {
		console.log(msg);
	}catch(err) {}
}

Function.prototype.bind = function(scope) {
    try {
        var me = this;
        return function() {
            return me.apply(scope, arguments);
        };
    }catch(err) {}
};

q.cookie = q.cookie || {};

q.cookie.get = function (name) {
	name = name.replace(/([\.\[\]\$])/g,'\\\$1');
	var rep = new RegExp(name + '=([^;]*)?;','i'); 
	var co = document.cookie + ';';
	var res = co.match(rep);
	if (res) {
		return unescape(res[1]) || "";
	}
	else {
		return "";
	}
};

q.cookie.set = function (name, value, expire, path, domain, secure) {
	var cstr = [];
	cstr.push(name + '=' + escape(value));
	if(expire){
		var dd = new Date();
		var expires = dd.getTime() + expire * 3600000;
		dd.setTime(expires);
		cstr.push('expires=' + dd.toGMTString());
	}
	if (path) {
		cstr.push('path=' + path);
	}
	if (domain) {
		cstr.push('domain=' + domain);
	}
	if (secure) {
		cstr.push(secure);
	}
	document.cookie = cstr.join(';');
};q.dom = q.dom || {};

q.dom.children = function(a) {
	var dom = $qe(a);
};

q.dom.hasClass = function(target, className) {
	var reg = new RegExp('(\\s|^)'+className+'(\\s|$)');
	if ($qe(target).className) {
		return $qe(target).className.match(reg);
	}else {
		return null;
	}
};


q.dom.addClass = function(target, name) {
	target = $qe(target);
	if(target && !q.dom.hasClass(target, name))
		target.className += ' '+name;
	return target;
};


q.dom.removeClass = function(target, name) {
	target = $qe(target);
	if(target && q.dom.hasClass(target, name)) {
		var reg = new RegExp('(\\s|^)'+name+'(\\s|$)');
		target.className = target.className.replace(reg, '');
	}
	return target;
};


q.dom.getPosition = function(target) {
	var ua = navigator.userAgent.toLowerCase();  
	var isOpera = (ua.indexOf('opera') != -1);  
	var isIE = (ua.indexOf('msie') != -1 && !isOpera); // not opera spoof  
	var el = $qe(target);
	
	if(el.parentNode === null || el.style.display == 'none') {  
		return false;  
	}        
	var parent = null;  
	var pos = [];       
	var box;       
	if(el.getBoundingClientRect)    //IE  
	{           
		box = el.getBoundingClientRect();  
		var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);  
		var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);  
		return {x:box.left + scrollLeft, y:box.top + scrollTop};  
	}else if(document.getBoxObjectFor)    // gecko      
	{  
		box = document.getBoxObjectFor(el);   
		var borderLeft = (el.style.borderLeftWidth)?parseInt(el.style.borderLeftWidth):0;   
		var borderTop = (el.style.borderTopWidth)?parseInt(el.style.borderTopWidth):0;   
		pos = [box.x - borderLeft, box.y - borderTop];  
	} else    // safari & opera      
	{  
		pos = [el.offsetLeft, el.offsetTop];    
		parent = el.offsetParent;       
		if (parent != el) {   
			while (parent) {    
				pos[0] += parent.offsetLeft;   
				pos[1] += parent.offsetTop;   
				parent = parent.offsetParent;  
			}    
		}     
		if (ua.indexOf('opera') != -1 || ( ua.indexOf('safari') != -1 && el.style.position == 'absolute' )) {   
			pos[0] -= document.body.offsetLeft;  
			pos[1] -= document.body.offsetTop;           
		}      
	}                
	if (el.parentNode) {   
		parent = el.parentNode;  
	} else {  
		parent = null;  
	}  
	while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML') { // account for any scrolled ancestors  
		pos[0] -= parent.scrollLeft;  
		pos[1] -= parent.scrollTop;  
		if (parent.parentNode) {  
			parent = parent.parentNode;  
		} else {  
			parent = null;  
		}  
	}  
	return {x:pos[0], y:pos[1]};  
};


q.dom.insertHTML = function(dom, pos, html) {
	dom = $qe(dom);
	if (dom.insertAdjacentHTML) {
		dom.insertAdjacentHTML(pos, html);
	} else {
		var range = dom.ownerDocument.createRange();
	    range.setStartBefore(dom);
		var fragment = range.createContextualFragment(html), parent = dom.parentNode, tmpEl = dom;
		switch (pos.toUpperCase()) {
		case 'AFTERBEGIN':
			dom = dom.firstChild;
		case 'BEFOREBEGIN':
			parent.insertBefore(fragment, dom);
			break;
		case 'BEFOREEND':
			dom.appendChild(fragment);
			break;
		case 'AFTEREND':
			(dom = dom.nextSibling) ? parent.insertBefore(fragment,
					dom) : parent.appendChild(fragment);
		}
	}

	return dom;
};


q.dom.remove = function(dom) {
	dom = $qe(dom);
	try {
		dom.parentNode.removeChild(dom);
	}catch(err) {}
};q.event = q.event || {};

q.event.add = function(elm, func, evType, useCapture) {
	var _el = typeof elm == 'string' ?$qe(elm) : elm;
	if(_el == null){
		return false;
	}
	if (typeof useCapture == 'undefined') {
		useCapture = false;
	}
	if (typeof evType == 'undefined') {
		evType = 'click';
	}
	if (_el.addEventListener) {
		_el.addEventListener(evType, func, useCapture);
		return true;
	}
	else if (_el.attachEvent) {
		var r = _el.attachEvent('on' + evType, func);
		return true;
	}
	else {
		_el['on' + evType] = func;
	}
};

q.event.remove = function(target, func, type) {
	target = $qe(target);
	type = type.replace(/^on/i, '');

	if(target.removeEventListener) {
		target.removeEventListener(type, func, false);
	}else if(target.detachEvent) {
		target.detachEvent('on' + type, func);
	}
};
q.io = q.io || {};q.string = q.string || {};
q.string.encodeDoubleByte = function(str) {
	if(typeof str != "string") {
		return str;
	}
	return encodeURIComponent(str);
};
q.string.url = function (url){
    url = url || "";
    this.url = url;
	this.query = {};
	this.parse();
};

q.string.url.prototype = {
	
	parse : function (url){
		if (url) {
			this.url = url;
		}
	    this.parseAnchor();
	    this.parseParam();
	},
	
	parseAnchor : function (){
	    var anchor = this.url.match(/\#(.*)/);
	    anchor = anchor ? anchor[1] : null;
	    this._anchor = anchor;
	    if (anchor != null){
	      this.anchor = this.getNameValuePair(anchor);
	      this.url = this.url.replace(/\#.*/,"");
	    }
	},
	
	
	parseParam : function (){
	    var query = this.url.match(/\?([^\?]*)/);
	    query = query ? query[1] : null;
	    if (query != null){
	      this.url = this.url.replace(/\?([^\?]*)/,"");
	      this.query = this.getNameValuePair(query);
	    }
	 },
	
	getNameValuePair : function (str){
	    var o = {};
	    str.replace(/([^&=]*)(?:\=([^&]*))?/gim, function (w, n, v) {
	     	if(n == ""){return;}


	    	o[n] = v || "";
		});
	    return o;
	 },
	 
	 getParam : function (sPara) {
	 	return this.query[sPara] || "";
	 },
	
	clearParam : function (){
	    this.query = {};
	},
	
	
	setParam : function (name, value) {
	    if (name == null || name == "" || typeof(name) != "string") {
			throw new Error("no param name set");
		}
	    this.query = this.query || {};
	    this.query[name]=value;
	},
	
	
	setParams : function (o){
	    this.query = o;
	},
	
	
	serialize : function (o){
		var ar = [];
		for (var i in o){
		    if (o[i] == null || o[i] == "") {
				ar.push(i + "=");
			}
			else {
				ar.push(i + "=" + o[i]);
			}
		}
		return ar.join("&");
	},
	
	toString : function (){
	    var queryStr = this.serialize(this.query);
	    return this.url + (queryStr.length > 0 ? "?" + queryStr : "") 
	                    + (this.anchor ? "#" + this.serialize(this.anchor) : "");
	},
	
	
	getHashStr : function (forceSharp){
	    return this.anchor ? "#" + this.serialize(this.anchor) : (forceSharp ? "#" : "");
	}
};


q.io.ajax = {
	createRequest : function() {
		var request = null;
		try {
			request = new XMLHttpRequest();
		} catch (trymicrosoft) {
			try {
				request = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (othermicrosoft) {
				try {
					request = ActiveXObject("Microsoft.XMLHTTP");
				} catch (failed) {}
			}
		}
		if(request == null){
			trace("create request failed");
		}
		else {
			return request;
		}
	},
	
	request : function (url, option) {
		option = option || {};
		option.onComplete = option.onComplete || function () {};
		option.onException = option.onException || function () {};
		option.returnType = option.returnType || "txt";
		option.method = option.method || "get";
		option.data = option.data || {};
		if(typeof option.GET != "undefined" && typeof option.GET.url_random != "undefined" && option.GET.url_random == 0){
			this.rand = false;
			option.GET.url_random = null;
		}
		this.loadData(url, option);
	},
	
	loadData: function (url, option) {
		var request = this.createRequest(), tmpArr = [];
		var _url = new q.string.url(url);
		if(option.POST){
			for (var postkey in option.POST) {
				var postvalue = option.POST[postkey];
				if(postvalue != null){
					tmpArr.push(postkey + '=' + q.string.encodeDoubleByte(postvalue));
				}
			}
		}
		var sParameter = tmpArr.join("&") || "";

		if (option.GET) {
			for(var key in option.GET){
				if (key != "url_random") {
					_url.setParam(key, q.string.encodeDoubleByte(option.GET[key]));
				}
			}					
		}
		if (this.rand != false) {


		}


		request.onreadystatechange = function() {
			if(request.readyState == 4){
				var response, type = option.returnType;
				try{

					switch (type){
						case "txt":
							response = request.responseText;
							break;
						case "xml":
							if ($IE) {
								response = request.responseXML;
							}
							else {
								var Dparser = new DOMParser();
								response = Dparser.parseFromString(request.responseText, "text/xml");
							}
							break;
						case "json":
								response = eval("(" + request.responseText + ")");
							break;
					}
					option.onComplete(response);
				}
				catch(e){
					option.onException(e.message, _url);
					return false;
				}
			}
		};
		try{

			if(option.POST){
				request.open("POST", _url, true);
				request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				trace(sParameter);
				request.send(sParameter);
			}
			else {
				request.open("GET", _url, true);
				request.send(null);
			}
		}
		catch(e){
			option.onException(e.message, _url);
			return false;
		}
	}
};q.number = q.number || {};

q.number.uniqie = function(pre) {
	return pre+parseInt(Math.random()*10000000+1)+"";
};q.object = q.object || {};

q.object.ClassPrototype = {};

q.object.Class = function (){
	return function (t){
		if (t != q.object.ClassPrototype) {
			this.initialize.apply(this, arguments);
		}
	};
};
q.object.date = {
	format:function(time, pattern) {
		if(!pattern) {
			pattern = 'Y-m-d H:i:s';
		}
		var d = new Date();
		d.setTime(time);
		var hash = {
			'y':'getYear',
			'Y':'getFullYear',
			'm':'getMonth',
			'd':'getDate',
			'D':'getDay',
			'H':'getHours',
			'i':'getMinutes',
			's':'getSeconds'
		};
		var result = "";
		for(var i=0;i<pattern.length;i++) {
			var ch = pattern.charAt(i);
			if(hash[ch] != null) {
				if(ch == 'm') {
					eval("var re = (d."+hash[ch]+"()+1)+'';")+"";
					if(parseInt(re, 10)<10) {
						re = '0'+re;
					}
					result += re;
				}else {
					eval("var re= d."+hash[ch]+"()+'';")+"";
					if(parseInt(re, 10)<10) {
						re = '0'+re;
					}
					result += re;
				}
			}else {
				result += ch;
			}
		}
		return result;
	},
	
	strtotime:function(str) {
    	str = str.split(" ");
		var array = [];
		array = array.concat(str[0].split("-"));
		array = array.concat(str[1].split(":"));
		
		var date = new Date();
		date.setFullYear(array[0]);
		date.setMonth(array[1] - 1);
		date.setDate(array[2]);
		date.setHours(array[3]);
		date.setMinutes(array[4]);
		date.setSeconds(array[5]);
		
		return date.getTime();
	}
};

q.string.byteLength = function(str) {
    if(typeof str == "undefined"){
        return 0;
    }
    var aMatch = str.match(/[^\x00-\x80]/g);
    return (str.length + (!aMatch ? 0 : aMatch.length));
};

q.string.count = function(str) {  
    var i = 0;  
    var c = 0.0;  
    var unicode = 0;  
    var len = 0;  
  
    if (str == null || str == "") {  
        return 0;  
    }  
    len = str.length;  
    for(i = 0; i < len; i++) {  
            unicode = str.charCodeAt(i);  
        if (unicode < 127) { 
            c += 1;  
        } else {  
            c += 2;  
        }  
    }  
    return c;  
} ; q.system = q.system || {};

var _ua = navigator.userAgent.toLowerCase();

q.system.os = (function() {
	if(_ua.indexOf("windows")>-1) {
		return "win";
	}
	if(_ua.indexOf("macintosh")>-1) {
		return "mac";
	}
	if(_ua.indexOf("linux")>-1) {
		return "lin";
	}
	
	return "win";
})();

q.system.ie = /msie/.test(_ua);
q.system.moz = /gecko/.test(_ua);
q.system.ie6 = /msie 6/.test(_ua);
q.system.ie7 = /msie 7/.test(_ua);
q.system.ie8 = /msie 8/.test(_ua);
q.system.safari = /safari/.test(_ua);
q.system.ff2=/Firefox\/2/i.test(_ua);
q.system.ff = /firefox/i.test(_ua);
q.system.chrome = /chrome/i.test(_ua);

q.system.scrollY = function() {
	var scrollY=0;
    if(document.documentElement&&document.documentElement.scrollTop){
    scrollY=document.documentElement.scrollTop;}
    else if(document.body&&document.body.scrollTop){
    scrollY=document.body.scrollTop;}
    else if(window.pageYOffset){
    scrollY=window.pageYOffset;}
    else if(window.scrollY){
    scrollY=window.scrollY;}
    
    return scrollY;
};

q.system.screen = function(_target){
	var w, h;   
    if (_target) {      
        target = _target.document;  
    }   
    else 
    {      
        target = document;  
    }   
    if (self.innerHeight) { // all except Explorer        
        if (_target) {          
            target = _target.self;      
        }       
        else {          
            target = self;      
        }       
        w = target.innerWidth;      
        h = target.innerHeight; 
    }   
    else if (target.documentElement && target.documentElement.clientHeight) { // Explorer 6 Strict Mode       
        w = target.documentElement.clientWidth;     
        h = target.documentElement.clientHeight;    
    }   
    else if (target.body) { // other Explorers      
        w = target.body.clientWidth;        
        h = target.body.clientHeight;   
    }   
    return {        
        width: w,       
        height: h   
    };
};



q.string.format = function(src, options, ori) {
	var curStr;
	if(q.system.ie){
		curStr = src;
	}else{
		curStr = [];
		var len = src.length;
		var i;
		for(i=0; i<len; i++){
			curStr.push(src[i]);
		}
		curStr = curStr.join("");
	}
	
	var formatReg = new RegExp("#{([a-z0-9]+)}", "ig");
	curStr = curStr.replace(formatReg, function(match, f1, index, srcStr){
		return options[f1]?options[f1]:(ori?match:"");
	});
	return curStr;
};


q.string.leftB = function(str, len) {
    var s = str.replace(/\*/g, " ").replace(/[^\x00-\xff]/g, "**");
    str = str.slice(0, s.slice(0, len).replace(/\*\*/g, " ").replace(/\*/g, "").length);
    if(q.string.byteLength(str) > len) str = str.slice(0,str.length -1);
        return str;
};


q.string.queryToObject = function(query) {
	if(!query) {
		query = window.location.href;
		query = query.substring(query.indexOf("?")+1);
	}
	
	var obj = {};
	if(query.length>0) {
		var querys = query.split("&");
		for(var i=0;i<querys.length;i++) {
			try {
				var item = querys[i].split("=");
				obj[item[0]] = decodeURIComponent(item[1]);
			}catch(err) {}
		}
	}
	return obj;
};

q.string.objectToQuery = function(obj) {
	var query = [];
	for(var key in obj) {
		query[query.length] = key+"="+encodeURIComponent(obj[key]);
	}
	
	return query.join("&");
};

q.string.hash = function() {
	var query = window.location.href;
	if (query.indexOf("#") > 0) {
		query = query.substring(query.indexOf("#") + 1);
		return query;
	}else
		return null;
};


q.string.subStr = function(str, startp, endp) {  
    var i=0; c = 0; unicode=0; rstr = '';  
    var len = str.length;  
    var sblen = q.string.count(str);  
  
    if (startp < 0) {  
        startp = sblen + startp;  
    }  
  
    if (endp < 1) {  
        endp = sblen + endp;// - ((str.charCodeAt(len-1) < 127) ? 1 : 2);  
    }  

    for(i = 0; i < len; i++) {  
        if (c >= startp) {  
            break;  
        }  
        var unicode = str.charCodeAt(i);  
        if (unicode < 127) {  
            c += 1;  
        } else {  
            c += 2;  
        }  
    }  

    for(i = i; i < len; i++) {  
        var unicode = str.charCodeAt(i);  
        if (unicode < 127) {  
            c += 1;  
        } else {  
            c += 2;  
        }  
        rstr += str.charAt(i);  
  
        if (c >= endp) {  
            break;  
        }  
    }  
  
    return rstr;  
};q.swf = q.swf || {};
q.swf.create = function(dom,id,ur,w,h,vars){
	var html = "";
	html += '<object classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000" id="'+id+'" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" border="0" width="'+w+'" height="'+h+'">';
	html += '<param name="movie" value="'+ur+'?'+Math.random()+'">';
	html += '<param name="quality" value="high"> ';
	html += '<param name="wmode" value="transparent"> ';
	html += '<param name="menu" value="false"> ';
	html += '<param name="flashvars" value="'+vars+'">';
	html += '<embed name="'+id+'" flashvars="'+vars+'" src="'+ur+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" name="obj1" width="'+w+'" height="'+h+'" quality="High" wmode="transparent">';
	html += '</embed>';
	html += '</object>';
	$qe(dom).innerHTML = html;
};
 
if(typeof(sina)!="object"){var sina={}}
sina.$=function(i){if(!i){return null}
return document.getElementById(i)};var sinaFlash=function(V,x,X,Z,v,z,i,c,I,l,o){var w=this;if(!document.createElement||!document.getElementById){return}
w.id=x?x:'';var O=function(I,i){for(var l=0;l<I.length;l++){if(I[l]==i){return l}}
return-1},C='8.0.42.0';if(O(['eladies.sina.com.cn','ent.sina.com.cn'],document.domain)>-1){w.ver=C}else{w.ver=v?v:C}
w.ver=w.ver.replace(/\./g,',');w.__classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";w.__codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version="+w.ver;w.width=X;w.height=Z;w.movie=V;w.src=w.movie;w.bgcolor=z?z:'';w.quality=c?c:"high";w.__pluginspage="http://www.macromedia.com/go/getflashplayer";w.__type="application/x-shockwave-flash";w.useExpressInstall=(typeof(i)=="boolean")?i:false;w.xir=I?I:window.location;w.redirectUrl=l?l:window.location;w.detectKey=(typeof(o)=="boolean")?o:true;w.escapeIs=false;w.__objAttrs={};w.__params={};w.__embedAttrs={};w.__flashVars=[];w.__flashVarsStr="";w.__forSetAttribute("id",w.id);w.__objAttrs["classid"]=w.__classid;w.__forSetAttribute("codebase",w.__codebase);w.__forSetAttribute("width",w.width);w.__forSetAttribute("height",w.height);w.__forSetAttribute("movie",w.movie);w.__forSetAttribute("quality",w.quality);w.__forSetAttribute("pluginspage",w.__pluginspage);w.__forSetAttribute("type",w.__type);w.__forSetAttribute("bgcolor",w.bgcolor)}
sinaFlash.prototype={getFlashHtml:function(){var I=this,i;if(document.all){i='<object ';for(var l in I.__objAttrs){i+=l+'="'+I.__objAttrs[l]+'"'+' '}
i+='>\n';for(var l in I.__params){i+='	<param name="'+l+'" value="'+I.__params[l]+'" \/>\n'}
if(I.__flashVarsStr!=""){i+=' <param name="flashvars" value="'+I.__flashVarsStr+'" \/>\n'}
i+='<\/object>'}else{i='<embed ';for(var l in I.__embedAttrs){i+=l+'="'+I.__embedAttrs[l]+'"'+' '}
i+='><\/embed>'};return i},__forSetAttribute:function(I,i){var l=this;if(typeof(I)=="undefined"||I==''||typeof(i)=="undefined"||i==''){return}
I=I.toLowerCase();switch(I){case "classid":break;case "pluginspage":l.__embedAttrs[I]=i;break;case "onafterupdate":case "onbeforeupdate":case "onblur":case "oncellchange":case "onclick":case "ondblClick":case "ondrag":case "ondragend":case "ondragenter":case "ondragleave":case "ondragover":case "ondrop":case "onfinish":case "onfocus":case "onhelp":case "onmousedown":case "onmouseup":case "onmouseover":case "onmousemove":case "onmouseout":case "onkeypress":case "onkeydown":case "onkeyup":case "onload":case "onlosecapture":case "onpropertychange":case "onreadystatechange":case "onrowsdelete":case "onrowenter":case "onrowexit":case "onrowsinserted":case "onstart":case "onscroll":case "onbeforeeditfocus":case "onactivate":case "onbeforedeactivate":case "ondeactivate":case "codebase":l.__objAttrs[I]=i;break;case "src":case "movie":l.__embedAttrs["src"]=i;l.__params["movie"]=i;break;case "width":case "height":case "align":case "vspace":case "hspace":case "title":case "class":case "name":case "id":case "accesskey":case "tabindex":case "type":l.__objAttrs[I]=l.__embedAttrs[I]=i;break;default:l.__params[I]=l.__embedAttrs[I]=i}},__forGetAttribute:function(i){var I=this;i=i.toLowerCase();if(typeof I.__objAttrs[i]!="undefined"){return I.__objAttrs[i]}else if(typeof I.__params[i]!="undefined"){return I.__params[i]}else if(typeof I.__embedAttrs[i]!="undefined"){return I.__embedAttrs[i]}else{return null}},setAttribute:function(I,i){this.__forSetAttribute(I,i)},getAttribute:function(i){return this.__forGetAttribute(i)},addVariable:function(I,i){var l=this;if(l.escapeIs){I=escape(I);i=escape(i)}
if(l.__flashVarsStr==""){l.__flashVarsStr=I+"="+i}else{l.__flashVarsStr+="&"+I+"="+i}
l.__embedAttrs["FlashVars"]=l.__flashVarsStr},getVariable:function(I){var o=this,i=o.__flashVarsStr;if(o.escapeIs){I=escape(I)}
var l=new RegExp(I+"=([^\\&]*)(\\&?)","i").exec(i);if(o.escapeIs){return unescape(RegExp.$1)}
return RegExp.$1},addParam:function(I,i){this.__forSetAttribute(I,i)},getParam:function(i){return this.__forGetAttribute(i)},write:function(i){var I=this;if(typeof i=="string"){document.getElementById(i).innerHTML=I.getFlashHtml()}else if(typeof i=="object"){i.innerHTML=I.getFlashHtml()}}};

q.swf.vertion = (function() {
	if(q.system.ie) {
		try {
			for(var i=1;i<12;i++) {
				var acx = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + i);
				if(acx) {
					var version = acx.GetVariable("$version");
					return version.replace(/WIN/g,'').replace(/,/g,'.');
				}
			}
		}catch(err) {}
	}else {
		try {
			var plug = navigator.plugins["Shockwave Flash"];
			return plug.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s)+r/, ".") + ".0";
		}catch(err) {}
	}
	
	return null;
})();
var shadow = $qc("div");
shadow.id = "overlay";
shadowHidden();
document.body.appendChild(shadow);

function shadowVisible() {
	shadow.style.display = "";
}

function shadowHidden() {
	shadow.style.display = "none";
}











var __dialogManager = {};

var Dialog = q.object.Class();
Dialog.prototype = {
	_html:"",
	_options:{},
	_titleText:"",
	_titleAlign:"left",
	_buttonText:"",
	_buttonAlign:"left",
	_width:455,
	_onClose:null,
	_onButton:null,
	_id:0,
	_browserBound:{},
	_dialogBound:{},
	
	_defaultTemplate:[
		'<a id="close_#{id}" href="javascript:void(0);" class="icon closeBtn" title="关闭"></a>',
        '<div id="title_#{id}" class="titleBox #{titleAlign}">#{title}</div>',
        '<div id="content_#{id}">',
		'	#{html}',
        '	<div class="btnArea"><a id="button_#{id}" class="btnD" style="#{buttonAlign}" title="" href="javascript:void(0);"><cite>#{buttonText}</cite></a></div>',
        '</div>'
	],
	
	initialize:function() {
		
	},
	
	_parse:function(opt) {
		this._options = opt;
		opt.titleText && (this._titleText = opt.titleText);
		opt.titleAlign && (this._titleAlign = opt.titleAlign);
		opt.buttonText && (this._buttonText = opt.buttonText);
		opt.buttonAlign && (this._buttonAlign = "float:"+opt.buttonAlign);
		opt.width && (this._width = opt.width);
		opt.onClose && (this._onClose = opt.onClose);
		opt.onButton && (this._onButton = opt.onButton);
	},
	
	build:function(html, options) {
		this._parse(options);
		this._html = html;
		
		var id = (Math.ceil(Math.random()*100000));
		this._id = id;
		
		var dialog = $qc("div");
		dialog.id = "dialog_" + this._id;
		dialog.className = "layout";
		dialog.style.width = this._width + "px";
		dialog.style.position = "absolute";
		dialog.style.display = "none";
		dialog.style.zIndex = 2001;
		
		var formatHtml = q.string.format(this._defaultTemplate.join(""), {
			html:html,
			id:id,
			title:options.titleText,
			titleAlign:options.titleAlign,
			buttonText:options.buttonText,
			buttonAlign:options.buttonAlign?"float:"+options.buttonAlign:""
		});

		document.body.appendChild(dialog);
		dialog.innerHTML = formatHtml;
		
		q.event.add(this._get("close"), this._close.bind(this), "click");
		q.event.add(this._get("button"), this._button.bind(this), "click");
		window.onscroll = this.adaptPosition.bind(this);
		
		__dialogManager["dialog_"+id] = dialog;
		
		
		this._browserBound = {width:parseInt(document.documentElement.clientWidth, 10), height:parseInt(document.documentElement.clientHeight, 10)};
	},
	
	adaptPosition:function() {
		var dialog = this.get(this._id);
		dialog.style.left = (this._browserBound.width - this._dialogBound.width) / 2 + "px";
		dialog.style.top = (Math.abs((this._browserBound.height - this._dialogBound.height) / 2) + q.system.scrollY()) + "px";
	},
	
	show:function() {
		var dialog = this.get(this._id);
		dialog.style.display = "";
		shadowVisible();
		
		this._dialogBound = {width:parseInt(dialog.offsetWidth, 10), height:parseInt(dialog.offsetHeight, 10)};
		this.adaptPosition();
	},
	
	hidden:function() {
		var dialog = this.get(this._id);
		dialog.style.display = "none";
		shadowHidden();
	},
	
	remove:function() {
		var dialog = this.get(this._id);
		this._clear();
		shadowHidden();
		dialog.parentNode.removeChild(dialog);
	},
	
	get:function(id) {
		return __dialogManager["dialog_"+id];
	},
	
	_get:function(type) {
		return $qe(type+"_"+this._id);
	},
	
	_clear:function() {
		q.event.remove(this._get("close"), this._close.bind(this), "click");
		q.event.remove(this._get("button"), this._button.bind(this), "click");
		window.onscroll = null;
	},
	
	_close:function(e) {
		this._onClose && (this._onClose(e));
		this.remove();
	},
	
	_button:function(e) {
		this._onButton && (this._onButton(e));
	}
};
