/******************
*前端简单判断登陆状
*
******************/
function isLogon(){
   return getQQNum()!=0;
}

function getCookie(name){
	var r=new RegExp("(^|;|\\s+)"+name+"=([^;]*)(;|$)");
	var m=document.cookie.match(r);
	return(!m?"":m[2]);
}
/**
 * 获取QQ号
 *
 * @param is_community, 是否要求社区登录, 默认为空
 */
function getQQNum(is_community){
	var zz_uin = getCookie("zzpaneluin");
	var cookie_uin = getCookie("uin");
	var uin = cookie_uin.replace(re = /^o(0)*/,'');
	if(!c_qq(zz_uin)){
		document.cookie = "zzpaneluin=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=qq.com";
		document.cookie = "zzpanelkey=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=qq.com";
		zz_uin = 0;
	}
	if(!c_qq(uin)){
		document.cookie = "uin=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=qq.com";
		document.cookie = "skey=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=qq.com";
		uin = 0;
	}
	if(zz_uin==0){
		return uin;
	}
	if(uin==0){
		return (!!is_community) ? 0 : zz_uin;
	}
	if(zz_uin!=uin){
		document.cookie = "zzpaneluin=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=qq.com";
		document.cookie = "zzpanelkey=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=qq.com";
		document.cookie = "uin=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=qq.com";
		document.cookie = "skey=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=qq.com";
		return 0;
	}
	return uin;
}
function delLogOut(){
	document.cookie = "uin=; skey=; path=/; domain=qq.com";
	document.cookie = "zzpaneluin=; zzpanelkey=; icokeLogin=; path=/; domain=qq.com";
	document.cookie = "nickname=; path=/; domain=qq.com";
}

/******************************************
*公共注册网页验证代码
*主要属性说明: 
	data_type:数据类型，每种类型有对应的方法进行验证
	is_null:是否可以为空属性
	tips:验证出错的提示语言
*
********************************************/

/**
* onresize事件处理代码
* onresize 事件会在窗口或框架被调整大小时发生。
* @param {Number} curPage 当前选择页
* @return:
	页码的html代码
*/
function documentOnResize(){
	window.status=document.body.clientWidth+":"+document.body.clientHeight;
	if(document.body.oldClientWidth == undefined || document.body.oldClientHeight==undefined){
		document.body.oldClientWidth =document.body.clientWidth;
		document.body.oldClientHeight=document.body.clientHeight;
		initDocCheck();
		return;
	}

	if(Math.abs(document.body.clientWidth-document.body.oldClientWidth) > 5 || Math.abs(document.body.clientHeight-document.body.oldClientHeight) > 5){
		document.body.oldClientWidth =document.body.clientWidth;
		document.body.oldClientHeight=document.body.clientHeight;
		initDocCheck();
		return;
	}
	return;
}
	
/**
* 表单按约定的规则增加事件处理
*/
function initDocCheck(){
	//加入简单的锁机制，有效的防止过多的窗口变化事件造成的ie僵死的情况
	if (document.body.$lock != undefined && document.body.$lock == true){
	  		return;
	}
	
	document.body.$lock = true;
	//input标签有 text 文本框 radio 单选框 checkbox 复选框 file 文件 image 图像 password 密码框 button 普通按钮 submit 提交按钮 reset 重置按钮 hidden 隐藏域 
	var iList=document.getElementsByTagName("input");
	for(var i=0;i<iList.length;i++){
		var datatype=iList[i].getAttribute("data_type");
		if(!datatype) continue;
		if(datatype!="multiselect" && datatype!="checkbox")	{
			if(window.attachEvent){
				iList[i].attachEvent('onkeyup',checkAdapter);
				iList[i].attachEvent('onfocus',checkAdapter);
				iList[i].attachEvent('onchange',checkAdapter);
			}else{
				iList[i].addEventListener('keyup',checkAdapter,false);
				iList[i].addEventListener('focus',checkAdapter,false);
				iList[i].addEventListener('change',checkAdapter,false);
			}
		    checkElement(iList[i]);
		 }else if(datatype=="checkbox") {
			if(window.attachEvent){
				iList[i].attachEvent('onclick',checkAdapter);
			}else{
				iList[i].addEventListener('click',checkAdapter,false);
			}
			checkElement(iList[i]);
		 }
		 if(datatype=="upload") {
			if(window.attachEvent){
				iList[i].attachEvent('onchange',checkAdapter);
			}else{
				iList[i].addEventListener('change',checkAdapter,false);
			}
		}
	}
	var aList=document.getElementsByTagName("textarea");
	for(var i=0;i<aList.length;i++) {
		var datatype=aList[i].getAttribute("data_type");
		if(!datatype) {
			if(window.attachEvent){
				aList[i].attachEvent('onkeyup',checkAdapter);
				aList[i].attachEvent('onfocus',checkAdapter);
			}else{
				aList[i].addEventListener('keyup',checkAdapter,false);
				aList[i].addEventListener('focus',checkAdapter,false);
			}
			checkElement(aList[i]);
		}
	}

	var sList=document.getElementsByTagName("select");
	 for(var i=0;i<sList.length;i++) {
		var datatype=sList[i].getAttribute("data_type");
		if(datatype=="select" || datatype=="multiselect" || datatype=="province" || datatype=="city"){
			if(window.attachEvent){
				sList[i].attachEvent('onchange',checkAdapter);
			}else{
				sList[i].addEventListener('change',checkAdapter,false);
			}
			checkElement(sList[i]);
			
		
		}
	 }

	 var formList=document.getElementsByTagName("form");
	 for(var i=0;i<formList.length;i++) {
		 if ( formList[i].bindSubmitFlag == true ) {
			 //防止重复 绑定 submit 事件
			 continue;
		 }
		 var needChecked=formList[i].getAttribute("needChecked");
		 if(needChecked=="true") {
			 if(window.attachEvent){
				//设置 绑定结果
				formList[i].bindSubmitFlag=formList[i].attachEvent('onsubmit',formCheckAdapter);				
			 }else{
				formList[i].bindSubmitFlag=formList[i].addEventListener('submit',formCheckAdapter,false);
			 }
		 }
	 }
   	document.body.$lock = false;
}

/**
* 表单单元捆绑函数
*/
function checkAdapter(pEvt){
	var e=getEventTarget(pEvt);
	checkElement(e);
}

/**
* form捆绑函数
* form提交前有效验证处理函数
*/
function formCheckAdapter(pEvt){
	var e=getEventTarget(pEvt);
	var list=e.elements;

	for(var i=0;i<list.length;i++){
		var datatype=list[i].getAttribute("data_type");
		if(!datatype) continue;
		if(checkElement(list[i]) == false){
			var tips=list[i].getAttribute("tips");
			if(tips){
				showErr(tips);
			}else{
				showErr('表单信息填写有错！');
			}
			// list[i].focus();
			return false;
		}
	}
	
	return true;
}
/**
* form手动调用验证函数
* form提交前有效验证处理函数
*/
function mformCheckAdapter(id){
	var e=document.getElementById(id);
	var list=e.elements;

	for(var i=0;i<list.length;i++){
		var datatype=list[i].getAttribute("data_type");
		if(!datatype) continue;
		if(checkElement(list[i]) == false){		
			var tips=list[i].getAttribute("tips");
			if(tips){
				showErr(tips);
			}else{
				showErr('表单信息填写有错！');
			}
			//list[i].focus();
			return false;
		}
	}
	
	return true;
}


/**
* 出错处理函数(当验证出错时作出相应的提示)
* @param {Object} e 出错的表单单元
* @param {String} e 出错的文字
* @return:
	none
*/

//有一个bug 以后得解决
function showFormatInfo(e,msg){
	if(e.tagName.toLowerCase() == "input" && e.type == "checkbox"){
		var l=document.getElementsByName(e.name);
		var le=document.getElementById(e.name+"_"+l.length);
		if(le)	{
			e=le;
		}
	}
	
	if(!(e.info==undefined || e.info==null)){
		e.info.innerHTML="";
		//removeFormatInfo(e);
	}
	
	if(e.info==undefined || e.info==null){
		e.info=document.createElement("div");
		document.body.appendChild(e.info);
		e.info.style.position="absolute";
		e.info.style.fontSize="13px";
		e.info.style.color="#FF0000";
		e.info.style.zIndex=100;
	}
	
	var p=getPageOffset(e);
	e.info.style.top=p.y+"px";
	e.info.style.left=p.x+e.offsetWidth+"px";
	e.info.innerHTML=msg;
}

function getPageOffset(element){
  var left=0,top=0;
  do{
    top+=element.offsetTop || 0;
    left+=element.offsetLeft || 0;
    element=element.offsetParent;
  }while(element);
  return {x:left,y:top};
}

function removeFormatInfo(e){
	if(e.tagName.toLowerCase() == "input" && e.type == "checkbox"){
	   var l=document.getElementsByName(e.name);
		 var le=document.getElementById(e.name+"_"+l.length);
		 if(le){
			 e=le;
		 }
	}

	if(e.info==undefined || e.info==null) return;
	e.info.innerHTML="";
	//document.body.removeChild(e.info);
  //e.info=null;
}
/**************end********************/

/**
* 获得表单单元的值
* @param {Object} e 表单单元对象
* @return:
	空值，单值，或者数组
*/

function getValueOfElement(e){
	//input标签有 text 文本框 radio 单选框 checkbox 复选框 file 文件 image 图像 password 密码框 button 普通按钮 submit 提交按钮 reset 重置按钮 hidden 隐藏域 
	if((e.tagName.toLowerCase()=="input") && ((e.type.toLowerCase()=="text") || (e.type.toLowerCase()=="file")|| (e.type.toLowerCase()=="password")|| (e.type.toLowerCase()=="hidden"))){		
	   return e.value;
	}else if(e.tagName.toLowerCase()=="textarea"){		
	   return e.value;
	}else if((e.tagName.toLowerCase()=="input") && (e.type.toLowerCase()=="checkbox")){
		var list=new Array();
		var l=document.getElementsByName(e.name);
		var j=0;
		for(var i=0; i<l.length;i++){
			if(l[i].checked){
				list[j]=l[i].value;
				j++;
			}
		}
		return list;
	}else if((e.tagName.toLowerCase()=="select") && e.multiple){
		var list=new Array();
		var j=0;
		for(var i=0; i<e.options.length;i++){
			if(e.options[i].selected){
				list[j]=e.options[i].value;
				j++;
			}
		}
		return list;
	}else if((e.tagName.toLowerCase()=="select") && !e.multiple){
		if (e.selectedIndex>=0)	{
			return e.options[e.selectedIndex].value;
		}
	}

  	return "";
}
/**
* 设置表单单元的值
* @param {Object} e 表单单元对象
* @param {String} v 表单单元值
* @return:
	空值，单值，或者数组
*/
function setValueOfElement(e,v){
	if((e.tagName.toLowerCase()=="input") && ((e.type.toLowerCase()=="text")||((e.type.toLowerCase()=="password"))))	{
		e.value=v;
	}else if(e.tagName.toLowerCase()=="textarea")	{
		e.innerText=v;
	}
}


/**
* 得到发生的事件
*/
function getCurrentEvent(evt){
   return (!evt)?window.event:evt;
}

/**
* 得到发生事件的对象
*/
function getEventTarget(evt){
	evt=((!evt)?window.event:evt);
	return evt.target || event.srcElement;
}


function isNULL(e){
  if(e==undefined || e==null) return true;
  return false;
}

function getFileType(f){
	if(f==undefined || f==null) return '';
	var idx=f.lastIndexOf(".");
	if(idx==-1){
	  return '';
	}
	return f.substring(idx+1);
}
/**************
*所要的接口函数
**************/
/****************字符串处理函数  开始***********/
String.prototype.lTrim=function () {
  return this.replace(/^\s*/, "");
}

String.prototype.rTrim=function () {
  return this.replace(/\s*$/, "");
}

String.prototype.trim=function () {
  return this.rTrim().lTrim();
}

//取得字符串实际长度(汉字算两个字节,英文字母算一个字节)
String.prototype.getLength=function(){
  return this.replace(/[^\x00-\xff]/gi,'xx').length;
}
/****************字符串处理函数  结束***********/
/**
 * 较验QQ码码
 *
 * @param qq mixed
 * @return bool
 */
function c_qq(qq){
	var reQQ= /^[1-9]\d{4,10}$/;
	return reQQ.test(qq);
}
/********************************************/

/**
* 统一出错显示函数
*/
function showErr(msg){
	 alert(msg);
}

/****************************
*类型出错及对应类型的处理函数
****************************/
/**
* 表单单元根据data_type等约定进行检查
* @param {Object} e 表单单元对象
* @return:
	true:有效 false:无效
*/
function checkElement(e){
	if(e.getAttribute == undefined){
		return true;
	}
	
	var dataType=e.getAttribute("data_type");
	var bempty=false;
	var v=getValueOfElement(e);
	if((v=="")||(typeof(v)=="object" && v.length==0)){
		bempty=true;
	}
	//是否可以为空
	var isnull=e.getAttribute("is_null");

	//当对象的数据为空时
	if(bempty){
		if(isnull=="false"){	//当不可以为空时要提示
			showFormatInfo(e,"*");
			//showFormatInfo(e,"");
			return false;
		}else if(isnull=="true"){//当可以为空时
			removeFormatInfo(e);
		}
		return true;
	}
	//当有数据时要进行相应的检查
//函数映射表
	var dataFunc={string:checkString,word:checkWord,number:checkNumber,zip:checkZip,email:checkEmail,mobile:checkMobilePhone,phone:checkPhone,idcard:checkIdCard,
		time:checkTime,datetime:checkDateTime,date:checkDate,qq:checkQQ,ip:checkIP,mac:checkMAC,chinese:checkOnlyChinese,english:checkOnlyEnglish,
		url:checkURL,blog:checkQzoneBlogURL,checkbox:checkCheckBox,multiselect:checkMutiselect,upload:checkUpload,select:checkSelect,province:checkProvince,city:checkCity};
	
	var ret="";
	dataFunc[dataType]?(ret=dataFunc[dataType](e,v)):(ret="");
	(ret==undefined || ret==null || ret=="")?removeFormatInfo(e):showFormatInfo(e,ret);

	return (ret==undefined || ret==null || ret=="")?true:false;
}
/**************************对应的处理函数 check开始*****************************************************/
function checkUpload(e,v){
	var file_type=e.getAttribute("file_type");
	if(file_type==undefined || file_type=="") return;
	var types=file_type.split("|");

	if(types.length<=0){
		return;
	}
	
	var type=getFileType(v).trim().toUpperCase();
	var isSupport=false;
	for(var i=0; i<types.length;i++){
		if(type==types[i].trim().toUpperCase()){
			isSupport=true;
			break;
		}
	}
	var preview_id=e.getAttribute("preview_id");
	if(preview_id!=undefined && preview_id != null){
		var p=document.getElementById(preview_id);
		p.src=(isSupport?v:"");
	}

	if(isSupport==false){
		return "支持类型:"+file_type.toUpperCase()+".目前类型:"+type;
	}
}


function checkProvince(e,v){
	v=parseInt(v);
	if(v==0){
		 return "*";
	}

}

function checkCity(e,v){
	v=parseInt(v);
	if((v==0)||(v%100==0)){
		 return "*";
	}
}
///////////////////////////

function checkSelect(e,v){
	var null_value=e.getAttribute("null_value");
	if(v == undefined || v == "" || v == null_value)  return "*";
}

function checkMutiselect(e,v){
  var min_selected=e.getAttribute("min_selected");
  if(min_selected!=undefined && (v=="" || v.length<min_selected))  return "最少选择"+min_selected+"项";

  var max_selected=e.getAttribute("max_selected");
  if(max_selected!=undefined && (v=="" || v.length>max_selected))  return "最多选择"+max_selected+"项";
}

function checkCheckBox(e,v){
  var min_checked=e.getAttribute("min_checked");
  if(min_checked!=undefined && (v=="" || v.length<min_checked))  return "最少选择"+min_checked+"项";

  var max_checked=e.getAttribute("max_checked");
  if(max_checked!=undefined && (v=="" || v.length>max_checked))  return "最多选择"+max_checked+"项";
}
function checkNumber(e,v){
  var reInt=new RegExp("^[-\+]?[1-9]\\d*$");
  if(!reInt.test(v)) return "只能输入整数";
  var minValue=e.getAttribute("min_value");
  if(minValue!=undefined && parseInt(v)<parseInt(minValue)) return "输入数不能<"+minValue+"";;
  var maxValue=e.getAttribute("max_value");
  if(maxValue!=undefined && parseInt(v)>parseInt(maxValue)) return "输入数不能>"+maxValue+"";

  var minlength=e.getAttribute("min_length");
  if(minlength!=undefined && v.getLength()<minlength)  return "最小长度为"+minlength+"字符";

  var maxlength=e.getAttribute("max_length");
  if(maxlength!=undefined && v.getLength()>maxlength)  return "最大长度为"+maxlength+"字符";
}

//实际长度
function checkString(e,v){
  var minlength=e.getAttribute("min_length");
  if(minlength!=undefined && v.getLength()<minlength)  return "最小长度为"+minlength+"字符";

  var maxlength=e.getAttribute("max_length");
  if(maxlength!=undefined && v.getLength()>maxlength)  return "最大长度为"+maxlength+"字符";
}

function checkWord(e,v){
  var minlength=e.getAttribute("min_length");
  if(minlength!=undefined && v.length<minlength)  return "最小长度为"+minlength+"字符";

  var maxlength=e.getAttribute("max_length");
  if(maxlength!=undefined && v.length>maxlength)  return "最大长度为"+maxlength+"字符";	
}

function checkZip(e,v){
  var reZip=/^[0-9]\d{5}$/;
  return reZip.test(v)?"":"邮编不正确";
}

function checkEmail(e,v){
  var reEmail= /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
  if(!reEmail.test(v)) return "Email格式出错";

  var minlength=e.getAttribute("min_length");
  if(minlength!=undefined && v.getLength()<minlength)  return "最小长度为"+minlength+"字符";

  var maxlength=e.getAttribute("max_length");
  if(maxlength!=undefined && v.getLength()>maxlength)  return "最大长度为"+maxlength+"字符";
}

function checkMobilePhone(e,v){
  var reMP=/^((\(\d{2,3}\))|(\d{3}\-))?1[35]\d{9}$/;
  return reMP.test(v)?"":"手机号码不正确";
}

function checkPhone(e,v){
  var rePhone=/^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/;
  return rePhone.test(v)?"":"格式:区号-电话号码-分机号,区号和分机号可以不填";
}

function checkIdCard(e,v){
 var reID=/^\d{15}(\d{2}[xX0-9])?$/;
 return reID.test(v)?"":"身份证号不正确";
}

function checkTime(e,v){
 var reTime=/^((0?[0-9])|(1[0-9])|(2[0-3])):([0-5][0-9])(:[0-5][0-9])?$/;
 return reTime.test(v)?"":"时间格式不正确";
}
function checkDateTime(e,v){
   var reDateTime=/^[1-9]\d{3}-((0?[1-9])|(10|11|12))-((0?[1-9])|([1-2][0-9])|(3[0-1])) ((0?[0-9])|(1[0-9])|(2[0-3])):([0-5][0-9])(:[0-5][0-9])?$/;
   return reDateTime.test(v)?"":"日期时间格式不正确";
}

function checkDate(e,v)
{
  var reDate=/^[1-9]\d{3}-((0?[1-9])|(10|11|12))-((0?[1-9])|([1-2][0-9])|(3[0-1]))$/;
  return reDate.test(v)?"":"日期格式不正确";
}

function checkQQ(e,v)
{
  var reQQ= /^[1-9]\d{4,11}$/;
  return reQQ.test(v)?"":"QQ格式不正确";
}

function checkIP(e,v)
{
  var reIPV4=/^(\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])$/;
  var reIPV6=/^([A-Fa-f0-9]{1,4}):([A-Fa-f0-9]{1,4}):([A-Fa-f0-9]{1,4}):([A-Fa-f0-9]{1,4}):([A-Fa-f0-9]{1,4}):([A-Fa-f0-9]{1,4}):([A-Fa-f0-9]{1,4}):([A-Fa-f0-9]{1,4})$/;
  return (reIPV4.test(v) || reIPV6.test(v))?"":"IP格式不正确";
}

function checkMAC(e,v)
{
  var reMAC=/^([A-Fa-f0-9]{2}):([A-Fa-f0-9]{2}):([A-Fa-f0-9]{2}):([A-Fa-f0-9]{2}):([A-Fa-f0-9]{2}):([A-Fa-f0-9]{2})$/;
  return (reMAC.test(v))?"":"MAC格式不正确";
}

function checkOnlyChinese(e,v)
{
  var reChn=/^[\u0391-\uFFE5]+$/;
  if(!reChn.test(v)) return "只能输入中文字符";
  var length=e.getAttribute("max_length");

	var minlength=e.getAttribute("min_length");
  if(minlength!=undefined && v.getLength()<minlength)  return "最小长度为"+minlength+"汉字";

  var maxlength=e.getAttribute("max_length");
  if(maxlength!=undefined && v.getLength()>maxlength)  return "最大长度为"+maxlength+"汉字";
}

function checkOnlyEnglish(e,v)
{
  var reEng=/^[A-Za-z]+$/;
  if(!reEng.test(v)) return "只能输入英文字符";
  var length=e.getAttribute("max_length");
  if(length!=undefined && v.length>length)  return "超过最大长度"+length+"字符";

	var minlength=e.getAttribute("min_length");
  if(minlength!=undefined && v.getLength()<minlength)  return "最小长度为"+minlength+"字符";

  var maxlength=e.getAttribute("max_length");
  if(maxlength!=undefined && v.getLength()>maxlength)  return "最大长度为"+maxlength+"字符";
}

function checkURL(e,v)
{
	var reUrl=/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^\"\"])*$/;
	if(!reUrl.test(v)) return "url格式不正确";
	var length=e.getAttribute("max_length");
	var minlength=e.getAttribute("min_length");
	if(minlength!=undefined && v.getLength()<minlength)  return "最小长度为"+minlength+"字符";
	var maxlength=e.getAttribute("max_length");
	if(maxlength!=undefined && v.getLength()>maxlength)  return "最大长度为"+maxlength+"字符";
}

function checkQzoneBlogURL(e,v){
  var qq=getQQNum();
	if(qq<=10000)
	{
		return "请先登陆";
	}
  var reUrl=/^http:\/\/user\.qzone\.qq\.com\/([1-9][0-9]{4,})\/blog\/[0-9]+$/;
  var str = /^http:\/\/([1-9][0-9]{4,})\.qzone\.qq\.com\/blog\/[0-9]+$/;
  var reUrl2=new RegExp(str);
  if(!reUrl.test(v) && !reUrl2.test(v)) return " 日志地址不正确";
  var qqResult=v.match(reUrl);
  var qqResult2=v.match(reUrl2);
	if(!((qqResult==null || qqResult[1]==undefined) && qq==qqResult2[1]) && !((qqResult2==null || qqResult2[1]==undefined) && qq==qqResult[1])) return "不是当前用户的日志";

	var length=e.getAttribute("max_length");

	var minlength=e.getAttribute("min_length");
  if(minlength!=undefined && v.getLength()<minlength)  return "最小长度为"+minlength+"字符";

  var maxlength=e.getAttribute("max_length");
  if(maxlength!=undefined && v.getLength()>maxlength)  return "最大长度为"+maxlength+"字符";
}

/**************************check结束*****************************************************/