
/*
 * 註冊基本型態String的額外function
 *
 * String類別的變數將可以直接使用以下function
 * 
 * 範例
 *   var str = '  測試  ';
 *   alert(str.trim());
 */
String.prototype.trim = trim;//傳回去除前後空白的值
String.prototype.ltrim = ltrim;//傳回去除左邊空白的值
String.prototype.rtrim = rtrim;//傳回去除右邊空白的值

function trim(){
	return this.replace(/^\s+|\s+$/g, "");
}

function ltrim(){
	return this.replace(/(^\s*)/g, "");
}

function rtrim(){
	return this.replace(/(\s*$)/g, "");
} 

/*
 * 凍結表頭類型的Table使用，調整表頭的欄位寬度跟資料欄位寬度相同
 */
function setTableWidth(headerTable,contentTable){
	var hTable = document.getElementById(headerTable);
	var cTable = document.getElementById(contentTable);			
	
	if (cTable.rows.length > 0 && cTable.rows[0].cells.length == hTable.rows[1].cells.length){
		for (var i=0; i<hTable.rows[1].cells.length ; i++){		
			hTable.rows[1].cells[i].style.width = (cTable.rows[0].cells[i].offsetWidth-12) + 'px';
		}
	}else{
		hTable.style.width = "99%";
	}	
}

/*
 * 取得與伺服器傳送請求物件
 */
function AJAXRequest(){
	if (window.XMLHttpRequest) {//Safari, Firefox,及其他瀏覽器
        return new XMLHttpRequest();
      } else if (window.ActiveXObject) {//IE      
        try{
        	return new ActiveXObject("Msxml2.XMLHTTP")
        }catch(e){        
	        return new ActiveXObject("Microsoft.XMLHTTP");
        }
      }
}

/*
 * 將指定網頁顯示在報表結果區塊
 * 
 * 參數
 *	 url : 指定網頁的完整網址
 *
 * 範例
 *   <input type="button" value="查詢" onclick="setReport('http://www.gretai.org.tw/emgstock/main.htm')">
 */
function setReport(url) {	 
    var element = document.getElementById("rpt_result"); //取得報表結果區塊
	if (!element) {
		alert(id + "not found.");
		return;
	}
	
	var req = AJAXRequest();      
	if (req != null) {					
		req.onreadystatechange = processRequest;//處理request的onReadyStateChange事件
		//url = url+"?timestamp="+(new Date().getTime());//加上時間註記讓每次url都不同,避免cache								
		if (url.indexOf('http')>=0){
			url = "/php/result.php?url="+url;
		}else{
			var urlPath = document.URL.substring(0,document.URL.lastIndexOf('/')+1);		
			url = "/php/result.php?url="+urlPath+url;
		}
		req.open('GET', url, false);
		req.send(null);
		
	} else {
		element.innerHTML = "";
		return;
	}   
	
	//處理request的onReadyStateChange事件	
	function processRequest () {
      
      if (req.readyState == 4) {// readyState = 4 表示已從server獲得回應並傳輸完成
        if (req.status == 200 || req.status == 0) {// status = 200 表示server回應正常(HTTP code) 
			
			element.innerHTML = req.responseText;
          
        }else{
			
			element.innerHTML = "查無資料";	        
	    }
      }
    }
	
}

/*
 * 將指定網頁顯示在報表結果區塊
 * 
 * 參數
 *	 url : 指定網頁的完整網址
 *
 * 範例
 *   <input type="button" value="查詢" onclick="setReport('http://www.gretai.org.tw/emgstock/main.htm')">
 */
function setReport(url,param) {	    
    
    var element = document.getElementById("rpt_result"); //取得報表結果區塊
	if (!element) {
		alert(id + "not found.");
		return;
	}
	
	var req = AJAXRequest();      	
	if (req != null) {					
		req.onreadystatechange = processRequest;//處理request的onReadyStateChange事件		
	
		if (param == null){//GET
			if (url.indexOf('http')>=0){
				url = "/php/result.php?url="+url;
			}else{
				var urlPath = document.URL.substring(0,document.URL.lastIndexOf('/')+1);		
				url = "/php/result.php?url="+urlPath+url;			
			}
			req.open('GET', url, false);
			req.send(null);
		}else{//POST		
			if (url.indexOf('http')<0){
				var urlPath = document.URL.substring(0,document.URL.lastIndexOf('/')+1);					
				url = urlPath+url;						
			}		
			req.open('POST', url, true);				
			req.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
			req.setRequestHeader('Content-length', param.length);
			req.setRequestHeader('Connection', 'close');			
			req.send(param);				
		}
	} else {
		element.innerHTML = "查無資料";
		return;
	}   
	
	//處理request的onReadyStateChange事件	
	function processRequest () {
      
      if (req.readyState == 4) {// readyState = 4 表示已從server獲得回應並傳輸完成
        if (req.status == 200 || req.status == 0) {// status = 200 表示server回應正常(HTTP code) 			
			element.innerHTML = req.responseText;
			var headerTable = document.getElementById('headerTable');
			var contentTable = document.getElementById('contentTable');
			var contentArea = document.getElementById('contentArea');			
			
			if (headerTable !=null && contentTable != null && contentArea != null){			
				setTableWidth('headerTable','contentTable');						
			
				if (contentTable.offsetHeight > 244){
					contentArea.style.height = '244px';	
				}
				if (contentTable.rows.length == 0){
					headerTable.style.width = "99%";
				}else{
					headerTable.style.width = contentTable.offsetWidth+'px';
				}
				
				var footerTable = document.getElementById('footerTable');	
				if (footerTable != null){
					footerTable.style.width = headerTable.offsetWidth+'px';
				}
			}						
			
        }else{
			
			element.innerHTML = "查無資料";	        
	    }
      }
    }	
}

/*
 * 將指定訊息顯示在報表結果區塊
 * 
 * 參數
 *	 msg : 要顯示的訊息
 *
 */
function setReportMessage(msg){
	var content = "<table class='table-board' width='100%'><tr><td class='table-title' align='center'>訊息</td></tr><tr><td class='table-body-center'>"+msg+"</td></tr></table>";
	document.getElementById("rpt_result").innerHTML = content;
}

function setReportMessageE(msg){
	var content = "<table class='table-board' width='100%'><tr><td class='table-title' align='center'>Warning</td></tr><tr><td class='table-body-center'>"+msg+"</td></tr></table>";
	document.getElementById("rpt_result").innerHTML = content;
}



/*
 * 清除報表結果區塊訊息
 *
 */
function clearReportMessage(){	
	document.getElementById("rpt_result").innerHTML = "";
}

/*
 * 清除報表結果區塊
 *
 */
function clearReport(){	
	document.getElementById("rpt_result").innerHTML = "";
}

/*
 * 將指定網頁顯示在新視窗
 * 
 * 參數
 *	 url : 指定網頁的完整網址
 *
 * 範例
 *   <input type="button" value="查詢" onclick="popupReport('http://www.gretai.org.tw/emgstock/main.htm')">
 */
function popupReport(url) {	
    
    var sFeature = "width=800px,height=600px,status=no,help=no,scrollbars=yes,resizable=yes";
    window.open(url,"",sFeature);
	
}

function popupReport(url,width,height) {	
    var sFeature = "";
    
    if (width == null || height == null){
		//未指定以全螢幕開啟
		width = screen.availWidth;
		height = screen.availHeight;				
    }   	
    
    sFeature = "width="+width+"px,height="+height+"px,status=no,help=no,scrollbars=yes,resizable=yes";    
    window.open(url,"",sFeature);
}


/*
 * 設定下拉式選單選項(民國年)
 *
 *  參數
 *	 cbName : 下拉式選單名稱
 *   fromYear : 選項自幾年開始
 *   ad : 是否顯示為西元年
 *
 * 範例
 *   
 */
function setYearOption(cbName,fromYear,ad){	
	
	var cb = document.getElementById(cbName); //取得下拉式選單元件
				
	var thisYear = new Date().getFullYear();
		
	for (var i=fromYear; i<=thisYear; i++){
	
		var item = document.createElement("option");
		
		item.value = i;
		item.innerText = ad ? i : (i-1911);
		
		if (i==thisYear){
			item.selected = true;
		}
		
		cb.appendChild(item);
	}
}

/*
 * 設定下拉式選單選項(月)
 *
 *  參數
 *	 cbName : 下拉式選單名稱
 *   year   : 指定年份
 *   fromMonth : 選項自幾月開始
 *
 * 範例
 *   
 */
function setMonthOption(cbName,year,fromMonth){	
	
	var cb = document.getElementById(cbName); //取得下拉式選單元件		
				
	var dateObj = new Date();
	
	var thisYear = dateObj.getFullYear();
	
	var thisMonth = dateObj.getMonth()+1;
	
	var lastMonth = 12;
	
	if (year == thisYear){
		lastMonth = thisMonth;
	}
		
	for (var i=fromMonth; i<=lastMonth; i++){
	
		var item = document.createElement("option");
		
		item.value = i;
		item.innerText = leftPad(i+"",2);
		
		if ((year==thisYear) && (i==thisMonth)){
			item.selected = true;
		}
		
		cb.appendChild(item);
	}
}

/*
 * 設定下拉式選單選項(週)
 *
 *  參數
 *	 cbName : 下拉式選單名稱
 *   year   : 指定年份
 *   month  : 指定月份
 *
 * 範例
 *   
 */
function setWeekOption(cbName,year,month){	
	
	var cb = document.getElementById(cbName); //取得下拉式選單元件							
			
	var dateObj = new Date();
	
	var thisYear = dateObj.getFullYear();		
		
	var thisMonth = leftPad((dateObj.getMonth()+1)+"",2);
	
	var today = thisMonth+""+leftPad(dateObj.getDate()+"",2);		
	
	var weekFile = "/js/"+year+leftPad(month+"",2)+".xml";	

	var req = AJAXRequest();      	
	if (req != null) {					
		req.onreadystatechange = processRequest;//處理request的onReadyStateChange事件
		url = weekFile+"?timestamp="+(new Date().getTime());//加上時間註記讓每次url都不同,避免cache
		
		req.open('GET', url, false);
		req.send(null);		
	} else {		
		return;
	}       
	
	//處理request的onReadyStateChange事件	
	function processRequest () {
      
      if (req.readyState == 4) {// readyState = 4 表示已從server獲得回應並傳輸完成
        if (req.status == 200 || req.status == 0) {// status = 200 表示server回應正常(HTTP code) 
			
			if (window.XMLHttpRequest) {//Safari, Firefox,及其他瀏覽器
		        
		        processXML(req.responseXML);
		    
		    } else if (window.ActiveXObject) {//IE   
		    		    			    	
            	var xmlDocument = new ActiveXObject("MSXML.DomDocument");
            	xmlDocument.loadXML(req.responseText);
               		
            	processXML(xmlDocument);
	        
          	}			        
        }
      }
    }
    
    function processXML(xmlDoc){    		
    
		var tagName = "week";
		
		var weekList = xmlDoc.getElementsByTagName(tagName);	
					
		
		for (var i=0; i<weekList.length; i++){
	
				var weekDays = getNodeValue(xmlDoc,tagName,i);
								
				var firstDay = weekDays.substring(0,4);
				
				var lastDay = weekDays.substring(5,9);
				
				var item = document.createElement("option");
				
				if ((year == thisYear) && (today < firstDay)){
					continue;
				}
				
				item.value = year+""+firstDay+"~"+year+""+lastDay;
				item.innerText = weekDays.substring(0,2)+"/"+weekDays.substring(2,7)+"/"+weekDays.substring(7,9);
				
				if ((year == thisYear) && (leftPad(month+"",2) == thisMonth)){
					if (today>=firstDay && today <= lastDay){
						item.selected = true;
					}
				}
		
				cb.appendChild(item);
		}  
    }
}

/*
 * 設定下拉式選單選項(債券基本資料)
 *
 *  參數
 *	 cbName : 下拉式選單名稱
 *   year   : 指定年份
 *   month  : 指定月份
 *
 * 範例
 *   
 */
function setBondOption(cbName){	
	
	var cb = document.getElementById(cbName); //取得下拉式選單元件											

	var req = AJAXRequest();      	
	if (req != null) {					
		req.onreadystatechange = processRequest;//處理request的onReadyStateChange事件
		url = "http://localhost:8080/app/bond"+"?timestamp="+(new Date().getTime());//加上時間註記讓每次url都不同,避免cache
		
		req.open('GET', url, false);
		req.send(null);		
	} else {		
		return;
	}   
	
	//處理request的onReadyStateChange事件	
	function processRequest () {
      
      if (req.readyState == 4) {// readyState = 4 表示已從server獲得回應並傳輸完成
        if (req.status == 200 || req.status == 0) {// status = 200 表示server回應正常(HTTP code) 
			
			if (window.XMLHttpRequest) {//Safari, Firefox,及其他瀏覽器
		        
		        processXML(req.responseXML);
		    
		    } else if (window.ActiveXObject) {//IE   
		    		    			    	
            	var xmlDocument = new ActiveXObject("MSXML.DomDocument");
            	xmlDocument.loadXML(req.responseText);
               		
            	processXML(xmlDocument);
	        
          	}			        
        }
      }
    }
    
    function processXML(xmlDoc){    		    		
				
		var bondList = xmlDoc.getElementsByTagName("bond");					
		
		for (var i=0; i<bondList.length; i++){
	
				var id = getNodeValue(xmlDoc,"id",i);
				
				var name = getNodeValue(xmlDoc,"name",i);
																
				var item = document.createElement("option");
				
				item.value = id+"_"+name;
				item.innerText = id+"_"+name;								
		
				cb.appendChild(item);
		}  
    }
}

/*
 * 處理XML使用-取得節點值
 */
function getNodeValue(xmlDoc,tagName,index){
	return (xmlDoc.getElementsByTagName(tagName)==null || xmlDoc.getElementsByTagName(tagName).item(index)==null || xmlDoc.getElementsByTagName(tagName).item(index).firstChild==null) ? "" : xmlDoc.getElementsByTagName(tagName).item(index).firstChild.nodeValue;
}

/*
 * 處理XML使用-取得節點物件
 */
function getNodeElement(xmlDoc,tagName,index){
	return (xmlDoc.getElementsByTagName(tagName)==null || xmlDoc.getElementsByTagName(tagName).item(index)==null) ? null : xmlDoc.getElementsByTagName(tagName).item(index).firstChild;
}

/*
 * 左邊補0
 *
 *  參數
 *	 str : 原字串
 *   maxLen : 最大長度
 */
function leftPad(str,maxLen){
	while(str.length < maxLen){
		str = "0"+str;
	}
	return str;
}

/*
 * 觸發下拉式選單(月)選項改變事件
 */
function changeMonthSelect(yName,mName){
	var ycb = document.getElementById(yName);
	var mcb = document.getElementById(mName);
	var yy = ycb.value;
	
	var dateObj = new Date();
	var thisYear = dateObj.getFullYear();
	var maxMonth = 12;
	
	if (yy == thisYear){
		maxMonth = (dateObj.getMonth()+1);
	}
	
	removeOptions(mcb);
	
	for (var i=1;i<=maxMonth;i++){
		var item = document.createElement("option");
		item.value = i;
		item.innerText = leftPad(i+"",2);
		mcb.appendChild(item);
	}

}

/*
 * 觸發下拉式選單(週)選項改變事件
 */
function changeWeekSelect(yName,mName,wName){
	var ycb = document.getElementById(yName);
	var mcb = document.getElementById(mName);
	var wcb = document.getElementById(wName);
	var yy = ycb.value;
	var mm = mcb.value;
	
	removeOptions(wcb);
	
	setWeekOption(wName,yy,mm);
}

/*
 * 移除下拉式選單的所有選項
 */
function removeOptions(cb){
	while (cb.options.length>0){
		cb.remove(0);
	}
}

/*
 * 判斷網頁/檔案是否存在
 * 
 * 參數
 *	 url : 指定網頁的相對/完整網址
 *
 * 回傳
 *	 true : 指定網頁的相對/完整網址存在
 *	 false : 指定網頁的相對/完整網址不存在 
 * 
 * 範例
 *   if (fileExists('/bond/daily/20061201quote.htm') == false){
 *          alert('查無資料');
 *   }else{
 *			setReport('/bond/daily/20061201quote.htm');
 *   }   
 *
 */
function fileExists(url) {	
    
	var req = AJAXRequest(); 
	var result = false;     	
	if (req != null) {					
		req.onreadystatechange = processRequest;//處理request的onReadyStateChange事件			
		req.open('GET', url, false);
		req.send(null);		
		return result;
	} else {		
		return false;
	}        
	
	//處理request的onReadyStateChange事件	
	function processRequest () {      
      if (req.readyState == 4) {// readyState = 4 表示已從server獲得回應並傳輸完成
        if (req.status == 200 || req.status == 0) {// status = 200 表示server回應正常(HTTP code) 			
			result = true;          
        }else{			
			result =  false;
	    }
      }
    }
	
}

/*
 * 對HTML元素的onkeypress事件註冊此function可直接限制使用者只能輸入數字
 * 
 * 範例
 *   <input type='text' onkeypress='numberPressed();'>
 *
 */
function numberPressed(){ 
	var isValidKey = false; 
	var intCode = window.event.keyCode; 
	
	if (intCode >= 48 && intCode <= 57) isValidKey = true;//允許所有數字鍵
	if (intCode == 13) isValidKey = true; //允許enter鍵 
	if (intCode == 32) isValidKey = true; //允許spacebar鍵
	if (intCode == 46) isValidKey = true; //允許.鍵	
	
	window.event.returnValue = isValidKey; 
}


/*
 * 開啟上櫃股票代碼查詢視窗
 *  
 * 範例
 *   
 */
function openStockWindow(){
	var codeStr = showModalDialog("/app/stock.code","請輸入關鍵字或選擇類股","dialogWidth:20em;dialogHeight:28em;status:no;help:no");
	if (codeStr)
		document.all.input_stock_code.value = codeStr;
}

/*
 * 開啟興櫃股票代碼查詢視窗
 *  
 * 範例
 *   
 */
function openEmgStockWindow(){
	var codeStr = showModalDialog("/app/emgstk.code","請輸入關鍵字或選擇類股","dialogWidth:20em;dialogHeight:28em;status:no;help:no");
	if (codeStr)
		document.all.input_emgstk_code.value = codeStr;
}

/*
 * 開啟興櫃股票代碼查詢視窗(英文版)
 *  
 * 範例
 *   
 */
function openEmgStockWindowEn(){
	var codeStr = showModalDialog("/app/emgstk.code?lang=en","Please input keyword or select industry","dialogWidth:24em;dialogHeight:28em;status:no;help:no");
	if (codeStr)
		document.all.input_emgstk_code.value = codeStr;
}

/*
 * 開啟債券代碼查詢視窗
 *  
 * 範例
 *   
 */
function openBondWindow(){
	
}

/*
 * 開啟券商代碼查詢視窗
 *  
 * 範例
 *   
 */
function openBrokerWindow(){
	var codeStr = showModalDialog("/app/commentbroker.code","請輸入關鍵字或選擇類股","dialogWidth:22em;dialogHeight:28em;status:no;help:no");
	if (codeStr)
		document.all.input_broker_code.value = codeStr;
}

/*
 * 取得完整URL
 *  
 * 範例
 *   
 */
function getFullUrl(urlToken){
	var urlPath = document.URL.substring(0,document.URL.indexOf('/ch/'));
	var url = urlPath + urlToken;
	return url;
}

/*
 * 取得完整URL
 *  
 * 範例
 *   
 */
function getFullUrlEn(urlToken){
	var urlPath = document.URL.substring(0,document.URL.indexOf('/en/'));
	var url = urlPath + urlToken;
	return url;
}

/*
 * 觸發公開資訊觀測站產生重大訊息網頁
 *
 * 註:可惡的公開資訊觀測站重大訊息網頁使用Servlet撰寫，如未從正常網頁入口進入，而直接連到內頁會看到資料庫查無資訊之訊息頁面(推測該站機制是要有人進入入口頁面才會產生instance及網頁)
 *    為使本網站首頁的重大訊息能順利連結內頁，先偷偷送一個request給公開資訊觀測站重大訊息網頁入口，讓它以為有人要進來看了，嘿嘿 ^^
 *
 * 此程式於首頁(ch/index.php)觸發，請勿亂用!!
 *   
 */
function invokeMopsNews(){
	var otcNewsUrl = "http://mops.tse.com.tw/server-java/t05sr01_1otc?step=0";//上櫃重大訊息入口網頁
	var rotcNewsUrl = "http://mops.tse.com.tw/server-java/t05sr01_1rotc?step=0";//興櫃重大訊息入口網頁
	
	try{
	var req = AJAXRequest(); 	
	if (req != null) {							
		req.open('GET', otcNewsUrl, false);
		req.send(null);				
	}
	req = AJAXRequest(); 	
	if (req != null) {							
		req.open('GET', rotcNewsUrl, false);
		req.send(null);				
	}        		
	}catch(e){
	}
}