//common functions{{{
if (typeof HTMLElement != "undefined") {
	if (!HTMLElement.prototype.insertAdjacentElement) {
		HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode) {
			switch (where){
				case 'beforeBegin':
					this.parentNode.insertBefore(parsedNode,this);
					break;
				case 'afterBegin':
					this.insertBefore(parsedNode,this.firstChild);
					break;
				case 'beforeEnd':
					this.appendChild(parsedNode);
					break;
				case 'afterEnd':
					if (this.nextSibling) 
						this.parentNode.insertBefore(parsedNode,this.nextSibling);
					else this.parentNode.appendChild(parsedNode);
					break;
			}
		}

		HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr) {
			var r = this.ownerDocument.createRange();
			r.setStartBefore(this);
			var parsedHTML = r.createContextualFragment(htmlStr);
			this.insertAdjacentElement(where,parsedHTML)
		}

		HTMLElement.prototype.insertAdjacentText = function(where,txtStr) {
			var parsedText = document.createTextNode(txtStr);
			this.insertAdjacentElement(where,parsedText)
		}
	}
}
function gE(x){return document.getElementById(x);}
function gETop(x){var t=0;while(x){t+=x.offsetTop;x=x.offsetParent;}return t;}
function gEBottom(x){return (x.offsetHeight+gETop(x));}
function gELeft(x){var l=0;while(x){l+=x.offsetLeft;x=x.offsetParent;}return l;}
function gERight(x){return (x.offsetWidth+gELeft(x));}
function onoff(obj){if (obj) obj.className=obj.className=="on" ? "off":"on";}
function toggleObj(obj){if(obj) obj.style.display = obj.style.display=='none' || obj.style.display=='' ? 'block':'none';}
function toggleObjRev(obj){if(obj) obj.style.display=obj.style.display=='block' ? 'none':'block';}
function hide(o){if(o) o.style.display='none';}
function cancelBubble(e){if(e.stopPropagation) e.stopPropagation(); else e.cancelBubble=true;}
String.prototype.bind = function(bindings) {
	var src = this;
	for (var name in bindings) {
		var value = bindings[name];
		src = src.replace(new RegExp('\\$'+name, 'g'), value);
	}
	return src;
};
function bind(src, bindings){
	return src.bind(bindings);
}
function isalphanum(c){return (c>='0'&&c<='9')||(c>='a'&&c<='z')||(c>='A'&&c<='Z');}
function foreach(es,func){for(var i=0;i<es.length;i++){func.call(es[i], i);}}
function setSelectedIndex(obj,v){
	for(var i=0;i<obj.options.length;i++){if(obj.options[i].value==v){obj.selectedIndex=i;break;}}
}
// AJAX function {{{
var gAjaxObj=null;
var gAjaxFiles=new Array();
var gAjaxInUse=false;
function ajaxGetFile(fpath, func){
	function ajaxOnGetFile() {
		if(gAjaxObj==null||gAjaxObj.readyState!=4) return false;
		if(gAjaxFiles.length>0){gAjaxFiles[0][1](gAjaxObj.responseText);gAjaxFiles.shift();}
		gAjaxInUse = false;
		if(gAjaxFiles.length>0) ajaxGetNextFile();
	}
	function ajaxGetNextFile() {
		if(gAjaxInUse) return;
		if(gAjaxObj==null) gAjaxObj=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
		gAjaxObj.open("GET", gAjaxFiles[0][0], true);
		gAjaxObj.onreadystatechange=ajaxOnGetFile;
		gAjaxObj.send(null);
		gAjaxInUse = true;
	}
	gAjaxFiles[gAjaxFiles.length]=new Array(fpath,func);
	ajaxGetNextFile();
}
// ajax}}}
// cookie functions {{{
function getCookie(name) {
	function getCookieVal(offset) {
		var end = document.cookie.indexOf(";", offset);
		if(end == -1) end = document.cookie.length;
		return unescape(document.cookie.substring(offset, end));
	}
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	var j = 0;
	while(i < clen) {
		j = i + alen;    
		if(document.cookie.substring(i, j) == arg) return getCookieVal(j);
		i = document.cookie.indexOf(" ", i) + 1;
		if(i == 0) break;
	}  
	return null;
}
function deleteCookie(name) {
	var exp = new Date();  
	var cval = getCookie(name);  
	exp.setTime(exp.getTime() - 1);  
	document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}
function setCookie(name, value) {
	var argv = arguments;
	var argc = arguments.length;
	var exp = (argc > 2) ? argv[2] : 90;
	var path = (argc > 3) ? argv[3] : null;
	var domain = (argc > 4) ? argv[4] : null;
	var secure = (argc > 5) ? argv[5] : false;
	var expires = new Date();
	deleteCookie(name);
	expires.setTime(expires.getTime() + (exp*24*60*60*1000));
	document.cookie = name + "=" + escape(value) +
		"; expires=" + expires.toGMTString() +
		((domain == null) ? "" : ("; domain=" + domain)) +
		((path == null) ? "" : ("; path=" + path)) +
		((secure == true) ? "; secure" : "");
}
//cookie}}}
//common}}}

var gPageInfo=null;
var gInfo = null;

function removeFromUser(u){
	if (!u) return;
	var i,j,k;
	i=u.indexOf("fromuser_");
	if(i<=0){return u;}
	j=u.charAt(i-1);
	if(j=='.'||j=='/'){
		j=u.indexOf(".", i+9);
		k=u.indexOf("/", i+9);
		if(k!=-1 && (j==-1 || k<j)){j=k;}
		k=u.substr(0,i-1);
		if(j!=-1){
			k=k+u.substr(j);
		}
		return k;
	}
	return u;
}
function pageInfo(from,url){
	this.from=from;
	this.url=removeFromUser(url);
	this.setFromid=function(id){this.fromid=id;}
	this.getFromid=function(){return this.fromid;}
}
function resultPageInfo(from,type,cat,query,url){
	this.type=type;
	this.cat=cat;
	this.query=query;
	this.pubInfo=new pageInfo(from,url);
	this.relurl="";
	saveChildInfo(type,cat);
	this.setFromid=function(id){this.pubInfo.setFromid(id);}
	this.getFromid=function(){return this.pubInfo.getFromid();}
	this.setRelUrl=function(u){this.relurl=u;}
	this.getRelUrl=function(){return this.relurl;}
	this.getUrl=function(){return this.pubInfo.url;}
	this.getFrom=function(){return this.pubInfo.from;}
}
function cutStrByTrueLen(str, max){
	var n,i,pad;
	pad=(arguments.length > 2)?arguments[2]:"..";
	for(i=0,n=0; i< str.length; i++) {
		n+=(str.charAt(i)>'~')?2:1;
		if(n>max){
			i-=(str.charAt(i-1)>'~')?1:2;
			str = str.substr(0,i)+pad;
			return str;
		}
	}
	return str;
}
function removeBlank(s){
	var i,t,c;
	t='';
	for(i=0;i<s.length;i++){
		c=s.charAt(i);
		if(c!=' '){
			t+=c;
		}
	}
	return (t);
}

function bbs_build_user_panel() // {{{
{
	var div=gE('user-login');
	if(!div) return;
	var user=getCookie('kxuser');
	var userid=getCookie('kxuserid');
	if(user&&userid){
		var userd=decodeURIComponent(decodeURIComponent(user));
		div.innerHTML='<a href="http://bbs.kuxun.cn/space.php?action=viewpro&uid='+userid+'" target="_blank"><strong>'+userd+'</strong></a>';
		div.innerHTML+='<a href="http://bbs.kuxun.cn/logging.php?action=logout">退出</a>';
	}
	else div.innerHTML='<a href="http://bbs.kuxun.cn/logging.php?action=login">登录</a>';
} //}}}

// search {{{1
function initSug() {
	var s = document.s;
	if (!s) return;
	var q = s.to;
	q.onblur=InputBlur;
	q.onfocus=InputFocus;
	q.onkeydown=InputKeyDown;
	if (!gE('sug_div_'))
		document.body.insertAdjacentHTML('afterBegin', '<div style="display:none;position:absolute;z-index:10000" id="sug_div_"><div id="sug_info_"></div></div>');
	var t = s.T.value == 'TicketLeft' ? 'Ticket' : s.T.value;
	initSugAttr(s, s.to, gInfo.from, t);
}
function changeTabs(){
	var tabs = gE('tabs');
	if (!tabs) return;
	tabs = tabs.getElementsByTagName('a');
	var form = document.s;
	var channels = ['TicketSale', 'Train', 'Ticket', 'TicketLeft'];
	foreach(tabs,
		function(i){
			this.setAttribute("n",""+i);
			this.onclick=function(e){
				e = e || window.event;
				var n = parseInt(this.getAttribute("n"));
				if (gInfo.home && n!=0 && gInfo.type != channels[i])
					return true;
				foreach(tabs, function(i){this.className="";});
				this.className = "here";
				form.T.value = channels[n];
				if (form.T.value == 'Ticket') form.Cat.value = "sale";
				else form.Cat.value = '';	
				if (form.T.value == 'TicketSale') {
					form.vFrom.value = "北京";
					form.vFrom.disabled = true;
				}
				else {
					form.vFrom.disabled = false;
				}
				var s = document.s;
				initSugAttr(s, s.to, gInfo.from, s.T.value);
				if (e.preventDefault)
					e.preventDefault();
				else
					e.returnValue = false;
				return false;
			}
		});
	
	var to = form.to;
	var tid = form.trainid;
	function isContentKey(kc) {return kc == 8 || kc == 32 || kc > 48;}
	var keydown_oldto = to.onkeydown;
	to.onkeydown=function(e){
		if(!e && window.event) e=window.event;
		if(keydown_oldto) keydown_oldto.call(this,e);
		if(isContentKey(e.keyCode)&&tid.value) tid.value='';
	};
	var keydown_oldtid = tid.onkeydown;
	tid.onkeydown=function(e){
		if(!e && window.event) e=window.event;
		if(keydown_oldtid) keydown_oldtid.call(this,e);
		if(isContentKey(e.keyCode)&&to.value) to.value = '';
	};
}

function piaoSearch(s) { //{{{
	var q = s.q;
	var qsrc = s.qsrc;
	var to = s.to;
	var t = s.T;
	var tid = s.trainid;
	if (!q || !t || !tid || !to || !qsrc) return false;
	if (t.value == 'TicketSale' && (!to.value && !tid.value)) {
		alert('目的站或车次不能为空')
		return false;
	}

	if (t.value=='Train')
		s.action='http://skb.kuxun.cn/search';
	else if (t.value=="Ticket" || t.value=="TicketLeft")
		s.action = 'http://piao.kuxun.cn/search';
	else
		s.action = 'http://hcp.kuxun.cn/search';
	q.value = tid.value ? tid.value : to.value;
	qsrc.value = tid.value ? 'trainid' : 'to';
	s.vFrom.disabled = false;
	return true;
} //}}}

function addBookmark(title,url) {
	if (!title) title = "酷讯火车票";
	if (!url) url = "http://piao.kuxun.cn";
	if (window.sidebar && window.sidebar.addPanel)
		window.sidebar.addPanel(title, url, "");
	else if (document.all)
		window.external.addFavorite(url, title);
	else if (window.opera && window.print)
		return true;
}

function copyToClipboard(){
	if (! window.clipboardData) return;
	window.clipboardData.setData("Text","酷讯火车票\nhttp://piao.kuxun.cn");
	alert("复制成功，请粘贴到你的QQ/MSN上推荐给你的好友");
}
function hideIfNoClipboard(id) {if(! window.clipboardData) hide(gE(id));}

function piaoInit(from, type, cat, query, url, oem, fromid) {
	gInfo = {
	 from:from,
	 type:type,
	 cat:cat,
	 query:query,
	 url:url,
	 oem:oem,
	 fromid:fromid,
	 relurl:bind('http://$host/From_$from/T_$type/Cat_$cat/OEM_$oem', 
			 {host:document.location.host, from:from, type:type, cat:cat, oem:oem})
	};
	bbs_build_user_panel();
	initSug();
	changeTabs();
	hideIfNoClipboard("msnqq");
}


// modeline {{{1
// vim: fdm=marker:fdl=1:ts=4
