/*
* 处理:设计到请求页面，等待页面，结果页面的交替
*/
function CTrans() {
    //	this.GenReqData = CTrans_GenReqData;
    this.CommitByString = CTrans_CommitByString;
    this.CommitByForm = CTrans_CommitByForm;
    this.Commit = CTrans_Commit;
    this.Callback = CTrans_Callback;
    this.Disable = CTrans_Disable;
    this.ClearInput = CTrans_ClearInput;
    this.ShowWaiting = CTrans_ShowWaiting;
    this.ShowComplete = CTrans_ShowComplete;
    this.GenRequest = CTrans_GenReqData;
}
function CTrans_CommitByString(str, acturl, bNoDisable, DoResult) {
    var reqdat = str;
    this.sReqDat = reqdat;
    this.sActUrl = acturl;
    this.bNoDisable = bNoDisable;
    //alert(DoResult);
    if (DoResult) {
        //alert("1")
        this.DoResult = DoResult;
        var http = new CHttpRequest(this.Callback, true, 2);
    } else {
        //alert("2")
        this.DoResult = null;
        var http = new CHttpRequest(this.Callback, false, 2);
    }
    //this.Disable(true);
    http.Get(acturl, reqdat);
}
function CTrans_CommitByForm(frm, DoResult, bNoDisable, method) {
    this.sReqDat = this.GenRequest(frm, method);
    this.sActUrl = frm.action;
    this.bNoDisable = bNoDisable;
    if (DoResult) {
        this.DoResult = DoResult;
        var http = new CHttpRequest(this.Callback, true, 2);
    } else {
        this.DoResult = null;
        var http = new CHttpRequest(this.Callback, false, 2);
    }
    if (this.bDoing) return false;
    //this.bDoing = true;
    //this.Disable(true);
    if (method && method == "post") {
        http.Post(frm.action, this.sReqDat);
    } else {
        http.Get(frm.action, this.sReqDat);
    }
    //http.Post(frm.action,reqdat);
    //frm.submit();
    return true;
}
function CTrans_Commit(frm) {
    var reqdat = this.GenRequest(frm);
    var http = new CHttpRequest(this.Callback, true, 2);
    http.Get(frm.action, reqdat);
}
function CTrans_ShowWaiting() {
    //this.Disable(true);
    //更改这里，在等待的时候显示友好界面
}
function CTrans_ShowComplete(str) {
    //this.Disable(false);
    xml = new CXml(str);
    tid = xml.GetValue("sc");
    //alert(tid);
    if (tid == "20000001") {
        g_CQuery.Process(xml);
    } else {
        //alert(tid);
    }
}
function CTrans_ClearInput() {
    var coll = document.all;
    if (coll != null) {
        for (i = 0; i < coll.length; i++) if ((coll.item(i).tagName.toUpperCase() == 'INPUT') || (coll.item(i).tagName.toUpperCase() == 'TEXTAREA') || (coll.item(i).tagName.toUpperCase() == 'IMG') || (coll.item(i).tagName.toUpperCase() == 'OBJECT')) {
            if ((coll.item(i).name) && coll.item(i).type) {
                if ((coll.item(i).name != "") && (coll.item(i).type.toUpperCase() != "HIDDEN") && (coll.item(i).type.toUpperCase() != 'SUBMIT') && (coll.item(i).type.toUpperCase() != 'BUTTON')) coll.item(i).value = "";
            }
        }
    }
}
function CTrans_Disable(flag) {
    var coll = document.all;
    if (coll != null) {
        for (i = 0; i < coll.length; i++) if ((coll.item(i).tagName.toUpperCase() == 'INPUT') || (coll.item(i).tagName.toUpperCase() == 'TEXTAREA') || (coll.item(i).tagName.toUpperCase() == 'IMG') || (coll.item(i).tagName.toUpperCase() == 'OBJECT')) {
            coll.item(i).disabled = flag;
        }
    }
}
/*
* 定义全局变量g_CCftUser
*/
var g_CTrans = null;
if (!g_CTrans) g_CTrans = new CTrans();
function CTrans_Callback(state, sts, str) {
    switch (state) {
    case 0:
        //initting
        //		break;
    case 1:
        //reading
        //		break;
    case 2:
        //readed
        //		break;
    case 3:
        //interact
        g_CTrans.ShowWaiting();
        break;
    case 4:
        //complete
        switch (sts) {
        case 200:
            //success
            //alert("200:"+g_CTrans.DoResult);
            //alert(str);
            if (g_CTrans.DoResult) {
                //alert("A")
                g_CTrans.m_objXml = new CXml(str);
                g_CTrans.DoResult(g_CTrans.m_objXml);
            } else {
                //alert("B")
                g_CTrans.ShowComplete(str);
            }
            break;
        case 404:
            //notfound
        default:
            break;
        }
    default:
        break;
    }
}
function CTrans_GenReqData(form) {
    var reqdat = "";
    var first_flag = true;
    for (var i = 0; i < form.length; i++) {
        if (form.elements[i].type.toUpperCase() == "CHECKBOX" && !form.elements[i].checked) {
            continue;
        }
        if (form.elements[i].name != "") {
            if (first_flag) {
                first_flag = false;
                reqdat = reqdat + form.elements[i].name + "=" + (form.elements[i].value).replace("\r\n", "%0D%0A");
            } else {
                reqdat = reqdat + "&" + form.elements[i].name + "=" + (form.elements[i].value).replace("\r\n", "%0D%0A");
            }
        }
    }
    //	alert(reqdat);
    return reqdat;
}
/*
* 操作XML文件，避免不存在的节点抛出异常
*/
function CXml(indat) {
    //	alert(typeof(indat));
    if (typeof(indat) == "string") {
        this.m_xmlObj = new ActiveXObject("Microsoft.XMLDOM");
        //		alert(indat);
        this.m_xmlObj.loadXML(indat);
    } else if (typeof(indat) == "object") {
        this.m_xmlObj = indat;
    } else {
        throw new Error("CHttpRequest 返回一个不能识别的对象.");
    }
    this.GetValue = CXml_GetValue;
    this.GetNodes = CXml_GetNodes;
    this.GetChildValue = CXml_GetChildValue;
    this.GetChildNodes = CXml_GetChildNodes;
    this.GetParentNode = CXml_GetParentNode;
    this.GetAttValue = CXml_GetAttValue;
}
function CXml_GetValue(node_name) {
    var res;
    try {
        res = this.m_xmlObj.getElementsByTagName(node_name)[0].firstChild.data
    } catch(ex) {
        res = "";
    }
    return res;
}
function CXml_GetNodes(node_name) {
    var res;
    try {
        res = this.m_xmlObj.getElementsByTagName(node_name);
    } catch(ex) {
        res = "";
    }
    return res;
}
function CXml_GetChildNodes(node, node_name) {
    var res;
    try {
        res = node.getElementsByTagName(node_name);
    } catch(ex) {
        res = "";
    }
    return res;
}
function CXml_GetChildValue(node, child_node_name) {
    var res;
    try {
        res = node.getElementsByTagName(child_node_name)[0].firstChild.data
    } catch(ex) {
        res = "";
    }
    return res;
}
function CXml_GetParentNode(node) {
    var res;
    try {
        res = node.parentNode;
    } catch(ex) {
        res = "";
    }
    return res;
}
function CXml_GetAttValue(node, att_name) {
    var res = "";
    try {
        for (var i = 0; i < node.attributes.length; i++) {
            if (node.attributes[i].nodeName == att_name) {
                res = node.attributes[i].nodeValue;
                break;
            }
        }
    } catch(ex) {
        res = "";
    }
    return res;
}
/* ----------------------------------------------------------------
* 封装XMLHttpRequest对象,提供一致的接口供系统其他模块使用
* CHttpRequest.js
* gaussgao 20060518
* ----------------------------------------------------------------
XMLHttpRequest 对象方法 方法 描述
abort()
停止当前请求
getAllResponseHeaders()
作为字符串返问完整的headers
getResponseHeader("headerLabel")
作为字符串返问单个的header标签
open("method","URL"[,asyncFlag[,"userName"[, "password"]]])
设置未决的请求的目标 URL, 方法, 和其他参数
send(content)
发送请求
setRequestHeader("label", "value")
设置header并和请求一起发送
XMLHttpRequest 对象属性 属性 描述
onreadystatechange
状态改变的事件触发器
readyState
对象状态(integer):
0 = 未初始化
1 = 读取中
2 = 已读取
3 = 交互中
4 = 完成
responseText 	1
服务器进程返回数据的文本版本
responseXML 	2
服务器进程返回数据的兼容DOM的XML文档对象
status
服务器返回的状态码, 如：404 = "文件末找到" 、200 ="成功"
statusText
服务器返回的状态文本信息
*/
/*功能:创建对象,并设置属性
*/
function CHttpRequest(fCallback, mode, restype) {
    //创建对象
    this.m_HttpRequest = createXMLHttpRequest();
    //属性
    this.m_bAsyncFlag = mode;
    if (restype) this.m_iResType = restype;
    else this.m_iResType = 2; //responseXml
    //方法
    this.Post = CHttpRequest_Post;
    this.Get = CHttpRequest_Get;
    this.m_fCallBack = fCallback;
}
function CHttpRequest_Get(dst, para) {
    var now = new Date();
    var rnd = Math.floor(Math.random() * 100000);
    var ptm = now.getSeconds().toString() + rnd.toString() + now.getMinutes().toString();
    para += "&ptm=" + ptm.toString();
    var http = this;
    function tm_back() {
        if (http.m_HttpRequest.readyState == 4) {
            if (http.m_HttpRequest.status == 200) {
                if (http.m_iResType == 1) http.m_fCallBack(4, 200, http.m_HttpRequest.responseText);
                else http.m_fCallBack(4, 200, http.m_HttpRequest.responseXML);
            } else {
                http.m_fCallBack(4, http.m_HttpRequest.status, null);
            }
        } else {
            http.m_fCallBack(http.m_HttpRequest.readyState, null, null);
        }
    }
    this.m_HttpRequest.onreadystatechange = tm_back;
    this.m_HttpRequest.open("GET", dst + "?" + para, this.m_bAsyncFlag);
    this.m_HttpRequest.setRequestHeader("Content_Type", "application/x-www-form-urlencoded;charset=GB2312");
    this.m_HttpRequest.setRequestHeader("Cache-Control", "no-cache");
    this.m_HttpRequest.send("");
}
function CHttpRequest_Post(dst, para) {
    var http = this;
    function tm_back() {
        if (http.m_HttpRequest.readyState == 4) {
            if (http.m_HttpRequest.status == 200) {
                if (http.m_iResType == 1) http.m_fCallBack(4, 200, http.m_HttpRequest.responseText);
                else http.m_fCallBack(4, 200, http.m_HttpRequest.responseXML);
            } else {
                http.m_fCallBack(4, http.m_HttpRequest.status, null);
            }
        } else {
            http.m_fCallBack(http.m_HttpRequest.readyState, null, null);
        }
    }
    this.m_HttpRequest.onreadystatechange = tm_back;
    this.m_HttpRequest.open("POST", dst, this.m_bAsyncFlag);
    this.m_HttpRequest.setRequestHeader("Content_Length", para.length);
    this.m_HttpRequest.setRequestHeader("Content_Type", "application/x-www-form-urlencoded;charset=GB2312");
    //this.m_HttpRequest.setRequestHeader("Content_Type","text/xml;charset=GB2312");
    this.m_HttpRequest.send(para);
}
function getXMLPrefix() {
    if (getXMLPrefix.prefix) return getXMLPrefix.prefix;
    var prefixes = ["MSXML3", "MSXML2", "MSXML", "Microsoft"];
    var obj, obj2;
    for (var i = 0; i < prefixes.length; i++) {
        try {
            //Attempt to create an XmlHttp object using the current prefix
            obj = new ActiveXObject(prefixes[i] + ".XmlHttp");
            return getXMLPrefix.prefix = prefixes[i];
        } catch(ex) {};
    }
    throw new Error("您没有安装XML解析器,请使用INTERNET EXPLORE 5以上的浏览器.");
}
function createXMLHttpRequest() {
    try {
        // Attempt to create it "the Mozilla way"
        if (window.XMLHttpRequest) {
            return new XMLHttpRequest();
        }
        // Guess not - now the IE way
        if (window.ActiveXObject) {
            return new ActiveXObject(getXMLPrefix() + ".XmlHttp");
        }
    } catch(ex) {
        //alert(ex.message);
    };
    return false;
}
//examples
/*-------------------------------------------------------
//回调函数:执行状态,返回码,返回内容
function CallBack_Test(state,sts,str)
{
switch(state)
{
case 0://initting
case 1://reading
case 2://readed
case 3://interact
alert(state);
break;
case 4://complete
switch(sts)
{
case 200://success
alert(str);break;
case 404://notfound
alert(sts);
default:
break;
}
default:
break;
}
}
//执行过程
function GetTest()
{
var http = new CHttpRequest(CallBack_Test,false,1);
http.Get("/test.xml","a=1&b=2");
}
GetTest();
-------------------------------------------------------------*/
/*
*WEB点击流 CClickStat.js
*/
function CClickStat() {
    this.m_dispDJL = null;
    this.m_sDivId = "CTrans_DJL";
    this.PageClick = CClickStat_Click;
    this.GetResult = CClickStat_GetResult;
}
/*
pay 9 1 2 11
gat 7 1 1 11
ent 7 1 6 11
aa  7 1 7 11
*/
function CClickStat_Click(posid, actid, opid, whoid) {
    var web_analyse_url = "http://id.zone.tenpay.com/cgi-bin/analyse/advclick.cgi?posid=" + posid + "&actid=" + actid + "&opid=" + opid + "&whoid=" + whoid + "&PcacheTime=" + (new Date()).getTime();
    this.m_dispDJL = document.getElementById(this.m_sDivId);
    if (this.m_dispDJL) this.m_dispDJL.innerHTML = "<img src='" + web_analyse_url + "' height=\"0\" width=\"0\">";
}
/*
* 2 0 pay
* 1 0 gather
*/
function CClickStat_GetResult(opid, result) {
    var web_analyse_url = "http://id.zone.tenpay.com/cgi-bin/analyse/advresult.cgi?opid=" + opid + "&result=" + result + "&PcacheTime=" + (new Date()).getTime();
    this.m_dispDJL = document.getElementById(this.m_sDivId);
    if (this.m_dispDJL) this.m_dispDJL.innerHTML = "<img src='" + web_analyse_url + "' height=\"0\" width=\"0\">";
}
/*
* 定义全局变量g_CCftUser
*/
var g_CClickStat = null;
if (!g_CClickStat) g_CClickStat = new CClickStat(); //
// CMobileHistory.js: 查询历史充值号码
//
function CMobileHistory(cgi_url)
{
this.m_sUrl = cgi_url;
this.m_objXml = null;
this.m_bQueryFlag = false;
this.m_iMaxRec = 4;
this.m_sTableId = "tableHistory";
this.m_sDialogId = "divHistory";
this.m_sMobileId = "chgmobile";
this.m_sMobile2Id = "chgmobile2";
this.QueryInfo = CMobileHistory_QueryInfo;
this.ShowInfo = CMobileHistory_ShowInfo;
this.Commit = CMobileHistory_Commit;
this.Callback = CMobileHistory_Callback;
this.ShowDialog = CMobileHistory_ShowDialog;
this.SetMobile = CMobileHistory_SetMobile;
}
function CMobileHistory_QueryInfo()
{
if(this.m_bQueryFlag)
{
return;
}
if (!this.m_objXml )
{
g_CMobileHistory.Commit();
}
else
{
g_CMobileHistory.ShowInfo();
}
}
function CMobileHistory_Commit()
{
this.m_bQueryFlag = true;
var xmlRequest = new CHttpRequest(g_CMobileHistory.Callback, true, 2);
var params;
//alert("loginstate="+g_CCftLogin.m_sLoginstate)
if(g_CCftLogin.m_sLoginstate!="1")
{
params = "tid=01001003&uin=" + g_CCftLogin.m_sUin + "&loginstate=" + g_CCftLogin.m_sLoginstate;
}
else
{
params = "tid=01001003&limit=10&uin=" + g_CQQClient.m_sClientuin + "&k=" + g_CQQClient.m_sClientkey;
}
xmlRequest.Get(g_CMobileHistory.m_sUrl, params);
}
function CMobileHistory_Callback(state, sts, objXml)
{
switch(state)
{
case 0://initting
//		break;
case 1://reading
//		break;
case 2://readed
//		break;
case 3://interact
//g_CTrans.ShowWaiting();
break;
case 4://complete
g_CMobileHistory.m_bQueryFlag = false;
switch(sts)
{
case 200://success
//g_CQuery.ShowTable(3);
g_CMobileHistory.m_objXml = new CXml(objXml);
g_CMobileHistory.ShowInfo();
break;
case 404://notfound
default:
break;
}
default:
break;
}
}
function CMobileHistory_ShowInfo() {
	if(!this.m_objXml) return;
	var iRetCode = parseInt(this.m_objXml.GetValue("retcode"));
	if(iRetCode != 0) {
		if(iRetCode == 25) {
			g_CCookie.DelCookie("uin","/","tenpay.com");
			g_CCookie.DelCookie("clientuin","/","tenpay.com");
			g_CCookie.DelCookie("clientkey","/","tenpay.com");
            g_CCookie.SetCookie("uin", "");
            Box.text({
                title : "提示",
                info : "登录超时或未登录，请重新登录后再操作。",
                btns : [["立即登录", function(){login()}],["取消", function(){Box.close()}]]
            });
                /*
			if(iflogin) {
				login();
			} else {
				window.location.href="phone_Charge.shtml";
			}*/
		}
		else {
            Box.text({
                title : "提示",
                info : "["+iRetCode+"] 查询历史充值号码失败。",
                btns : [["关闭", function(){Box.close()}]]
            });
		}
		this.m_objXml = null;
		return;
	} else {
		var tableNode = document.getElementById(this.m_sTableId);
		var trNodes = tableNode.getElementsByTagName("tr");
		while(trNodes.length > 1)
		tableNode.deleteRow(1);
		recordNodes = this.m_objXml.GetNodes("record");
		if(recordNodes.length>0) {
			for(var i=0; i<recordNodes.length && i<this.m_iMaxRec; i++) {
				var trNode = tableNode.insertRow(-1);
				trNode.style.cursor = "pointer";
				trNode.onclick = new Function("g_CMobileHistory.SetMobile('" + this.m_objXml.GetAttValue(recordNodes[i], "chgmobile") + "'); toExit('hide',g_CMobileHistory.m_sDialogId);;");
				var tdNode = trNode.insertCell(-1);
				tdNode.height = "25";
				tdNode.bgColor = "#ffffff";
				tdNode.onmouseover = MouseOver;
				tdNode.onmouseout = MouseOut;
				tdNode.style.paddingLeft = "10px";
				tdNode.innerHTML = this.m_objXml.GetAttValue(recordNodes[i], "chgmobile");
			}
		}else{
				var trNode = tableNode.insertRow(-1);
				var tdNode = trNode.insertCell(-1);
				tdNode.style.paddingLeft = "10px";
				tdNode.style.backgroundColor = '#ffffff';
				tdNode.style.color = '#666';
				tdNode.innerHTML = '无历史记录。';
		}
	}
	this.ShowDialog();
}
function MouseOver()
{
this.style.backgroundColor = "#f0f3f5";
}
function MouseOut()
{
this.style.backgroundColor = "#ffffff";
}
function CMobileHistory_ShowDialog() {
	toExit('show',this.m_sDialogId);
}
function CMobileHistory_SetMobile(sMobile)
{
SetElementValue(this.m_sMobileId, sMobile);
SetElementValue(this.m_sMobile2Id, sMobile);
}
var g_CMobileHistory = null;
if (g_CMobileHistory == null)
g_CMobileHistory = new CMobileHistory("/cgi-bin/mobile/MobileChargeEntry.cgi");
function CCookie() {
    this.SetCookie = setCookie;
    this.GetCookie = getCookie;
    this.DelCookie = deleteCookie;
}
function getExpDate(days, hours, minutes) {
    var expDate = new Date();
    if (typeof days == "number" && typeof hours == "number" && typeof hours == "number") {
        expDate.setDate(expDate.getDate() + parseInt(days));
        expDate.setHours(expDate.getHours() + parseInt(hours));
        expDate.setMinutes(expDate.getMinutes() + parseInt(minutes));
        return expDate.toGMTString();
    }
}
// utility function called by getCookie( )
function getCookieVal(offset) {
    var endstr = document.cookie.indexOf(";", offset);
    if (endstr == -1) {
        endstr = document.cookie.length;
    }
    return unescape(document.cookie.substring(offset, endstr));
}
// primary function to retrieve cookie by name
function getCookie(name) {
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen) {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg) {
            return getCookieVal(j);
        }
        i = document.cookie.indexOf(" ", i) + 1;
        if (i == 0) break;
    }
    return "";
}
// store cookie value with optional details as needed
function setCookie(name, value, expires, path, domain, secure) {
    document.cookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires: "") + ((path) ? "; path=" + path: "") + ((domain) ? "; domain=" + domain: "") + ((secure) ? "; secure": "");
}
// remove the cookie by setting ancient expiration date
function deleteCookie(name, path, domain) {
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    if (getCookie(name)) {
        document.cookie = name + "=" + ((path) ? "; path=" + path: "") + ((domain) ? "; domain=" + domain: "") + "; expires=" + exp.toGMTString();
    }
}
/*
* 定义全局变量g_CCookie
*/
var g_CCookie = null;
if (!g_CCookie) g_CCookie = new CCookie();
/*
* 获取自身URL的参数内容和参数值
* CSelfUrl.js
*/
function CSelfUrl() {
    this.m_sUrl = "";
    this.m_sQueryString = "";
    this.m_sDomin = "";
    this.Init = CSelfUrl_Init;
    this.GetPara = CSelfUrl_GetPara;
    this.ParsePara = CSelfUrl_ParsePara;
    this.GetFormString = CSelfUrl_GetFormString;
    this.GetCookie = CSelfUrl_GetCookie;
}
function CSelfUrl_Init() {
    this.m_sUrl = window.document.URL.replace(/#$/g, "");
    this.m_sQueryString = this.m_sUrl.split("?")[1];
    this.m_sDomin = this.m_sUrl.split("?")[0];
}
function CSelfUrl_GetFormString(form) {
    var reqdat = "";
    var first_flag = true;
    for (var i = 0; i < form.length; i++) {
        if (form.elements[i].type.toUpperCase() == "CHECKBOX" && !form.elements[i].checked) {
            continue;
        }
        if (form.elements[i].type.toUpperCase() == "RADIO" && !form.elements[i].checked) {
            continue;
        }
        if (form.elements[i].name == "tm") continue;
        if (form.elements[i].name != "") {
            if (first_flag) {
                first_flag = false;
                //reqdat = reqdat + form.elements[i].name + "="+ (form.elements[i].value).replace("\r\n","%0D%0A");
                reqdat = reqdat + form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value)
            } else {
                //reqdat = reqdat + "&" + form.elements[i].name + "="+ (form.elements[i].value).replace("\r\n","%0D%0A");
                reqdat = reqdat + "&" + form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value)
            }
        }
    }
    //	alert(reqdat);
    return reqdat;
}
function CSelfUrl_GetPara(para_name) {
    var queryStr;
    var named;
    this.Init();
    queryStr = this.m_sQueryString;
    if (queryStr == null) {
        queryStr = "";
    }
    named = queryStr.split("&");
    var len = named.length;
    for (var i = 0; i < len; ++i) {
        //alert(named[i]);
        var nv = named[i];
        var j = nv.indexOf("=");
        if (j == -1) continue;
        var varName = nv.substring(0, j);
        var varVal = nv.substring(j + 1, nv.length);
        if (varName == para_name) {
            return decodeURIComponent(varVal);
        }
    }
    return "";
}
function CSelfUrl_ParsePara() {
    var queryStr;
    var named;
    this.Init();
    queryStr = this.m_sQueryString;
    if (queryStr == null) {
        queryStr = "";
    }
    named = queryStr.split("&");
    var len = named.length;
    for (var i = 0; i < len; ++i) {
        //alert(named[i]);
        var nv = named[i];
        var j = nv.indexOf("=");
        if (j == -1) continue;
        var varName = nv.substring(0, j);
        var varVal = nv.substring(j + 1, nv.length);
        ele = document.getElementById(varName);
        if (!ele) continue;
        if (ele.tagName.toUpperCase() == 'TEXTAREA' || ele.tagName.toUpperCase() == 'INPUT' || ele.tagName.toUpperCase() == 'SELECT') {
            if (ele.type.toUpperCase() == "RADIO") {
                ele = document.getElementsByName(varName);
                if (!ele) continue;
                for (var j = 0; j < ele.length; j++) {
                    if (ele[j].value == decodeURIComponent(varVal)) {
                        ele[j].checked = true;
                        break;
                    }
                }
            } else ele.value = decodeURIComponent(varVal);
        } else {
            ele.innerHTML = decodeURIComponent(varVal);
        }
    }
}
function CSelfUrl_GetCookie(cookiename) {
    var allcookies = document.cookie;
    var pos = allcookies.indexOf(cookiename + "=");
    if (pos != -1) {
        var start = pos + cookiename.length + 1 //从现有的cookie(字符串)中提现有值,(cookie名+"="的长度)
        var end = allcookies.indexOf(";", start);
        if (end == -1) end = allcookies.length;
        var value = allcookies.substring(start, end); //提取值
        value = unescape(value); //解码
        return value;
    }
    return "";
}
var g_CSelfUrl = null;
if (!g_CSelfUrl) g_CSelfUrl = new CSelfUrl();
/*
*CCftLogin.js
*功能：验证登录信息
*
*
*
*/
function CCftLogin() {
    //var m_selUrl = new CSelfUrl()
    //this.m_sUin = m_selUrl.GetCookie("uin");
    this.m_sLoginstate = "";
    this.CheckLogin = CCftLogin_CheckLogin;
    this.NoLogin = CCftLogin_NoLogin;
    this.CheckLogin();
}
function checkMail(str) {
    if (str.search(/^[^@]+@([^@]+\.)+[^@]+$/) >= 0) return true;
    else return false;
}
function checkIsInteger(str) {
    if (str == "") return false;
    if (str.search(/^[0-9]+$/) < 0) return false;
    else return true;
}
function loginstate(uin) {
    if (!uin || uin == "") {
        return "0"
    }
    if (checkIsInteger(uin) && uin.length >= 5 && uin.length <= 10) {
        return "2"
    }
    if (checkMail(uin)) {
        return "3"
    }
    return ""
}
function getCookie(name) {
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen) {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg) {
            return getCookieVal(j);
        }
        i = document.cookie.indexOf(" ", i) + 1;
        if (i == 0) break;
    }
    return "";
}
function getCookieVal(offset) {
    var endstr = document.cookie.indexOf(";", offset);
    if (endstr == -1) {
        endstr = document.cookie.length;
    }
    return unescape(document.cookie.substring(offset, endstr));
}
function CCftLogin_CheckLogin() {
    //var m_selUrl = new CSelfUrl();
    //this.m_sUin = m_selUrl.GetCookie("uin");
    this.m_sUin = getCookie("uin").replace(/^o0*/gi, "");
    if (!this.m_sUin || this.m_sUin == "") {
        this.m_sLoginstate = "0";
    }
    //alert(this.m_sUin);
    if (loginstate(this.m_sUin) == "") {
        alert("error");
    }
    this.m_sLoginstate = loginstate(this.m_sUin);
}
function CCftLogin_NoLogin() {
    this.m_sLoginstate = "0";
    this.m_sUin = "";
}
var g_CCftLogin = null;
if (!g_CCftLogin) g_CCftLogin = new CCftLogin();
/*
*从QQ客户端传递过来的参数含有有效登录的参数信息,这个信息需要程序入口处予以检测并将
*clientuin带入
*http://pay-client.qq.com/index.shtml?clientuin=372132908&clientkey=6D604E1DAB0359D001D368ACB012035A27517940CBB3E8C27EA75500333B72B7&type=0
*CQQClient.js
*功能: 检查QQ客户端登录有效性,并提供传递此参数到下一个页面的属性
*/
function CQQClient() {
    var m_selUrl = new CSelfUrl();
    this.m_bInitFlag = false;
    //this.m_sClientuin = m_selUrl.GetPara("clientuin");
    //this.m_sClientkey = m_selUrl.GetPara("clientkey");
    this.m_sClientuin = g_CCookie.GetCookie("clientuin");
    this.m_sClientkey = g_CCookie.GetCookie("clientkey");
    this.m_sToUin = m_selUrl.GetPara("touin");
    this.m_sType = m_selUrl.GetPara("type");
    this.AddSign = CQQClient_AddSign;
    this.AddAllSign = CQQClient_AddAllSign;
    this.m_sSign = "clientuin=" + encodeURIComponent(this.m_sClientuin) + "&clientkey=" + encodeURIComponent(this.m_sClientkey) + "&touin=" + encodeURIComponent(this.m_sToUin) + "&type=" + encodeURIComponent(this.m_sType);
    this.m_hrefPay = document.getElementById("Href_Wallet_Pay");
    this.m_hrefAsk = document.getElementById("Href_Wallet_Ask");
    this.m_hrefAAMemMgr = document.getElementById("Href_Wallet_AA_MemMgr");
    this.m_hrefAATransInq = document.getElementById("Href_Wallet_AA_TransInq");
    this.m_hrefAAAsk = document.getElementById("Href_Wallet_AA_Ask");
    this.m_bInitFlag = true;
}
/*
* 定义全局变量,用来获取链接中的值.
*/
var g_CQQClient = null;
if (!g_CQQClient) g_CQQClient = new CQQClient();
g_CQQClient.AddAllSign();
function CQQClient_AddAllSign() {
    var orgHref = "";
    var coll = document.all;
    if (coll != null) {
        for (i = 0; i < coll.length; i++) if (coll.item(i).tagName.toUpperCase() == 'A' && coll.item(i).href.toLowerCase().indexOf('javascript') < 0) {
            orgHref = coll.item(i).href;
            if (!orgHref.match(/^http.*\.(qq|tenpay)\.com/i)) continue;
            var w = orgHref.indexOf('?');
            if (w > 0) {
                coll.item(i).href = orgHref + "&" + g_CQQClient.m_sSign;
            } else {
                coll.item(i).href = orgHref + "?" + g_CQQClient.m_sSign;
            }
        }
    }
}
function CQQClient_AddSign() {
    var orgHref = "";
    if (this.m_hrefPay) {
        orgHref = this.m_hrefPay.href;
        this.m_hrefPay.href = orgHref + "?" + g_CQQClient.m_sSign;
    }
    if (this.m_hrefAsk) {
        orgHref = this.m_hrefAsk.href;
        this.m_hrefAsk.href = orgHref + "?" + g_CQQClient.m_sSign;
    }
    if (this.m_hrefAAMemMgr) {
        orgHref = this.m_hrefAAMemMgr.href;
        this.m_hrefAAMemMgr.href = orgHref + "?" + g_CQQClient.m_sSign;
    }
    if (this.m_hrefAATransInq) {
        orgHref = this.m_hrefAATransInq.href;
        this.m_hrefAATransInq.href = orgHref + "?" + g_CQQClient.m_sSign;
    }
    if (this.m_hrefAAAsk) {
        orgHref = this.m_hrefAAAsk.href;
        this.m_hrefAAAsk.href = orgHref + "?" + g_CQQClient.m_sSign;
    }
}
function getDateStr() {
    var now = new Date();
    var dd = now.getDate().toString();
    var mm = (now.getMonth() + 1).toString();
    var yy = now.getFullYear().toString();
    if (dd.length == 1) dd = "0" + dd;
    if (mm.length == 1) mm = "0" + mm;
    return (yy + mm + dd);
}
// utility functions
function _$_() {
    var elements = new Array();
    for (var i = 0; i < arguments.length; i++) {
        var element = arguments[i];
        if (typeof element == 'string') element = document.getElementById(element);
        if (arguments.length == 1) return element;
        elements.push(element);
    }
    return elements;
}
function SetElementValue(id, value) {
    ele = document.getElementById(id);
    if (!ele) return;
    if (ele.tagName.toUpperCase() == 'TEXTAREA' || ele.tagName.toUpperCase() == 'INPUT' || ele.tagName.toUpperCase() == 'SELECT') {
        if (ele.type.toUpperCase() == "RADIO") {
            ele = document.getElementsByName(id);
            if (!ele) return;
            for (var j = 0; j < ele.length; j++) {
                if (ele[j].value == value) {
                    ele[j].checked = true;
                    break;
                }
            }
        } else ele.value = value;
    } else {
        ele.innerHTML = value;
    }
}
function GetElementValue(id) {
    ele = document.getElementById(id);
    if (!ele) return "";
    if (ele.tagName.toUpperCase() == 'TEXTAREA' || ele.tagName.toUpperCase() == 'INPUT' || ele.tagName.toUpperCase() == 'SELECT') {
        if (ele.type.toUpperCase() == "RADIO") {
            ele = document.getElementsByName(id);
            if (!ele) return "";
            for (var j = 0; j < ele.length; j++) {
                if (ele[j].checked) {
                    return ele[j].value;
                }
            }
        } else return ele.value;
    } else {
        return ele.innerHTML;
    }
}
function refreshVerifyImg(imgId) {
    var imgControl = _$_(imgId);
    imgControl.src = "http://verify.tenpay.com/getimage?" + Math.random() + "\"";
}
function SubTimeDate(date1, date2) {
    if (date1 && date2) return (parseInt((date1.getTime() - date2.getTime()) / 1000));
}
// dateStr Format: yyyy-mm-dd {HH:MM:SS}
function ConvertStringToDate(dateStr) {
    var re = new RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})");
    var dt = null;
    if (re.exec(dateStr)) {
        dt = new Date(RegExp.$1, (RegExp.$2 - 1), RegExp.$3, RegExp.$4, RegExp.$5, RegExp.$6);
    }
    return dt;
}
// 返回两个时间之间相隔的秒数
// sTime1, sTime2的格式必须是yyyy-mm-dd HH:MM:SS
function SubTimeString(sTime1, sTime2) {
    var stDate1 = ConvertStringToDate(sTime1);
    var stDate2 = ConvertStringToDate(sTime2);
    return SubTimeDate(stDate1, stDate2);
}
function CheckFlightTime(dtime, isShowError) {
    var objdt = ConvertStringToDate(dtime);
    var now = new Date();
    interval = SubTimeDate(objdt, now);
    interval = parseInt(interval / 60);
    if (interval <= g_bookingTimeLimit) {
        if (isShowError) {
            alert("对不起，只能预订" + parseInt(g_bookingTimeLimit / 60) + "小时后的航班，请您选乘其它航班!");
        }
        return false;
    }
    return true;
}
function GetShortDate() {
    var now = new Date();
    var dd = now.getDate().toString();
    var mm = (now.getMonth() + 1).toString();
    var yy = now.getFullYear().toString();
    if (dd.length == 1) dd = "0" + dd;
    if (mm.length == 1) mm = "0" + mm;
    return (yy + mm + dd);
}
function timestamp() {
    var timestamp = Date.parse(new Date());
    return timestamp;
}
function login(returnurl) {
	ClearCookie2();
    if (!returnurl || returnurl == "") {
        returnurl = document.location;
    }
    if (!checkLogin()) {
        window.location.replace("http://portal.tenpay.com/cgi-bin/common/portallogin.cgi?tmstmp=" + timestamp() + "&resulturl=" + returnurl);
    } else if (g_CCftLogin.m_sLoginstate == "1") {
        window.location.replace("http://life.tenpay.com/?clientuin=" + g_CQQClient.m_sClientuin + "&clientkey=" + g_CQQClient.m_sClientkey);
    } else {
        window.location.replace("http://life.tenpay.com/");
    }
}
function logout(returnUrl){
	ClearCookie2();
	var jumpUrl = returnUrl || 'http://life.tenpay.com/';
	window.location.replace(jumpUrl);
	return false;
}

function ClearCookie2() {
    g_CCookie.DelCookie("qluin", "/", "tenpay.com");
    g_CCookie.DelCookie("qltn", "/", "tenpay.com");
    g_CCookie.DelCookie("qlattr", "/", "tenpay.com");

    g_CCookie.DelCookie("uin", "/", "tenpay.com");
    g_CCookie.DelCookie("anonyuser", "/", "tenpay.com");
    g_CCookie.DelCookie("chgmobile", "/", "tenpay.com");
    g_CCookie.DelCookie("clientuin", "/", "tenpay.com");
    g_CCookie.DelCookie("clientkey", "/", "tenpay.com");
}

function checkIsInteger(str) {
    if (str == "") return false;
    if (str.search(/^[0-9]+$/) < 0) return false;
    else return true;
}
function checkUin(str) {
    if (!checkIsInteger(str) || str.length > 10 || str.length < 5) {
        return false;
    }
    return true;
}
function checkLogin() {
    var anony = g_CCookie.GetCookie("anonyuser");
    var uin = g_CCookie.GetCookie("uin");
    var loginstate = g_CCftLogin.m_sLoginstate;
    var clientuin = g_CQQClient.m_sClientuin;
    if (checkUin(clientuin)) {
        loginstate = "1";g_CCftLogin.m_sLoginstate = "1";g_CCftLogin.m_sUin = clientuin; uin = clientuin;
    }
    if (anony == "1" || !uin || uin == "" || loginstate == "" || loginstate == "0") {
        return false;
    }
    return true;
}


function showError(el,msg){
	el.innerHTML = msg;
	el.style.display = 'block';
	setTimeout(function(){el.style.display = 'none';},3000);
}

//信用卡首页显示切换广告图片
var randomAd = {
	cnt: 0,
	adImgPath : 'http://portal.tenpay.com/life/i/img/',
	urls : ['http://action.tenpay.com/2009/zhuan/','http://action.tenpay.com/2009/jiaofei/'],
	adImgs : ['credit_ad_2.jpg?v=20090828','jiaofei_ad.gif?v=20091103'],
	init : function() {
	randomAd.adLink = TFL.dom.$('ad-link');
	randomAd.adImg = TFL.dom.$('random-ad');
	randomAd.spans = TFL.dom.$('switch').getElementsByTagName('span');
	if ( !randomAd.adLink || !randomAd.adImg ) return;
	randomAd.randomNum = (randomAd.cnt++)&1;
	randomAd.setPath();
	randomAd.timeOut = setTimeout(randomAd.init,3000);
	for ( var i=0; i<randomAd.spans.length; i++ ) {
		randomAd.spans[i].onmouseover = randomAd.hover;
		randomAd.spans[i].onmouseout = randomAd.out;
	}
},
	setPath : function() {
	if ( randomAd.curSpan ) {
	 	 randomAd.curSpan.className = '';
	}
	randomAd.curSpan = randomAd.spans[randomAd.randomNum];
	randomAd.curSpan.className = 'on';
	randomAd.adLink.href = randomAd.urls[randomAd.randomNum];
	randomAd.adImg.src = randomAd.adImgPath + randomAd.adImgs[randomAd.randomNum];
},
	hover : function() {
	clearTimeout(randomAd.timeOut);
	this.className = 'on';
	randomAd.randomNum = this.firstChild.nodeValue - 1;
	randomAd.setPath();
	},
	out : function() {
	if ( this == randomAd.spans[0] ) {
		randomAd.cnt = 1;
	}
	else randomAd.cnt = 0;
	randomAd.timeOut = setTimeout(randomAd.init,3000);
	}
}

/*mphone_index.js begin*/
function ClearCookie()
{
g_CCookie.DelCookie("uin","/","tenpay.com");
g_CCookie.DelCookie("anonyuser","/","tenpay.com");
g_CCookie.DelCookie("chgmobile","/","tenpay.com");
g_CCookie.DelCookie("clientuin","/","tenpay.com");
g_CCookie.DelCookie("clientkey","/","tenpay.com");
}
// JavaScript Document By Jack
function $G(s)
{
return typeof(s) == "object" ? s : document.getElementById(s);
}
function $SW(o)
{
$G(o).style.display = "block";
}
function $HE(o)
{
$G(o).style.display = "none";
}
/*mphone_index.js end*/

/*portal.tenpay.com/life/i/ticket/city.js begin*/
String.prototype.trim = function(){
    return this.replace(/[\s ]/g, "");
};
var City = {
    $def_text : "中文/拼音",
    $def_date : "yyyy-mm-dd",
    clearDefault : function(obj, flag, type){
        var v = (obj.value).trim();
        var def = 0 == type ? this.$def_text : this.$def_date;

        if(flag){
            obj.select();
            obj.style.color = "black";
        }else{
            if("" == v || def == v){
                obj.style.color = "#c1c1c1";
                obj.value = def;
            }else{
                obj.style.color = "black";
            }
        }
    },
	callback:null,
    show : function(obj, bindId,conf){
		if(conf){
			var callback=conf.callback?conf.callback:null;
			
			var offsetX=conf.offsetX?conf.offsetX:0;
			var offsetY=conf.offsetY?conf.offsetY:24;
		}else{
			var callback=null,offsetX=0,offsetY=24;
		}
		
		City.callback=typeof callback=='function'?callback:null;
        City.Suggest.hiddenSuggestTable();
        City.PopCity.showPopCity(obj, {id:'fc',width:362,height:170,offsetX:offsetX, offsetY:offsetY, bind:bindId,namespace:'City.PopCity'});
    },
    suggest : function(obj,e){
        City.PopCity.hiddenPanel();
        City.Suggest.suggest(obj,{id:'scu', width:190, height:'auto', offsetX:0, offsetY:24, namespace:'City.Suggest'},e);
    },
    hidePanel : function(){
        City.PopCity.hiddenPanel();
        City.Suggest.hiddenSuggestTable();
    }
};
 //"SHA":{text:"上海",value:"Shanghai",letter:"SH"},
function CityUtil(){
    this.$CityMap = {
        "AKU":{text:"阿克苏",value:"Akesu",letter:"AKS"},
        "AAT":{text:"阿勒泰",value:"Aletai",letter:"ALT"},
        "AQG":{text:"安庆",value:"Anqing",letter:"AQ"},
        "AKA":{text:"安康",value:"Ankang",letter:"AK"},
        "IOB":{text:"鞍山",value:"Anshan",letter:"AS"},
        "BAV":{text:"包头",value:"Baotou",letter:"BT"},
        "BSD":{text:"保山",value:"Baoshan",letter:"BS"},
        "BHY":{text:"北海",value:"Beihai",letter:"BH"},
        "PEK":{text:"北京",value:"Beijing",letter:"BJ"},
        "CGQ":{text:"长春",value:"Changchun",letter:"CC"},
        "CSX":{text:"长沙",value:"Changsha",letter:"CS"},
        "CIH":{text:"长治",value:"Changzhi",letter:"CZ"},
        "CGD":{text:"常德",value:"Changde",letter:"CD"},
        "CZX":{text:"常州",value:"Changzhou",letter:"CZ"},
        "CTU":{text:"成都",value:"Chengdu",letter:"CD"},
        "CKG":{text:"重庆",value:"Chongqing",letter:"CQ"},
        "BPX":{text:"昌都",value:"Changdu",letter:"CD"},
        "DLU":{text:"大理",value:"Dali",letter:"DDL"},
        "DLC":{text:"大连",value:"Dalian",letter:"DL"},
        "DTG":{text:"大同",value:"Datong",letter:"DT"},
        "DDG":{text:"丹东",value:"Dandong",letter:"DD"},
        "DNH":{text:"敦煌",value:"Dunhuang",letter:"DH"},
        "ENH":{text:"恩施",value:"Enshi",letter:"ES"},
        "FOC":{text:"福州",value:"Fuzhou",letter:"FZ"},
        "KOW":{text:"赣州",value:"Ganzhou",letter:"GZ"},
        "CAN":{text:"广州",value:"Guangzhou",letter:"GZ"},
        "KWE":{text:"贵阳",value:"Guiyang",letter:"GY"},
        "KWL":{text:"桂林",value:"Guilin",letter:"GL"},
        "HRB":{text:"哈尔滨",value:"Haerbin",letter:"HEB"},
        "HAK":{text:"海口",value:"Haikou",letter:"HK"},
        "HLD":{text:"海拉尔",value:"Hailaer",letter:"HLE"},
        "HGH":{text:"杭州",value:"Hangzhou",letter:"HZ"},
        "HFE":{text:"合肥",value:"Hefei",letter:"HF"},
        "HTN":{text:"和田",value:"Hetian",letter:"HT"},
        "HET":{text:"呼和浩特",value:"Huhehaote",letter:"HHHT"},
        "HJJ":{text:"怀化",value:"Huaihua",letter:"HH"},
        "AVA":{text:"黄果树",value:"Huangguoshu",letter:"HGS"},
        "TXN":{text:"黄山",value:"Huangshan",letter:"HS"},
        "TNA":{text:"济南",value:"Jinan",letter:"JN"},
        "JMU":{text:"佳木斯",value:"Jiamusi",letter:"JMS"},
        "JDZ":{text:"景德镇",value:"Jindezhen",letter:"JDZ"},
        "KJI":{text:"喀纳斯",value:"Kanasi",letter:"KNS"},
        "KHG":{text:"喀什",value:"Kashi",letter:"KS"},
        "KRY":{text:"克拉玛依",value:"Kelamayi",letter:"KLMY"},
        "KCA":{text:"库车",value:"Kuche",letter:"KC"},
        "KRL":{text:"库尔勒",value:"Kuerle",letter:"KEL"},
        "KMG":{text:"昆明",value:"Kunming",letter:"KM"},
        "LXA":{text:"拉萨",value:"Lasha",letter:"LS"},
        "LHW":{text:"兰州",value:"Lanzhou",letter:"LZ"},
        "LJG":{text:"丽江",value:"Lijiang",letter:"LJ"},
        "LYG":{text:"连云港",value:"Lianyungang",letter:"LYG"},
        "LYA":{text:"洛阳",value:"Luoyang",letter:"LY"},
        "MXZ":{text:"梅县",value:"Meixian",letter:"MX"},
        "MDG":{text:"牡丹江",value:"Mudanjiang",letter:"MDJ"},
        "NAO":{text:"南充",value:"Nanchong",letter:"NC"},
        "NLT":{text:"那里提",value:"Naliti",letter:"NLT"},
        "KHN":{text:"南昌",value:"Nanchang",letter:"NC"},
        "NKG":{text:"南京",value:"Nanjing",letter:"NJ"},
        "NNG":{text:"南宁",value:"Nanning",letter:"NN"},
        "NTG":{text:"南通",value:"Nantong",letter:"NT"},
        "NNY":{text:"南阳",value:"Nanyang",letter:"NY"},
        "NGB":{text:"宁波",value:"Ningbo",letter:"NB"},
        "NDG":{text:"齐齐哈尔",value:"Qiqihaer",letter:"QQHE"},
        "IQM":{text:"且末",value:"Qiemo",letter:"QM"},
        "TAO":{text:"青岛",value:"Qingdao",letter:"QD"},
        "IQN":{text:"庆阳",value:"Qingyang",letter:"QY"},
        "JJN":{text:"泉州",value:"Quanzhou",letter:"QZ"},
        "SYX":{text:"三亚",value:"Sanya",letter:"SY"},
        "SWA":{text:"汕头",value:"Shantou",letter:"ST"},
		
        "SHA":{text:"上海虹桥",value:"ShangHaiHongQiao",letter:"SHA"},
        "SHAPVG":{text:"上海浦东",value:"ShangHaiPuDong",letter:"SHAPVG"},
		
        "SZX":{text:"深圳",value:"Shenzhen",letter:"SZ"},
        "SHE":{text:"沈阳",value:"Shenyang",letter:"SY"},
        "SJW":{text:"石家庄",value:"Shijiazhuang",letter:"SJZ"},
        "TCG":{text:"塔城",value:"Tacheng",letter:"TC"},
        "TYN":{text:"太原",value:"Taiyuan",letter:"TY"},
        "TSN":{text:"天津",value:"Tianjin",letter:"TJ"},
        "TEN":{text:"铜仁",value:"Tongren",letter:"TR"},
        "WEH":{text:"威海",value:"Weihai",letter:"WH"},
        "WNZ":{text:"温州",value:"Wenzhou",letter:"WZ"},
        "WNH":{text:"文山",value:"Wenshan",letter:"WS"},
        "URC":{text:"乌鲁木齐",value:"Wulumuqi",letter:"WLMQ"},
        "WUX":{text:"无锡",value:"Wuxi",letter:"WX"},
        "WUH":{text:"武汉",value:"Wuhan",letter:"WH"},
        "SIA":{text:"西安",value:"Xian",letter:"XA"},
        "XNN":{text:"西宁",value:"Xining",letter:"XN"},
        "JHG":{text:"西双版纳",value:"Xishuangbanna",letter:"XSBN"},
        "XMN":{text:"厦门",value:"Xiamen",letter:"XM"},
        "DIG":{text:"香格里拉",value:"Xianggelila",letter:"XGLL"},
        "XFN":{text:"襄樊",value:"Xiangfan",letter:"XF"},
        "XUZ":{text:"徐州",value:"Xuzhou",letter:"XZ"},
        "YNT":{text:"烟台",value:"Yantai",letter:"YT"},
        "YNJ":{text:"延吉",value:"Yanji",letter:"YJ"},
        "YNZ":{text:"盐城",value:"Yancheng",letter:"YC"},
        "YIN":{text:"伊宁",value:"Yining",letter:"YN"},
        "YIW":{text:"义乌",value:"Yiwu",letter:"YW"},
        "YIH":{text:"宜昌",value:"Yichang",letter:"YC"},
        "INC":{text:"银川",value:"Yinchuan",letter:"YC"},
        "ZHA":{text:"湛江",value:"Zhanjiang",letter:"ZJ"},
        "DYG":{text:"张家界",value:"Zhangjiajie",letter:"ZJJ"},
        "CGO":{text:"郑州",value:"Zhengzhou",letter:"ZZ"},
        "ZUH":{text:"珠海",value:"Zhuhai",letter:"ZH"},
        "JUZ":{text:"衢州",value:"Quzhou",letter:"QZ"},
        "CHG":{text:"朝阳",value:"Zhaoyang",letter:"ZY"},
        "CIF":{text:"赤峰",value:"Chifeng",letter:"CF"},
        "DAX":{text:"达县",value:"Daxian",letter:"DX"},
        "LUM":{text:"德宏芒市",value:"Dehongmangshi",letter:"DHMS"},
        "DOY":{text:"东营",value:"Dongying",letter:"DY"},
        "DSN":{text:"鄂尔多斯",value:"Eerduosi",letter:"EEDS"},
        "FUG":{text:"阜阳",value:"Fuyang",letter:"FY"},
        "GOQ":{text:"格尔木",value:"Geermu",letter:"GEM"},
        "GYS":{text:"广元",value:"Guangyuan",letter:"GY"},
        "GHN":{text:"广汉",value:"Guanghan",letter:"GH"},
        "HMI":{text:"哈密",value:"Hami",letter:"HM"},
        "HZG":{text:"汉中",value:"Hanzhong",letter:"HZ"},
        "HNY":{text:"衡阳",value:"Hengyang",letter:"HY"},
        "HYN":{text:"黄岩",value:"Huangyan",letter:"HY"},
        "AHE":{text:"惠阳",value:"Huiyang",letter:"HY"},
        "HEK":{text:"黑河",value:"Heihe",letter:"HH"},
        "JIL":{text:"吉林",value:"Jilin",letter:"JL"},
        "KNC":{text:"吉安",value:"Jian",letter:"JA"},
        "JNZ":{text:"锦州",value:"Jinzhou",letter:"JZ"},
        "SHS":{text:"荆州",value:"Jingzhou",letter:"JZ"},
        "JIU":{text:"九江",value:"Jiujiang",letter:"JJ"},
        "JZH":{text:"九寨沟",value:"Jiuzhaigou",letter:"JZG"},
        "LIA":{text:"梁平",value:"Liangping",letter:"LP"},
        "LYI":{text:"临沂",value:"Linyi",letter:"LY"},
        "LNJ":{text:"临沧",value:"Lincang",letter:"LC"},
        "LZH":{text:"柳州",value:"Liuzhou",letter:"LZ"},
        "LZO":{text:"泸州",value:"Luzhou",letter:"LZ"},
        "NZH":{text:"满州里",value:"Manzhouli",letter:"MZL"},
        "MIG":{text:"绵阳",value:"Mianyang",letter:"MY"},
        "NLT":{text:"那拉提",value:"Nalati",letter:"NLT"},
        "PZI":{text:"攀枝花",value:"Panzhihua",letter:"PZH"},
        "SHP":{text:"秦皇岛",value:"Qinhuangdao",letter:"QHD"},
        "JUZ":{text:"衢州",value:"Quzhou",letter:"QZ"},
        "SXJ":{text:"鄯善",value:"Shanshan",letter:"SS"},
        "SHG":{text:"韶关",value:"Shaoguan",letter:"SG"},
        "SYM":{text:"思茅",value:"Simao",letter:"SM"},
        "WXN":{text:"万州",value:"Wanzhou",letter:"WZ"},
        "WEF":{text:"潍坊",value:"Weifang",letter:"WF"},
        "WUS":{text:"武夷山",value:"Wuyishan",letter:"WYS"},
        "WUZ":{text:"梧州",value:"Wuzhou",letter:"WZ"},
        "XIC":{text:"西昌",value:"Xichang",letter:"XC"},
        "ACX":{text:"兴义",value:"Xingyi",letter:"XY"},
        "LLF":{text:"永州",value:"Yongzhou",letter:"YZ"},
        "ENY":{text:"延安",value:"Yanan",letter:"YA"},
        "YBP":{text:"宜宾",value:"Yibin",letter:"YB"},
        "UYN":{text:"榆林",value:"Yulin",letter:"YL"},
        "ZAT":{text:"昭通",value:"Zhaotong",letter:"ZT"},
        "HSN":{text:"舟山",value:"Zhoushan",letter:"ZS"},
        "ZYI":{text:"遵义",value:"Zunyi",letter:"ZY"},
        "OHE":{text:"漠河",value:"Mohe",letter:"MH"},
        "HDG":{text:"邯郸",value:"Handan",letter:"HD"},
        "JNG":{text:"济宁",value:"JiNing",letter:"JN"},
        "YCU":{text:"运城",value:"YunCheng",letter:"YC"}
    };
    this.$def_list = ['SZX','PEK','CAN','HGH','CKG','SIA','WUH','NKG','SYX'];
    this.$letter_list = ["省会", "A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","S","T","W","X","Y","Z"];
    this.$centre_list = ["PEK","TSN","CKG","SZX","TYN","HET","SHE","CGQ","HRB","NKG","HGH","HFE","FOC","KHN","TNA","CGO","WUH","CSX","CAN","NNG","HAK","CTU","KWE","KMG","SIA","LHW","INC","XNN","URC","SJW","LXA"];
    this.namespace = "cityUtil";
    this.target = null;
    this.conf = null;
    this.suggestIndex = 0;
    this.suggestList = [];
}
CityUtil.prototype = {
    $ : function(id){
        var ret = null;
        switch(typeof(id)){
            case "string":
                ret = document.getElementById(id);
            break;
            case "object":
                if(id.nodeType && 1 == id.nodeType){
                    ret = id;
                }
            break;
        }
        return ret;
    },
    getPosition:function(obj){
        var _x = 0;
        var _y = 0;
        while(null != obj.offsetParent){
            _x += obj.offsetLeft;
            _y += obj.offsetTop;
            obj = obj.offsetParent;
        }
        return {x:_x, y:_y};
    },
    createPanel : function(id, width, height){
        var panel = this.$("cu_panel_" + id);
        if(null == panel){
            var panel = document.createElement("span");
            var mask = '<div id="${id}" style="display:none; position:absolute;left:0px; top:0px; z-index:9999; width:${width}px; height:${height};"><iframe vspace="0" hspace="0" marginwidth="0" marginheight="0" border="0" frameborder="0" scrolling="no" style="position:absolute;left:0px; top:0px; z-index:-1; width:${width}px; height:${height};"></iframe><div id="_${id}"></div></div>';
            mask = mask.replace(/\$\{id\}/g, id);
            mask = mask.replace(/\$\{width\}/g, width);
            mask = mask.replace(/\$\{height\}/g, "auto" == height ? height : height + "px");
            panel.setAttribute("id", "cu_panel_" + id);
            panel.innerHTML = mask;
            document.body.appendChild(panel);
        }
      //  this.$(id).attachEvent("onmouseup", this.stopPropagation);
		var _this=this;
		jQuery(this.$("_" + id)).mouseup(function(event){
											 event.stopPropagation();
												  })
		jQuery(this.$(id)).mouseup(function(event){
											 event.stopPropagation();
												  })
        //this.$("_" + id).attachEvent("onmouseup", this.stopPropagation);
        return {"panel":panel, "id":id, "width":width, "height":height};
    },
    stopPropagation : function(e){
        if ( e && e.preventDefault ){
             e.preventDefault();
			 e.stopPropagation();
		}
        //IE中阻止函数器默认动作的方式
        else{
            window.event.returnValue = false;
			window.event.cancelBubble = true;
		}
        return false;
    },
    showPanel : function(){
        var panel = null;
        if(null != this.conf){
            panel = this.$(this.conf.id);
            if(null != panel){
                panel.style.display = "block";
            }
        }
        panel = null;
    },
    hiddenPanel : function(){
        var panel = null;
        if(null != this.conf){
            panel = this.$(this.conf.id);
            if(null != panel){
                panel.style.display = "none";
            }
        }
        panel = null;
    },
    setPanelProperty : function(id, pos, offsetX, offsetY){
        var panel = this.$(id);
        var l = pos.x + offsetX;
        var t = pos.y + offsetY;
        panel.style.left = l + "px";
        panel.style.top = t + "px";
        panel.style.background ='#fff';
        panel = null;
    },
    removeTableItems : function(id, offset){
        for(var i = this.$(id).rows.length - 1; i >= offset; i--){
            this.$(id).deleteRow(i);
        }
    },
    getCityItem : function(obj){
        var city = null;
        var value = (obj.value).replace(/[\s ]/g, "");
        for(var key in this.$CityMap){
            city = this.$CityMap[key];
            if(value == city.text || value == city.value || value == city.letter){
                city.code = key;
                break;
            }else{
                city = null;
            }
        }
        if(null != city){
            obj.value = city.text;
            obj.setAttribute("key", city.code);
            obj.setAttribute("code", city.value);
            obj.setAttribute("letter", city.letter);
        }
        return city;
    },
    getCityTag : function(panel, conf){
        var l = this.$letter_list;
        var s = l.length;
        var str = "";
        for(var i = 0; i < s; i++){
            if(0 == i){
                str = '<span onclick="'+this.namespace+'.setPopCity(\'-1\',\''+panel.id+'\',event)">'+l[i]+'</span>|';
            }else{
                str += '<span onclick="'+this.namespace+'.setPopCity(\''+l[i]+'\',\''+panel.id+'\',event)">'+l[i]+'</span>';
            }
        }
        return str;
    },
    createPopPanel : function(panel, conf){
        var div = this.$("_"+panel.id);
        var str = '<table onmouseup="'+this.namespace+'.stopPropagation(event)" class="city_wrapper" id="pop_table_'+panel.id+'" border="0" cellpadding="0" cellspacing="1" style="width:'+panel.width+'px;"><tbody><tr><th colspan="6">请选择城市或输入城市名称的拼音</th></tr><tr><td colspan="6" class="city-tag">'+this.getCityTag(panel, conf)+'</td></tr></tbody></table>';
        div.innerHTML = str;
        div = null;
    },
    setPopCity : function(type, id,e){
       // e.stopPropagation();
        var list = [];
        var city = null;
        var size = this.$centre_list.length;
        var key = null;
        if("-1" == type){
            for(var i = 0; i < size; i++){
                key = this.$centre_list[i];
                city = this.$CityMap[key];
                city.code = key;
                list.push(city);
            }
        }else{
            for(var key in this.$CityMap){
                city = this.$CityMap[key];
                if(type == city.letter.substr(0, 1)){
                    city.code = key;
                    list.push(city);
                }
            }
        }
        this.removeTableItems("pop_table_"+id, 2);
        this.createPopItems("pop_table_"+id, list);
    },
    setCityValue : function(key, text, value, letter){
        var conf = this.conf;
        
        if(this.target.tagName!='INPUT'){
        	$('#more_last_tab').html(text); 
        	$('#more_last_li').click();      
        	if(City.callback){
        		City.callback();
        	}
        	 this.hiddenPanel();
        	return;  
        }
        this.target.style.color = "black";
        this.target.value = text;
        this.target.setAttribute("key", key);
        this.target.setAttribute("code", value);
        this.target.setAttribute("letter", letter);
        if(conf.bind){
            this.target = this.$(conf.bind);
            this.conf.bind = null;
            this.target.focus();
            this.target.select();
            this.showPopCity(this.target, this.conf);
        }else{
            this.hiddenPanel();
        }
		if(City.callback){
			City.callback();
		}
    },
    setPopItem : function(rowIndex, cellIndex, list, size, cell){
        var v = null;
        var index = ((rowIndex - 2) * 6) + cellIndex;
        var _this = this;
        v = index >= size ? null : list[index];
        if(null == v){
            cell.innerHTML = "&nbsp;";
        }else{
            cell.innerHTML = v.text;
            cell.title = v.text;
            cell.align = "center";
            cell.vAlign = "middle";
            cell.style.cursor = "pointer";
			
			jQuery(cell).click(function(){
								_this.setCityValue(v.code, v.text, v.value, v.letter);
					   }).mouseover(function(event){
								this.className="pop-hover";event.stopPropagation();
				
			           }).mouseout(function(event){
								this.className="pop-hout";event.stopPropagation();
				
			           })

           // cell.attachEvent("onclick", function(){_this.setCityValue(v.code, v.text, v.value, v.letter)});
           // cell.attachEvent("onmouseover", function(){window.event.srcElement.className="pop-hover";_this.stopPropagation();});
           // cell.attachEvent("onmouseout", function(){window.event.srcElement.className="pop-hout";_this.stopPropagation();});
        }
        cell = null;
    },
    createPopItems : function(id, list){
        var table = this.$(id);
        var row = null;
        var cell = null;
        var size = list.length;
        for(var i = 2; i < 8; i++){
            row = table.insertRow(i);
            for(var j = 0; j < 6; j++){
                cell = row.insertCell(j);
                this.setPopItem(i, j, list, size, cell);
            }
        }
        table = null; row = null; cell = null;
    },
    showPopCity : function(obj, conf){
        var panel = null;
        var pos = this.getPosition(obj);
        this.namespace = conf.namespace;
        this.target = obj;
        this.conf = conf;
        panel = this.createPanel(conf.id, conf.width, conf.height||"auto");
        this.createPopPanel(panel, conf);
        this.setPopCity("-1", conf.id);
        this.setPanelProperty(conf.id, pos, conf.offsetX, conf.offsetY);
        this.showPanel();
        var _this = this;
        setTimeout(function(){
          //  document.attachEvent("onmouseup", function(){_this.hiddenPanel();});
			jQuery(document).mouseup(function(){_this.hiddenPanel();})
        }, 50);
        return this;
    },
    createSuggestPanel : function(panel, conf){
        var div = this.$("_"+panel.id);
        var str = '<table onmouseup="'+this.namespace+'.stopPropagation(event);" class="list_city_wrapper" id="suggest_table_'+panel.id+'" border="0" cellpadding="0" cellspacing="0" style="width:'+panel.width+'px;"><tbody><tr><th colspan="2" id="suggest_th_'+panel.id+'">请输入中文/拼音或↑↓键选择</th></tr></tbody></table>';
        div.innerHTML = str;
        div = null;
    },
    $filterSpecialChar : function(v){
        var chars = v.split("");
        var size = chars.length;
        var tmp = '';
        var chr = '';
        var filter = "\\[]{}^()/$.*?+";
        for(var i = 0; i < size; i++){
            chr = chars[i];
            if(filter.indexOf(chr) != -1){
                chr = "\\" + chr;
            }
            tmp += chr;
        }
        return tmp;
    },
    getSuggestListByValue : function(v){
        var list = [];
        var city = null;
        var size = this.$def_list.length;
        var key = null;
        if("" == v || "-1" == v){
            for(var i = 0; i < size; i++){
                key = this.$def_list[i];
                city = this.$CityMap[key];
                city.code = key;
                list.push(city);
            }
        }else{
            var p = new RegExp("^"+this.$filterSpecialChar(v), "gi");
            for(var key in this.$CityMap){
                city = this.$CityMap[key];
                if(p.test(city.text) || p.test(city.value) || p.test(city.letter)){
                    city.code = key;
                    list.push(city);
                }
            }
            p = null;
        }
        this.suggestList = list;
        return list;
    },
    setSuggestValue : function(key, text, value, letter, isHidden){
        var conf = this.conf;
        this.target.style.color = "black";
        this.target.value = text;
        this.target.setAttribute("key", key);
        this.target.setAttribute("code", value);
        this.target.setAttribute("letter", letter);
        if(isHidden){
            this.hiddenSuggestTable();
        }
    },
    hiddenSuggestTable : function(){
        this.hiddenPanel();
        this.suggestIndex = 0;
        this.suggestList = [];
    },
    addSuggestRowEvent : function(row, city){
        var _this = this;
		jQuery(row).click(function(){
						_this.setSuggestValue(city.code, city.text, city.value, city.letter, true);		   
				 }).mouseover(function(event){
					   row.className = 'sug-hover';
					   event.stopPropagation();

				 }).mouseout(function(event){
					 row.className = 'sug-hout';
					  event.stopPropagation();
				 })
     //   row.attachEvent("onclick", function(){_this.setSuggestValue(city.code, city.text, city.value, city.letter, true);});
     //   row.attachEvent("onmouseover", function(){row.className = 'sug-hover';_this.stopPropagation();});
       // row.attachEvent("onmouseout", function(){row.className = 'sug-hout';_this.stopPropagation();});
    },
    setSuggestList : function(value, id, limit){
        var table = this.$("suggest_table_" + id);
        var th = this.$("suggest_th_" + id);
        this.removeTableItems(table.id, 1);
        var row = null;
        var cell = null;
        var list = this.getSuggestListByValue(value);
        var size = list.length;
        var city = null;
        if(size > 0){
            if("" != value && "-1" != value){
                th.innerHTML = value + "，按拼音排序";
            }
        }else{
            th.innerHTML = "对不起，找不到：" + value;
        }
        for(var i = 0; i < size; i++){
            if(limit > 0 && i >= limit){
                break;
            }
            city = list[i];
            row = table.insertRow(i+1);
            cell = row.insertCell(0);
            cell.innerHTML = city.value;
            cell.className = "sug-value";
            cell = row.insertCell(1);
            cell.innerHTML = city.text;
            cell.className = "sug-text";
            this.addSuggestRowEvent(row, city);
        }
        table = null; th = null;
    },
    setSuggestValueByKey : function(keyCode){
        var size = this.suggestList.length;
        var city = null;
        if(size > 0){
            if(this.suggestIndex < 0){
                this.suggestIndex = 0;
                return false;
            }
            if(this.suggestIndex >= size){
                this.suggestIndex = size - 1;
                return false;
            }
            if((this.conf.limit > 0 && this.suggestIndex >= this.conf.limit)){
                this.suggestIndex = this.conf.limit - 1;
                return false;
            }
            city = this.suggestList[this.suggestIndex];
            this.setDefaultSuggest();
            this.setSuggestValue(city.code, city.text, city.value, city.letter, 13 == keyCode);
        }
    },
    captureKeyEvent : function(keyCode){
        switch(keyCode){
            case 13: //enter
                this.setSuggestValueByKey(keyCode);
                break;
            case 38: //up
                this.suggestIndex--;
                this.setSuggestValueByKey(keyCode);
                break;
            case 40: //down
                this.suggestIndex++;
                this.setSuggestValueByKey(keyCode);
                break;
        }
    },
    setDefaultSuggest : function(){
        var table = this.$("suggest_table_" + this.conf.id);
		if(!table) return;
        var index = this.suggestIndex+1;
        var rowSize = table.rows.length;
        var row = index >= rowSize ? null : table.rows[index];
        for(var i = 1; i < rowSize; i++){
            table.rows[i].className = "sug-hout";
        }
        if(null != row){
            row.className = "sug-hover";
        }
        table = null; row = null;
    },
    suggest : function(obj, conf,e){
        var v = obj.value;
        var panel = null;
        var pos = this.getPosition(obj);
		var e=window.event?window.event:e;
        var keyCode = e.keyCode;
        this.namespace = conf.namespace;
        this.target = obj;
        this.conf = conf;
        switch(keyCode){
            case 37:
            case 38:
            case 39:
            case 40:
            case 13:
                break;
            case 8:
            case 46:
                this.suggestIndex = 0;
            default:
            {
                panel = this.createPanel(conf.id, conf.width, conf.height||"auto");
                this.createSuggestPanel(panel, conf);
                if("" == v){
                    this.setSuggestList("-1", conf.id, conf.limit||-1);
                }else{
                    this.setSuggestList(v, conf.id, conf.limit||-1);
                }
                this.setPanelProperty(conf.id, pos, conf.offsetX, conf.offsetY);
                break;
            }
        }
        this.showPanel();
        this.captureKeyEvent(keyCode);
        this.setDefaultSuggest();
        var _this = this;
        setTimeout(function(){
           // document.attachEvent("onmouseup", function(){_this.hiddenSuggestTable();});
			jQuery(document).mouseup(function(){_this.hiddenSuggestTable();})
        }, 50);
        return this;
    }
};
City.PopCity = new CityUtil();
City.Suggest = new CityUtil();
/*portal.tenpay.com/life/i/ticket/city.js end*/