// JavaScript Document
var bV=parseInt(navigator.appVersion);
var NN4=(document.layers) ? true : false;
var IE4=((document.all)&&(bV>=4))?true:false;

//取得數值，若數值為空的就傳回"0"
function getNumber(mval) {
	if (isNaN(parseInt(mval)) == true)
		return 0;
	else
		return parseInt(mval);
}
function getFloat(mval) {
	if (isNaN(parseFloat(mval)) == true)
		return 0;
	else
		return parseFloat(mval);
}

//檢查EMail格式是否正確
function checkemail(mval) {
	if (mval.indexOf("@",1) < 3)
		return false;
	else
		return true;
}

//檢查email格式是否正確
function checkmail2(emailStr) {
	var emailPat=/^(.+)@(.+)$/
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars="\[^\\s" + specialChars + "\]"
	var firstChars=validChars
	var quotedUser="(\"[^\"]*\")"
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom="(" + firstChars + validChars + "*" + ")"
	var word="(" + atom + "|" + quotedUser + ")"
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

	var matchArray=emailStr.match(emailPat)
	if (matchArray==null) {
		//alert("Email address seems incorrect (check @ and .'s)")
		return false
	}
	var user=matchArray[1]
	var domain=matchArray[2]
	// See if "user" is valid
	if (user.match(userPat)==null) {
		//alert("The username doesn't seem to be valid.")
		return false
	}
	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) {
		// this is an IP address
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				//alert("Destination IP address is invalid!")
				return false;
			}
		}
		return true;
	}
	// Domain is symbolic name
	var domainArray=domain.match(domainPat);
	if (domainArray==null) {
		//alert("The domain name doesn't seem to be valid.")
		return false;
	}
	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) {
		return false;
	}
	if (domArr[domArr.length-1].length==2 && len<3) {
		var errStr="This address ends in two characters, which is a country";
		errStr+=" code.  Country codes must be preceded by ";
		errStr+="a hostname and category (like com, co, pub, pu, etc.)";
		return false;
	}
	if (domArr[domArr.length-1].length==3 && len<2) {
		var errStr="這個EMail沒有填寫主機名稱!";
		return false;
	}
	return true;
}

//檢查mail格式是否正確 2007/2/14

function cckEmail(vemail) {
	//Dim regEx, Match, Matches
	if (vemail !="") {
		var pat = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/
		var regEx = new RegExp(pat);
		//regEx.Pattern = "^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
		regEx.IgnoreCase = true;
		if (regEx.test(vemail) == true)  
			return true;
		else
			return false;
	} else {
		return false;
	}
}



//檢查日期格式是否正確
function checkdate(chkdate) {
	var adate = new Date(chkdate);
	if (chkdate == "") return false;
	if (isNaN(adate) == true)
		return false;
	else
		return true;
}

//檢查輸入的資料是否為合法的資料
//chkval : 資料值
//chklen : 檢查字元數， 0只檢查是否為空字串,有設定長度則必須大於設定的長度
//chkname : 欄位標題名稱,錯誤會顯示字串
function checkdata(vchkval, vchklen, vchkname) {
	if (vchkval == "") {
		alert("請填寫" + vchkname + "欄位的資料！");
		return false;
	}
	if (!(isNaN(parseInt(vchklen)))) {
		//基本的字串檢查
		//檢查不允許的字串
		var vexp_deny = /script/gi;
		//var vexp_deny= new RegExp(vpt_deny);	//不允許的字串
		var vchk = vexp_deny.test(vchkval);
		//alert("dd2=" + vchk);
		if (vchk == false) {		//沒有符合的才對
			if (vchklen > 0) {
				if (vchkval.length < vchklen) {
					alert(vchkname + "欄位的字數至少須有" + vchklen + "個字！");
					return false;
				}
			} else {	//chklen = 0
				return true;
			}
		} else {
			alert(vchkname + "欄位有不允許的字元哦！");
			return false;
		}
		
	} else {
		alert("請填寫" + vchkname + "欄位的資料！");
		return false;
	}
}

//檢查資料是否全部為數字格式
//檢查電話欄位, 只能用0-9數字
function checkNum(vchkval, vchklen, vchkname) {
	//特別檢查之前先檢查是否符合基本的check
	if (checkdata(vchkval, vchklen, vchkname) == false) return false;
	var bchk = true;
	for (var i = 0; i < vchkval.length; i++) {
		var vstr = vchkval.charAt(i);
		if (isNaN(parseInt(vstr)) == true) {	//非數字
			alert(vchkname + "欄位只允許數字0-9哦～");
			bchk = false;
			break;
		}
	}
	return bchk;
}

//檢查身份證號
function IDCheck(mpid) {
    var idchk = false;
    if (mpid.length == 10) {
        var idtable = new Array("A10","B11","C12","D13","E14","F15","G16","H17","J18","K19",
        	"L20","M21","N22","P23","Q24","R25","S26","T27","U28","V29","X30","Y31","W32",
        	"Z33","I34","O35");
        var IDNum = new Array(10);
		for (var ix = 0; ix < 10; ix++) {
            IDNum[ix] = mpid.charAt(ix).toUpperCase();
        }
        for (var ix = 1; ix < 10; ix++) {
            if (IDNum[ix] > "9") return false;	//idchk = false	, after 2th charactor, must be digit 0~9
        }
		var iy = 0;
        for (ix = 0; ix < 26; ix++) {
            if (idtable[ix].charAt(0) == IDNum[0]) {
                iy = ix + 1;
                break;
            }
        }
        if (iy == 0) {
        	return false;	//First charactor must be A~Z
        } else {	//check id
			if (iy == 1)
				iy = 0;
			else
				iy--;
            if ((IDNum[1] == "1") || (IDNum[1] == "2")) {
                var IDc = (parseInt(idtable[iy].charAt(1)) + (9 * parseInt(idtable[iy].charAt(2))) + (8 * parseInt(IDNum[1])) + (7 * parseInt(IDNum[2])) + 
                      (6 * parseInt(IDNum[3])) + (5 * parseInt(IDNum[4])) + (4 * parseInt(IDNum[5])) + (3 * parseInt(IDNum[6])) + (2 * parseInt(IDNum[7])) + parseInt(IDNum[8])) % 10;
				if (IDc == 0) IDc = 10;
                if (parseInt(IDNum[9]) != (10 - IDc))
                	return false;
                else
                	return true;
            } else {
                return false;
            }
        }
    } else {
      return false;	//The length of ID code less than 10
    }
}

/*
compare two date value
if date2 >= date1 return true
if date2 < date1 return false
*/
function compareDate(mdate1, mdate2) {
	if (isNaN(Date.parse(mdate1))) {
		alert("Date1: Invalid date format");
		return false;
	}
	if (isNaN(Date.parse(mdate2))) {
		alert("Date2: Invalid date format");
		return false;
	}
	var dt1 = new Date(mdate1);
	var dt2 = new Date(mdate2);
	if (dt2 >= dt1)
		return true;
	else
		return false;	
}

//在座標位置顯示新視窗

function showWinOnCursor(m_url, m_winname, m_width, m_height) {
	var cur_x = window.event.screenX;
	var cur_y = window.event.screenY; 
	var max_width = screen.availWidth;
	var max_height = screen.availHeight;
	if ((cur_y + m_height) > max_height) {
		cur_y = cur_y - m_height - 40;	//視窗底部對齊座標位置
	}
	if ((cur_x + m_width) > max_width) {
		cur_x = cur_x - m_width - 20;	//視窗右方對齊座標位置
	}
	var m_parm = "width=" + m_width + ",height=" + m_height + ",top=" + cur_y + ",left=" + cur_x;
	//alert(m_parm);
	window.open(m_url, m_winname , m_parm);
}


//在座標位置顯示新視窗, 要傳event 物件才能取到x, y座標
function showWinOnCursorEvent(evt, m_url, m_winname, m_width, m_height) {
	if (IE4) {
		var cur_x = window.event.screenX;
		var cur_y = window.event.screenY; 
	} else {
		var cur_x = evt.screenX;
		var cur_y = evt.screenY;
	}
	var max_width = screen.availWidth;
	var max_height = screen.availHeight;
	if ((cur_y + m_height) > max_height) {
		cur_y = cur_y - m_height - 40;	//視窗底部對齊座標位置
	}
	if ((cur_x + m_width) > max_width) {
		cur_x = cur_x - m_width - 20;	//視窗右方對齊座標位置
	}
	var m_parm = "scrollbars=1, resizable=1, width=" + m_width + ",height=" + m_height + ",top=" + cur_y + ",left=" + cur_x;
	//alert(m_parm);
	window.open(m_url, m_winname , m_parm);
}


//在座標位置顯示新視窗

function showWinOnCursorExtra(m_url, m_winname, m_width, m_height, parm) {
	var cur_x = window.event.screenX;
	var cur_y = window.event.screenY; 
	var max_width = screen.availWidth;
	var max_height = screen.availHeight;
	if ((cur_y + m_height) > max_height) {
		cur_y = cur_y - m_height - 40;	//視窗底部對齊座標位置
	}
	if ((cur_x + m_width) > max_width) {
		cur_x = cur_x - m_width - 20;	//視窗右方對齊座標位置
	}
	var m_parm = "width=" + m_width + ",height=" + m_height + ",top=" + cur_y + ",left=" + cur_x;
	if (parm != "") m_parm = m_parm + "," + parm;
	//alert(m_parm);
	window.open(m_url, m_winname , m_parm);
}

//------------------------分類處理-----------------------
//取得大類及小類
var mcate_array = new Array();
var scate_array = new Array();

var init_cate = true;

function mcate_class(vmainid, vname) {
	this.mainid = vmainid;
	this.mainname = vname;
	return(this);
}

function scate_class(vmainid, vsubid, vname) {
	this.mainid = vmainid;
	this.subid = vsubid;	
	this.subname = vname;
	return(this);
}

//初始化分類及細項陣列資料, 以第一項為主
//vcateobj_m:大類物件, vscateobj_s:細項物件, v_sidx: 清單開始索引(有的第一項是--請選擇--, 有的是空的)
function initCates(vcateobj_m, vscateobj_s, vmainobjs, vsubobjs, v_sidx) {
	if (typeof(vcateobj_m) == "undefined") {
		init_cate = false;
		return false;
	}	//沒有選項即跳出
	//with(document.fm) {
		var mainnamecnt = vcateobj_m.length -1;		//類別
		var subnamecnt = vscateobj_s.length -1;		//細項
		//vmainobjs = new Array(mainnamecnt);
		//vsubobjs = new Array(subnamecnt);
		for (var i = 1; i <= mainnamecnt; i++) {	//load all value into array
			if (IE4) {
				var vmainname_value = vcateobj_m.options(i).value;
				var vmainname_name = vcateobj_m.options(i).text;
			} else { //nescape..
				var vmainname_value = vcateobj_m.options[i].value;
				var vmainname_name = vcateobj_m.options[i].text;
			}
			var mainnameobj = new mcate_class(vmainname_value, vmainname_name);
			vmainobjs[i-1] = mainnameobj;
		}
		//alert(subnamecnt);
		
		//決定陣列索引要不要扣1
		if (v_sidx > 0)
			st_idx = 1;
		else
			st_idx = 0;
			
		for (var i = v_sidx; i <= subnamecnt; i++) {
			if (IE4) {
				var vlist_value = vscateobj_s.options(i).value;
				var vsubname_name = vscateobj_s.options(i).text;
			} else {
				var vlist_value = vscateobj_s.options[i].value;
				var vsubname_name = vscateobj_s.options[i].text;
			}
			var arytmp = vlist_value.split(":");
			var subnameobj = new scate_class(arytmp[0], arytmp[1], vsubname_name);
			vsubobjs[i - st_idx] = subnameobj;
		}
	//}
	return;
}
//大類改變同時改變小類
function MainCateChange(vcateobj_m, vscateobj_s, vsubobjs, v_sidx) {
	//with(document.fm) {
		var mcnt = vsubobjs.length;
		//決定次項目索引要不要扣1
		if (v_sidx > 0)
			st_idx = 1;
		else
			st_idx = 0;
		for (var i = 0; i < mcnt ;i++) vscateobj_s.remove(st_idx);	//remove all list items
		var mvalue = vcateobj_m.value;
		for (var i= 0; i < mcnt ; i++) {
			var m1 = vsubobjs[i].mainid;
			//alert("mainid1=" + mvalue + ", mainid2=" + m1);
			if (m1 == mvalue) {
				var oOption = document.createElement("OPTION");
				oOption.text = vsubobjs[i].subname;
				oOption.value= vsubobjs[i].subid;
				if (IE4)
					vscateobj_s.add(oOption);
				else
					vscateobj_s.add(oOption, null);
			}
		}
	//}
}

//若已有細類選擇資料，就設定為選取狀態
function MainCateChange2(vcateobj_m, vscateobj_s, vsubobjs, vold_obj, v_sidx) {
	//with(document.fm) {
		var mcnt = vsubobjs.length;
		//alert(mcnt);
		//決定次項目索引要不要扣1
		if (v_sidx > 0)
			st_idx = 1;
		else
			st_idx = 0;
		for (var i = 0; i < mcnt ;i++) vscateobj_s.remove(st_idx);	//remove all list items
		var mainnamecnt = vcateobj_m.length -1;
		for (var i= 0; i < mcnt ; i++) {	//取出subid
			var m1 = vsubobjs[i].mainid;
			if (m1 == vcateobj_m.value) {
				var oOption = document.createElement("OPTION");
				oOption.text = vsubobjs[i].subname;
				oOption.value= vsubobjs[i].subid;
				if (parseInt(vold_obj.value) == vsubobjs[i].subid) oOption.selected = true;
				if (IE4)
					vscateobj_s.add(oOption);
				else
					vscateobj_s.add(oOption, null);
			}
		}	//選取單項完成
	//}
}
//在座標位置顯示新視窗

function showWinOnCursorExtraEvent(evt, m_url, m_winname, m_width, m_height, parm) {
	if (IE4) {
		var cur_x = window.event.screenX;
		var cur_y = window.event.screenY; 
	} else {
		var cur_x = evt.screenX;
		var cur_y = evt.screenY;
	}
	var max_width = screen.availWidth;
	var max_height = screen.availHeight;
	if ((cur_y + m_height) > max_height) {
		cur_y = cur_y - m_height - 40;	//視窗底部對齊座標位置
	}
	if ((cur_x + m_width) > max_width) {
		cur_x = cur_x - m_width - 20;	//視窗右方對齊座標位置
	}
	var m_parm = "width=" + m_width + ",height=" + m_height + ",top=" + cur_y + ",left=" + cur_x;
	if (parm != "") m_parm = m_parm + "," + parm;
	//alert(m_parm);
	window.open(m_url, m_winname , m_parm);
}

function fix_ajax_url(vurl) {
	var rnval = Math.random() + Date.parse(new Date());
	if ((vurl.indexOf("?", 0) > 0) || (vurl.indexOf("&", 0) > 0))
		var gourl = vurl + "&rndval=" + rnval;
	else
		var gourl = vurl + "?rndval=" + rnval;	
	return gourl;
}

var ax_exec = false;	//執行狀態, true: 執行中, false:不在執行中
var ax_url = {
	handleSuccess:function(o){
		//alert(o.responseText);
		if (this.v_url_page != "") {	//有指定要傳回值
			var retobj = document.getElementById(this.v_url_page);
			if (retobj != null)
				retobj.innerHTML = o.responseText;
			else
				document.write("發生錯誤，找不到[" + this.v_url_page + "] 區塊可以輸出結果");
		}
		//document.getElementById(this.v_url_page).innerHTML = o.responseText;
		ax_exec = false;		//執行結束
		//this.callAlert(o);
	},
	handleFailure:function(o){
		// Failure handler
		if (o.responseText !== undefined){
			var obj = document.getElementById(this.v_url_page);
			obj.innerHTML = "<li>Transaction id: " + o.tId + "</li>";
			obj.innerHTML += "<li>HTTP status: " + o.status + "</li>";
			obj.innerHTML += "<li>Status code message: " + o.statusText + "</li>";
		}
		ax_exec = false;		//執行結束
		//alert("伺服器錯誤，請稍後再試 (" + o.statusText + ").");
	},
	processResult:function(o){
		// This member is called by handleSuccess
	},
	geturl2:function(vurl, vcallback, vpage) {	//用自己的callback
		ax_exec = true;		//開始執行
		this.v_url_page = vpage;
		var gourl = fix_ajax_url(vurl);
		//alert(vparm);
	   	YAHOO.util.Connect.asyncRequest('GET', gourl, vcallback, null);
		return;
	},
	geturl:function(vurl, vpage) {
		ax_exec = true;		//開始執行
		this.v_url_page = vpage;
		var gourl = fix_ajax_url(vurl);
		//alert(vparm);
	   	YAHOO.util.Connect.asyncRequest('GET', gourl, ax_url_callback, null);
		return;
	},
	posturl:function(vurl, vparm, vpage) {	//用post傳參數
		ax_exec = true;		//開始執行
		this.v_url_page = vpage;
		var vparm_new = fix_ajax_url(vparm);
	   	YAHOO.util.Connect.asyncRequest("POST", vurl, ax_url_callback, vparm_new);
		return;
	},
	posturl_self:function(vurl, vparm, vpage, vcallback) {	//用post傳參數, 使用自己的callback
		ax_exec = true;		//開始執行
		this.v_url_page = vpage;
		var vparm_new = fix_ajax_url(vparm);
	   	YAHOO.util.Connect.asyncRequest("POST", vurl, vcallback, vparm_new);
		return;
	},
	postform:function(vfmname, vurl, vpage) {	//傳表單
		ax_exec = true;		//開始執行
		this.v_url_page = vpage;
		var vfmobj = document.getElementById(vfmname);
		YAHOO.util.Connect.setForm(vfmobj);
		//var vurl_new = fix_ajax_url(vurl);
	   	YAHOO.util.Connect.asyncRequest("POST", vurl, ax_url_callback);
		return;
	},
	postfile:function(vfmname, vurl, vpage) {		//傳表單內有含檔案元件的
		ax_exec = true;		//開始執行
		this.v_url_page = vpage;
		var vfmobj = document.getElementById(vfmname);
		YAHOO.util.Connect.setForm(vfmobj, true);
	   	YAHOO.util.Connect.asyncRequest("POST", vurl, ax_file_callback);
		return;
	}
};

var ax_url_callback =
{
	success:ax_url.handleSuccess,
	failure:ax_url.handleFailure,
	timeout: 5000,
	scope: ax_url,
	v_url_page: ax_url
};


var ax_file_callback =
{
   	upload: function(o) {	/*upload handler code*/
		if (this.v_url_page != "") {	//有指定要傳回值
			var retobj = document.getElementById(this.v_url_page);
			if (retobj != null)
				retobj.innerHTML = o.responseText;
			else
				document.write("發生錯誤，找不到[" + this.v_url_page + "] 區塊可以輸出結果");
		}
		//document.getElementById(this.v_url_page).innerHTML = o.responseText;
		ax_exec = false;
	}, 
   	//argument: [argument1, argument2, argument3]   
	scope: ax_url,
	v_url_page: ax_url
};



/*
檢查檔案是不是允許的格式
vfilename : 檢查的檔名
vchkary : 允許檔案清單的陣列
*/
function checkFileAllow(vfilename, vchkary) {
	var fext = vfilename.substring(1 + vfilename.lastIndexOf('.', vfilename.length));
	fext = fext.toLowerCase();	//副檔名轉小寫
	var chkcnt = 0;
	for (var i = 0; i < vchkary.length; i++) {
		if (fext == vchkary[i]) {
			chkcnt++;
			break;
		}
	}
	if (chkcnt > 0)
		return true;
	else
		return false;
}