/******************************************************************************
  Modified by: DyNE (http://zzschool.126.com http://www.zzxy.cn)
  Based upon:  http://our-sky.com
*******************************************************************************/
/* 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
 *
 */

// {{{ SSObject
SSObj = function() {
	this.loaded = false;
}

SSp = SSObj.prototype;

// fix IE memory leak?
SSp.cleanListen = function() {
	for (var i in this.listens) {
		this.listens[i][0].detachEvent('on' + this.listens[i][1]);
	}
}
SSp.listen = function(target, name, handler) {
	var _SS = this;
	var cb = function(e) {
		_SS.applyEventHandler(target, handler, e);
	};
	if (target.addEventListener) {
		target.addEventListener(name, cb, false);
	}
	else if (target.attachEvent) {
		if (!this.listens) {
			this.listens = [];
			this.listen(window, 'unload', function(){_SS.cleanListen()});
		}
		this.listens[this.listens.length] = [target, name];
		target.attachEvent('on' + name, cb);
	}
	else {
		var oldhandler = target['on' + name];
		if (oldhandler) {
			target['on' + name] = function(e) {
				_SS.applyEventHandler(target, oldhandler, e);
				_SS.applyEventHandler(target, handler, e);
			}
		}
		else {
			target['on' + name] = cb;
		}
	}
}
SSp.applyEventHandler = function(target, handler, event) {
	if (!event) {
		event = window.event;
		if (!event) return;
	}

	if (handler.call) {
		ret = handler.call(target, event);
	}
	else if (handler instanceof Function) {
		target.__tmp = handler;
		ret = target.__tmp(event);
	}
	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();
	}
}

SSp.getBody = function(doc) {
	doc = doc||document;
	return !is.cssCompatMode ? doc.documentElement : doc.body;
}

// create object
SS = new SSObj();

SS.listen(window, 'load', function() {SS.loaded = true});
// }}}

// {{{ 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 = SS.browser = new Browser();
var ie = is.ie;
var ns = is.ns;
// }}}

// {{{ 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 = "#CCEEFF";

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 (!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.padding = "4px";
	s.fontSize = "12px";
	s.fontFamily = "Georgia, Tahoma, Verdana";
	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){}
		}
	}
	if (document.onmouseout == titleTrack) {
		document.onmouseout = null;
	}
}

function titleShow(updnow)
{
	if (!titleDiv) {
		if (!SS.loaded || insertTitle() === 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_getSrc(e)
{
	var o = e.srcElement||e.target;
	if (!o) return null;
	if (o.nodeName=="#text") o=o.parentNode;
	return o;
}
// }}}
//

function ctlent(obj) {
	if((event.ctrlKey && window.event.keyCode == 13) || (event.altKey && window.event.keyCode == 83)) {
		//if(validate(this.document.input)) 
		this.document.input.submit();
	}
}

function checkall(form) {
	for(var i = 0;i < form.elements.length; i++) {
		var e = form.elements[i];
		if (e.name != 'chkall') {
			e.checked = form.chkall.checked;
		}
	}
}

function findobj(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];
	}
	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=MM_findObj(n,d.layers[i].document);
	}
	return x;
}

function copycode(obj) {
	var rng = document.body.createTextRange();
	rng.moveToElementText(obj);
	rng.scrollIntoView();
	rng.select();
	rng.execCommand("Copy");
	rng.collapse(false);
}

//HTML test windows by Niceweb
/*
function runHtml(id) {
   	var code=id.value;
    var newwin=window.open('', '', 'width=600, height=400, status=yes, menubar=yes, toolbar=no, directies=yes, resizable=yes, scrollbars=yes');
    newwin.opener = null ;
    newwin.document.write(code);
    newwin.document.close();
}

function saveCode(id) {
    var code=id.value;
	var pop=window.open('','_blank','top=10000');
	pop.document.writeln(code);
	pop.document.execCommand('saveas','','code.html');
	pop.close();
}
*/

function runHtml(obj) {
	var winname = window.open('', "_blank", '');
	winname.document.open('text/html', 'replace');
	winname.document.writeln(obj.value);
	winname.document.close();
}

function saveCode(obj) {
	var winname = window.open('', '_blank', 'top=10000');
	winname.document.open('text/html', 'replace');
	winname.document.writeln(obj.value);
	winname.document.execCommand('saveas','','code.htm');
	winname.close();
}

function reverse(id) {
	text = "";
	str=id.value;
	for (i = 0; i <= str.length; i++)
		{
			text = str.substring(i, i+1) + text;
		}
	id.value=text;
	}

function htmlresize(id)
{
    var o=id;
	var docheight = document.body.clientHeight;
	o.style.height = o.expandstatus ? 200 : 0;
	o.expandstatus = !o.expandstatus;
}
//HTML test windows End Enhenced by DyNE
function multiresize(id)
{
    var o=id;
	var docheight = document.body.clientHeight;
	o.style.height = o.expandstatus ? 0 : 200;
	o.expandstatus = !o.expandstatus;
}

nereidFadeObjects = new Object();
nereidFadeTimers = new Object();
function nereidFade(object, destOp, rate, delta){
if (!document.all)
return
    if (object != "[object]"){  //do this so I can take a string too
        setTimeout("nereidFade("+object+", "+destOp+", "+rate+", "+delta+")", 0);
        return;
    }
    clearTimeout(nereidFadeTimers[object.sourceIndex]);
    diff = destOp-object.filters.alpha.opacity;
    direction = 1;
    if (object.filters.alpha.opacity > destOp){
        direction = -1;
    }
    delta=Math.min(direction*diff,delta);
    object.filters.alpha.opacity+=direction*delta;
    if (object.filters.alpha.opacity != destOp){
        nereidFadeObjects[object.sourceIndex]=object;
		nereidFadeTimers[object.sourceIndex] = setTimeout("nereidFade(nereidFadeObjects["+object.sourceIndex+"], "+destOp+", "+rate+","+delta+")", rate);
    }
}
