function getFlashObject(id) {
  return document.getElementById(id) || document.getElementsByName(id)[0];
}

/** ======================= About ActiveX Object ======================= **/
//用户已经安装的ActiveX版本号
var localVersion;

/**
 * 安装activex
 */
function installActiveX() {
    window.location=getAbsolute()+getServName()+'/InstallLangKooActiveX.exe';return;
}
/**
 * 得到activex版本
 */
function getActiveXVersion() {
    try {
    	var checkActiveObj = new ActiveXObject("LangKoo.Detector");
        localVersion = checkActiveObj.Version;
    } catch(e) {
        localVersion = 0;
    }
    return localVersion;
}

/**
 * 判断activex是否安装
 */
function checkActivexInstall(){
	if(!localVersion){
		localVersion = getActiveXVersion();
	}
	if(localVersion == 0){ // 无法获取版本号,认为ActiveX没有被安装
		return false
	}else{ // 成功获取版本号,认为ActiveX已经被安装
		return true;
	}
}

/**
 * 判断activex版本是否正确
 */
function checkActivexVersion(){
	if(checkActivexInstall()){
		//alert("serverVersion = " + serverVersion);
		//serverVersion = '1,0,3,2';
		var sv = serverVersion.replace(/,/g,'');
		if(sv == ""){
			return false;;
		}else if(localVersion != sv){
			return false;;
		}
		return true;
	}else{
		return false;
	}

}
/**
 * 检查ActiveX插件是否安装,并弹出提示窗口进行提示
 * @param noErrMsg
 * @return
 */
function checkActivexForConfirm(noErrMsg){
	var errMsg = '';
	if(checkActivexInstall()){
		var sv = serverVersion.replace(/,/g,'');
		if(sv == ""){
			errMsg = "网络异常，获取插件版本失败";
		}else if(localVersion != sv){
			errMsg = "朗酷Activx插件更新，为了系统更加稳定，请务必升级";
		}else{
			return true;
		}
	}else{
		errMsg = "您尚未安装朗酷插件";
		if(confirm(errMsg + "，是否转到插件安装页？")){
			turnToInstallPage();
			return false;
		}else{
			return false;
		}
	}
	if(noErrMsg){
		return false;
	}else{
		if(confirm(errMsg + "，是否转到插件安装页？")){
			turnToInstallPage();
			return false;
		}else{
			return true;
		}
	}
}


//
function turnToInstallPage(){
	window.top.location.href=constants.url()+"/common/tryOut.action";
}

//判断麦克风是否已经检测
function checkMicTest(){
	var micTested=GetCookie("ismictest");
	if(!micTested) return false;
	else return true;
}

/** ======================= About ActiveX Object End ======================= **/
// 获取域路径(http://domain:port/)
function getAbsolute(){
	return "http://"+window.location.host+"/";
}
// 获取服务名(servname)
function getServName(){
	return /\w+/.exec(document.location.pathname)[0];
}
// 获取域和端口字符串
function getDomainWithPort(){
	return window.location.host;
}

/**
 * 此方法为共享的异步调用方法
 * 
 */
function g_asynPageRequest(url,containerId,isContainerId, callback){

	var url = url; 					// URL
	var containerId = containerId;	// containerId
	var isContainerId = true; 		// 是否是containIdId
	
	if(typeof (isContainerId) != "undefined"){
		isContainerId = isContainerId;
	}
	gCommonAsynRequest(url,containerId,'',callback,true,isContainerId);
}



/**
 * 能接收五个参数的异步请求
 * 
 * 参数				参数名			必要性
 * arguments[0] : url				required
 * arguments[1] : containerId		required
 * arguments[2] : params			可选
 * arguments[3] : callBack			可选(此项和containerId必存其一)
 * arguments[4] : asynchronous		可选
 * arguments[5] : isContainerId		可选
 */
function gCommonAsynRequest(){
	if(typeof(arguments[0]) == 'undefined' || typeof(arguments[1]) == 'undefined'){
		return -1;
	}
	
	var url = arguments[0];			// url
	var containerId = arguments[1];	// containerId
	var params = "";				// params
	var callBack = arguments[3];	// callBack
	var asynchronous = true;		// 是否异步
	var isContainerId = true; 		// 是否是containIdId
	
	if(typeof(arguments[2]) != 'undefined'){
		params = arguments[2];
	}
	if(typeof(arguments[4]) != 'undefined'){
		asynchronous = arguments[4];
	}
	if(typeof (arguments[5]) != "undefined"){
		isContainerId = arguments[5];
	}
	var onComplete = function (request) {
		if(isContainerId){
			if(!!containerId){
				$(containerId).innerHTML = request.responseText;
			}
		}else{
			$(containerId).parentNode.innerHTML = request.responseText;
		}
		if(callBack) callBack(request,containerId);
	}
	
	new Ajax.Request(url,
		{
			asynchronous:asynchronous,
			method : 'POST',
			parameters: params,
			onComplete: onComplete
		}
	);
}

/**
 * Ajax异步对象
 */
var LangkooAjaxObj = Class.create({
	update : function(container,url,options){
		options = (options || {});
		if(options.isAsyn == undefined || options.isAsyn == null){
			options.isAsyn = true;
		}else if(options.isAsyn == 'false' ){
			options.isAsyn = false;
		}
		options.isAsyn = (options.isAsyn || false);
		new Ajax.Updater(container, url, {
			parameters : options.params,
			evalScripts : true,
			onLoading : options.loading,
			onComplete : options.callback,
			asynchronous : Boolean(options.isAsyn)
		});
		
	},
	request : function(url,options){
		options = (options || {});
		if(options.isAsyn == undefined || options.isAsyn == null){
			options.isAsyn = true;
		}else if(options.isAsyn == 'false' ){
			options.isAsyn = false;
		}
		options.isAsyn = (options.isAsyn || false);
		new Ajax.Request(url, {
			parameters : options.params,
			onLoading : options.loading,
			onComplete : options.callback,
			asynchronous : Boolean(options.isAsyn)
		});
		
	}
	
}); 



/** =============================== window.open =============================== **/
/**
 * 	使用范围: 主要针对在新窗口中打开学习页面;
 *  使用有两种方法:
 * 		1. 在需要的页面,导入这个util.js文件;
 * 		2. 在脚本中需要调用时,可直接调用listenEle();
 *	使用时的注意事项:
 *		1. 使用时,必须给指定元素定义一个class属性,默认class="listenerOn"
 *		2. 定义参数以"params."开头,格式如下: <a params.lessonId="123"></a>
 *		3. 当你定义参数时(如2),
 *			切记:IE,FF对attributes对大小写的处理有区别的,
 *		   	最好定义属性时,属性名都用小写
 */
Event.observe(window,'load',function(){
	listenEle();
});
function listenEle(className){
	var key = (className ? "." + className : ".listenerOn");
	var links = $$(key);
	
	//决定是打开新窗口,还是给属性赋值
	var handle = function(){
		var args = $A(arguments);
		args.shift();
		openWindowForPractice(args[0]);
	}
	links.each(function(s,index){
		Event.observe(s,'click',handle.bindAsEventListener(this,s));
	}.bind(this));
}
function openWindowForPractice(ele){
	var url = constants.url() + "/practice/enterPracticePage.action?" ;
	var queryParams = ""; 
	$A(ele.attributes).each(function(s,index){
		if(s.name.match(/params./gi)){
			var name = s.name.split('.')[1];
			var value = s.value;
			queryParams += "&" + name + "=" + value;
		}
	});
	
	if(ele.tagName.toLowerCase() == 'a'){
		//args[0].target = "_blank";
		//args[0].href = url + queryParams;
		window.open(url + queryParams);
	}else{
		window.open(url + queryParams);
	}
}
/** =============================== window.open end =============================== **/

function getOs()
{
   if(navigator.userAgent.indexOf("MSIE")>0)return 1;
   if(isFirefox=navigator.userAgent.indexOf("Firefox")>0)return 2;
   if(isSafari=navigator.userAgent.indexOf("Safari")>0)return 3;   
   if(isCamino=navigator.userAgent.indexOf("Camino")>0)return 4;
   if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0)return 5;
   return 0;
}
function checkOs(){
	if (getOs()!= 1) {
		var innerHTMLStr = "<div id=\"notIEWarnMsgId\" style=\"color:#ff0000;width:800px;text-align:right;\">We support IE Browser only!</div>";
		//document.body.insertAdjacentHTML("afterBegin", innerHTMLStr);
		insertHtml("afterBegin", document.body, innerHTMLStr);
		var isRed = true;
		setInterval(function(){
			try {
				var notIEWarnMsgObj = document.getElementById("notIEWarnMsgId");
				if (isRed) notIEWarnMsgObj.style["color"] = "#000000";
				else notIEWarnMsgObj.style["color"] = "#ff0000";
				isRed = !isRed;
			} catch(e){}
		}, 300);
	}
}

function insertHtml(where, el, html){
        where = where.toLowerCase();
        if(el.insertAdjacentHTML){
            switch(where){
                case "beforebegin":
                    el.insertAdjacentHTML('BeforeBegin', html);
                    return el.previousSibling;
                case "afterbegin":
                    el.insertAdjacentHTML('AfterBegin', html);
                    return el.firstChild;
                case "beforeend":
                    el.insertAdjacentHTML('BeforeEnd', html);
                    return el.lastChild;
                case "afterend":
                    el.insertAdjacentHTML('AfterEnd', html);
                    return el.nextSibling;
            }
            throw 'Illegal insertion point -> "' + where + '"';
        }
        
  		var range = el.ownerDocument.createRange();
        var frag;
        switch(where){
             case "beforebegin":
            range.setStartBefore(el);
            frag = range.createContextualFragment(html);
            el.parentNode.insertBefore(frag, el);
            return el.previousSibling;
         case "afterbegin":
            if(el.firstChild){
                range.setStartBefore(el.firstChild);
                frag = range.createContextualFragment(html);
                el.insertBefore(frag, el.firstChild);
                return el.firstChild;
            }else{
                el.innerHTML = html;
                return el.firstChild;
            }
        case "beforeend":
            if(el.lastChild){
                range.setStartAfter(el.lastChild);
                frag = range.createContextualFragment(html);
                el.appendChild(frag);
                return el.lastChild;
            }else{
                el.innerHTML = html;
                return el.lastChild;
            }
        case "afterend":
            range.setStartAfter(el);
            frag = range.createContextualFragment(html);
            el.parentNode.insertBefore(frag, el.nextSibling);
            return el.nextSibling;
        }
        throw 'Illegal insertion point -> "' + where + '"';
}

function checkAlertMsg(){
	var url = getAbsolute() + getServName() + "/common/alertMessage.action?timestamp="+new Date();
	
	new Ajax.Request(url,{
		onComplete : function(response){
			var alertMsg = response.responseText;
			if (alertMsg != "") {
					var innerHTMLStr = "<div id=\"alertMsgId\" style=\"color:#ff0000;width:100%;background-color:#ffcc00;filter：alpha（opacity=0.6);font-size:14px;text-align:center;\">"+alertMsg+"</div>";
					//document.body.insertAdjacentHTML("afterBegin", innerHTMLStr);
					insertHtml("afterBegin", document.body, innerHTMLStr);
					var isRed = true;
					setInterval(function(){
						try {
							var alertMsgId = document.getElementById("alertMsgId");
							if (isRed) alertMsgId.style["color"] = "#000000";
							else alertMsgId.style["color"] = "#ff0000";
							isRed = !isRed;
						} catch(e){}
					}, 300);	
        		}
		}
	});
}

/** =======================弹出层公用代码================================= **/
/**
 * 准备内容层并返回内容（iframe）对象
 */
function prepearContainer(width, height, isScrolling){
	var tfObj = null;
	this.prepearSelf = function(){
		var bodyWidth = parseInt(document.body.offsetWidth)+24;
		var bodyHeight = parseInt(document.body.offsetHeight)+24;
		var container = document.getElementById("testContainer");
		container.style["left"] = (bodyWidth-width)/2;
		container.style["top"] = "150px";
		container.style["width"] = width;
		container.style["height"] = height;
		container.style["display"] = "block";
		tfObj = document.getElementById("testFrame");
		tfObj.marginwidth="0";
		tfObj.marginheight="0";
		tfObj.scrolling=typeof(isScrolling)=="undefined"?"no":(isScrolling==true?"auto":"no");
		tfObj.width=width;
		tfObj.height=height;
	}
	this.prepearSelf();
	window.onresize = function(){
		if (document.getElementById("mask").style["display"] == "block") {
			prepearMask();
			this.prepearSelf();
		}
	}
	return tfObj;
}
/**
 * 准备遮罩层
 */
function prepearMask(){
	var mask = document.getElementById("mask");
	var bodyWidth = document.body.scrollWidth+24;
	var bodyHeight = document.body.scrollHeight+24;
	mask.style["position"] = "absolute";
	mask.style["left"] = 0;
	mask.style["top"] = 0;
	mask.style["width"] = bodyWidth;
	mask.style["height"] = bodyHeight;
	mask.style["display"] = "block";
}
/**
 * 关闭弹出层
 */
function closeMask(){
	var mask = document.getElementById("mask");
	mask.style["width"] = "0px";
	mask.style["height"] = "0px";
	mask.style["display"] = "none";
	document.getElementById("testContainer").style["display"] = "none";
	var tfObj = document.getElementById("testFrame");
	tfObj.src = "";
}
/** ================================================================== **/



/** =======================有关Cookie的操作============================== **/
 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 this.GetCookieVal (j);
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) break;
	}
	return null;
}
function DelCookie(name){
	var exp = new Date();
	exp.setTime (exp.getTime() - 1);
	var cval = this.GetCookie(name);
	document.cookie = name + "=" + cval + "; expires="+ exp.toGMTString();
}
function SetCookie(name, value){
	var expdate = new Date();
	var argv = arguments;
	var argc = arguments.length;
	var expires = (argc > 2) ? argv[2] : null;
	var path = (argc > 3) ? argv[3] : null;
	var domain = (argc > 4) ? argv[4] : null;
	var secure = (argc > 5) ? argv[5] : false;
	if(expires!=null) expdate.setTime(expdate.getTime() + ( expires * 1000 ));
	document.cookie = name + "=" + escape (value) +((expires == null) ? "" : ("; expires="+ expdate.toGMTString()))
	+((path == null) ? "" : ("; path=" + path)) +((domain == null) ? "" : ("; domain=" + domain))
	+((secure == true) ? "; secure" : "");
}
function GetCookieVal(offset){
	var endstr = document.cookie.indexOf (";", offset);
	if (endstr == -1)
	endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}
/** ================================================================== **/

/** ================================翻页代码================================ **/
// =================翻页代码的使用说明======================
// 请根据一下步骤使用翻页代码
// 1. 在使用翻页的页面中加入
//    <script type="text/javascript" src="${basePath}/v3_view/common/js/util.js"></script>
// 2. 在使用翻页的页面中加入
//    <jsp:include page="/WEB-INF/v3_jsps/common/paginate.jsp"></jsp:include>
// 3. 在页面装载完毕的javascript事件函数中加入一下代码行
//    // 111是总页数, 10是当前显示的页数, 9是每组显示的页数, [1, 2, 3]是对象数组,这个数组在回调用户的回调函数时会被作为参数传入回调函数
//    var vp = new VoxPaginate(111, 10, 9, [1, 2, 3]);
//    // 添加回调函数(此回调函数在切换页面时被调用) 
//    vp.addPageChangeCallback(function(totalPageCount, currentPageNumber, attachArray){
//         // totalPageCount为总页数
//         // currentPageNumber为用户想切换到的页码
//         // attachArray为用户构造翻页对象时传入的对象
//    });
// 注意： 翻页代码使用了prototype.js, 所以使用翻页代码的页面需要加载prototype.js库
// ======================================================

// 构造翻页对象
/**
 * totalPageCount : 总页数(>=1)
 * currentPageNumber : 当前的页码(>=1)
 * pageCountPerGroup : 每组显示的多少页(>=1)
 * attachArray : 附加的对象数组(此数组会在换页时传回用户)
 */
var VoxPaginate = function(totalPageCount, currentPageNumber, pageCountPerGroup, attachArray){
	// 检测参数的有效性
	var checkReturn = this.checkParameters(totalPageCount, currentPageNumber, pageCountPerGroup);
	if (checkReturn != true) {
		alert(checkReturn);
		return;
	}
	
	// 定义页面属性
	// 将参数放到对象属性里
	this.totalPageCount = totalPageCount;
	this.currentPageNumber = currentPageNumber;
	this.pageCountPerGroup = pageCountPerGroup;
	this.attachArray = attachArray;
	
	// 定义回调函数引用
	this.callback = "undefined";
	
	// 获取页面中有关翻页的Dom对象并将这些对象放到翻页对象的属性中
	this.paginateContainer = ($("paginate_container")?$("paginate_container") : $(attachArray[attachArray.length - 1])); // 翻页页面对象容器
	this.paginateFirstPage = (this.paginateContainer.select("div[name='paginate_first_page']"))[0]; // 第一页对象
	this.paginatePrepage = (this.paginateContainer.select("div[name='paginate_prepage']"))[0]; // 上一页对象
	this.paginateNextpage = (this.paginateContainer.select("div[name='paginate_nextpage']"))[0]; // 下一页对象
	this.paginateLastPage = (this.paginateContainer.select("div[name='paginate_last_page']"))[0]; // 最后一页对象
	this.paginateNumbers = (this.paginateContainer.select("div[name='paginate_numbers']"))[0]; // 页码容器对象
	
	// 在“进入第一页”对象中添加监视器
	Event.observe(this.paginateFirstPage, "click", this.gotoFirstPageClickedHandler.bindAsEventListener(this));
	// 在“进入上一页”对象中添加监视器
	Event.observe(this.paginatePrepage, "click", this.gotoPrePageClickedHandler.bindAsEventListener(this));
	// 在页码容器对象中添加监听器
	Event.observe(this.paginateNumbers, "click", this.numberClickedHandler.bindAsEventListener(this));
	// 在“进入下一页”对象中添加监视器
	Event.observe(this.paginateNextpage, "click", this.gotoNextPageClickedHandler.bindAsEventListener(this));
	// 在“进入最后一页”对象中添加监视器
	Event.observe(this.paginateLastPage, "click", this.gotoLastPageClickedHandler.bindAsEventListener(this));
	
	// 构造翻页页面
	this.constructPageObjects();
	// 显示翻页页面
	this.paginateContainer.style["display"] = "block";
}

// 构造翻页的页面对象
VoxPaginate.prototype.constructPageObjects = function(){
	var startGetPageNumber; // 开始取的页码
	var endGetPageNumber; // 结束的页码
	// 计算开始取的页码
	
	var preGetPages =  Math.floor(this.pageCountPerGroup/2);
	startGetPageNumber = this.currentPageNumber-preGetPages>0?this.currentPageNumber-preGetPages:1;
	
	// 计算结束的页码
	var isPageEnough = this.totalPageCount-(startGetPageNumber+this.pageCountPerGroup-1)>0?true:false;
	if (isPageEnough) // 后面有充足的号码可以取
		endGetPageNumber = startGetPageNumber+this.pageCountPerGroup-1;
	else { // 后面没有充足的号码可取，那么使用前面的号码补足
		endGetPageNumber = this.totalPageCount;
		startGetPageNumber = this.totalPageCount-this.pageCountPerGroup>0?this.totalPageCount-this.pageCountPerGroup+1:1;
	}
	endGetPageNumber = isPageEnough?startGetPageNumber+this.pageCountPerGroup-1:this.totalPageCount;
	
	// 开始向页面页码容器中添加页码对象
	var numbersHtml = "";
	for (var i=startGetPageNumber; i<=endGetPageNumber; i=i+1){
		if (i == this.currentPageNumber) numbersHtml += "<span class='fanye02'>"+i+"</span>";
		else numbersHtml += "<a href=\"#\" class='fanye03'>"+i+"</a>";
	}
	this.paginateNumbers.innerHTML = numbersHtml;
}

// 第一页被点击事件处理器
VoxPaginate.prototype.gotoFirstPageClickedHandler = function(event){
	// 如果当前就是第一页，返回
	if (this.currentPageNumber == 1) return;
	this.gotoPageNumber(1);
}

// 上一页被点击事件处理器
VoxPaginate.prototype.gotoPrePageClickedHandler = function(event){
	// 如果当前已经是第一页，返回
	if (this.currentPageNumber == 1) return;
	this.gotoPageNumber(this.currentPageNumber-1);
}

// 页码被点击事件处理器
VoxPaginate.prototype.numberClickedHandler = function(event){
	// 获取用户点击的页码
	var clickedPageNumber = parseInt(Event.element(event).innerHTML);
	// 如果是当前页码，返回
	if (clickedPageNumber == this.currentPageNumber) return;
	this.gotoPageNumber(clickedPageNumber);
}

// 下一页被点击事件处理器
VoxPaginate.prototype.gotoNextPageClickedHandler = function(event){
	// 如果当前已经是最后一页，返回
	if (this.currentPageNumber == this.totalPageCount) return;
	this.gotoPageNumber(parseInt(this.currentPageNumber)+1);
}

// 最后一页被点击事件处理器
VoxPaginate.prototype.gotoLastPageClickedHandler = function(event){
	// 如果当前就是第一页，返回
	if (this.currentPageNumber == this.totalPageCount) return;
	this.gotoPageNumber(this.totalPageCount);
}

// 跳转到指定页面
VoxPaginate.prototype.gotoPageNumber = function(pageNumber){
	if (isNaN(pageNumber))
			return;
	this.currentPageNumber = pageNumber;
	this.constructPageObjects();
	if (typeof(this.callback) == "function") {
		this.callback(this.totalPageCount, this.currentPageNumber, this.attachArray);
	}
}

// 添加页面跳转监听器
// callback : 回调函数, 回调函数中传递的参数为(totalPageCount, currentPageNumber, attachArray)
VoxPaginate.prototype.addPageChangeCallback = function(callback){
	this.callback = callback;
}


// 检测此对象中的数字的有效性(要求为：最小为1的数字)
// numParam : 被检测的数字
// numText : 被检测数字的文本显示
VoxPaginate.prototype.checkNumberValidator = function(numParam, numText){
	if (typeof(numParam) == "undefined" // 未定义 
		|| isNaN(numParam) // 非数字
		|| numParam <= 0) // 最小为1页
		return "'"+numText+"'参数非法";
	return true;
}

// 检测传递参数有效性
// return
// 		true         全有效
//      错误说明      参数有错误
VoxPaginate.prototype.checkParameters = function(totalPageCount, currentPageNumber, pageCountPerGroup){
	var checkReturn; // 每个参数的检查返回
	// 检查总页数的有效性
	checkReturn = this.checkNumberValidator(totalPageCount, '总页数');
	if (checkReturn != true) return checkReturn;
	// 检查当前的页码的有效性
	checkReturn = this.checkNumberValidator(currentPageNumber, '当前的页码');
	if (checkReturn != true) return checkReturn;
	// 检查每组显示的页数
	checkReturn = this.checkNumberValidator(pageCountPerGroup, '每组显示的页数');
	if (checkReturn != true) return checkReturn;		
	
	return true;
}
/** ===================================================================== **/

/**
 * 一个常量对象
 */
var constants = {
	province : [
			"北京市",
			"天津市",
			"河北省",
			"山西省",
			"内蒙古自治区",
			"辽宁省",
			"吉林省",
			"黑龙江省",
			"上海市",
			"江苏省",
			"浙江省",
			"安徽省",
			"福建省",
			"江西省",
			"山东省",
			"河南省",
			"湖北省",
			"湖南省",
			"广东省",
			"广西壮族自治区",
			"海南省",
			"重庆市",
			"四川省",
			"贵州省",
			"云南省",
			"西藏自治区",
			"陕西省",
			"甘肃省",
			"青海省",
			"宁夏回族自治区",
			"新疆维吾尔自治区",
			"香港特别行政区",
			"澳门特别行政区",
			"台湾省"
			],
			
	pcity : [
			[ "北京市" ],
			[ "天津市" ],
			[ 
			  	"石家庄市", "张家口市", "承德市", "秦皇岛市", "唐山市", 
			  	"廊坊市", "保定市", "衡水市", "沧州市","邢台市", "邯郸市" 
			],
			[ 
			  	"太原市", "朔州市", "大同市", "阳泉市", "长治市", "晋城市", 
			  	"忻州市", "晋中市", "临汾市","吕梁市", "运城市" 
			],
			[ 
			  	"呼和浩特市", "包头市", "乌海市", "赤峰市", "通辽市", "呼伦贝尔市", 
			  	"鄂尔多斯市", "乌兰察布市","巴彦淖尔市", "兴安盟", "锡林郭勒盟", "阿拉善盟" 
			],
			[ 
			  	"沈阳市", "朝阳市", "阜新市", "铁岭市", "抚顺市", "本溪市", "辽阳市", 
			  	"鞍山市", "丹东市","大连市", "营口市", "盘锦市", "锦州市", "葫芦岛市" 
			],
			[ 
			  	"长春市", "白城市", "松原市", "吉林市", "四平市", "辽源市", "通化市", 
			  	"白山市","延边朝鲜族自治州" 
			],
			[ 
			  	"哈尔滨市", "七台河市", "齐齐哈尔市", "黑河市", "大庆市", "鹤岗市", "伊春市", "佳木斯市",
				"双鸭山市", "鸡西市", "牡丹江市", "绥化市", "大兴安岭地区(加格达奇)" 
			],
			[ "上海市" ],
			[ 
			  	"南京市", "徐州市", "连云港市", "宿迁市", "淮安市", "盐城市", 
			  	"扬州市", "泰州市", "南通市","镇江市", "常州市", "无锡市", "苏州市" 
			],
			[ 
			  	"杭州市", "湖州市", "嘉兴市", "舟山市", "宁波市", "绍兴市", "衢州市", 
			  	"金华市", "台州市","温州市", "丽水市" 
			],
			[ 
			  	"合肥市", "宿州市", "淮北市", "亳州市", "阜阳市", "蚌埠市", "淮南市", 
			  	"滁州市", "马鞍山市","芜湖市", "铜陵市", "安庆市", "黄山市", "六安市", 
			  	"巢湖市", "池州市", "宣城市" 
			],
			[ "福州市", "南平市", "莆田市", "三明市", "泉州市", "厦门市", "漳州市", "龙岩市", "宁德市" ],
			[ 
			  	"南昌市", "九江市", "景德镇市", "鹰潭市", "新余市", "萍乡市", "赣州市", 
			  	"上饶市", "抚州市","宜春市", "吉安市" 
			],
			[ 
			  	"济南市", "聊城市", "德州市", "东营市", "淄博市", "潍坊市", "烟台市", "威海市", "青岛市",
				"日照市", "临沂市", "枣庄市", "济宁市", "泰安市", "莱芜市", "滨州市", "菏泽市" 
			],
			[ 
			  	"郑州市", "三门峡市", "洛阳市", "焦作市", "新乡市", "鹤壁市", "安阳市", "濮阳市", "开封市",
				"商丘市", "许昌市", "漯河市", "平顶山市", "南阳市", "信阳市", "周口市", "驻马店市",
				"省直辖县级行政单位" 
			],
			[ 
			  	"武汉市", "十堰市", "襄樊市", "荆门市", "孝感市", "黄冈市", "鄂州市", "黄石市", "咸宁市",
				"荆州市", "宜昌市", "随州市", "省直辖县级行政单位", "恩施土家族苗族自治州" 
			],
			[ 
			  	"长沙市", "张家界市", "常德市", "益阳市", "岳阳市", "株洲市", "湘潭市", "衡阳市", "郴州市",
				"永州市", "邵阳市", "怀化市", "娄底市", "湘西土家族苗族自治州" 
			],
			[ 
			  	"广州市", "清远市", "韶关市", "河源市", "梅州市", "潮州市", "汕头市", "揭阳市", "汕尾市",
				"惠州市", "东莞市", "深圳市", "珠海市", "中山市", "江门市", "佛山市", "肇庆市",
				"云浮市", "阳江市", "茂名市", "湛江市" 
			],
			[ 
			  	"南宁市", "桂林市", "柳州市", "梧州市", "贵港市", "玉林市", "钦州市", "北海市", "防城港市",
				"崇左市", "百色市", "河池市", "来宾市", "贺州市" 
			],
			[ "海口市", "三亚市", "省直辖行政单位" ],
			[ "重庆市" ],
			[ 
			  	"成都市", "广元市", "绵阳市", "德阳市", "南充市", "广安市", "遂宁市", "内江市", "乐山市",
				"自贡市", "泸州市", "宜宾市", "攀枝花市", "巴中市", "达州市", "资阳市", "眉山市",
				"雅安市", "阿坝藏族羌族自治州", "甘孜藏族自治州", "凉山彝族自治州" 
			],
			[ 
			  	"贵阳市", "六盘水市", "遵义市", "安顺市", "毕节地区", "铜仁地区", "黔东南苗族侗族自治州",
				"黔南布依族苗族自治州", "黔西南布依族苗族自治州" 
			],
			[ 
			  	"昆明市", "曲靖市", "玉溪市", "保山市", "昭通市", "丽江市", "思茅市", "临沧市",
				"德宏傣族景颇族自治州", "怒江傈僳族自治州(泸水县六库镇)", "迪庆藏族自治州", "大理白族自治州",
				"楚雄彝族自治州", "红河哈尼族彝族自治州", "文山壮族苗族自治州", "西双版纳傣族自治州" 
			],
			[ "拉萨市", "那曲地区", "昌都地区", "林芝地区(林芝县八一镇)", "山南地区", "日喀则地区", "阿里地区" ],
			[ 
			  	"西安市", "延安市", "铜川市", "渭南市", "咸阳市", "宝鸡市", "汉中市", "榆林市", "安康市",
				"商洛市" 
			],
			[ 
			  	"兰州市", "嘉峪关市 ", "金昌市", " 白银市", "天水市", "武威市", "酒泉市", "张掖市", "庆阳市",
				"平凉市", "定西市", "陇南市", "临夏回族自治州", "甘南藏族自治州" 
			],
			[ 
			  	"西宁市", "海东地区", "海北藏族自治州(海晏县西海镇)", "海南藏族自治州", "黄南藏族自治州",
				"果洛藏族自治州", "玉树藏族自治州", "海西蒙古族藏族自治州" 
			],
			[ "银川市", "石嘴山市", "吴忠市", "固原市", "中卫市" ],
			[ 
			  	"乌鲁木齐市", "克拉玛依市", "自治区直辖县级行政单位", "喀什地区", "阿克苏地区", "和田地区",
				"吐鲁番地区", "哈密地区", "克孜勒苏柯尔克孜自治州", "博尔塔拉蒙古自治州", "昌吉回族自治州",
				"巴音郭楞蒙古自治州", "伊犁哈萨克自治州", "塔城地区", "阿勒泰地区" 
			], 
			[ "香港特别行政区" ],
			[ "澳门特别行政区" ], 
			[ "台湾省" ]
			],
	privacy : ["公开","保密","好友"],
	gender : ["男","女"],
	month : ["01","02","03","04","05","06","07","08","09","10","11","12"],
	wordLevel : ["3000词以内","5000词以内","7000词以内","7000词"],
	oralLevel : ["较差","普通","良好","优秀"],
	url : function (){ return (getAbsolute() + getServName());}
}

/**
 * 是否登录
 */
function f_isLogin(){
	var url = constants.url() + "/user/isLogin.action";
	var isLogin = false;
	var callBack = function(request){
		var status = request.responseText;
		if(status == 'success'){
			isLogin = true;
		}
	};
	gCommonAsynRequest(url,'','',callBack,false);
	return isLogin;
}


function f_isSchool(domainNames){
	alert(domainNames);
	var names = domainNames.split(";");
	var isSchool = false;
	for (var i=0;i<names.length; i++) {
		if (names[i] != "" && names[i] == "校园卡") {
			isSchool = true;
		} else {
			isSchool = false;
			break;
		}
	}
	alert(names);
	alert(isSchool);
	return isSchool;
}


/** 
 * 学习提示 
 * o : 激发提示的对象
 * right_offset : 基于激发对象的向右偏移量(基于对象的页面top_right)
 * bottom_offset : 基于激发对象的向下偏移量(基于对象的页面top_right)
 * content : 显示的内容
 */
function openTip(o, right_offset, bottom_offset, content){
	var oWidth = $(o).getDimensions().width;
	try {
		Element.clonePosition($("tipDialog"), $(o), {setWidth: false, setHeight: false, offsetLeft: oWidth+right_offset, offsetTop: bottom_offset});	
		$("tipContent").innerHTML = content;
		$("tipDialog").setStyle({'display': "block"});
	} catch(e){openTip(o, right_offset, bottom_offset, content)}
}

function closeTip(){
	$("tipDialog").setStyle({'display': "none"});
}

var serverVersion = null;
if(top.serverVersion == null){
	top.serverVersion = (function(){
		var url = constants.url() + "/common/getActivexVersion.action";
		gCommonAsynRequest(url,'','',function(response){
			var sv = response.responseText;
			var str = "";
			for(var i = 0 ; i < sv.length ; i++){
				var c = sv.charAt(i);
				str += c + ",";
			}
			serverVersion = str.replace(/,$/g,'');
		},false);
		return (serverVersion || "1,0,3,1");
		
	})();
	
}
serverVersion = top.serverVersion;

var login = null;
if(top.login == null){
	top.login = f_isLogin();
}
login = top.login;

/**
 * 定位到登录页面
 */
function gotoLoginPage(href){
	top.window.location.href = constants.url() + "/user/_login.action?back="+href;
}