// -----------------------------
// core

function nd(v) {
	return v == null;
}
function hd(v) {
	return v != null;
}
function ndv(v, vR) {
	return v == null ? vR : v;
}
function nds(v, sR) {
	return v == null ? sR : '';
}
function hds($v, sR) {
	return v != null ? sR : '';
}

function nv(v) {
	return nd(v) || (v == "0") || (hd(v.length) ? v.length == 0 : false);
}
function hv(v) {
	return !nv(v);
}
function nvv(v, vR) {
	return nv(v) ? vR : v;
}
function nvs(v, sR) {
	return nv(v) ? sR : "";
}
function hvs(v, sR) {
	return hv(v) ? sR : "";
}

function nt(v) {
	return v == null || typeof v == "object" || v.toString() == "";
}
function ht(v) {
	return !nt(v);
}
function ntv(v, vR) {
	return nt(v) ? vR : v;
}
function nts(v, sR) {
	return nt(v) ? sR : "";
}
function hts(v, sR) {
	return ht(v) ? sR : "";
}

function vb(v) {
	return v ? 1 : 0;
}
function vn(v) {
	return v == null ? 0 : parseFloat(v);
}
function vs(v) {
	return v == null ? "" : v.toString();
}

// -----------------------------
// str

function seq(v, v2) {
	return vs(v) == vs(v2);
}
function trim(s) {
	return vs(s).replace(/^\s+|\s+$/g, "");
}
function sbase(s, sBase) {
	return s.substr(0, sBase.length) == sBase;
}

// -----------------------------
// dt

function time() {
	var d, s;
	d = new Date();
	s = d.getTime().toString();
	return parseInt(s.substr(0, s.length - 3));
}

// -----------------------------
// arr

function aq(a, v) {
	for (var i = 0; i < a.length; i++) if (seq(a[i], v)) return true;
	return false;
}
function aqi(a, v) {
	for (var i = 0; i < a.length; i++) if (seq(a[i], v)) return i;
	return -1;
}
function ad(a, i) {
	if (hd(i)) a.splice(i, 1); else a.splice(0, a.length);
}
function la(sL) {
	return nt(sL) ? [] : sL.split(",");
}
function li(sI) {
	return sI.split(":");
}
function lq(sL, sQ) {
	return aq(la(sL), sQ);
}

// -------------------------------------
// prm

function pg(sL, sK) {
	var a = la(sL);
	for (var i = 0; i < a.length; i++) {
		var aI = li(a[i]);
		if ((aI.length == 2) && (aI[0] == sK)) return aI[1];
	}
}
function pv(sL, sK, sV) {
	var a = la(sL);
	for (var i = 0; i < a.length; i++) {
		var aI = li(a[i]);
		if ((aI.length == 2) && (aI[0] == sK)) {
			a[i] = sK + ":" + sV;
			return a.join(",");
		}
	}
	a.push(sK + ":" + sV);
	return a.join(",");
}
function pd(sL, sK) {
	var a = la(sL);
	for (var i = 0; i < a.length; i++) {
		var aI = li(a[i]);
		if ((aI.length == 2) && (aI[0] == sK)) ad(a, i);
	}
	return a.join(",");
}

// -------------------------------------
// re

function rt(s, oRe) {
	return oRe.test(s);
}
function re(s, oRe, aM) {
	var a;
	ad(aM);
	if (oRe.global) while (hd(a = oRe.exec(s))) aM.push(a);
	else if (hd(a = oRe.exec(s))) aM.push(a);
	return hv(aM);
}
function rr(s, oRe, sRp) {
	return vs(s).replace(oRe, sRp);
}
function rs(s, oRe) {
	return vs(s).split(oRe);
}

// -------------------------------------
// uri

function ux(s) {
	return encodeURIComponent(s).replace(/%20/g, "+");
}
function uxraw(s) {
	return encodeURIComponent(s);
}
function uxlite(s) {
	return s.replace(/%/g, "%25").replace(/=/g, "%3D").replace(/&/g, "%26").replace(/#/g, "%23").replace(/\+/g, "%2B").replace(/ /g, "+");
}
function uxr(s) {
	return decodeURIComponent(s.replace(/\+/g, "%20"));
}
function us(sU, sK) {
	sU = ntv(sU, location.href);
	var aM = [], o = {scheme:"", domain:"", path:"", prm:""};
	if (re(sU, /^([a-z]+:\/\/)/i, aM)) {
		o["scheme"] = aM[0][1];
		sU = rr(sU, /^([a-z]+:\/\/)/i, "");
	}
	if (ht(o["scheme"])) {
		if (sU.indexOf("/") > 0) {
			o["domain"] = sU.substr(0, sU.indexOf("/"));
			sU = sU.substr(sU.indexOf("/"));
		}
		else {
			o["domain"] = sU;
			sU = "";
		}
	}
	re(sU, /([^?]*)\??(.*)/, aM);
	o["path"] = aM[0][1];
	o["prm"] = aM[0][2];
	return nt(sK) ? o : o[sK];
}
function uj(oU) {
	return oU["scheme"] + oU["domain"] + oU["path"] + hts(oU["prm"], "?" + oU["prm"]);
	}
function ups(sPrm) {
	var aM = [], aM2 = [], o = {};
	re(sPrm, /([^&=]+)=?([^&]*)/g, aM);
	for (var i = 0; i < aM.length; i++) {
		var sN = uxr(aM[i][1]), sV = uxr(aM[i][2]);
		if (re(sN, /^([^[]+)\[([^\]]*)/, aM2)) {
			if (nd(o[aM2[0][1]])) o[aM2[0][1]] = [];
			if (ht(aM2[0][2])) o[aM2[0][1]][aM2[0][2]] = sV; else o[aM2[0][1]].push(sV);
		}
		else o[sN] = sV;
	}
	return o;
}
function upj(oPrm) {
	var a = [];
	for(var sN in oPrm)
		if (typeof oPrm[sN] == "string") a.push(ux(sN) + "=" + ux(oPrm[sN]));
		else for (var sK in oPrm[sN]) a.push(ux(sN + "[" + sK + "]") + "=" + ux(oPrm[sN][sK]));
	return a.join("&");
}
function uxf(sU) {
	var oU = us(sU);
	oU["prm"] = upj(ups(oU["prm"]));
	return uj(oU);
}
function up(sU, sN) {
	return nt(sN) ? us(sU)["prm"] : ups(us(sU)["prm"])[sN];
}
function uv(sU, k, v) {
	var oU, oP
	oU = us(sU);
	oP = ups(oU["prm"]);
	if (nt(v)) delete oP[k]; else oP[k] = vs(v);
	oU["prm"] = upj(oP);
	return uj(oU);
}
function uvo(sU, o) {
	var oU, oP, k;
	oU = us(sU);
	oP = ups(oU["prm"]);
	for (k in o) if (nt(o[k])) delete oP[k]; else oP[k] = vs(o[k]);
	oU["prm"] = upj(oP);
	return uj(oU);
}
function ud(sU, sN) {
	var oU = us(sU);
	if (nt(sN)) oU["prm"] = "";
	else {
		var oPrm = ups(oU["prm"]);
		delete oPrm[sN];
		oU["prm"] = upj(oPrm);
	}
	return uj(oU);
}
function u2p(sP) {
	return sP.replace(/&/g, ",").replace(/=/g, ":");
}
function p2u(sP) {
	return sP.replace(/,/g, "&").replace(/:/g, "=");
}
function ugo(sU, sDelPrmL) {
	var a = la(sDelPrmL);
	for (var i = 0; i < a.length; i++) sU = ud(sU, a[i]);
	location.href = ntv(sU, location.href);
}

// -----------------------------
// http

var goHttp, gfHttp;
function http() {
	if (window.XMLHttpRequest) return new XMLHttpRequest();
	try {return new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {}
}
function httpf() {
	if (goHttp.readyState != 4) return;
	if (goHttp.status == 200) gfHttp(goHttp.responseText, ""); else gfHttp("", "Error: " + goHttp.status + " " + goHttp.statusText);
}
function httpget(sU, f) {
	gfHttp = f;
	goHttp.open("GET", sU, true);
	goHttp.onreadystatechange = httpf;
	goHttp.send("");
}
function httppost(sU, oP, f) {
	gfHttp = f;
	goHttp.open("POST", sU, true);
	goHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	goHttp.onreadystatechange = httpf;
	goHttp.send(up(uvo("?", oP)));
}

// -----------------------------
// ajax

var gsAppHash = "", goIfra, gsMenu = "home";
function apph(k) {
	return pg(gsAppHash.substr(1), k);
}
function argh(k) {
	return pg(location.hash.substr(1), k);
}
function hashgo(sP) {
	var sHash = "#" + u2p(sP);
	location = sHash;
	gsAppHash = sHash;
}
function ifrago(sP) {
	goIfra.src = uvo("?" + vs(sP), {ie:1, r:time()});
}
function hashq() {
	if (gsAppHash == location.hash) return;
	if (apph("c") != argh("c") || apph("id") != argh("id")) {
		gsAppHash = location.hash;
		if (isie()) ifrago(p2u(location.hash.substr(1)));
		ctload();
	}
	gsAppHash = location.hash;
}
function ifraload() {
	var sP = up(ud(ud(goIfra.contentWindow.location.href, "ie"), "r"));
	if ((gsAppHash == "" ? "#" : gsAppHash) == "#" + u2p(sP)) return;
	hashgo(sP);
	ctload();
}
function linkgo() {
	var sP = up(this.href);
	hashgo(sP);
	if (isie()) ifrago(sP);
	ctload();
	return false;
}
function linkinit(sId) {
	var a, i, j, o;
	a = la(sId);
	for (i = 0; i < a.length; i++) {
		o = og(a[i]).getElementsByTagName("a");
		for (j = 0; j < o.length; j++) if(sbase(o[j].href, siteurl()) && !o[j].target) o[j].onclick = linkgo;
	}
}
function iehistory() {
	goIfra = document.createElement("iframe");
	goIfra.style.display = "none";
	oe(goIfra, "load", ifraload);
	ifrago();
	document.body.appendChild(goIfra);
}
function ajaxinit(sLink) {
	if (!AJAX || !(goHttp = http())) return;
	linkinit(sLink);
	setInterval(hashq, 100);
	if (isie()) iehistory();
	if (isop()) oe(window, "mouseover", function () {});
}

// -----------------------------
// js

var gaJs = [];
function jq(sSrc, bLoaded) {
	var i;
	for (i = 0; i < gaJs.length; i++) if (gaJs[i].sSrc == sSrc) return hv(bLoaded) ? gaJs[i].bLoaded : 1;
	return 0;
}
function ja(sSrc) {
	gaJs.push({sSrc:sSrc, bLoaded:0});
}
function jl(sSrc) {
	var i;
	for (i = 0; i < gaJs.length; i++) if (gaJs[i].sSrc == sSrc) gaJs[i].bLoaded = 1;
}
function jload(sSrc, f) {
	if (jq(sSrc)) return;
	ja(sSrc);

	var o = document.createElement("script");
	o.type = "text/javascript";
	o.src = sSrc;
	o.onload = function () {
		jl(sSrc);
		if (f) f();
	}
	if (isie()) o.onreadystatechange = function () {
		if (this.readyState == "loaded") {
			jl(sSrc);
			if (f) f();
		}
	};
	document.getElementsByTagName("head")[0].appendChild(o);
}

// -----------------------------
// css

function cssload(sHref) {
	var o = document.createElement("link");
	o.rel = "stylesheet";
	o.type = "text/css";
	o.href = sHref;
	document.getElementsByTagName("head")[0].appendChild(o);
}

// -----------------------------
// obj

function og(vO) {
	return typeof vO == "string" ? document.getElementById(vO) : vO;
}
function ogv(vO) {
	vO = og(vO);
	return lq("input,select,textarea", vO.tagName.toLowerCase()) ? vO.value : vO.innerHTML;
}
function ov(vO, v) {
	vO = og(vO);
	if (lq("input,select,textarea", vO.tagName.toLowerCase())) vO.value = v; else vO.innerHTML = v;
}
function oa(vO, v) {
	ov(vO, ogv(vO) + hts(ogv(vO), "<br />") + v);
}
function osy(vO, k, v) {
	og(vO).style[k] = v;
}
function vis(vO, v) {
	osy(vO, "display", ndv(v, "block"));
}
function visoff(vO) {
	vis(vO, "none");
}
function visch(vO, v) {
	vis(vO, og(vO).style.display == "none" ? ntv(v, "block") : "none");
}
function oe(vO, sE, f) {
	vO = og(vO);
	if (vO.addEventListener) vO.addEventListener(sE, f, false);
	else if (vO.attachEvent) vO.attachEvent("on" + sE, f);
	else vO["on" + sE] = f;
}

// -------------------------------------
// env

function siteurl() {
	return location.protocol + "//" + location.hostname + SITE_URI;
}

// -----------------------------
// htm

function hx(s) {
	return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
}
function hxr(s) {
	return s.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, "\"").replace(/&amp;/g, "&");
}
var gsMt = "mailto:", gsAt = "@";
function ema(sT, sD, sA, sC, sL) {
	var s = sA + gsAt + sD + "." + sT;
	document.write('<a href="' + gsMt + s + '"' + (sC ? ' class="' + sC + '"' : "") + ">" + (sL ? sL : s) + "</a>");
}
function oflash(vO, sSrc, iW, iH, sBg, bTrans) {
	ov(vO, '<object classid="clsid:d27cdb6e-ae6d-11CF-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="' + iW + '" height="' + iH + '">' +
		'<param name="movie" value="' + sSrc + '" />' +
		'<param name="quality" value="high" />' +
		hts(sBg, '<param name="bgcolor" value="' + sBg + '" />') +
		hvs(bTrans, '<param name="wmode" value="transparent" />') +
		'<embed type="application/x-shockwave-flash" pluginspage="http://adobe.com/go/getflash/" src="' + sSrc + '" width="' + iW + '" height="' + iH + '" quality="high"' + hts(sBg, ' bgcolor="' + sBg + '"') + hvs(bTrans, ' wmode="transparent"') + "></embed>" +
		"</object>");
}

// -------------------------------------
// fr

function foc(vO) {
	var o = og(vO);
	if (nd(o)) return;
	o.select();
	o.focus();
}
function opv(sOp) {
	ov("opid", sOp);
}
function frgo(sOp) {
	if (ht(sOp)) opv(sOp);
	og("fr").submit();
}

// -------------------------------------
// win

function win(sU, iW, iH, iT, iL, bScroll, bResz) {
	window.open(sU, "", "width=" + iW + ",height=" + iH + hds(iT, ",top=" + iT) + hds(iL, ",left=" + iL) +
		",menubar=0,toolbar=0,location=0,scrollbars=" + ndv(bScroll, 1) + ",resizable=" + ndv(bResz, 1));
}
function winc(sU, iW, iH, bScroll, bResz) {
	window.open(sU, "", "width=" + iW + ",height=" + iH + ",top=" + ((screen.height - iH) / 2 - 30) + ",left=" + ((screen.width - iW) / 2) +
		",menubar=0,toolbar=0,location=0,scrollbars=" + ndv(bScroll, 0) + ",resizable=" + ndv(bResz, 0));
}
function winf(sU) {
	window.open(sU, "", "fullscreen=1,scrollbars=1,resizable=1");
}

// -------------------------------------
// im

function im(sP, bPd) {
	winc("?" + hts(up("", "l"), "l=" + up("", "l") + "&") + "c=im&p=" + sP + hvs(bPd, "&pd=1"), 400, 300, 0, 1);
}
function imf(sP) {
	winf("/?" + hts(up("", "l"), "l=" + up("", "l") + "&") + "c=imf&p=" + sP);
}
function imfit(iPdW, iPdH) {
	window.resizeBy(og("im").width - document.body.clientWidth + ton(iPdW), og("im").height - document.body.clientHeight + ton(iPdH));
	window.moveTo((screen.width - document.body.clientWidth) / 2, (screen.height - document.body.clientHeight) / 2 - 30);
}

// -----------------------------
// browser

function isie() {
	return typeof gbIe != "undefined";
}
function isop() {
	return navigator.userAgent.indexOf('Opera') != -1;
}
function fav() {
	if(window.external) window.external.AddFavorite(location.href, document.title);
	else if (window.sidebar) window.sidebar.addPanel(document.title, location.href, "");
}

// -----------------------------
// echo

function em(s) {
	alert(s);
}
function eq(s) {
	return confirm(s);
}

