/*

       名字：Common.js

       功能：通用javascript脚本函数库

       包括：

            1.Trim(str)－－去除字符串两边的空格

            2.XMLEncode(str)－－对字符串进行XML编码

            3.ShowLabel(str,str)－－鼠标提示功能（显示字符，提示字符）

            4.IsEmpty(obj)－－验证输入框是否为空

            5.IsInt(objStr,sign,zero)－－验证是否为整数

            6.IsFloat(objStr,sign,zero)－－验证是否为浮点数

*/

/*字符串操作

Trim(string):去除字符串两边的空格

*/

/*
　　1．LTrim(string):去除左边的空格
*/

function LTrim(str)

{
    var whitespace = new String(" \t\n\r");
    var s = new String(str);

    if (whitespace.indexOf(s.charAt(0)) != -1)
    {
        var j=0, i = s.length;

        while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
        {
            j++;
        }

        s = s.substring(j, i);
    }

    return s;
}

 

/*
　　2．RTrim(string):去除右边的空格
*/

function RTrim(str)

{

    var whitespace = new String(" \t\n\r");

    var s = new String(str);

 

    if (whitespace.indexOf(s.charAt(s.length-1)) != -1)

    {

        var i = s.length - 1;

        while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)

        {

            i--;

        }

        s = s.substring(0, i+1);

    }

    return s;

}

 

/*
　　3．Trim(string):去除前后空格
*/

function Trim(str)

{

    return RTrim(LTrim(str));

}

/*

　　XMLEncode(string):对字符串进行XML编码

*/

function XMLEncode(str)

{

       str=Trim(str);

       str=str.replace("&","&amp;");

       str=str.replace("<","&lt;");

       str=str.replace(">","&gt;");

       str=str.replace("'","&apos;");

       str=str.replace("\"","&quot;");

       return str;

}

/*
验证类函数
*/

function IsEmpty(obj)

{

    obj=document.getElementsByName(obj).item(0);

    if(Trim(obj.value)=="")

    {

        alert("字段不能为空。");        

        if(obj.disabled==false && obj.readOnly==false)

        {

            obj.focus();

        }

    }

}

 

/*
　　IsInt(string,string,int or string):(测试字符串,+ or - or empty,empty or 0)

　　功能：判断是否为整数、正整数、负整数、正整数+0、负整数+0
*/

function IsInt(objStr,sign,zero)

{

    var reg;    

    var bolzero;    

    

    if(Trim(objStr)=="")

    {

        return false;

    }

    else

    {

        objStr=objStr.toString();

    }    

    

    if((sign==null)||(Trim(sign)==""))
    {
        sign="+-";
    }

    if((zero==null)||(Trim(zero)==""))
    {
        bolzero=false;
    }
    else
    {
        zero=zero.toString();
        if(zero=="0")
        {
            bolzero=true;
        }
        else
        {
            alert("检查是否包含0参数，只可为(空、0)");
        }
    }

    switch(sign)

    {

        case "+-":

            //整数

            reg=/(^-?|^\+?)\d+$/;            

            break;

        case "+": 

            if(!bolzero)           

            {

                //正整数

                reg=/^\+?[0-9]*[1-9][0-9]*$/;

            }

            else

            {

                //正整数+0

                //reg=/^\+?\d+$/;

                reg=/^\+?[0-9]*[0-9][0-9]*$/;

            }

            break;

        case "-":

            if(!bolzero)

            {

                //负整数

                reg=/^-[0-9]*[1-9][0-9]*$/;

            }

            else

            {

                //负整数+0

                //reg=/^-\d+$/;

                reg=/^-[0-9]*[0-9][0-9]*$/;

            }            

            break;

        default:

            alert("检查符号参数，只可为(空、+、-)");

            return false;

            break;

    }

    var r=objStr.match(reg);

    if(r==null)

    {

        return false;

    }

    else

    {        

        return true;     

    }

}

/*

　　IsFloat(string,string,int or string):(测试字符串,+ or - or empty,empty or 0)

　　功能：判断是否为浮点数、正浮点数、负浮点数、正浮点数+0、负浮点数+0

*/

function IsFloat(objStr,sign,zero)
{
    var reg;    
    var bolzero;    
    if(Trim(objStr)=="")
    {
        return false;
    }
    else
    {
        objStr=objStr.toString();
    }    

if((sign==null)||(Trim(sign)==""))
    {
        sign="+-";
    }

    if((zero==null)||(Trim(zero)==""))
    {
        bolzero=false;
    }
    else
    {
        zero=zero.toString();
        if(zero=="0")
        {
            bolzero=true;
        }
        else
        {
            alert("检查是否包含0参数，只可为(空、0)");
        }
    }
    switch(sign)
    {
        case "+-":
            //浮点数
            reg=/^((-?|\+?)\d+)(\.\d+)?$/;
            break;
        case "+": 

            if(!bolzero)           

            {
                //正浮点数
                reg=/^\+?(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/;

            }
            else
            {
                //正浮点数+0

                reg=/^\+?\d+(\.\d+)?$/;
            }
            break;

        case "-":

            if(!bolzero)
            {

                //负浮点数

                reg=/^-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/;

            }

            else

            {

                //负浮点数+0

                reg=/^((-\d+(\.\d+)?)|(0+(\.0+)?))$/;

            }            

            break;
        default:

            alert("检查符号参数，只可为(空、+、-)");
            return false;
            break;

    }


var r=objStr.match(reg);

    if(r==null)
    {
        return false;
    }
    else
    {
        return true;
    }
}

//解决浮点运算精度丢失问题
//参数：    m:第一个运算值
//          n:第二个运算值
//          op:运算符(仅支持“+”，“-”，“*”，“/”)
function calcDoubleFix(m, n, op) {
    var a = (m.toString().replace(/,/g, ""));
    var b = (n.toString().replace(/,/g, ""));
    var x = 1;
    var y = 1;
    var c = 1;
    var returnValue;
    if (a.indexOf(".") > 0) {
        x = Math.pow(10, a.length - a.indexOf(".") - 1);
    }
    if (b.indexOf(".") > 0) {
        y = Math.pow(10, b.length - b.indexOf(".") - 1);
    }
    switch (op) {
        case '+':
            c = Math.max(x, y);
            m = Math.round(m * c);
            n = Math.round(n * c);
            returnValue = (m + n) / c;
            break;
        case '-':
            c = Math.max(x, y);
            m = Math.round(m * c);
            n = Math.round(n * c);
            returnValue = (m - n) / c;
            break;
        case '*':
            c = x * y
            m = Math.round(m * x);
            n = Math.round(n * y);
            returnValue = (m * n) / c;
            break;
        case '/':
            c = Math.max(x, y);
            m = Math.round(m * c);
            n = Math.round(n * c);
            c = 1;
            returnValue = m / n;
            break;
    }
    return returnValue;
}


//对浮点数的小数位进行截断处理。不做四舍五入，直接截断
//参数：    m:需要处理的数字
//          bit:小数保留位，值为大于等于0的整数。
//返回：    返回截断处理后的数字。
function accTruncate(m, bit) {
    var a = m.toString().replace(/,/g, "");
    if (parseInt(a) == a) return parseInt(a);

    bit = parseInt(bit);
    var s;

    if (bit <= 0) {
        s = a.substr(0, a.indexOf("."));
    }
    else {
        s = a.substr(0, a.indexOf(".") + bit + 1);
    }

    return parseFloat(s);
}

//对浮点数的小数位进行四舍五入处理。
//参数：    m:需要处理的数字
//          bit:小数保留位，值为大于等于0的整数。
//返回：    返回截断处理后的数字。
function accRound(dec, decimals) {
    var step;
    var temp;

    dec = Math.round(dec * 100000000) / 100000000;

    if (dec == 0) {
        return dec;
    }
    else {
        temp = Math.abs(dec);   //处理负数情况。Math.round(-1.5)=1，但需求是应该返回-2。
        if (decimals == 0 || decimals == undefined) {
            temp = Math.round(temp);
        }
        else if (decimals > 0) {
            step = Math.pow(10, decimals);
            temp = Math.round(calcDoubleFix(temp, step, "*")) / step;
        }

        if (dec > 0) { dec = temp; }
        else { dec = -temp; }
    }
    return dec;
}
//小写转大写函数
function number2num1(strg)
{
   var number = Math.round(strg*100)/100;
   number = number.toString(10).split(".");
   var a = number[0];
   if (a.length > 12)
     return "数值超出范围！支持的最大数值为 999999999999.99";
   var e = "零壹贰叁肆伍陆柒捌玖";
   var num1 = "";
   var len = a.length-1;
   for (var i=0 ; i<=len; i++)
    num1 += e.charAt(parseInt(a.charAt(i))) + [["圆","万","亿"][Math.floor((len-i)/4)],"拾","佰","仟"][(len-i)%4];
   if(number.length==2 && number[1]!="")
   {
     var a = number[1];
     for (var i=0 ; i<a.length; i++)
     num1 += e.charAt(parseInt(a.charAt(i))) + ["角","分"][i];
   }
   num1 = num1.replace(/零佰|零拾|零仟|零角/g,"零");
   num1 = num1.replace(/零{2,}/g,"零");
   num1 = num1.replace(/零(?=圆|万|亿)/g,"");
   num1 = num1.replace(/亿万/,"亿");
   num1 = num1.replace(/^圆零?/,"");

   if(num1!="" && !/分$/.test(num1))
     num1 += "整";
   return num1;
}
