var id;
var optTag=0;
var errorMsgs="";			//客户端错误信息
var spanId="error";			//客户端error Span 的id属性值
var spanCss="errors";		//客户端error Span 的class属性值
var errorsId="errors";		//显示服务器返回的错误信息的spanId
var msgsId="msgs";			//显示服务器返回的消息信息的spanId

//-----------提示信息-------------------
var hint_isDelete="确定执行此操作？？";
var hint_deleteOnServer="确定从数据库里删除这一选项吗？";

//---------错误信息------------------
var unsupport="错误：对象不存在！<br/>";
var tooMore="错误：选择的记录超过一条！<br/>";
var noChoose="错误：未选择记录！<br/>";
var codeBlank="错误：代码为空！<br/>";
var nameBlank="错误：名称为空！<br/>";
var roleBlank="错误：角色未选！<br/>";
var typeBlank="错误：类别未选！<br/>";
var fileBlank="错误：没有选择文件！<br/>";
var titleBlank="错误：标题为空！<br/>";
var attitudeOverLength="错误：审核意见超过300字符！<br/>";
var contentBlank="错误：信息内容为空！<br/>";
var readerBlank="错误：没有选择阅读对象！<br/>";
var callerBlank="错误：没有选择访问对象！<br/>";
var different="错误：类型不同！<br/>";
var optionBlank="错误：选项描述为空！<br/>";
var optionBlankTeam="错误：请选择特定阅读组！<br/>";
var noAttitude="错误：没有输入意见！<br/>";

//------------utils function define-----------------
String.prototype.trim = function()
{
    return this.replace(/(^[\s]*)|([\s]* $)/g, "");
}
String.prototype.lTrim = function()
{
    return this.replace(/(^[\s]*)/g, "");
}
String.prototype.rTrim = function()
{
    return this.replace(/([\s]* $)/g, "");
}
function isEmpty(str){
	if(str.trim() == "")
        return true;
    else
        return false;
}

/*-------------------
是否超过最大长度
---------------------*/
function isOverLength(str,maxLength){
	if(str.replace(/[^\x00-\xff]/g, "~~~").length>maxLength){
		return true;
	}else
		return false;
}

/*-------------------
交换两个select里的值
---------------------*/
function selectChange(src,des){
	//alert(src+"dddd"+des);
	  var srcLength = src.length;
	  var oindex = 0;
	  for(j=0;j<srcLength;j++){
	  	if(src.options[j].selected){
	  		var olength=des.length;
	  		oindex = j;
	  		if(oindex >= 0){
	    		var otext=src.options[oindex].text;
				var ovalue=src.options[oindex].value;
	
				var tag=0;
	
				for(i=0; i<olength; i++){
		  			if(otext==des.options[i].text){
		    			tag=1;
						break;
		  			}
				}
				if(tag==0){
		  			des.options[olength]=new Option(otext,olength);
		  			des.options[olength].value=ovalue;
				}
	  		}
	 	}
	  }
	  
	  for(j=srcLength-1;j>=0;j--){
	    if(src.options[j].selected) src.options[j]=null;
	  }
	  src.selectedIndex=-1;
}

/*******************
*form:要提交的form表单
*url：要链接的地址
*target:目标窗口
********************/
function doSubmit(form,url,target){	
	if(target==null)
		document.getElementById(form).target="_self";
	else
		document.getElementById(form).target=target;
			
	document.getElementById(form).action=url;
	document.getElementById(form).submit();
}

/**********************
*说明：选择多选列表里所有的值
*selectName:多选列表的名字
***********************/
function selectAll(selectName){
	var length=selectName.length;
	for(i=0;i<length;i++){
		selectName.options[i].selected=true;
	}
}
/**************
删除客户端的一个DHTML元素
uid:客户端元素的ID
***************/
function delOpt(uid){
	document.getElementById(uid).removeNode(true);
}

/*********************
说明：检测页面的问题选项的类型是否唯一
rId1:单选类型的id
rId2：多选类型的id
返回值：true类型相同   false类型不相同
**********************/
function checkType(rId1,rId2){
	var rObj1=document.getElementById(rId1);
	var rObj2=document.getElementById(rId2);
	var type_radio=document.getElementsByName("type_radio");
	var type_checkbox=document.getElementsByName("type_checkbox");
	
	if(rObj1.checked==true){
		if(type_checkbox.length!=0){
			errorMsgs+=different;
		}
	}
	if(rObj2.checked==true){
		if(type_radio.length!=0){
			errorMsgs+=different;
		}
	}
}

/*********************
*说明：在页面里插入选项
*tagId1、tagId2:选项类型标识
*divId:div对象标识
*serverName:Question的name,用于服务器端
*********************/
function insertOpt(tagId1,tagId2,inputId,divId,serverName){
	clearErrors();
	checkType(tagId1,tagId2);
	
	var tagObj1=document.getElementById(tagId1);
	var tagObj2=document.getElementById(tagId2);
	var divObj=document.getElementById(divId);
	var inputObj=document.getElementById(inputId);

	if(isEmpty(inputObj.value)){
		errorMsgs+=optionBlank;
	}
		
	if(tagObj1.checked==false&&tagObj2.checked==false){
		errorMsgs+=typeBlank;
	}
	
	if(errorMsgs!=""){
		writeErrors();
		return;
	}
		
	if(tagObj1.checked==true){
		divObj.innerHTML+='<span id="'+optTag+'"><br/>'+
		'<input type="hidden" value="0" name="questionType"/>'+
		'<input type="button" class="btn2" onclick=delOpt('+optTag+') value="删除"/>'+
		//'<input type="button" onclick=editOpt(\"'+inputId+'\",\"'+optTag+'_h\",\"'+optTag+'\"); value="更新"/>'+
		'<input id="type_radio" name="type_radio" type="radio"/>'+
		inputObj.value+'<input id="'+optTag+'" type="hidden" name="'+serverName+'" value="'+inputObj.value+'"/></span>';	
		//alert(divObj.innerHTML);
		//alert(inputObj.value);
	}
	if(tagObj2.checked==true){
		divObj.innerHTML+='<span id="'+optTag+'"><br/>'+
		'<input type="hidden" value="1" name="questionType"/>'+
		'<input type="button" class="btn2" onclick=delOpt('+optTag+') value="删除"/>'+
		//'<input type="button" onclick=editOpt(\"'+inputId+'\",\"'+optTag+'_h\",\"'+optTag+'\"); value="更新"/>'+
		'<input id="type_checkbox" name="type_checkbox" type="checkbox"/>'+
		inputObj.value+'<input id="'+optTag+'" type="hidden" name="'+serverName+'" value="'+inputObj.value+'"/></span>';		
	}
	
	optTag++;
}

/*********************
说明:所选的一个option从一个多选框复制到另一个多选框
srcId:源多选框
distId:目标多选框
**********************/
function moveOption(srcId,distId){
	var srcObj=document.getElementById(srcId);
	var distObj=document.getElementById(distId);
	
	if(srcObj.selectedIndex==-1)
		return;
	distObj.add(new Option(srcObj.options[srcObj.selectedIndex].text,srcObj.options[srcObj.selectedIndex].value));
	srcObj.options[srcObj.selectedIndex]=null;
}

/*********************
说明:页面对应的操作是否成功
flag:服务器端返回的参数
**********************/
function delServerOptSuccess(flag){
	if(flag==true){
		delOpt(id);
		DWR.getDWRMessage('success',process);
	}else{
		DWR.getDWRMessage('failure',process);
	}
}
/*********************
说明:按回车后触发对应button的onclick事件
buttonId:button的ID
**********************/
function pressEnter(buttonId){
	var buttonObj=document.getElementById(buttonId);
	if (event.keyCode == 13){
		buttonObj.onclick();
	}
}

/***************
显示操作结果的alert
str：从服务器端接受的国际化参数
****************/	
function process(str){
	alert(str);
}

/******************
删除服务器端的选项，如果成功则删除客户端的节点
uid：服务器端选项对应的ID
********************/
function delServerOpt(uid){
	id=uid;
	if(confirm(hint_deleteOnServer)==true){
		Question.moveQuestionById(uid,{callback:delServerOptSuccess});	
	}
}
	/**************************
	说明：实现分页
	***************************/
	function addPageParams(form,pageNumber,pageSize,orderBy){
	  if((typeof form)!="object"){alert("[goToPage:]form is not well defined.");return;}
	  //form.method="post"; for avoid "method" input
      if(null!=pageNumber){
          if(isNaN(pageNumber)){
             alert("输入分页的页码是:"+pageNumber+",它不是个整数");
             return;
          }
          addInput(form,"pageNumber",pageNumber,"hidden");
      }else{
          addInput(form,"pageNumber",1,"hidden");
      }
      if(null!=pageSize){
         if(isNaN(pageSize)){
             alert("输入分页的页长是:"+pageSize+",它不是个整数");
             return;
          }
          addInput(form,"pageSize",pageSize,"hidden");
      }else{
          addInput(form,"pageSize","","hidden");
      }
      if(null!=orderBy&&orderBy!="null"){
         addInput(form,"orderBy",orderBy,"hidden");
      }else{
         addInput(form,"orderBy","","hidden");
      }
      //alert("in goToPage");   
      //form.submit();
	}
	
	/************************
	说明：增加隐藏按钮
	
	
	************************/
	function addInput(form,name,value,type){
	     if(form[name]!=null){
	         //alert("[addInput]update:name:"+name+" value:"+value);
	         form[name].value=value;
	     }else{
	         if(null==type)
		         type="hidden";
	         var input=null;
	     	 if(document.all){
		     	 var inputHTML="<input name='"+name+"' value='"+ value+"' type='"+type+"'>";
			     input = document.createElement(inputHTML);
		     }else{
			     input = document.createElement('input');
			     input.name=name;
			     input.value=value;
			     input.type=type;
		     }
		     form.appendChild(input);
	         //alert("[addInput]create:name:"+name+" value:"+value);
	     }
	}

/*-------------------
说明：写出错误记录！
--------------------*/
function writeErrors(){
	var spanObj=document.getElementById(spanId);
	
	spanObj.className=spanCss;
	spanObj.innerHTML=errorMsgs;
}

/*-------------------
说明：是否只选择了一条记录
checkboxId:checkbox的name属性
--------------------*/
function isSelectOnlyOne(checkboxId){
	if(getCheckedCount(checkboxId)!=1){
		errorMsgs+=tooMore;
		return false;
	}
	
	return true;
}

/*-------------------
说明：是否只选择了记录
checkboxId:checkbox的name属性
--------------------*/
function isSelected(selectId){
	if(getCheckedCount(selectId)==0){
		errorMsgs+=noChoose;
		return false;
	}
	
	return true;
}

/*-------------------
说明：check了多少条记录
checkboxId:checkbox的name属性
--------------------*/
function getCheckedCount(checkboxId){
	var checkbox=document.getElementsByName(checkboxId);
	var count=0;
	
	if("undefined"==typeof(checkbox)){
		errorMsgs+=unsupport;
		return null;
	}
	
	for(var i=0;i<checkbox.length;i++){
		if(checkbox[i].checked==true)
			count++;
	}
	
	return count;
}

/*-------------------
说明：清空error Span
--------------------*/
function clearErrors(){
	var spanObj=document.getElementById(spanId);
	var msgsObj=document.getElementById(msgsId);
	var errorsObj=document.getElementById(errorsId);
	
	if(msgsObj!=null){
		msgsObj.removeNode(true);
	}
	if(errorsObj!=null)
		errorsObj.removeNode(true);
		
	errorMsgs="";
	spanObj.className="";
	spanObj.innerHTML="";
}

/*-------------------
说明:是否全选，或全不选
srcChkId:全选checkbox的name属性
descChkId:目标checkbox的name属性
--------------------*/
function checkAll(srcChkId,descChkId){
	var srcObj=document.getElementsByName(srcChkId);
	var descObj=document.getElementsByName(descChkId);
	
	if(srcObj[0].checked==true){
		for(var i=0;i<descObj.length;i++){
			descObj[i].checked=true;
		}
	}
	
	if(srcObj[0].checked==false){
		for(var i=0;i<descObj.length;i++){
			descObj[i].checked=false;
		}
	}
}

/*------------------
判断select里是否存在optionValue的option

-------------------*/
function containsOpt(selectBoxId,optionValue){
	var obj=document.getElementById(selectBoxId);
	var result=false;
	
	for(i=0;i<obj.length;i++){
		if(obj.options[i].value==optionValue){
			result=true;
			break;	
		}
	}
	
	return result;
}

//----------------------------------validator define----------------------
/*-------------------
说明:修改的动作
form:表单的id
url：表单的action
target:表单的target
checkboxId:列表前checkbox的name值
--------------------*/
function oneInListVal(form,url,target,checkboxId){
	clearErrors();
	if(isSelected(checkboxId)&&isSelectOnlyOne(checkboxId)){
		doSubmit(form,url,target);
	}else{
		writeErrors();
	}
}

function selectedInListVal(form,url,target,checkboxId){
	clearErrors();
	if(isSelected(checkboxId)){
		doSubmit(form,url,target);
	}else{
		writeErrors();
	}
}
/********************
*说明：删除一条或多条记录
*form:要提交的form表单
*url：要链接的地址
*target:目标窗口
********************/	
function removeVal(form,url,target){
	clearErrors();
	if(confirm(hint_isDelete)==true)
		doSubmit(form,url,target);
	else{
		writeErrors();
	}
}

/*-------------------
说明：删除记录
checkboxId:记录前checkbox的name属性
--------------------*/
function removeListVal(form,url,target,checkboxId){
	clearErrors();	
	if(isSelected(checkboxId)){
		if(confirm(hint_isDelete)==true)
			doSubmit(form,url,target);
	}else{
		writeErrors();
	}
}

/*----------------------------
说明：检查用户组的action
checkboxId:记录前checkbox的name属性
----------------------------*/
function groupVal(form,url,target){
	clearErrors();
	var groupCode=document.getElementById("groupCode");
	var groupName=document.getElementById("groupName");
	
	if(isEmpty(groupCode.value)){
		errorMsgs+=codeBlank;
	}
	
	if(isEmpty(groupName.value)){
		errorMsgs+=nameBlank;
	}
	
	if(errorMsgs=="")
		doSubmit(form,url,target);
	else
		writeErrors();	
}

function typeVal(form,url,target){
	clearErrors();
	var callerIdsObj=document.getElementById("callerIds");
	var typeCode=document.getElementById("typeCode");
	var typeName=document.getElementById("typeName");
	if(callerIdsObj.length==0){
		errorMsgs+=callerBlank;
	}
	if(isEmpty(typeCode.value)){
		errorMsgs+=codeBlank;
	}
	if(isEmpty(typeName.value)){
		errorMsgs+=nameBlank;
	}
	if(errorMsgs==""){
		selectAll(callerIdsObj);
		doSubmit(form,url,target);
	}else{
		writeErrors();
	}
}

function assignRoleVal(form,url,target){
	clearErrors();
	var roleObj=document.getElementById("roleId");
	var typeObj=document.getElementById("typeId");
	
	if(roleObj.length==0){
		errorMsgs+=roleBlank;
	}
	
	if(typeObj.length==0){
		if(!(roleObj.length==1&&containsOpt("roleId","5"))){//判断是否选择了管理员角色
			errorMsgs+=typeBlank;
		}
	}
	
	if(errorMsgs==""){
		selectAll(roleObj);
		selectAll(typeObj);
		doSubmit(form,url,target);
	}else{
		writeErrors();
	}
}

function callerVal(form,url,target){
	clearErrors();
	var codeObj=document.getElementById("callerCode");
	var nameObj=document.getElementById("callerName");
	
	if(isEmpty(codeObj.value)){
		errorMsgs+=codeBlank;
	}
	
	if(isEmpty(nameObj.value)){
		errorMsgs+=nameBlank;
	}
	
	if(errorMsgs==""){
		doSubmit(form,url,target);
	}else{
		writeErrors();
	}
}
function languageVal(form,url,target){
	clearErrors();
	var codeObj=document.getElementById("languageCode");
	var nameObj=document.getElementById("languageName");
	
	if(isEmpty(codeObj.value)){
		errorMsgs+=codeBlank;
	}
	
	if(isEmpty(nameObj.value)){
		errorMsgs+=nameBlank;
	}
	
	if(errorMsgs==""){
		doSubmit(form,url,target);
	}else{
		writeErrors();
	}
}
function uploadVal(form,url,target){
	clearErrors();
	var fileObj=document.getElementById("file");
	
	if(isEmpty(fileObj.value)){
		errorMsgs+=fileBlank;
	}
	
	if(errorMsgs==""){
		doSubmit(form,url,target);
	}else{
		writeErrors();
	}
}

//插入附件
function insertFileVal(url,targetId){
	clearErrors();
	var fileObj=document.getElementById("srcFile");
	
	if(fileObj.length==0){
		errorMsgs+=fileBlank;
	}
	
	if(errorMsgs==""){
		var eObj=parent.FCKeditorAPI.GetInstance(targetId);
		var str="<a href='"+url+"&fileId="+fileObj.options[fileObj.selectedIndex].value+"' target='_blank'>"+fileObj.options[fileObj.selectedIndex].text+"</a>";
      	eObj.InsertHtml(str);
	}else{
		writeErrors();
	}
}

//插入图片
function insertImgVal(url,targetId){
	clearErrors();
	var fileObj=document.getElementById("srcFile");
	
	if(fileObj.length==0){
		errorMsgs+=fileBlank;
	}
	
	if(errorMsgs==""){
		var eObj=parent.FCKeditorAPI.GetInstance(targetId);
		var realNameObj=document.getElementById(fileObj.options[fileObj.selectedIndex].value);//服务器上的真实文件名
		var str="<img src='"+url+realNameObj.value+"' width='400px' height='300px'/>";
      	eObj.InsertHtml(str);
	}else{
		writeErrors();
	}
}

//插入标题图片
function setTitleImageVal(url,targetId,hiddenTargetId){
	clearErrors();
	var fileObj=document.getElementById("srcFile");
	if(fileObj.length==0){
		errorMsgs+=fileBlank;
	}
	
	if(errorMsgs==""){
		var realNameObj=document.getElementById(fileObj.options[fileObj.selectedIndex].value);
		var str="<img src='"+url+realNameObj.value+"' width='80px' height='60px'/>";
		var targetObj=parent.document.getElementById(targetId);
		var hiddenTargetObj=parent.document.getElementById(hiddenTargetId);//用于保存标题图片的URL
		
		targetObj.innerHTML=str;
		hiddenTargetObj.value=url+realNameObj.value;
	}else{
		writeErrors();		
	}
}

//取消标题图片
function cancelTitleImageVal(targetId,hiddenTargetId){
	var targetObj=parent.document.getElementById(targetId);
	var hiddenTargetObj=parent.document.getElementById(hiddenTargetId);//用于保存标题图片的URL
	
	targetObj.innerHTML="";
	hiddenTargetObj.value="";
}

//删除附件	
function removeFileVal(form,url,target){
	clearErrors();
	var fileObj=document.getElementById("srcFile");
	
	if(fileObj.length==0){
		errorMsgs+=fileBlank;
	}
	
	if(errorMsgs==""){
		doSubmit(form,url,target);
	}else{
		writeErrors();
	}
}

function infoVal(form,url,target){
	clearErrors();
	var titleObj=document.getElementById("title");
	var keywordsObj=document.getElementById("keywords");
	var typeObj=document.getElementById("typeId");
	var eObj=FCKeditorAPI.GetInstance('content');
	var fileIdsObj=document.getElementById("fileIds");
	
	if(isEmpty(titleObj.value)){
		errorMsgs+=titleBlank;
	}
	if(typeObj.length==0){
		errorMsgs+=typeBlank;
	}
	if(isEmpty(eObj.GetXHTML(true))){
		errorMsgs+=contentBlank;
	}
	
	if(errorMsgs==""){
		fileIdsObj.value=document.frames('iframe1').document.getElementById('fileIds').value;
		doSubmit(form,url,target);
	}else{
		writeErrors();
	}
}

function readerAndCallerVal(form,url,target){
	clearErrors();
	var groupIds = document.getElementById("groupIds");
	var gr = document.getElementById("groupIdsUser");
	if(groupIds.length==0){
		errorMsgs+=readerBlank;
	}
	if(errorMsgs==""){
		selectAll(groupIds);
		doSubmit(form,url,target);
	}else{
		writeErrors();
	}
}

function readerAndCallerValWang(form,url,target){
	clearErrors();
	var callerIdsObj=document.getElementById("callerIds");	
	if(callerIdsObj.length==0){
		errorMsgs+=readerBlank;
	}
	if(errorMsgs==""){
		selectAll(callerIdsObj);
		doSubmit(form,url,target);
	}else{
		writeErrors();
	}
}

function selectReadAndCallerVal(form,url,target){
	var groupIds=document.getElementById("groupIds");
	
	selectAll(groupIds);
	doSubmit(form,url,target);
}

function reomveByUrl(url){
	if(confirm(hint_isDelete)==true)
		location.href=url;
}

function auditVal(form,url,target){
	clearErrors();
	var auditRobj=document.getElementById("auditR");
	var opinionObj=document.getElementById("opinion");
	
	if((auditRobj.options[auditRobj.selectedIndex].value==0||
	auditRobj.options[auditRobj.selectedIndex].value==-1)&&isEmpty(opinionObj.value)){
		errorMsgs+=noAttitude;
	}
	
	if(isOverLength(opinionObj.value,300))
		errorMsgs+=attitudeOverLength;
	
	if(errorMsgs==""){
		doSubmit(form,url,target);
	}else{
		writeErrors();
	}
}

function voteVal(form,url,target){
	clearErrors();
	
	if(isSelected("questionId")){
		doSubmit(form,url,target);
	}else{
		writeErrors();
	}
}

function archiveVal(form,url,target){
	if(confirm(hint_isDelete)==true)
		doSubmit(form,url,target);
}
function getCheckedValues(checkName,delim){
     if(null==delim)
       delim=",";
     var elems = document.getElementsByName(checkName);
	 if(typeof elems=="undefined")
	   return "";
	 var ids="";
	 for(var i=0;i<elems.length;i++){
	    if(elems[i].checked){
	      if(ids.length!=0){
	        ids=ids+delim+elems[i].value;
	      }else{
	        ids=elems[i].value;
	     }
	   }
	 }
	 return ids;
   }


function getAllOptionValue(select)
{
	var val = "";
	var options = select.options;
	for (var i=0; i<options.length; i++)
	{   
		if (val != "")
			val = val + ",";	
		val = val + options[i].value;
	}
	return val;
}
function getSelectedOptionValue(select)
{
	var val = "";
	var options = select.options;
	for (var i=0; i<options.length; i++)
	{   
		if (options[i].selected)
		{
			if (val != "")
				val = val + ",";	
			val = val + options[i].value;
		}
	}
	return val;
}
//全选
function selAllCheckbox(checkboxName) {
	o = document.getElementsByName(checkboxName);
	for (i = 0; i < o.length; i++) {
		o[i].checked = true;
	}
}
