﻿/*
 * Mini JavaScript framework,version 1.1.0.1
 *   Author:ls
 *   E-Mail:shucx@163.com
 *   Date:2009-10
*/
/* $() From Prototype JavaScript framework */
function $()
{
    var elements=new Array();
    for(var i=0;i<arguments.length;i++){
        var element=arguments[i];
        if(typeof element=='string'){
            element=document.getElementById(element);
        }
        if(arguments.length==1){
            return element;
        }
        elements.push(element);
    }
    return elements;
}

function $N()
{
    var elements=new Array();
    for(var i=0;i<arguments.length;i++){
        var element=arguments[i];
        if(typeof element=='string'){
            element=document.getElementByName(element);
        }
        if(arguments.length==1){
            return element;
        }
        elements.push(element);
    }
    return elements;
}

function cobject()
{
    var o=null;
    // set object
    this.object=function(element){
        if(typeof element=='object'){
            o=element;
        }
        else{
            o=$(element);
        }
    }
    // focus
    this.focus=function(){
        o.focus();
    }
    this.select=function(){
        o.select();
    }
    this.trim=function(){
        return(o.value.replace(/(^\s*)|(\s*$)/g,''));
    }
    // object class
    this.css=function(){
        if(arguments.length==0){
            o.className='';
        }
        else{
            o.className=arguments[0];
        }
    }
    // get or set value
    this.val=function(){
        if(arguments.length==0){
            return(o.value);
        }
        else{
            o.value=arguments[0];
        }
    }
    // get or set innerHTML
    this.html=function(){
        if(arguments.length==0){
            return(o.innerHTML);
        }
        else{
            o.innerHTML=arguments[0];
        }
    }
    // object value length
    this.length=function(){
        var ch,count=0,str=this.val();
        for(var i=0;i<str.length;i++){
            ch=str.charCodeAt(i);
            if(ch>=0&&ch<=128){
                count++;
            }
            else{
                count+=2;
            }
        }
        return(count);
    }
    // object value length (UNICODE)
    this.strlen=function(){
        return(this.val().length);
    }
    // object value is empty?
    this.isempty=function(){
        if(this.length()==0){
            return(true);
        }
        return(false);
    }
    /* Show or hidden object */
    this.show=function(){
        o.style.display='block';
    }
    this.hidden=function(){
        o.style.display='none';
    }
    /* for select add and clear */
    this.item=function(text,value){
        var vItem=new Option(text,value);
        o.options.add(vItem); 
    }
    this.empty=function(){
        o.options.length=0;
    }
    this.enable=function(){
        o.disabled=(!arguments[0]);
    }
    // url encode
    this.urlencode=function(){
        return(escape(this.val()));
    }
    // utf-8 url encode
    this.utf8_urlencode=function(){
        return(encodeURI(this.val()));
    }
    /* 正则匹配测试 */
    this.regex=function(pattern)
    {
        if(pattern.test(this.val())){
            return(true);
        }
        return(false);
    }
    this.exec=function(pattern){
        return(pattern.exec(this.val()));
    }
    // is integer
    /*
     * 是否整数
     * nvl      是否可以为空
     * plus     是否正数
    */
    this.is_int=function(nvl,plus,message){
        var str=this.val();
        if(this.isempty()){            
            return(nvl);
        }
        if(isNaN(str)){
            return(false);
        }
        if((str%1)!=0){
            return(false);
        }
        if(plus){
            if(parseInt(str)<=0){
                return(false);
            }
        }
        return(true);
    }
    // is str
    /*
     * 是否符合长度要求的字符串
     * minlen   最小长度
     * maxlen   最大长度
    */
    this.is_str=function(minlen,maxlen,message){
        var len=this.length();
        if((len>=minlen)&&(len<=maxlen)){
            return(true);
        }
        return(false);
    }
    // is numeric
    /*
     * 是否符合长度要求浮点数
     * nvl          是否可以为空
     * plus         是否正数
     * len          最大长度
     * suffixlen    小数点后数字长度
    */
    this.is_numeric=function(nvl,plus,len,suffixlen){
        var strlen=0;        
        if(this.isempty()){
            return(nvl);
        }
        if(isNaN(this.val())){
            return(false);
        }
        if(plus){
            if(parseInt(this.val())<=0){
                return(false);
            }
        }
        strlen=this.length();
        if(strlen>len){
            return(false);
        }
        var arr=this.val().split('.');
        var strleni=arr[0].length;
        if(strleni>(len-suffixlen)){
            return(false);
        }
        if((len-strleni)<suffixlen){
            return(false);
        }
        return(true);
    }
    /*
     * 是否日期(默认格式yyyy-MM-dd)
     * 只能检测"年-月-日"格式
    */
    this.is_date=function(){
        var pattern=/^(\d{4})-(\d{1,2})-(\d{1,2})$/;
        var leap=false;
        var y=0,m=0,d=0;
        
        if(arguments.length==1){
            pattern=arguments[0];
        }
        var arr=pattern.exec(this.val());
        if(arr){
            y=parseInt(arr[1]);
            if((y%4==0)&&(y%100!=0)){
                leap=true;
            }
            m=parseInt(arr[2]);
            if(m>12||m<1){
                return(false);
            }
            d=parseInt(arr[3]);
            if(d>31||d<1){
                return(false);
            }
            switch(m){
                case 2:
                    if(d>29){
                        return(false);
                    }
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    if(d>30){
                        return(false);
                    }
                    break;
            }
            if(leap&&(m==2)){
                if(d>28){
                    return(false);
                }
            }
            return(true);
        }
        else{
            return(false);
        }
    }
}
