﻿function __ATConvertDateString(vstrDate,vintType){
	var strRet="";
	var strDay,strMonth,strYear,strCYear,strDate="";
	var blnMinusCYear = false;
	//民國前的年份
	if (vstrDate.substr(0, 1) == "-") {
		blnMinusCYear = true;
		vstrDate = vstrDate.substr(1, vstrDate.length - 1)		//如果年是負的，先把負號拿掉  
	}
	//可能為沒有分隔符號的日期格式（中文的AP通常允許，但是用 IsDate 來判斷會錯誤）
	if((vstrDate.indexOf("/") == -1) && (vstrDate.indexOf("-") == -1) && (vstrDate.indexOf(".") == -1)){
		for(var i = 0 ; i < vstrDate.length ; i++){
			if("0123456789".indexOf(vstrDate.substr(i, 1)) >= 0){
                        	strDate = strDate + vstrDate.substr(i, 1);	//若為數字則加入，剔除非數字的字元
			}
		}
		if ((strDate.length < 6) || (strDate.length > 8)){
			throw (strDate + "為不支援的日期格式");	//日期不合法
			return;}
		else{
			if (strDate.length < 8){						//民國曆
				if(!blnMinusCYear){	
					strYear=(parseInt(strDate.substr(0, 2 + (strDate.length % 3)),10) + 1911).toString();
				}
				else{
					strYear=(1911 - parseInt(strDate.substr(0, 2 + (strDate.length % 3)),10) + 1).toString();
				}
				strMonth = strDate.substr(2 + (strDate.length % 3),2);
				strDay = strDate.substr(strDate.length -2);
			}
			else{										//西元曆 
				strYear = strDate.substr(0,4);	//西元年先不考慮西元"前"
				strMonth = strDate.substr(4,2);
				strDay = strDate.substr(6,2);
			}
			vstrDate = strYear + "/" + strMonth + "/" + strDay;
		}
	}
	
	//2. 將有分隔符號而西元年在最右邊的格式轉成西元年在左邊 (mm/dd/yyyy, mm-dd-yyyy, mm.dd.yyyy)
	var chrSplitter;
	var blnHit=false;
	if(vstrDate.indexOf("/") > -1){
		chrSplitter = "/";
		blnHit = true;}
	else{
		if(vstrDate.indexOf("-") > -1){
			chrSplitter = "-";
			blnHit = true;}
		else{
			chrSplitter = ".";
			blnHit = true;}
	}
 	if(blnHit){
 		var aryToken = vstrDate.split(chrSplitter);
 		if(aryToken[2].length == 4){
 			vstrDate = aryToken[2] + chrSplitter + aryToken[0] + chrSplitter + aryToken[1];
 		}
 	}

	//3.將以 . - 分隔符號全轉為 / 
	vstrDate=vstrDate.replace(/\./g,"/");
	vstrDate=vstrDate.replace(/-/g,"/");
	strYear = vstrDate.substr(0, vstrDate.indexOf("/"));
	var arrTemp=vstrDate.split("/");
	if(arrTemp.length==3){
		strMonth = arrTemp[1];
		strDay = arrTemp[2];
	}
	var strTmp = strYear
	
	if (strYear.length==0){									//若年份未填入，直接error以免發生錯誤
			throw (strDate + "為不正確的日期格式");
			return;
	}
	
	if(strYear.length<4){	//輸入為民國年
		strCYear = strYear;
		while(strCYear.substr(0,1)==0){
			strCYear=strCYear.substr(1);
		}
		if(!blnMinusCYear){
			strYear = (parseInt(strCYear,10) + 1911).toString();
		}
		else{
			strYear = (1911 - parseInt(strCYear,10) + 1).toString();
		}
	}
	else{
		if((parseInt(strYear,10)- 1911)<=0){
			strCYear = (1912-parseInt(strYear,10)).toString();
			blnMinusCYear = true;
		}
		else{
			strCYear = (parseInt(strYear,10)-1911).toString();
		}
	}

	//換掉民國年成西元年
	vstrDate = strYear + vstrDate.substring(vstrDate.indexOf("/"))
	var objDateTime = new Date(vstrDate);
	var blnRtn=(typeof(objDateTime) == "object" && strYear == objDateTime.getFullYear() && strMonth == (objDateTime.getMonth()+1) && strDay == objDateTime.getDate()) ? objDateTime.valueOf() : null;
	if(blnRtn==null){
		throw (strDate + "為不正確的日期格式");
		return;
	}
	strMonth = (objDateTime.getMonth() +1).toString();
	if (strMonth.length == 1){
		strMonth = "0" + strMonth;
	}
	strDay = objDateTime.getDate().toString();
	if (strDay.length == 1){
		strDay = "0" + strDay;
	}

	switch (vintType.toString()) {
		case "1" :	//85/08/05'  or '-86/08/05'
			if(blnMinusCYear) strCYear ="-" + strCYear;
			strRet = strCYear + "/" + strMonth + "/" + strDay;
			break;
		case "2" :	// 085/08/05' or '-086/08/05'    
			strCYear = "000" + strCYear;
			strCYear = strCYear.substring(strCYear.length-3,strCYear.length);
			if(blnMinusCYear) strCYear ="-" + strCYear;
			strRet = strCYear + "/" + strMonth + "/" + strDay;
			break;
		case "13" : 	//19970805
			strRet = strYear + strMonth + strDay;
			break;
		case "14" :	//850805  or -860805
    			if(blnMinusCYear) strCYear ="-" + strCYear;
        		strRet = strCYear + strMonth + strDay;
			break;
		case "15" :	//0850805 or -0860805
			strCYear = "000" + strCYear;
			strCYear = strCYear.substring(strCYear.length-3,strCYear.length);
			if(blnMinusCYear) strCYear ="-" + strCYear;
			strRet = strCYear + strMonth + strDay;
			break;
		case "17" :	//850805  or  -860805
		case "18" :	// 85/08/05  or  -86/08/05'
			if(strCYear.length<3){
				if(blnMinusCYear) strCYear ="-" + strCYear;
				strCYear = " " + strCYear;
			}
			else{
				if(blnMinusCYear) strCYear ="-" + strCYear;
			}
			if(vintType==17){
				strRet = strCYear + strMonth + strDay;}
			else{
				strRet = strCYear + "/" + strMonth + "/" + strDay;}
			break;
		case "19" :	//04/26/2005
			return strMonth + "/" + strDay + "/" + strYear;
		default :
			//1997/08/05'
			strRet = strYear + "/" + strMonth + "/" + strDay;
	}
	return strRet;
}
function  __ATValidateDate(source, arguments){
	var intDateType=document.all["GSSintDateType"].value;
	try {
		var objControl=__ATGetValidateControlRecursive(document.all[source.controltovalidate]);
		var strDate=arguments.Value;
		objControl.value=__ATConvertDateString(strDate,intDateType);
		arguments.IsValid = true;
	}
	catch(e) {
		arguments.IsValid = false;
	}
}

function __ATValidateYearMonth(source, arguments)
{
	var intDateType=document.all["GSSintDateType"].value;
	try {
		var objControl=__ATGetValidateControlRecursive(document.all[source.controltovalidate]);
		var strDate=arguments.Value;
		if((strDate.indexOf("/") == -1) && (strDate.indexOf("-") == -1) && (strDate.indexOf(".") == -1)){
			strDate +="01";
		}
		else{
			strDate=strDate.replace(/\./g,"/");
			strDate=strDate.replace(/-/g,"/");
			strDate +="/01";
		}
		strDate = __ATConvertDateString(strDate,intDateType);
		if((strDate.indexOf("/") == -1) && (strDate.indexOf("-") == -1) && (strDate.indexOf(".") == -1)){
			strDate =strDate.substr(0,strDate.length-2);
		}
		else{
			strDate =strDate.substr(0,strDate.length-3);
		}
		objControl.value=strDate;
		arguments.IsValid = true;
	}
	catch(e) {
		arguments.IsValid = false;
	}
}

// 2006/2/20		dennis_mao		New Create
function __ATValidateIntervalDatePicker(val,args){

  //仿照Asp.Net中的CompareValidator的運作，傳進所需的值給Asp.Net預設的Function驗證
	var compareTo = "";
	var operator = val.getAttribute("Operator");
	var objControlToCompare = eval("document.all." + val.getAttribute("ControlToCompare"));//post
	compareTo = objControlToCompare.value;

	//先轉換成Asp.Net看的懂的日期格式再讓CompareValidator驗證
	var strPreBoxValue = ValidatorGetValue(val.controltovalidate);
	var strPostBoxValue = compareTo;
	if(strPreBoxValue.length!=0)strPreBoxValue=__ATConvertDateString(strPreBoxValue,0);
	if(strPostBoxValue.length!=0)strPostBoxValue=__ATConvertDateString(strPostBoxValue,0);

//	args.IsValid = ValidatorCompare(value, compareTo, operator, val);
	args.IsValid = ValidatorCompare(strPreBoxValue, strPostBoxValue, operator, val);

	
}