﻿
///////////////////////////////////////////////////////////////////////////////////////
//求两个数组的交集,返回一个数组
///////////////////////////////////////////////////////////////////////////////////////
function GetIntersection(arr1,arr2)
{
	var arrResult=new Array();;//要返回的结果
	for(var i=0;i<arr1.length;i++){
		for(var j=0;j<arr2.length;j++){
			if(arr1[i]==arr2[j]){
				arrResult.push(arr1[i]);			
				break;	
				}
		}
	}
	return arrResult;
}

///////////////////////////////////////////////////////////////////////
//获取所有打钩的值,只要页面上有CheckBox被选中，都会首先执行这个函数。
/////////////////////////////////////////////////////////////////////////
function GetCheckValue(oChk)
{

    //先判断所选库的数量是否超出限制,如果超出不执行后面的语句，直接退出
    if(oChk){//这里需要判断一下是否为空，因为要是选择了全选的CHECKBOX的，没有oChk参数
	    if(!CheckNum(oChk)){
	        return;
	    }
  	}

	var objs=GetAllChx();       //获取选中的Checkbox.同时设置页面中的hdnRes和lblResSelect
	var curResult=new Array();  //获取当前的交集结果
	
	if(objs.length==1){//只选了一个库，把字段填充为可检字段
	    //取出库的可检字段
	    //alert("h"); 
	    
	    //判断该库是否为万方库
	    if(document.getElementById("RSType_"+objs[0].value).value==1){//是本地万方库
	        
	    }
	    
	    var EnableFLD=document.getElementById("hid_"+objs[0].value).value;  //根据库的ID找出存放其可检字段的隐藏域   	    
	    document.getElementById("hdnSearchType").value='Single';                  //设置是否为单库的标志位
	    document.getElementById("hdnFields").value=StringToArray(EnableFLD);//同时把可检字段付给hdnFields，供检索用,注:把数组付给value会自动加上","分割
	    
	    //判断该库是否为万方库
	    if(document.getElementById("RSType_"+objs[0].value).value==1){//是本地万方库
	        UpdateListByWFFLD(objs[0].value);   //根据本地万方库更新检索条件的下拉菜单
	        return;
	    }
	    
	    UpdateListByEnableFLD();                                            //根据可检字段更新检索条件的下拉菜单
	    return;
	}
		
	
	//判断所选的库是否是同一资源类型
	if(IsSameType(objs))
	{
	    
	    document.getElementById("hdnSearchType").value='ResMeta';
	    
	    curResult="";	
	    for(var j=0;j<objs.length;j++)
	    {
				    //取出checkbox的alt值，和curResult做交集
				    if(j==0)//第一遍循环,把第一个值设为交集结果					    
					    curResult=StringToArray(document.getElementById("ResMetaId_"+objs[j].value).value);//取出和ResId对应的存放库一级的MetaId
				    else//不为空，之前打过钩
					    curResult=GetIntersection(curResult,StringToArray(document.getElementById("ResMetaId_"+objs[j].value).value));
	    }	
	    
	    document.getElementById("hidFlds").value=curResult;
	    document.getElementById("hdnFields").value=curResult;
	    
	    UpdateListByResMeta();
	    return;
	}
	document.getElementById("hdnSearchType").value='SysMeta';
	
	curResult="";	
	for(var i=0;i<objs.length;i++)
	{
				//取出checkbox的alt值，和curResult做交集
				if(i==0)//第一遍循环,把第一个值设为交集结果
					//alert("here");
					curResult=StringToArray(objs[i].alt);
				else//不为空，之前打过钩
					curResult=GetIntersection(curResult,StringToArray(objs[i].alt));
	}	
	document.getElementById("hidFlds").value=curResult;
	document.getElementById("hdnFields").value=curResult;
	UpdateList();
}

//////////////////////////////////////////////////////////////////////////////////////////////
//获取选中的Checkbox,同时设置页面中的hdnRes和lblResSelect,返回值是一个装有checkbox对象的数组
/////////////////////////////////////////////////////////////////////////////////////////////
function GetAllChx(){
	var retChx=new Array(); //要返回的数组	
	var strIds="";          //选中库的Id串,给页面上的hdnRes赋值用
	var strNames="";        //选中库的Name串,给页面上的lblResSelect赋值用
	var objs=document.getElementsByTagName("input");//获取页面上的所有input，其中包括需要的Checkbox
	
	for(var i=0;i<objs.length;i++)          //取出其中被选中的Checkbox，并且不包括父类的Checkbox
	{
	    

		if(objs[i].type=="checkbox" && objs[i].name!="parentChkBox" && objs[i].checked && objs[i].id!="ChkUseWord")//是checkbox，并且要排除父节点和是否使用同义词的CHECKBOX
		{
			retChx.push(objs[i]);               //将符合条件的CheckBox放入数组
			strIds+= "," + objs[i].value ;      //取出对应库的Res_ID(value属性),加入strIds
			strNames+= objs[i].title +"&nbsp;"; //取出对应库的Res_Name(title属性),加入strNames
		}

	}
	document.getElementById("hdnRes").value=strIds;         //设置选中的库的Res_ID的列表
	document.getElementById("lblResSelect").value=strNames; //设置选中的库的Res_Name的列表
	return retChx;
}

/////////////////////////////////////////////////////////////////////////////////////////////////
//把“,,,”拆成数组返回
/////////////////////////////////////////////////////////////////////////////////////////////////
function StringToArray(str)
{
	var arrResult=str.split(",");
		for(var j=0;j<arrResult.length;j++){
			if(arrResult[j]==""){//去掉最后一个空格元素
				arrResult = arrResult.splice( 0, j );				
			}
		}
	return arrResult;
}


////////////////////////////////////////////////////////////////
//获取选中的RS
/////////////////////////////////////////////////////////////////
function GetRdId()
{
    document.getElementById("hdnRes").value
}
///////////////////////////////////////////////////////    
//点击了单库之后，根据可检字段更新下拉菜单
/////////////////////////////////////////////////////////
function bodyLoad(){
	UpdateListByEnableFLD();
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//用系统的元数据,更新下拉菜单
///////////////////////////////////////////////////////////////////////////////////////////////////
function UpdateList()
{
    var strField=document.getElementById("hidFlds").value;//取完交集的结果
    var arrField=new Array();
    var arrMetaFld = new Object();
    var arrList=document.getElementsByName("fieldSelectBox");//获取所有的下拉菜单
    
    arrMetaFld["000001"] = "名称";
    arrMetaFld["000002"] = "创建者";
    arrMetaFld["000003"] = "主题";
    arrMetaFld["000004"] = "描述";
    arrMetaFld["000005"] = "出版者";
    arrMetaFld["000006"] = "其他责任者";
    arrMetaFld["000007"] = "日期";
    arrMetaFld["000008"] = "类型";
    arrMetaFld["000009"] = "格式";
    arrMetaFld["000010"] = "标识符";
    arrMetaFld["000011"] = "来源";
    arrMetaFld["000012"] = "语种";  
    arrMetaFld["000013"] = "关联"; 
    arrMetaFld["000014"] = "时空范围"; 
    arrMetaFld["000015"] = "权限"; 
    arrMetaFld["000016"] = "全文"; 
    
    for(var j=0;j<arrList.length;j++){ //设为全部字段
        arrList[j].length = 0;          
        arrList[j].options[arrList[j].length] = new Option("全部字段","all");
    }    
    
    if(strField!=""){
        arrField=StringToArray(strField);
        for(var j=0;j<arrList.length;j++){           
            for(var i=0;i<arrField.length;i++){
                arrList[j].options[arrList[j].length] = new Option(arrMetaFld[""+arrField[i]+""],arrField[i]);
                
            }
        }
        document.getElementById("hdnResearchField").value="";
        for(var i=0;i<arrField.length;i++){
                document.getElementById("hdnResearchField").value+=arrMetaFld[""+arrField[i]+""]+"_"+arrField[i];
                
            }
        
    }
}
///////////////////////////////////////////////////////
//根据库一级的元数据更新下拉菜单
///////////////////////////////////////////////////////
function UpdateListByResMeta()
{
    //可检字段获取可检字段
    var strField=document.getElementById("hidFlds").value;//取完交集的结果
    
    var fields=StringToArray(strField);    
    var arrList=document.getElementsByName("fieldSelectBox");//获取所有的下拉菜单    
    for(var j=0;j<arrList.length;j++){ 
        arrList[j].length = 0;          
        arrList[j].options[arrList[j].length] = new Option("全部字段","all");
    }  
       
    for(var j=0;j<arrList.length;j++){           
        for(var i=0;i<fields.length;i++){
            //获取页面上输出的所有的资源一级的元数据的隐藏域
            arrList[j].options[arrList[j].length] = new Option(document.getElementById("Meta_"+fields[i]).value,fields[i]);
            
        }
    }
    
    document.getElementById("hdnResearchField").value="";
    for(var i=0;i<fields.length;i++){
    document.getElementById("hdnResearchField").value+=document.getElementById("Meta_"+fields[i]).value+"_"+fields[i]+",";
    }
    
}
///////////////////////////////////////////////////////
//根据可检字段更新下拉菜单,只是用于单库的情况
///////////////////////////////////////////////////////
function UpdateListByEnableFLD()
{
    //可检字段获取可检字段
    var strField=document.getElementById("hdnFields").value;    
    var fields=StringToArray(strField);    
    var arrList=document.getElementsByName("fieldSelectBox");//获取所有的下拉菜单    
    for(var j=0;j<arrList.length;j++){ 
        arrList[j].length = 0;          
        arrList[j].options[arrList[j].length] = new Option("全部字段","all");
    }       
    for(var j=0;j<arrList.length;j++){           
        for(var i=0;i<fields.length;i++){
            arrList[j].options[arrList[j].length] = new Option(fields[i],fields[i]);
        }
    }
}
///////////////////////////////////////////////////////
//根据可检字段更新下拉菜单,只是用于本地万方数据库的，并且是单库的
///////////////////////////////////////////////////////
function UpdateListByWFFLD(rsid){
    //可检字段获取可检字段
    var strField=document.getElementById("hdnFields").value;    
    //根据库的ＩＤ取出字段的标签
    var strTags=document.getElementById("RSFLDTag_"+rsid).value;
    var tags=StringToArray(strTags); 
    var fields=StringToArray(strField);    
    var arrList=document.getElementsByName("fieldSelectBox");//获取所有的下拉菜单    
    for(var j=0;j<arrList.length;j++){ 
        arrList[j].length = 0;          
        arrList[j].options[arrList[j].length] = new Option("全部字段","all");
    }     
    
      
    for(var j=0;j<arrList.length;j++){           
        for(var i=0;i<fields.length;i++){
            arrList[j].options[arrList[j].length] = new Option(fields[i],tags[i]);
        }
    }
}

///////////////////////////////////////////////////////////
//判断所选的库是否属于一个类别
////////////////////////////////////////////////////////////
function IsSameType(oChks)
{
    if(oChks.length<2){
        return false;
    }else{
        var strCompare=document.getElementById("ResMetaId_"+oChks[0].value).value.substring(0,3);  //取出第一个来比较,
        for(var i=1;i<oChks.length;i++)          //遍历其余的来和第一个比
	    {
	        if(document.getElementById("ResMetaId_"+oChks[i].value).value.substring(0,3)!=strCompare)//只用比较前三位
	            return false;
	    }
	}
	return true;	       
}

////////////////////////////////////////////////////////////
//检查所选库的数量是否过多
///////////////////////////////////////////////////////////////
function CheckNum(oChk)
{
    var max=document.getElementById("maxNum").value;
    var count=0;
    
    var objs=document.getElementsByTagName("input");//获取页面上的所有input，其中包括需要的Checkbox
	
	for(var i=0;i<objs.length;i++)          //取出其中被选中的Checkbox，并且不包括父类的Checkbox
	{
		if(objs[i].type=="checkbox" && objs[i].name!="parentChkBox" && objs[i].checked && objs[i].id!="ChkUseWord")//是checkbox，并且要排除父节点和是否使用同义词的CHECKBOX
		{
            count++;
            if(count > max)
            {
                alert("所选库数目已超过最大限制。");
                oChk.checked=false;
                return false;
            }
		}
	}
	return true;
}
