function openUrl(url, target, w, h, bCenter) {
    var nLeft, nTop, hWnd;
    nLeft = (screen.width - w) / 2;
    nTop = (screen.height - h) / 2;
	hWnd = window.open(url, target, "scrollbars=yes resizable=yes width=" + w + " height=" + h);
	if (bCenter) hWnd.moveTo(nLeft,nTop);
	hWnd.focus();
}

function openchildwin(url, target, w, h, bCenter, hScrollbars, hStatus) {
	var nLeft, nTop, hWnd;
	if (hScrollbars == null || hScrollbars == 'undefined') hScrollbars = "yes";
	if (hStatus == null || hStatus == 'undefined') hStatus = "no";
	nLeft = (screen.width - w) / 2;
	nTop = (screen.height - h) / 2;	
	var hWnd = window.open(url, target,"scrollbars="+ hScrollbars +" resizable=yes width=" + w + " height=" + h);
	if ((document.window != null) && (!hWnd.opener))
		 hWnd.opener = document.window;	
	if (bCenter) hWnd.moveTo(nLeft,nTop);
	hWnd.focus();		
}

function openfullwindow(url, target, type, hScrollbars){
	if (hScrollbars == null || hScrollbars == 'undefined') hScrollbars = "yes";
	if (type == 1) //含最上列(藍色列), 有關閉視窗及放大縮小鍵
		var hWnd = window.open(url,target,"resizable=yes,scrollbars="+ hScrollbars +",status=0");
	else if (type == 2) //全螢幕, 無關閉視窗及放大縮小鍵
		var hWnd = window.open(url,target,"fullscreen,scrollbars="+ hScrollbars);
	else if (type == 3) //含IE頻道列
		var hWnd = window.open(url,target,"channelmode,scrollbars="+ hScrollbars +",titlebar=0");
	else if (type == 4) 
		var hWnd = window.open(url,target,"");
	if ((document.window != null) && (!hWnd.opener))
		 hWnd.opener = document.window;	
	hWnd.focus();
}
		
function isValidFucMbr(fvar, msg) {
	len = fvar.length;
	if (len == 0) {
		alert(msg);
		fvar.focus();
		return false;
	}
	return true;
}

function validUpload(fvar) {

    if (fvar.value.length==0) {
        alert("請輸入檔名");
        return false;
    }
    if (fvar.value.indexOf("\"")>=0 || fvar.value.indexOf("'")>=0) {
        alert("檔名中不能有\"或'");
        return false;
    }
    if (fvar.value.indexOf(">")>=0 || fvar.value.indexOf("<")>=0) {
        alert("檔名中不能有>或<");
        return false;
    }

    return(true);
}

function img_show(imgname, newgif) {
    browser = navigator.userAgent;
    if ((browser.indexOf("Mozilla/3.0") != -1) || (browser.indexOf("Mozilla/4.0") != -1))
        imgname.src = newgif; 
}



function isValidEMail(femail, allowempty) {

    femailvalue = allTrim(femail.value);
    
    if (empty(femailvalue)) {
    	if (!allowempty) {
            alert("請輸入電子信箱");
            femail.focus();
            return false;
        }
    } else {

            n = femailvalue.indexOf(" ");
            if (n >= 0) {
                    alert("請輸入正確電子信箱Space" );
                    femail.focus();
                    return false;
            }

            n = femailvalue.indexOf("\"");
            if (n >= 0) {
                    alert("請輸入正確電子信箱\"" );
                    femail.focus();
                    return false;
            }
            n = femailvalue.indexOf("'");
            if (n >= 0) {
                    alert("請輸入正確電子信箱'" );
                    femail.focus();
                    return false;
            }
            n = femailvalue.indexOf(",");
            if (n >= 0) {
                    alert("請輸入正確電子信箱," );
                    femail.focus();
                    return false;
            }
            n = femailvalue.indexOf(";");
            if (n >= 0) {
                    alert("請輸入正確電子信箱;");
                    femail.focus();
                    return false;
            }

            n = femailvalue.indexOf(":");
            if (n >= 0) {
                    alert("請輸入正確電子信箱:");
                    femail.focus();
                    return false;
            }

            n = femailvalue.indexOf("\\");
            if (n >= 0) {
                    alert("請輸入正確電子信箱\\");
                    femail.focus();
                    return false;
            }
            n = femailvalue.indexOf("/");
            if (n >= 0) {
                    alert("請輸入正確電子信箱/");
                    femail.focus();
                    return false;
            }

            n = femailvalue.indexOf("@.");
            if (n >= 0) {
                    alert("請輸入正確電子信箱@.");
                    femail.focus();
                    return false;
            }

            n = femailvalue.indexOf(".@");
            if (n >= 0) {
                    alert("請輸入正確電子信箱.@");
                    femail.focus();
                    return false;
            }

            n = femailvalue.indexOf("@");
            n1 = femailvalue.lastIndexOf("@");
            if (n <= 0 || n1 == femailvalue.length - 1) {
                    alert("請輸入正確電子信箱@");
                    femail.focus();
                    return false;
            }
            n = femailvalue.indexOf(".");
            n1 = femailvalue.lastIndexOf(".");
            if (n <= 0 || n1 == femailvalue.length - 1) {
                    alert("請輸入正確電子信箱.");
                    femail.focus();
                    return false;
            }
    }
    return true;

}

function isNotANum(fvar, msg, allowempty) {
    if (isNotANum.arguments.length < 3) allowempty = true;
    if (!allowempty && allTrim(fvar.value) == '' ) {
            alert(msg);
            fvar.focus();
            return true;
    }
    if (isNaN(fvar.value)) {
            alert(msg);
            fvar.focus();
            return true;
    } 
    return false;
}

function isValidDate(fvar, msg, allowempty, bDowntoday, bUptoday) {
	
	if (isValidDate.arguments.length < 3) {
		allowempty = true;
		bDowntoday = true;
		bUptoday = true;
	}
    if (allowempty) {
    	if (nullEmpty(fvar.value)) return true;
    } else {
    	if (nullEmpty(fvar.value)) {
    		alert(msg +": 不可為空白!");
    		return false;
    	}
  	}	 	
  	 
    if (!chkDateStr(fvar.value, 2)) {
      alert(msg);
      fvar.focus();
      return false;
    } 
   
    yy = fvar.value.substring(0,4);
    mm = fvar.value.substring(5,7);
    dd = fvar.value.substring(8,10);
    var today = new Date();
    tyy = today.getYear();
    tmm = addPreChar(today.getMonth()+1, 2, "0");
    tdd = addPreChar(today.getDate(), 2, "0");  
    tdate = tyy +"-"+ tmm +"-"+ tdd;         	
   
    if (!bDowntoday) {
				if (fvar.value < tdate) {
					alert(msg +": 不可小於今日!");
					return false;
				} 				
    }
    
    if (!bUptoday) {
		if (fvar.value > tdate) {
			alert(msg +": 不可大於今日!");
			return false;
		}         	
	}
    return true;
}

function isValidStr(fvar, msg, allowempty) {
 	
    if (isValidStr.arguments.length < 3) allowempty = true;
    if (allowempty && nullEmpty(fvar.value)) return true;
   
    if (nullEmpty(fvar.value)) {
      alert(msg);
      fvar.focus();
      return false;
    } else {
    	return true;
    }
}

function checkID(userID){

    userID = userID.toUpperCase();
    areaCode = userID.substring(0, 1);
    if (userID.length != 10) return "1";
    if (areaCode < "A" && areaCode > "Z") return "1";
    if (isNaN(userID.substring(2, 10))) return "1";
    
    ss = "ABCDEFGHJKLMNPQRSTUVXYWZIO";
    areaNO = ss.indexOf(areaCode) + 10;
    userID = areaNO + userID.substring(1, 10);
    //取得CheckSum的值
    checkSum = parseInt(userID.substring(0,1),10) + parseInt(userID.substring(10, 11), 10);
    
    for (i = 1 ; i <= 9; i ++) {
        checkSum += parseInt(userID.substring(i, i+1), 10) * (11 - i - 1);
    }
    return (mod(checkSum, 10) == 0 ? "0" : "2");
}

function notEmpty(s) {
        
	return(!empty(s));
}
function nullEmpty(s) {
        
    return(empty(s));
}

function empty(s) {
    
    if (s == null)                  return(true);
    if (allTrim(s) == 'undefined')  return(true);
    if (allTrim(s) == "null")       return(true);
    if (allTrim(s) == "")           return(true);
    
    if (allTrim(s) == "0")          return(true);

    return(false);
}

function padLeft(s, n, c) {
        var ss;
        ss = "";
        for(i = 0; i < n - s.length; i++) {
                ss += c;
        }
        ss += s;
        return ss;
}
//**** return current time --> 12:01:01 *******
function getTimeStr() {

        var da = new Date();
        h = "0" + da.getHours();
        m = "0" + da.getMinutes();
        s = "0" + da.getSeconds();
        tstr = right(h, 2) +":"+ right(m, 2) + ":"+right(s, 2);
        return(tstr);
}

function getDateFormat(d) {
        
        if (empty(d)) d = getDateStr();
        yy = left(d, 3);
        mm = d.substring(3, 5);
        dd = d.substring(5, 7);
        return(yy+"/"+mm+"/"+dd);        
}

function getEDateFormat(d) {
        
        if (empty(d)) d = getDateStr();
        yy = 1911 + parseInt(left(d, 3));
        mm = d.substring(3, 5);
        dd = d.substring(5, 7);
        return(mm+"/"+dd+"/"+yy);
}

function getChinaYear(da) {
        var y = da.getYear();
        if (y < 2000)
                return (y - 11);
        else
                return (y - 1911);
        
}

function getDateStr() {
        var y, m, d;

        var da = new Date();
        y = "0000" + da.getYear();
        m = "00" + (da.getMonth() + 1);
        d = "00" + da.getDate();
        dstr = right(y, 4) + "-" + right(m, 2) + "-" + right(d, 2);
        return(dstr);
}

function right(s, n) {

    if (empty(s)) return("");
    s = rTrim(s);
    var len = s.length;
    len1 = len - n;
    str = s.substring(len1, len);
    return(str);
}

function left(s, n) {

    if (empty(s)) return("");
    var str = s.substring(0, n);
    return(str);
}

/*****
inputforamt = 1 -> d: 0920203, 920203(民國年)
inputforamt = 2 -> d: 2003-02-03(西元年)
inputforamt = 3 -> d: 092-02-03, 92-02-03(民國年)
inputforamt = 4 -> d: 0092-02-03, 92-02-03(民國年)
*****/
function chkDateStr(d, inputformat) {
	
    var yy,mm,dd;
    da = new Array(12);
    da[0] = 31;   da[1] = 28;   da[2] = 31;   da[3] = 30;   da[4] = 31;
    da[5] = 30;   da[6] = 31;   da[7] = 31;   da[8] = 30;   da[9] = 31;
    da[10] = 30;   da[11] = 31;

	if (chkDateStr.arguments.length < 2) inputformat = 1;
	
	d = allTrim(d);
	if (inputformat == 1) {
       
        if (d.length == 6) d = "0" + d ;
        if (d.length < 7) return(false);	
        yy = left(d, 3);
        yy++; yy--;
        if (isleap(yy)) da[1] = 29;
        mm = d.substring(3, 5);
        mm++; mm--;
        dd = d.substring(5, 7);
        dd++; dd--;
	} else if (inputformat == 2) {
      	
    	if (d.length < 10) return(false);
		/*
		yy = parseInt(d.substring(0,4),10);
		mm = parseInt(d.substring(5,7),10);
		dd = parseInt(d.substring(8,10),10);		   
		*/
		yy = d.substring(0,4);
		mm = d.substring(5,7);
		dd = d.substring(8,10);		   
		//alert(yy +"-"+ mm +"-"+ dd); 		
		//alert(isleap_new(yy));
		if (isleap_new(yy)) da[1] = 29;						    		
	} else if (inputformat == 3) {
        if (d.length == 8) d = "0" + d ;
        if (d.length < 9) return(false);	
        yy = left(d, 3);
        yy++; yy--;
        if (isleap(yy)) da[1] = 29;
        mm = d.substring(4, 6);
        mm++; mm--;
        dd = d.substring(7, 9);
        dd++; dd--;	      	
	} else if (inputformat == 4) {
        if (d.length == 8) d = "00" + d ;
        if (d.length < 10) return(false);	
        yy = left(d, 4);
        yy++; yy--;
        if (isleap(yy)) da[1] = 29;
        mm = d.substring(5, 7);
        mm++; mm--;
        dd = d.substring(8, 10);
        dd++; dd--;	      	
   	}
   	
   	//alert(yy + ',' + mm + ',' + dd + ',' + isNaN(yy)+ ',' + isNaN(mm)+ ',' + isNaN(dd) + ',' + da[parseInt(mm)-1]);
    
    if (isNaN(yy) || isNaN(mm) || isNaN(dd)) return(false);
    if (mm < 1 || mm > 12) return(false);
    if (dd < 1 || dd > da[parseInt(mm)-1]) return(false);
    return(true);
}


function calculateMinute(fdate, ftime, tdate, ttime) {

//write("<script>alert("+fdate+' '+ftime+' '+tdate+' '+ttime+")</script>;")
    nDay = calculateDays(fdate, tdate);
    nMin = nDay * 24 * 60;
    fm = parseInt(left(ftime,2) * 60) + parseInt(ftime.substring(3,5));
    tm = parseInt(left(ttime,2) * 60) + parseInt(ttime.substring(3,5));
//write("<script>alert("+nDay+' '+fm+' '+tm+")</script>;");
    return(parseInt(nMin)+parseInt(tm)-parseInt(fm));
}

function calculateDays(fdate, tdate) {
    da = new Array(12);
    da[0] = 31;   da[1] = 28;   da[2] = 31;   da[3] = 30;   da[4] = 31;
    da[5] = 30;   da[6] = 31;   da[7] = 31;   da[8] = 30;   da[9] = 31;
    da[10] = 30;   da[11] = 31;
    var pdays = 0, fdays = 0, tdays = 0, i=0;

    if (fdate==tdate) return 0;
    
    yy = parseInt(left(fdate, 4), 10)
    mm = parseInt(fdate.substring(5, 7), 10);
    dd = parseInt(fdate.substring(8, 10), 10);
    da[1] = isleap(yy) ? 29 : 28;
    for (i = 1 ; i <= yy; i++)
       fdays += ((isleap(i))?366:365);
    for (i = 0 ; i < mm; i++)
        fdays += da[i];
    fdays += dd;
    
    yy = parseInt(left(tdate, 4), 10);
    mm = parseInt(tdate.substring(5, 7), 10);
    dd = parseInt(tdate.substring(8, 10), 10);
    
    da[1] = isleap(yy) ? 29 : 28;
    for (i = 1; i <= yy; i++)
        tdays += ((isleap(i)) ? 366 : 365);

    for (i = 0; i < mm; i++) {
        tdays += da[i];
    }
    tdays += dd;

    pdays = tdays - fdays;
    return(pdays);
}


//***  return 月初 --> 0860101 *****
function getMonDayTop(d) {
    if (empty(d)) d = getDateStr();
    return(left(d, 8) + "01");
}

function goDate1(fvar, dir) {
    if (!chkDateStr(fvar.value)) {
        fvar.value = getDateStr();
        return true;
    }
    if (dir == -1)
        fvar.value = getLastDays(fvar.value, 1);
    else
        fvar.value = getNextDays(fvar.value, 1);
    return true;
}

//***  return 前 n 日 *****
function getLastDays(d, n) {
	var dd;

    for (var i=0 ; i < n; i++) {
        dd = d.substring(8, 10);
        if (dd == "01")
           d = getMonDayBottom(getLastMonth(d));
        else {
            dd--;
            d = left(d, 8) + right("0"+dd, 2);
        }
    }
    return(d);
}

function getWeekStr(d) {
	var yy, mm, dd
    aMon = new Array("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec");
    aWeek = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");
    if (empty(d)) d = getDateStr();
    yy = left(d, 4);
    mm = d.substring(5, 7);
    mm--;
    dd = d.substring(8, 10);
    dd++; dd--;
    var da = new Date(aMon[mm]+" "+dd+","+yy);
    var week = da.getDay();
    return(aWeek[week]);
}

function getWeek(d) {
	var yy, mm, dd;
    if (empty(d)) d = getDateStr();
    aMon = new Array("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec");
    if (empty(d)) d = getDateStr();
    yy = left(d, 4);
    mm = d.substring(5, 7);
    mm--;
    dd = d.substring(8, 10);
    dd++; dd--;
    var da = new Date(aMon[mm]+" " + dd + "," + yy);
    var week = da.getDay();
    return(week);
}

//***  return 後 n 日 *****
function getNextDays(d, n) {
	var dd, yy, mm;
    da = new Array(12);
    da[0] = 31;   da[1] = 28;   da[2] = 31;   da[3] = 30;   da[4] = 31;
    da[5] = 30;   da[6] = 31;   da[7] = 31;   da[8] = 30;   da[9] = 31;
    da[10] = 30;   da[11] = 31;

    for (var i=0 ; i < n; i++) {
        yy = left(d, 4);
        if (isleap(yy)) da[1] = 29;
        mm = d.substring(5, 7);
        dd = d.substring(8, 10);
        if (dd == da[mm-1])
            d = getMonDayTop(getNextMonth(d));
        else {
            dd++;
            d = left(d, 8) + right("0"+dd, 2);
        }
    }
    return(d);
}

//***  return 月底 --> 2003-01-31 *****
function getMonDayBottom(d) {
    var y, m;

    da = new Array(12);
    da[0] = 31;   da[1] = 28;   da[2] = 31;   da[3] = 30;   da[4] = 31;
    da[5] = 30;   da[6] = 31;   da[7] = 31;   da[8] = 30;   da[9] = 31;
    da[10] = 30;   da[11] = 31;

    if (empty(d)) d = getDateStr();
    y = left(d, 4);
    m = d.substring(5, 7);
    if (isleap(y))  da[1] = 29;

    return(left(d, 8) + "-" + da[m-1]);
}

//***  return next month --> 0860131 *****
function getNextMonth(d) {

    da = new Array(12);
    da[0] = 31;   da[1] = 28;   da[2] = 31;   da[3] = 30;   da[4] = 31;
    da[5] = 30;   da[6] = 31;   da[7] = 31;   da[8] = 30;   da[9] = 31;
    da[10] = 30;   da[11] = 31;

    if (empty(d)) d = getDateStr();

    y = left(d,4);
    m = d.substring(5, 7);
    md = da[m-1];
    d = d.substring(8, 10);
    
    if (m == "12") {
            y++;
            m = "01";
    } else {
            m++;
    }       
    if (isleap(y))  da[1] = 29;
    if (d == md || d > da[m-1]) d = da[m-1];

    return(right("0000" + y, 4) + "-" + right("0"+m, 2) + "-" + d);
}

//***  return last month --> 0860131 *****
function getLastMonth(d) {

    da = new Array(12);
    da[0] = 31;   da[1] = 28;   da[2] = 31;   da[3] = 30;   da[4] = 31;
    da[5] = 30;   da[6] = 31;   da[7] = 31;   da[8] = 30;   da[9] = 31;
    da[10] = 30;   da[11] = 31;

    if (empty(d)) d = getDateStr();

    y = left(d, 4);
    m = d.substring(5, 7);
    md = da[m-1];
    d = d.substring(8, 10);
    
    if (m == "01") {
            y--;
            m = "12";
    } else {
            m--;
    }       
    if (isleap(y))  da[1] = 29;
    if (d == md || d > da[m-1]) d = da[m-1];

    return(right("0000"+y, 4) + "-" + right("0"+m, 2) + "-" + d);
}


//** 閏年 ****
function isleap_new(y) {
	
    var m, d, k;
    k = parseInt(y) % 4;
    m = parseInt(y) % 100;
	//alert(k + "," + m);
    if (empty(k) && empty(m))  return(true);
    else            return(false);
}

//** 閏年 ****
function isleap(y) {
	
    var m, d, k;
    k = parseInt(y, 10) / 4;
    m = y - Math.floor(k) * 4;
	//alert(k + "," + m);
    if (empty(m))   return(true);
    else            return(false);
}

//********************

function mod(v, s) {
        
    var m, d, k;
    if (empty(s)) return(0);
    k = v / s;
    m = v - Math.floor(k) * s;
    return(m);
}

function getInt(v) {

       return(Math.floor(v));
}

function goMonth(f, dir) {
    var i;
    mm = f.mm[0].selectedIndex;
    yy = f.yy[0].selectedIndex;

    if (dir == '1') {
        if (mm == 11) {
            mm = 0;
            yy++;
            f.yy[0].options[yy].selected = true;
            f.yy[1].options[yy].selected = true;
        } else {
                mm++;
        }       
        f.mm[0].options[mm].selected = true;
        f.dd[0].options[0].selected = true;
        f.mm[1].options[mm].selected = true;
            
    } else if (dir == '-1') {
        if (mm == 0) {
                mm = 11;
                yy--;
                f.yy[0].options[yy].selected = true;
                f.yy[1].options[yy].selected = true;
        } else {
                mm--;
        }
    } else if (dir == '0') {
        var da = new Date();
        mm = da.getMonth();
        yy = getChinaYear(da);
        for (i=0; i<f.yy[0].length; i++)
                if (f.yy[0].options[i].value == yy) break;
        yy = i;
        dd = da.getDate();
        f.yy[0].options[yy].selected = true;
        f.yy[1].options[yy].selected = true;
    }
    f.mm[0].options[mm].selected = true;
    f.mm[1].options[mm].selected = true;
    
    yvalue = right("000" + f.yy[0].options[yy].value, 3);
    mvalue = right("00" + f.mm[0].options[mm].value, 2);
    dvalue = yvalue + mvalue + "01";
    bvalue = parseInt(right(getMonDayBottom(dvalue), 2), 10);
    for (i=f.dd[1].length-1; i >= 0 ; i--)
            f.dd[1].options[i] = null;
    for (i=0; i < bvalue ; i++) {
            f.dd[1].options[i] = null;
            opt = new Option(i+1, i+1);
            f.dd[1].options[i] = opt;
    }
    if (dir == '1' || dir == '-1') {
            f.dd[0].options[0].selected = true;
            f.dd[1].options[bvalue-1].selected = true;
    } else {
            f.dd[0].options[dd-1].selected = true;
            f.dd[1].options[dd-1].selected = true;
    }
    
    
    return(true);
}
