/* SkySoft.js
 * ==============
 * kernel of SkySoft js source, copyright by oursky.net, all rights reserved.
 * any use of this code or part of these code, must keep these lines
 *
 */

// {{{ error handling
Function.prototype.getDecl = function() {
	var match=/function\s*([^\(]*)\(([^\)]+)\)/.exec(String(this));
	if (match) {
		return {name:match[1], args:match[2].split(/[, ]+/g)};
	}
	return {name:'',args:[]};
}
Function.prototype.getBody = function() {
	var m = String(this).split(/\{/);
	delete m[0];
	return m.join('{');
}
String.prototype.compatToLine = function() {
	return this.replace(/\s{2,}/g, '').replace(/[\r\n]+/g, '/');
}
String.prototype.cut = function(len) {
	return (this.length > len) ? this.substr(0, len) + "..." : String(this);
}
String.prototype.dump = function() {
	return "'" + this.replace(/\\/g, '\\\\')
		.replace(/\n/g, "\\n")
		.replace(/\r/g, "\\r")
		.replace(/\t/g, "\\t")
		.replace(/'/g, "\\'") + "'";
}
Error.prototype.getBacktrace = function(func) {
	try {
		var x = '';
		if (self.is && is.gecko && this.stack) {
			x += this.stack + "\n";
		}
		if (!func) return "";
		var decl = func.getDecl();
		x += "- " + decl.name +"(";
		for (var a = 0, c = func.arguments.length; a < c; a ++) {
			if (a > 0) x += ", ";
			x += (decl.args[a]||'') + '=';
			var lm = func.arguments[a];
			switch (typeof(lm)) {
			case 'function':
				x += 'F'; lm = lm.getBody();
			case 'string':
				x += lm.cut(40).dump(); break;
			case 'undefined':
				x += 'N'; break;
			default:
				x += String(lm);
			}
		}
		x += ")\n";
		if (decl.name.indexOf('anony') != -1 || !decl.name) {
			x += "  " + func.getBody().compatToLine().cut(40) + "\n";
		}
		if (func.caller) {
			x += this.getBacktrace(func.caller);
		}
		return x;
	}
	catch(wa) {
		return "[Cannot get stack trace]\n";
	}
}
Error.prototype.send = function() {
	return this.sendEx(document.URL, 'Unknown');
}
Error.prototype.sendEx = function(url, line) {
	try {
		var ag = navigator.userAgent;
		if (line == 6 && ag.match(/Maxthon|MyIE2/i)) {
			return false; // sux
		}
	} catch(e) {}

	var charset = (self.is && is.gecko ? is.charset : null) || 'utf-8';
	var ref = "referrer"; try{ref = document[ref];} catch(e){ref = "";}
	var uncomplete = (self.SS ? SS.uncomplete() : 'noSS');

	self.errcnt = (self.errcnt||0) + 1;
	if (self.errcnt > 5) {
		return;
	}

	var err = this.description||this.message;
	if (err.indexOf("RPC") != -1) {
		alert('错误: ' + err +
			"\n1. 本站安全, 但是您的浏览器出故障" +
			"\n2. 您可能中冲击波或其变种了" +
			"\n3. 建议您打开网络防火墙, 杀毒, 重启," +
			" 并给 Windows 升级打补丁");
		return true;
	}
	try {
		var img = new Image();
		err += "\n" + this.getBacktrace(this.sendEx.caller);
		var ps = {err:err, url:url, line:line, ref:ref, uncomplete:uncomplete};
		ps.request = document.URL;
		try{
			ps.docsize = document.fileSize;
		}catch(e) {}
		var src = "/misc/senderror.php?charset=" + charset;
		for (var i in ps) {
			if (ps[i]) {
				src += ';' + i + '=' + (self.encodeURIComponent||String)(ps[i]);
			}
		}
		img.src = src;
	} catch(e) {
		var img = new Image();
		document.title = "Cannot handle error";
		img.src = "/misc/senderror.php?charset=" + charset +
			';err=e5+' + (e.description||e.message) +
			';request=' + document.URL;
	}
	return true;
}

function assert(v)
{
	if (!v) {
		return Error("assertion failed").send();
	}
}

try {
	if (!self.location.host.toString().match(/-(:\d+)?$/)) {
		throw('!');
	}
} catch(e) {
	if (!self.onerror
	 && self.location && self.location.href.indexOf(';debug') == -1) {
		window.onerror = function(err, url, line) {
			return Error(err).sendEx(url, line);
		}
	}
}
// }}}
// {{{ utf8
String.prototype.toUtf8 = function() {
	var out, i, len, c;
	var S = String; var fc = 'fromCharCode';

	out = "";
	len = this.length;
	for (i = 0; i < len; i++) {
		c = this.charCodeAt(i);
		if ((c >= 0x0001) && (c <= 0x007F)) {
			out += this.charAt(i);
		} else if (c > 0x07FF) {
			out += S[fc](0xE0 | ((c >> 12) & 0x0F));
			out += S[fc](0x80 | ((c >>  6) & 0x3F));
			out += S[fc](0x80 | ((c >>  0) & 0x3F));
		} else {
			out += S[fc](0xC0 | ((c >>  6) & 0x1F));
			out += S[fc](0x80 | ((c >>  0) & 0x3F));
		}
	}
    return out;
}

String.prototype.fromUtf8 = function() {
	var out, i, len, c;
	var char2, char3;
	var cca = 'chatCodeAt';

	out = "";
	len = this.length;
	i = 0;
	while (i < len) {
		c = this[cca](i++);
		switch(c >> 4) {
		case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
			out += this.charAt(i-1);
			break;
		case 12: case 13:
			char2 = this[cca](i++);
			out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
			break;
		case 14:
			char2 = this[cca](i++);
			char3 = this[cca](i++);
			out += String.fromCharCode(((c & 0x0F) << 12) |
					((char2 & 0x3F) << 6) |
					((char3 & 0x3F) << 0));
			break;
		}
	}

	return out;
}
// }}}
// {{{ BC with ie5.0
if (!self.encodeURIComponent) {
	self.encodeURIComponent = function(str) {
		return escape(String(str).toUtf8());
	}
	self.decodeURIComponent = function(str) {
		return String(unescape(str)).fromUtf8();
	}
}
// }}}
// {{{ ext to String
String.prototype.ltrim = function () { return this.replace(/^\s+/, "" ); }
String.prototype.rtrim = function () { return this.replace(/\s+$/, "" ); }
String.prototype.trim = function () { return this.replace(/(^\s+|\s+$)/, "" ); }
String.prototype.htmlencode = function () {
	return this
		.replace(/&/g, "&amp;")
		.replace(/^[ ]/, '&nbsp;')
		.replace(/[\r\n][ ]/g, '\n&nbsp;')
		.replace(/"/g, "&quot;")
		.replace(/</g, "&lt;")
		.replace(/>/g, "&gt;");
}
String.prototype.htmlencode2 = function () {
	return this
		.replace(/  /g, "&nbsp;&nbsp;")
		.replace(/\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;')
		.replace(/(\r\n|\n|\r)/g, "<BR>")
		.replace(/&#2space;/g, '&nbsp;&nbsp;')
}
String.prototype.sreplace = function(re, callback) {
	if (is.ie && is.v == 5.5) {
		re = new RegExp(re, "g");
		return this.replace(re, callback);
	}

	var str = this.toString();
	if (!str) return '';

	var loops = 1000;
	var m = "";

	var nstr = '';

	re = new RegExp(re, "");

	while((--loops) > 0 && (m = str.match(re)) && (nstr != str)) {
		nstr = str;
		str = str.replace(m[0], callback(m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7], m[8], m[9]));
		if (!str) break;
	}
	return str||'';
}
// }}}
// {{{ SSObject
SSObj = function() {
	this.loaded = false;
	this.handlerId = 0;
}

SSp = SSObj.prototype;

SSp.uncomplete = function() {
	var ret = [];
	for (var name in scripts) {
		if (!scriptscomplete[name]) {
			ret[ret.length] = name;
		}
	}
	return ret.join(', ');
}
SSp.include = function(src) {
	src = src.split(".");
	if (src[src.length-1] == 'js') src.length -= 1;
	if (src[0] != 'skysoft' || src[2] && src[1] != 'common') {
		throw Error('invalidate include');
	}
	this.includex(src.join("."), false)
}
SSp.loadGroup = function(group) {
	if (!self.scripturl)
		self.scripturl = (self.rooturl||'')+'/scripts';
	document.write('<script language="Javascript1.2"' +
		' src="'+self.scripturl+'/loadjs.php?filegroup='+group+'">' +
		'<\/script>');
}
SSp.includex = function(filename, trans) {
	if (!self.scripturl)
		self.scripturl = (self.rooturl||'')+'/scripts';

	if (!filename) return;
	filename = filename.replace(/\./g , "/"
		).replace("common/",""
		).replace("skysoft/","")

	if (typeof trans == 'undefined' || trans)
		document.write('<script language="Javascript1.2"' +
			' src="'+self.scripturl+'/loadjs.php?' +
			'files='+filename+'.js&trans=1&c='+(is.charset||'')+'">' +
			'<\/script>');
	else
		document.write('<script language="Javascript1.2"' +
			'src="'+self.scripturl+'/loadjs.php?files='+filename+'.js">' +
			'<\/script>');
}
SSp.addLoadFunction = function(f) {
	return this.listen(window, 'load', f);
}
SSp.addUnLoadFunction = function(f) {
	return this.listen(window, 'unload', f);
}
SSp.addResizeFunction = function(f) {
	return this.listen(window, 'resize', f);
}
// fix IE memory leak?
SSp.cleanListen = function() {
	for (var i in this.listens) {
		this.listens[i][0].detachEvent('on' + this.listens[i][1]);
	}
}
// {{{ listen: listen object event
// target name [thisobj] handler
SSp.listen = function(target, name, v1, v2) {
	if (v2) {
		var thisobj = v1;
		var handler = v2;
	}
	else {
		var thisobj = target;
		var handler = v1;
	}
	var cb = this.makeEventHandler(target, thisobj, handler);
	if (target.addEventListener) {
		target.addEventListener(name, cb, false);
		return cb;
	}
	else if (target.attachEvent) {
		if (!this.listens) {
			this.listens = [];
			var _SS = this;
			this.listen(window, 'unload', function(){_SS.cleanListen()});
		}
		this.listens[this.listens.length] = [target, name];
		target.attachEvent('on' + name, cb);
		return cb;
	}
	else {
		var key = 'on' + name;
		var oldhandler = target[key];
		if (oldhandler) {
			if (typeof oldhandler == 'string') {
				oldhandler = this.makeEventHandler(target, target, oldhandler);
			}
			target[key] = function(e) {
				oldhandler(event);
				cb(event);
			}
		}
		else {
			target[key] = cb;
		}
	}
}
// }}}
// {{{ makeEventHandler: return a optimized event handler
SSp.makeEventHandler = function(target, thisobj, handler) {
	var hid = '__SS_handler__' + (this.handlerId ++);
	if (is.ie) {
		if (handler instanceof Function &&
			handler.constructor.call instanceof Function) {

			var cb = function(event) {
				return handler.call(thisobj, event||window.event, target);
			}
		}
		else {
			if (typeof handler == 'string') {
				handler = function(event) {
					eval(handler);
				}
			}
			thisobj[hid] = function(event) {
				eval(handler);
			}
			var cb = function(event) {
				return thisobj[hid](event||window.event, target);
			}
		}
	}
	else {
		var cb = function(event) {
			if (!event) {
				return;
			}
			if(handler instanceof Function) {
				if (handler.call instanceof Function) {
					ret = handler.call(thisobj, event, target);
				}
				else {
					thisobj[hid] = handler;
					ret = thisobj[hid](event, target);
				}
			}
			else if (handler) {
				ret = eval(handler);
			}
			else {
				return;
			}
			if (ret === false) {
				event.returnValue = ret;
				if (event.preventDefault) {
					event.preventDefault();
				}
			}

			if (event.cancelBubble && event.stopPropagation) {
				event.stopPropagation();
			}
			return ret;
		}
	}
	cb.handlerId = hid;
	return cb;
}
// }}}

// dreamwaver's findObject
SSp.obj = SSp.findObject = function(n, d) {
	var p,i,x;
	if(!d) d=document;
	if((p=n.indexOf("?"))>0&&parent.frames.length) {
		d=parent.frames[n.substring(p+1)].document;
		n=n.substring(0,p);
	}
	if(!(x=d[n])&&d.all) x=d.all[n];
	if(!x && d.getElementById)
		x=d.getElementById(n);
	for (i=0;!x&&i<d.forms.length;i++)
		x=d.forms[i][n];

	for(i=0;!x&&d.layers&&i<d.layers.length;i++)
		x=this.findObject(n,d.layers[i].document);
	return x;
}

// newest plugin version
SSp.InsertFlash = function(src, w, h, trans, newest) {
	this.insertFlash(src, w, h, trans, true);
}
// common plugin version
SSp.insertFlash = function(src, w, h, trans, newest) {
	w=w||550;
	h=h||400;
	var codebase = (self.resurl||self.rooturl||"http://www.17xh.com") +
		"/flash/plugin/swflash.cab#version="+
		(newest?"6,0,40,0":"5,0,0,0")
		;
	document.write('\
		<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"\
			codebase="'+codebase+'"\
			width="'+w+'" height="'+h+'"> \
		<param name="movie" value="'+src+'">\
		<param name="AllowScriptAccess" value="never">\
		' +
		(trans?'<param name="wmode" value="transparent">':'')+ '\
		<param name="quality" value="high">\
		<embed src="'+src+'" \
			'+
			(trans?'wmode=':'transparent')+' \
			quality="high" \
			AllowScriptAccess="never" \
			pluginspage="http://www.macromedia.com/' +
			'shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" \
			type="application/x-shockwave-flash" \
			width="'+w+'" height="'+h+'"> \
		</embed> \
		</object> \
		'
	);
}

SSp.getBody = function(doc) {
	doc = doc||document;
	return !is.cssCompatMode ? doc.documentElement : doc.body;
}

// create object
SS = SkySoft = new SSObj();

// install handler
if (self.DynAPI||self.dynapi) {
	if (!self.dynapi) {
		dynapi = self.DynAPI;
	}
}
// }}}
// {{{ cookie functions
SkySoft.cookies = {
	save : function(name, value, days, path) {
		if (typeof name == 'object') {
			value = name.value;
			days = name.days;
			path = name.path;
			name = name.name;
		}
		var cookie = encodeURIComponent(name) + "=" + encodeURIComponent(value);
		if (days) {
			var date=new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			cookie += "; expires="+date.toGMTString();
		}
		if (typeof path == 'undefined') {
			cookie += '; path=/';
		}
		else if (path != '.') {
			cookie += '; path=' + path;
		}
		document.cookie = cookie;
	},
	read : function(name) {
		var nameEQ = encodeURIComponent(name) + "=";
		var nameLN = nameEQ.length;
		var ca = document.cookie.split(/[; ]/);
		for (var i in ca) {
			if (ca[i].substring(0, nameLN) == nameEQ) {
				return decodeURIComponent(ca[i].substring(nameLN));
			}
		}
	},
	del : function(name) {
		this.save(name,"",-1);
	}
};
SkySoft.cookies.write = SkySoft.cookies.save;

if (self.DynAPI) {
	self.DynAPI.cookies = SkySoft.cookies;
}
// }}}
// {{{ browser detection
/* code from dynapi3, Powered by oursky.net
 */
function Browser() {
	var b = navigator.appName;
	var v = this.version = navigator.appVersion;
	var ua = navigator.userAgent.toLowerCase();
	this.v = parseInt(v);
	this.safari = ua.indexOf("safari") != -1; // always check for safari & opera
	this.opera = ua.indexOf("opera") != -1; // before ns or ie
	this.ns = !this.opera && !this.safari && (b=="Netscape");
	this.ie = !this.opera && (b=="Microsoft Internet Explorer");
	this.gecko = ua.indexOf('gecko') != -1;

	if (this.ns) {
		this.ns4 = (this.v==4);
		this.ns6 = (this.v>=5);
		this.b = "Netscape";
	}
	else if (this.ie) {
		this.v=parseFloat(v.substr(v.indexOf("MSIE")+4));
		if (this.v > 7) {}
		else if (this.v >= 6) {this.ie6 = true;}
		else if (this.v >= 5) {this.ie5 = true;}
		else if (this.v >= 4) {this.ie4 = true;}
		this.b = "MSIE";
	}
	else if (this.opera) {
		this.v=ua.substr(ua.indexOf("opera")+6,1) * 1; // set opera version
		if (this.v >= 7) {this.opera7 = true;}
		else if (this.v >= 6) {this.opera6 = true;}
		this.b = "Opera";
	}
	else if (this.safari) {
		this.ns6 = (this.v>=5);	// ns6 compatible correct?
		this.b = "Safari";
	}
	this.dom = (document.createElement
		&& document.appendChild
		&& document.getElementsByTagName)? true : false;
	this.def = (this.ie||this.dom);
	this.win32 = ua.indexOf("win")>-1;

	if (this.win32) {
		this.win = true;
		if (ua.indexOf("nt")>-1) {
			this.nt = true;
			if (ua.indexOf("nt 5")>-1) {
				this.nt5 = true;
				if (ua.indexOf("nt 5.1")>-1) {
					this.nt51 = true
				}
			}
		}
	}
	else if (ua.indexOf("mac")>-1) { this.mac = true; }
	else if (ua.indexOf("x11")>-1) { this.x = true; }

	this.filter = this.ie && this.v>=6;
	this.other = (!this.win32 && !this.mac);
	this.detectCharset();

	var minver = navigator.appMinorVersion||'';
	if (minver.indexOf('SP1')) this.sp1 = true;

	this.hand = this.ie ? 'hand' : 'pointer';
	this.blankpage = this.opera ?
		(self.siteurl||'') + '/blank.html' : 'about:blank';
	this.cssCompatMode = !document.compatMode||
		document.compatMode=='BackCompat';

	this.supported = (this.def||this.ns4||this.ns6||this.opera);
	if (!this.supported) {
		window.status = '无法识别的浏览器. 本站脚本可能不支持该浏览器.';
	}

	if (!window.navigate) {
		window.navigate = function(url) {
			window.location.href = phpurl(url);
		}
	}
}
Browser.prototype.detectCharset = function () {
	if (!self.document) return setTimeout("is.detectCharset()", 0);
	this.en = this.english = self.english;
	this.charset = (document.charset||document.characterSet||"").toLowerCase();
	var c = this.charset;
	this.cht	= (c=="big5"||c=="big5-hkscs"||c=="euc-tw");
	// gb2312 hz-gb-2312 x-gbk
	this.chs	= (c.indexOf("gb")>=0?true:false);
}

is = SkySoft.browser = new Browser();
var ie = is.ie;
var ns = is.ns;
// }}}
function require(js) { return SS.includex(js, false); }
// {{{ windows
function showhelp(url) {
	if (url.indexOf('/') == -1) {
		url = '/help.php?id=' + url;
	}
	return _open(url, 'srSM');
}
function showsendpage(comment, thetitle) {
	if (!comment) comment = "";
	if (!self.pageurl) {
		self.pageurl = document.location.toString()
	}
	return _open("/misc/sendpage.php?"+self.pageurl()+
		"&comment="+comment
		+"&sendtitle="+(thetitle||document.title), '', 5, 5);
}
function mailto(uid,subject,body) {
	return _open("/user/mailto.php?id="+(uid||"")+
		"&subject="+(subject||"")+
		"&body=" + (body||""), '', 5, 5);
}
function showuser(userid) {
	return _open(typeof userid == 'object' ?
		userid.href : "/user/viewinfo.php?id="+userid, 'slrS', 78, 55);
}
function shownews(newsid) { return _open("/news/read.php?id="+newsid, 'slrM'); }
function showRegister() { return _open('/user/register.php','slrSM'); }
function readtopic(p1,page,fpage,anchor) {
	var url;
	if (typeof p1 == 'string') url = p1;
	else {
		url = "/forum/readtopic.php?id=" + p1;
		if (page) url += "&tpage=" + page
		if (fpage) url += "&fpage=" + fpage
	}
	url += (anchor||'');
	return _open(url,'slrS', 780, 550);
}
function showann(annid) {
	return _open("/forum/showann.php?id="+annid,'sl',78,55);
}
function goChat(clubid,e) {
	e = e||window.event;
	if (e && (e.ctrlKey || e.shiftKey)) return;

	showChat(is.cht? "%A4%D1%AA%C5%BCs%B3%F5":"%CC%EC%BF%D5%B9%E3%B3%A1");
	if (e) e.returnValue = false;
	return false;
}
function showChat(chan) {
	return _open('/chat/mainframe.php?chan='+(chan||"our-sky"), 'rM');
}

function showVChat(id) {
	id=(id||"1").toString();
	var url = (self.siteurl||self.rooturl||"") + "/vc/index.php?room="+id;
	var wnd = self.open(url);
	wnd.focus();
	return wnd;
}

function showart(artid,chan) {
	return _open("/article/show.php?id="+artid, 'Mslr');
}
function showupload() {
	return _open("/misc/upload.php", '!', 400, 450, 'uploadmanager', 100, 100);
}
function showmsger() {
	return _open('/msger/', 'msger', 5, 55); return false;
}
showmsg_read = showmsger;
function showmsg_send(user) {
	return _open('/msger/inbox/write.html?to='+user, 'msger', 5, 55); return false;
}
// }}}
// {{{ openw
function url2name(url) {
	return url.toString().replace(new RegExp("[.:&/\\?\\(\\)=]*", "g"), "");
}

function wndchgsize(w, h) {
	var sw = (screen.availWidth||screen.width);
	var sh = (screen.availHeight||screen.height);
	if (screen.width < 800) { return; }
	if (!is.ie) return;
	var b = SS.getBody();
	if (b.clientWidth > 800) {
		window.resizeTo(w||800,h||550);
	} else {
		window.resizeTo(sw, sh);
	}
}
var lastOpenWnd = null;
function _wndopen(url, name, param, replace) {
	var wnd;
	var helper = window;
	var purl = phpurl(url);
	try {
		wnd = helper.open(purl, name||url2name(url), param, replace);
	}
	catch (e) {
		try { if (wnd) wnd.close(); } catch(e) {}

		try { wnd = helper.open(purl, name, param, replace); }
		catch (e) {
			try { if (wnd) wnd.close(); } catch(e) {}
			wnd = helper.open(purl, '', param, replace);
		}
	}
	if (wnd === false) return null; // closed
	if (!wnd) {
		window.status = ebg("sorry, can't open window", "礚猭穝秨怠", "无法新开窗口");
		return null;
	}
	// if (!wnd.opener) wnd.opener = self;
	lastOpenWnd = wnd;
	try { wnd.focus(); } catch(e) {}
	return wnd;
}

// defaults, url, w, h, name, x, y
function __open(defaults, args) {
	var name;
	var max = false;
	var w = 0, h = 0;
	var sw = screen.availWidth||screen.width
	var sh = screen.availHeight||screen.height

	var p_arg = 0;
	var url = args[p_arg ++];

	if (defaults != '' || typeof args[p_arg] != 'string') opt = '';
	else opt = args[p_arg++]||'';
	opt += defaults;

	if (opt.indexOf('M') != -1) {
		max = true;
		w = sw;
		h = sh;
	}
	else {
		w = args[p_arg++] || null;
		h = args[p_arg++] || null;
	}
	name = args[p_arg++] || '';
	x = args[p_arg++] || 0;
	y = args[p_arg++] || 0;

	if (w < 100) w *= 10; if (w < 100) w *= 10;
	if (h < 100) h *= 10; if (h < 100) h *= 10;

	// common size fix
	if (!max && sh <= 600) {
		if (h > 500 && opt.indexOf('l') != -1) h -= 32;
		if (h > 500 && opt.indexOf('S') != -1) h -= 20;
	}

	var center    = (opt.indexOf('c') != -1);
	if (center) { w = (sw-w)/2; h = (sh-h)/2; }

	var param = '';
	var params = {top: y, left: x, width: w, height: h};
	for (var i in params) {
		if (params[i] !== null) {
			param += i + '=' + params[i] + ',';
		}
	}
	var opts = ['toolbar','scrollbars','resizable',
		'location','Status','fullscreen','menubar'];
	for (var i in opts) {
		var key = opts[i].substr(0, 1);
		param += ',' + opts[i] + '=' + (opt.indexOf(key) == -1 ? 'no':'yes');
	}

	var wnd = _wndopen(url, name, param, false);
	if (!wnd) return null; // failed or closed
	try { if (max) wnd.resizeTo(w, h);
	} catch(e) {}

	return wnd;
}
// }}}
// {{{ openwindows
function _open() {	return __open('', _open.arguments||arguments); }
function openw() {	return __open('', openw.arguments||arguments); }
function openwr() {	return __open('r', openw.arguments||arguments); }
function openwl() {	return __open('l', openwl.arguments||arguments); }
function openws() {	return __open('s', openws.arguments||arguments); }
function openwsl() {return __open('sl', openwsl.arguments||arguments); }
function openmaxsl() {return __open('slrM', openmaxsl.arguments||arguments); }

function win3x3(url,name) { openw(url, 300, 300,name); }
function win3x4(url,name) { openw(url, 300, 400,name); }
function win3x5(url,name) { openw(url, 300, 500,name); }
function win4x4(url,name) { openw(url, 400, 400,name); }
function win4x5(url,name) { openw(url, 400, 500,name); }
function win5x4(url,name) { openw(url, 500, 400,name); }
function win5x5(url,name) { openw(url, 500, 500,name); }
function win6x4(url,name) { openw(url, 600, 400,name); }
function win6x5(url,name) { openw(url, 600, 500,name); }
function win65x5(url,name) { openw(url, 650, 500,name); }
function win7x5(url,name) { openw(url, 700, 500,name); }
function win7x55l(url,name) { openwl(url, 700, 540,name); }
function win75x5(url,name) { openw(url, 750, 500,name); }
function win75x55(url,name) { openw(url, 750, 540,name); }
function win78x55(url,name) { openw(url, 780, 540,name); }
function win78x56(url,name) { openw(url, 780, 540,name); }

function win3x3s(url,name) { openws(url, 300, 300,name); }
function win3x4s(url,name) { openws(url, 300, 400,name); }
function win3x5s(url,name) { openws(url, 300, 500,name); }
function win4x4s(url,name) { openws(url, 400, 400,name); }
function win4x5s(url,name) { openws(url, 400, 500,name); }
function win5x4s(url,name) { openws(url, 500, 400,name); }
function win5x5s(url,name) { openws(url, 500, 500,name); }
function win6x4s(url,name) { openws(url, 600, 400,name); }
function win6x5s(url,name) { openws(url, 600, 500,name); }
function win65x5s(url,name) { openws(url, 650, 500,name); }
function win7x5s(url,name) { openws(url, 700, 500,name); }
function win7x55l(url,name) { openwl(url, 700, 540,name); }
function win75x5s(url,name) { openws(url, 750, 500,name); }
function win75x55s(url,name) { openws(url, 750, 540,name); }
function win78x55s(url,name) { openws(url, 780, 540,name); }
function win78x56s(url,name) { openws(url, 780, 540,name); }

function win3x4l(url,name) { openwl(url, 300, 400,name); }
function win3x5l(url,name) { openwl(url, 300, 500,name); }
function win4x4l(url,name) { openwl(url, 400, 400,name); }
function win4x5l(url,name) { openwl(url, 400, 500,name); }
function win5x4l(url,name) { openwl(url, 500, 400,name); }
function win5x5l(url,name) { openwl(url, 500, 500,name); }
function win6x4l(url,name) { openwl(url, 600, 400,name); }
function win6x5l(url,name) { openwl(url, 600, 500,name); }
function win65x5l(url,name) { openwl(url, 650, 500,name); }
function win7x5l(url,name) { openwl(url, 700, 500,name); }
function win7x55l(url,name) { openwl(url, 700, 540,name); }
function win75x5l(url,name) { openwl(url, 750, 500,name); }
function win75x55l(url,name) { openwl(url, 750, 540,name); }
function win78x55l(url,name) { openwl(url, 780, 540,name); }
function win78x56l(url,name) { openwl(url, 780, 540,name); }

function win3x4sl(url,name) { openwsl(url, 300, 400,name); }
function win3x5sl(url,name) { openwsl(url, 300, 500,name); }
function win4x4sl(url,name) { openwsl(url, 400, 400,name); }
function win4x5sl(url,name) { openwsl(url, 400, 500,name); }
function win5x4sl(url,name) { openwsl(url, 500, 400,name); }
function win5x5sl(url,name) { openwsl(url, 500, 500,name); }
function win6x4sl(url,name) { openwsl(url, 600, 400,name); }
function win6x5sl(url,name) { openwsl(url, 600, 500,name); }
function win65x5sl(url,name) { openwsl(url, 650, 500,name); }
function win7x5sl(url,name) { openwsl(url, 700, 500,name); }
function win7x55sl(url,name) { openwsl(url, 700, 540,name); }
function win75x5sl(url,name) { openwsl(url, 750, 500,name); }
function win75x55sl(url,name) { openwsl(url, 750, 540,name); }
function win78x55sl(url,name) { openwsl(url, 780, 540,name) }
function win78x56sl(url,name) { openwsl(url, 780, 540,name); }
// }}}
// {{{ title
var titleCurTitle = null;
var titleCurObj = null;
var titleDiv = null;
var titleDiv1 = null;
var titleDivS = null;
var titleAlpha = 80;
var useRadiusShadow = false;
var titleAlphaS = 50;
var title_tmr = 0;
var titlehide_tmr = 0;
var titleShowing = false;
var titleHalfShowing = false;
var titleHideDelay = 100;
var titleShowDelay = 300;
var titleEvent = [];
var titleHoverobj = null;
var titleBgColor = "RGB(126,254,235)";

var title_ifmhtml = '\
<iframe id="mytitle1" frameborder="0" \
scroll="no" style="display:none" src="'+is.blankpage+'"\
onload="setTimeout(titleInit,1000)">IFrame</iframe>';

function insertTitle() {
	if (is.ie && is.v == 5.5) {
		document.write(title_ifmhtml);
		titleDiv1 = document.getElementById("mytitle1");
	}
	if (useRadiusShadow) {
		document.write('<div id="mytitleshadow"></div>');
		titleDivS = document.getElementById("mytitleshadow");
	}
	document.write('<div id="mytitle"></div>');
	titleDiv = document.getElementById("mytitle");
	titleInit();
}

function titleCreate()
{
	if (!self.document || !self.document.body) return false;
	if (self.noTitleCreate) {
		return false;
	}
	var b = SS.getBody(document);

	if (!is.dom && !b.appendChild) {
		return false;
	}
	if (is.ie && is.v >= 5.5) {
		b.insertAdjacentHTML("BeforeEnd", title_ifmhtml);
		titleDiv1 = document.getElementById("mytitle1");
		if (useRadiusShadow) {
			titleDivS = document.createElement("DIV");
			titleDivS.id = "mytitleshadow";
			b.appendChild(titleDivS);
			titleAlpha = 100;
		}
	}
	titleDiv = document.createElement("DIV");
	titleDiv.id = "mytitle";
	b.appendChild(titleDiv);

	titleInit();
}

function titleInit()
{
	if (titleDiv1) {
		var ts1 = titleDiv1.style;
		ts1.position = "absolute";
		ts1.display = "none";
		if (is.filter) {
			try { ts1.filter = "alpha(opacity=1)"; }
			catch(e) {}
		}
	}

	if (titleDivS) {
		var tsS = titleDivS.style;
		tsS.position = "absolute";
		tsS.display = "none";
		tsS.backgroundColor = 'black';
		if (is.filter) {
			try { tsS.filter = "progid:DXImageTransform.Microsoft.Blur("+
				"PixelRadius=2,MakeShadow=true" +
				",ShadowOpacity="+(titleAlphaS/100)+")"; }
			catch(e) {}
		}
		tsS.fontSize = "1px";
		tsS.lineHeight = "1px";
	}

	if (!titleDiv) {
		return false;
	}

	var t = titleDiv;
	t.align = "left";
	var s = t.style;
	s.position = 'absolute';
	s.width = "auto";
	s.color = "black";
	s.display = "none";
	s.border = "solid";
	s.borderColor = "black";
	s.borderWidth = "1px";
	s.backgroundColor = titleBgColor;
	s.cursor = 'default';
	titleHalfShowing = true;
	if (is.filter) {
		s.filter = (titleDivS ? "" : "progid:DXImageTransform.Microsoft" +
			".dropShadow(OffX=5, OffY=5, Color='#3a5f5c',Positive='true')")
			+ "alpha(opacity="+Math.floor(titleAlpha/2)+")";
	}
	s.MozOpacity = titleAlpha / 200;
	s.paddingTop = "2px";
	s.paddingLeft = "2px";
	s.paddingRight = "2px";
	s.paddingBottom = "1px";
	s.fontSize = "12px";
	s.lineHeight = "14px";
}

function titleDetection(o)
{
	var e_parent;
	if (is.ie) e_parent = "parentElement";
	else if (is.def) e_parent = "parentNode";
	else return;

	var p = o;

	// search for title
	var title;
	for (var depth = 0;
		depth <= 3 && p && p.tagName;
		depth ++, p=p[e_parent]) {
		if (p.mytitle) {
			o.mytitle = p.mytitle;
			if (o.alt && is.ie) o.alt = '';
			if (o.title) o.title = '';
			break;
		}
		title = p.getAttribute('title')||p.getAttribute('alt');

		if (title && typeof title == 'string') {
			title = title.replace(/(\n|\\\\n)/g, "<br>");
			o.mytitle = title;
			if (o.alt && is.ie) o.alt = '';
			if (o.title) o.title = '';

			p.mytitle = title;
			if (p.alt && is.ie) p.alt = '';
			if (p.title) p.title = '';
			break;
		}
	}
}

function titleTrack(e) {
	if (!e) {
		e = window.event;
		if (!e) return;
	}
	if (titleShowing&&(e.shiftKey||e.ctrlKey||e.altKey)) return;

	var o = !is.ie ?
		e_getSrc(e) : document.elementFromPoint(e.clientX, e.clientY);
	if (titleCurObj == o) {
		return;
	}
	if (!o) return;

	if (e.type != "mouseout" && typeof o.mytitle == "undefined") {
		titleDetection(o);
	}
	if (!o.mytitle && !titleCurObj) return;

	var mytitle = o.mytitle
	if (e.type == "mouseout") mytitle = "";

	// overlap?
	if (o.id == "mytitle") {
		titleEvent = {clientX: e.clientX, clientY: e.clientY};
		titleShow(true);
	}
	else if (mytitle && mytitle != titleCurTitle) {
		titleCurTitle = String(mytitle);
		titleCurObj = o;
		titleEvent = {clientX: e.clientX, clientY: e.clientY};
		if (titlehide_tmr) { clearTimeout(titlehide_tmr); titlehide_tmr = 0}
		if (title_tmr) { clearTimeout(title_tmr); title_tmr = 0; }
		if (titleShowing) titleShow(); // update now
		else title_tmr = setTimeout(titleShow, titleShowDelay*.7);
	}
	else if (!mytitle && titleCurTitle) {
		titleCurTitle = null;
		titleCurObj = null;
		if (titlehide_tmr) clearTimeout(titlehide_tmr);
		titlehide_tmr = setTimeout(titleHide, titleHideDelay*.7);

		if (title_tmr) clearTimeout(title_tmr);
		title_tmr = setTimeout('titleShowing = false;', titleShowDelay);
	}
}

function titleHide(hide)
{
	if (!titleDiv) { return }
	if (hide === true) {
		if (titleDiv) {titleDiv.style.display = "none";}
		if (titleDiv1)titleDiv1.style.display = "none";
	}
	else {
		if (titleDivS)titleDivS.style.display = "none";
		titlehide_tmr = setTimeout("titleHide(true)", titleHideDelay*.3);
		titleHalfShowing = true;
		titleDiv.style.MozOpacity = titleAlpha / 200;
		if (is.filter) {
			try{titleDiv.filters.item("alpha").opacity = Math.floor(titleAlpha/2);}
			catch(e){}
		}
	}
}

function titleShow(updnow)
{
	if (!titleDiv) {
		if (!SS.loaded || titleCreate() === false) {
			return setTimeout(function(){titleShow(updnow)},1000);
		}
	}

	var e = titleEvent;
	if (!titleDiv||!titleCurTitle) return;

	var b = SS.getBody();
	var t = titleDiv, ts = titleDiv.style;
	var sclLeft = b.scrollLeft;
	var sclTop  = b.scrollTop;

	// where we place
	var x = e.clientX + sclLeft;
	var y = e.clientY + sclTop ;
	var docWidth  = is.ie? b.clientWidth  : window.innerWidth;
	var docHeight = is.ie? b.clientHeight : window.innerHeight;

	t.innerHTML = "<nobr>"+titleCurTitle+"</nobr>";
	ts.position = 'absolute';
	ts.display = 'block';
	var divWidth  = t.offsetWidth ||t.scrollWidth;
	var divHeight = t.offsetHeight||t.scrollHeight;
	ts.display = 'none';

	var maxX = sclLeft + docWidth - divWidth - 30;
	var maxY = sclTop  + docHeight - divHeight - 30;

	if (divWidth) x = Math.max(5, Math.min(x, maxX));
	if (divHeight && y>maxY) y = Math.max(5, maxY - divHeight*2);

	ts.left = (x - 5) + 'px';
	ts.top = (y + 24) + 'px';

	ts.display = 'block';
	titleShowing = true;
	if (titleHalfShowing) {
		title_tmr = setTimeout(function(){
			titleHalfShowing = false;
			titleDiv.style.MozOpacity = titleAlpha/100;
			if (is.filter) {
				try{titleDiv.filters.item("alpha").opacity = titleAlpha;}
				catch(e){}
			}
			if (titleDivS) {
				titleDivS.style.display = 'block';
				titleDivS.style.position = 'absolute';
			}
		}, titleShowDelay*.3);
	}

	if (titleDiv1) {
		var ts1 = titleDiv1.style;
		ts1.position = 'absolute';
		ts1.display = 'block';
		ts1.width = divWidth + "px";
		ts1.height = divHeight + "px";
		ts1.left = ts.left;
		ts1.top = ts.top;
	}

	if (titleDivS) {
		var tsS = titleDivS.style;
		tsS.width = (divWidth - 5) + "px";
		tsS.height = (divHeight - 2) + "px";
		tsS.left = x + 'px';
		tsS.top = (y + 24 + 2) + 'px';
	}
}

if (is.ie && is.v >= 5.5 || is.gecko) {
	SS.listen(document, 'mousemove', titleTrack);
}
// }}}
// {{{ functions for event
function e_Prepair(e)
{
	if (!e.srcElement) e.srcElement = e.target;
	if (!e.srcElement) return false;
	if (e.srcElement.nodeName=="#text")
		e.srcElement = e.srcElement.parentElement;

	var o = e.srcElement;

	e.x = e.x||e.pageX;
	if (typeof e.offsetX == 'undefined') {
		e.offsetX = e.pageX - o.offsetLeft;
		e.offsetY = e.pageY - o.offsetTop;
	}

	var b = SS.getBody();
	if (typeof e.pageX == 'undefined') {
		e.pageX = e.x + b.scrollLeft;
		e.pageY = e.y + b.scrollTop;
	}
}
function e_getX(e) {
	return e.x||e.clientX||e.offsetX||e.pageX;
}
function e_getY(e) {
	return e.y||e.clientY||e.offsetY||e.pageY;
}
function e_getPageX(e)
{
	var b = SS.getBody();
	return is.ie?e.clientX+b.scrollLeft:e.pageX;
}
function e_getPageY(e)
{
	var b = SS.getBody();
	return is.ie?e.clientY+b.scrollTop :e.pageY;
}
function e_getSrc(e)
{
	var o = e.srcElement||e.target;
	if (!o) return null;
	if (o.nodeName=="#text") o=o.parentNode;
	return o;
}
// }}}
// {{{ preload image
function PLI() {
	var args = arguments;
	if (typeof args[0] != 'string') {
		args = args[0];
	}

	if (!PLI.imgs) {
		PLI.imgs = new Object();
	}
	var imgs = PLI.imgs;
	var src;
	for (var i = 0; i < args.length; i ++) {
		src = args[i];
		imgs[src] = new Image();
		imgs[src].src = src;
	}
}
// }}}
// {{{ url
function pureurl(url) {
	url = (url||window.location.href).toString();
	if (url.indexOf("SID")) {
		url = url.replace(new RegExp("SID=.*", ""), "");
		if (url.substr(url.length - 1) == "&")
			url = url.substr(0, url.length - 1);
		if (url.substr(url.length - 1) == "?")
			url = url.substr(0, url.length - 1);
	}
	return url;
}
function pageurl() { return phpurl(window.location.href); }
function phpurl(url) {
	if (!self.SID) { return url; }
	if (url.indexOf("SID") != -1) { return url; }
	if (url.indexOf("?") == -1) url += "?";
	else url += "&";

	url += self.SID||('SID='+SS.cookies.read("SID"));
	return url;
}

// only for absolute url only.
function sameurl(url1, url2)
{
	return _sameurl(url1, url2) || _sameurl(url2, url1)
}
function _sameurl(url1, url2)
{
	var loc = url1.indexOf(url2);
	if (loc < 0) return false;
	if (url1.substr(loc) != url2) return false;
	return true;
}
function back2url(url, target) {
	if (self.event && event.shiftKey && event.ctrlKey) {
		return;
	}
	if (!target) target = self;
	var v = 'document';
	var r = 'referrer';
	if (sameurl(target.document.location.href, url)) { /* allow refresh */ }
	else if (sameurl(target[v][r], url)) {
		target.history.go(-1); return false
	}
}
// }}}
// {{{ element helper

function showHide(o) {
	if (typeof o == "string") o = SS.findObject(o);
	if (!o||!o.style) return;
	o.style.display = (o.style.display == "none")?"":"none";
}

function enterNext(o,e) {
	if (typeof o == "string") o = SS.findObject(o);
	if (!e) e=window.event;
	if (e.keyCode == 13) {
		o.focus(); e.returnValue = false; e.cancelBubble = true;
	}
}

function o_getComputedStyle(o) {
	if (typeof o == "string") o = SS.findObject(o);
	return o.currentStyle||o.getComputedStyle();
}
function o_absLeft(o) {
	var ie = is.ie;

	var l = o.offsetLeft;
	var p = o.offsetParent;

	while (p != null) {
		if (ie && p.tagName == "TD") {
			l += p.clientLeft;
		}

		l += p.offsetLeft;
		p = p.offsetParent;
	}
	return l;
}
function o_absTop(o) {
	var ie = is.ie;

	var l = o.offsetTop;
	var p = o.offsetParent;

	while (p != null) {
		if (ie && p.tagName == "TD") {
			l += p.clientTop;
		}

		l += p.offsetTop;
		p = p.offsetParent;
	}
	return l;
}
function o_scrollIntoView(o, bAlignToTop) {
	if (typeof bAlignToTop == 'undefined') bAlignToTop = true;
	if (is.ie) {
		o.scrollIntoView(bAlignToTop)
	}
	else {
		window.scrollTo(0, o_absTop(o));
	}
}
// }}}
// {{{ misc function
function setfocus() {
	var numargs = arguments.length;
	var o;
	for (i = 0; i < numargs; i++) {
		o = SS.findObject(arguments[i]);
		if (o) {
			try{ if (!o.value) { o.focus(); break; }
			} catch(e) {}
		}
	}
}

function res(obj) {
	switch(typeof obj) {
	case 'number': return obj.toString();
	case 'string': return obj;
	case 'function': return obj();
	case 'object':
		if (obj.src) return obj.src;
		else return obj.toString();
	default:
		return '';
	}
}

function copyText(text, doalert) {
	if (self.clipboardData) {
		self.clipboardData.setData('Text', text);
		if (doalert) {
			alert(this.cht ? "竒ī芭禟狾" : "已经拷贝到剪贴板");
		}
	}
	else {
		if (doalert) {
			alert(this.cht ?
				"聅凝竟ぃや芭禟狾ī" : "你的浏览器不支持剪贴板拷贝");
		}
	}
}

// english big5 gbk
function ebg(en, cht, chs)
{
	return is.en ? en : ( is.cht ? cht : chs);
}
function ec(en, ch)
{
	return is.en ? en : ch;
}
// }}}
// {{{ cookies
function inquiry(id) {
	var v = SS.cookies.read('inquiry');
	v = v||"";
	v += ',' + id + ',';
	v = v.replace(/,+/g, ',');
	SS.cookies.write('inquiry', v);
}

function uninquiry(id) {
	var v = SS.cookies.read('inquiry');
	v = v||"";
	v = v.replace(',' + id + ',', '');
	v = v.replace(/,+/g, ',');
	SS.cookies.write('inquiry', v);
}

SS.cookies.save("cookie", 1, 30);
if (!SS.cookies.read("cookie")) {
	self.status = 'Cookie Needed';
}
// for date-time display
SS.cookies.save("TZ", - (new Date()).getTimezoneOffset(), 30);

if (is.sp1) {
	SS.cookies.save("SP1", 1, 30);
}

if (self.screen) {
	var w = screen.availWidth;
	if (w) {
		SS.cookies.save("saw", w, 30);
	}
	var w = screen.width;
	if (w) {
		SS.cookies.save("sw", w, 30);
	}
}
// }}}
// {{{ sid fixer
// safe to keep sid(fight with browser bug?)
// cos we'll rehash it if we destroy it
SS.cookies.SID = SS.cookies.read('SID');
SS.listen('window', 'load', function() {
	if (!SS.cookies.read('SID') && SS.cookies.SID) {
		SS.cookies.write({name: 'SID', value: SS.cookies.SID, path: '/'});
	}
	var unc = this.uncomplete();
	if (unc) {
		window.status = '尚未载入脚本: ' + unc;
	}
});
// }}}
// {{{ frame protection
try {
	if (top.document.domain != self.document.domain
	 && is.ie && is.v < 6) {
		top.location.replace(self.location.href);
	}
} catch(e) {
	if (top != self) {
		top.location.replace(self.location.href);
	}
}
// }}}
SS.listen(window, 'load', function() {SS.loaded = true});

if (!self.scriptscomplete) scriptscomplete = {};
if (!self.scripts) scripts = {};
scriptscomplete['skysoft'] = true;

