﻿/* 
医手的脚本 
2008-12-11 
*/ 

//列表框处理对象 调用$ExList(list);函数后list即会拥有LIST的方法
var LIST=new function(){
    //取得当前选中项
    this.getSelectedItem=function(){
        if(this.selectedIndex<0)
            return null;
        return this.item(this.selectedIndex);
    }
    //取得当前选中项的文本
    this.getText=function(){
        var item=this.getSelectedItem();
        if(item==null)
            return null;
        return item.text;
    }
    //查找项目
    this.findItem=function(name, value, isIndex){
        var count=this.options.length;
        for(var i=0; i<count; i++){
	        if(this.item(i)[name]==value){
	            if(isIndex==true)
	                return i;
	            else
		            return this.item(i);
	        }
        }
        if(isIndex==true)
            return -1;
        else
            return null;
    }
    //查找项目根据text
    this.findByText=function(text, isIndex){
        return this.findItem("text",text,isIndex);
    }
    //查找项目根据value
    this.findByValue=function(value, isIndex){
        return this.findItem("value",value,isIndex);
    }
    //移除list的所有项
    this.clear=function (){
        while(this.options.length>0)
	        this.remove(0);
    }
    //移除list中所有选中的项
    this.removeSelected=function (){
        var count=this.options.length-1;
        for(var i=count; i>=0; i--)
	        if (this.item(i).selected)
		        this.remove(i);
    }
    //把listSrc选中的项添加到listDes中, value相同的项不添加
    this.addList=function (listSrc){
        for(var i=0; i<listSrc.options.length;i++){
            var item=listSrc.item(i);
	        if (item.selected){
		        this.addItem(item.value, item.text);
	        }
        }
    }
    //把item添加到list中, value相同时不添加
    this.addItem=function (value, text, index){
        if (this.findByValue(value)!=null){
	        return;
        }
        var item=document.createElement("OPTION");
        item.text=text;
        item.value=value;
        if(index==null)
            this.options.add(item);
        else
            this.options.add(item, index);
    }
    //移动项
    this.moveItem=function (index, newIndex){
        var item=document.createElement("OPTION");
        item.text=this.options[index].text;
        item.value=this.options[index].value;
        this.remove(index);
        this.options.add(item,newIndex);
    }
    
    //根据Text选中项
    this.selectByText=function(text){
        var index=this.findByText(text,true);
        this.selectedIndex=index;
    }
    //根据Value选中项
    this.selectByValue=function(value){
        var index=this.findByValue(value,true);
        this.selectedIndex=index;
    }
}
//扩展列表框
function $ExList(list){
    if(typeof(list)=="string" || list instanceof String)
        list=document.getElementById(list);
	if(list.findItem)
	    return list;
	for(var i in LIST)
	{
	    if(i.indexOf('_')==0)
	        continue;
	    try{
		    list[i] = LIST[i];
	    }catch(e){
	        continue;
	    }
	}
    return list;
}

//取得元素的标签的文本
function getLabelText(element){
    var label=element.nextSibling;
    if(label.tagName!="LABEL")
        label=label.nextSibling;
    var name=label.innerHTML;
    return name;
}

//取得符合条件的子元素
function findChildsOfElement(element, filter, isTree){
    var result=new Array();
    var nodes=null;
    if(isTree==true)
        if(typeof(filter.tagName)=="string"){
            nodes=element.getElementsByTagName(filter.tagName);
            delete filter.tagName;
        }else
            nodes=element.getElementsByTagName("*");
    else    
        nodes=element.childNodes;
    for(var i=0; i<nodes.length; i++){
        var child=nodes[i];
        var isMatch=true;
        for(var index in filter){
            if(child[index]==null){
                isMatch=false;
                break;
            }
            if(filter[index] instanceof RegExp){
                if(filter[index].test(child[index])==false)
                    isMatch=false;
            }else{
                if(child[index]!=filter[index])
                    isMatch=false;
            }
        }
        if(isMatch)
            result.push(child);
    }
    return result;
}

//字符串格式化
String.prototype.format=function(){
    var args=arguments;
    var result=this.replace(/\{(\d+)\}/g,function($0,$1){return args[parseInt($1)];});
    return result;
}

//取得查询字符串
function getQueryString(name){
    var sReg="[\\?\\&]({0})=([^\\&]+)";
    var reg=new RegExp(sReg.format(name));
    var match=location.search.match(reg);
    if(match!=null){
        var result=match[2];
        //result=unescape(result);
        return result;
    }
    return null;
}

//是否为日期
function isDate(str, box){  
    var reg=/^(\d{4})[^\d]*(\d{1,2})[^\d]*(\d{1,2})$/;
    var m=str.match(reg);
    if(m==null)
        return false;
    var arr=new Array(3);
    arr[0]=parseInt(m[1],10);
    arr[1]=parseInt(m[2],10)-1;
    arr[2]=parseInt(m[3],10);
    var date=new Date();
    try{
        date.setFullYear(arr[0],arr[1],arr[2]);
    }catch(ex){
        return false;
    }
    var arr2=[date.getFullYear(),date.getMonth(),date.getDate()];
    if(arr2[0]!=arr[0] || arr2[1]!=arr[1] || arr2[2]!=arr[2])
        return false;
    if(box instanceof Object){
        box.value=date;
        arr2[1]++;
        box.string=arr2.join("-");
    }
    return true;
}  

//是否为正确的身份证号码
function isChinaIDCard(StrNo){  
    if(isHongKongIDCard(StrNo))
    {
        return true;
    }
    if(isTaiWanIDCard(StrNo))
    {
        return true;
    }
    //预处理
    StrNo=StrNo.toString().toUpperCase();
    //基本验证
    var match=StrNo.match(/^\d{6}(\d{8})\d{3}([\dX])$/);
    if(match==null){
        match=StrNo.match(/^\d{6}(\d{6})\d{3}$/);
        if(match!=null)
            {
                return isDate('19'+match[1]);
            }
        return false;
    }
    //校验位验证
    var arrW=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1];
    var sum=0;
    for(var i=0; i<arrW.length-1; i++){
        var c=StrNo.charAt(i);
        sum+=parseInt(c)*arrW[i];
    }
    var index=sum%11;
    var arrLastChar=[1,0,"X",9,8,7,6,5,4,3,2];
    var sign=match[2];
    if(sign!=arrLastChar[index].toString())
        return false;
    //日期验证
    var date=match[1];
    if (isDate(date)==false)
        return false;
    //全部正确
    return true;
}  

function isHongKongIDCard(StrNo)
{  
    StrNo=StrNo.toString().toUpperCase();        
    var match=StrNo.match(/^(\w{1})(\d)(\d)(\d)(\d)(\d)(\d)\((\w{1})\)/);
    if(match==null){       
        return false;
    }
    var arrW=[8,7,6,5,4,3,2];
    var sum=0;
    for(var i=0; i<arrW.length; i++)
    {
        var c=StrNo.charAt(i);
        if(i==0)
        {
            c=StrNo.charCodeAt(0)-64;
        }
        sum+=parseInt(c)*arrW[i];
    }
    var index=sum%11;
    var ao=11-index;
    return ao==match[8];
}  

function isTaiWanIDCard(StrNo)
{  
    StrNo=StrNo.toString().toUpperCase();  
    var first=StrNo.charCodeAt(0)-55;
    StrNo=StrNo.replace(StrNo.charAt(0),first);
                  
    var match=StrNo.match(/^(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)/);
    if(match==null){       
        return false;
    }
    var arrW=[1,9,8,7,6,5,4,3,2,1,1];
    var sum=0;
    for(var i=0; i<arrW.length; i++)
    {
        var c=StrNo.charAt(i);
        sum+=parseInt(c)*arrW[i];
    }
    var index=sum%10;
    return index==0;
}  

//HTML编码
function HtmlEncode(s)
{
    var reg=/[<>&\r\n\t ]/g;
    function forReplace(c){
        switch(c){
            case "<":
                return "&lt;";
            case ">":
                return "&gt;";
            case "&":
                return "&amp;";
            case "\r":
                return "\r";
            case "\n":
                return "\n<br />";
            case "\t":
                return "&nbsp;&nbsp;&nbsp;&nbsp;";
            case " ":
                return "&nbsp;";
            default:
                return c;
        }
    }
    var result=s.replace(reg,function($0){return forReplace($0);});
    return result;
}