﻿/* 
用途：非數字不能輸入 (用在 onKeyDown 事件)
輸入：
返回：
*/ 
function PlusNumber(evt)
{
    evt = (evt) ? evt : ((window.event) ? window.event : "")
    keyCode = evt.keyCode ? evt.keyCode : (evt.which ? evt.which :evt.charCode); 

    if ((keyCode>=48 && keyCode<=57) || (keyCode>=96 && keyCode<=105) || keyCode==13 || keyCode==8 || keyCode==9)
        return true;
    else
    {
        return false;
    }
}

/* 
用途：檢查輸入對象的值是否符合正整數格式 (用在 onKeyDown 事件)
輸入：obj:輸入框控件對象
返回：如果通過驗證返回true,否則返回false
*/  
function isNumber(obj)
{ 
    var regu = "^[0-9]+$"; 
    var re = new RegExp(regu); 
    if (obj.value.search(re) != -1) 
    { 
        obj.style.backgroundColor='#F9F9F9';
        return true; 
    }
    else
    { 
        alert('Quantity enter not recognized, must enter in numeric characters!');
        obj.focus();
        obj.select();
        obj.style.backgroundColor='#FFEEEE';
        return false; 
    } 
} 

/* 
用途：檢查輸入對象的值是否符合E-Mail格式 
輸入：obj:輸入框控件對象
返回：如果通過驗證返回true,否則返回false
*/ 
function isEmail(obj)
{ 
    var myReg = /^[-_A-Za-z0-9.]+@([-_A-Za-z0-9]+\.)+[A-Za-z0-9]{2,3}$/; 
    if(myReg.test(obj.value))
    { 
        obj.style.backgroundColor='#F9F9F9';
        return true; 
    }
    else
    { 
        alert('Email address not valid!');
        obj.focus();
        obj.select();
        obj.style.backgroundColor='#FFEEEE';
        return false; 
    } 
} 

/* 
用途：檢查輸入字符串是否符合要求 (只能由 半角英文:字母, 數字, 空格, 下划線, 減號 等, 部分符號{ ,.@#"$() } 組成)
輸入：obj:輸入框控件對象
返回：如果通過驗證返回true,否則返回false 
*/ 
function isNumberOrCharOrLetter(obj)
{ 
    obj.style.backgroundColor='#F9F9F9';
    if (obj.value.replace(/ /g,'') == '') //無資料直接返回 True
    { 
        return true; 
    }
    
    var regu = "^[\\\\\r\n?=&:,.@#$()0-9a-zA-Z\"\/\ \_\-]+$";
    var re = new RegExp(regu); 
    if (re.test(obj.value))
    {
        return true;
    }
    else
    {
        alert('You may enter only: A-Z or ) : - _ , . @ # \" $ ( or 0-9 or a-z ');
        obj.focus();
        obj.select();
        obj.style.backgroundColor='#FFEEEE';
        return false;
    } 
} 

/* 
用途：檢查 輸入對象1 的值是否等於 輸入對象2 的值
輸入：obj1:輸入框控件對象； obj2:輸入框控件對象
返回：如果通過驗證返回true,否則返回false
*/  
function ABmatch(obj1, obj2)
{ 
    if (obj1.value.replace(/ /g,'') == obj2.value.replace(/ /g,'')) 
    { 
        obj2.style.backgroundColor='#F9F9F9';
        return true; 
    }
    else
    { 
        alert('TextBox 1 and TextBox 2 do not match!');
        obj2.focus();
        obj2.select();
        obj2.style.backgroundColor='#FFEEEE';
        return false; 
    } 
} 

/*
用途：驗證控件輸入值是否為空值
輸入：obj:輸入框控件對象；msg:空值提示語
返回：如果通過驗證返回true,否則返回false
*/
function CheckNull(obj,msg)
{ 
    obj.style.backgroundColor='#F9F9F9';
    if (obj.value.replace(/ /g,'')=='')
    {
        alert(msg);
        obj.focus();
        obj.style.backgroundColor='#FFEEEE';
        return false;
    }
    return true;
} 

/*
用途：輸入框控件按迴車鍵時，相應的提交按鈕獲得焦點(用在 onKeyDown 事件)
輸入：BtnActionID:提交按鈕對象；evt:輸入框控件的事件(event)
返回：void
*/
function EnterAction(BtnActionID,evt)
{
    evt = (evt) ? evt : ((window.event) ? window.event : "")
    keyCode = evt.keyCode ? evt.keyCode : (evt.which ? evt.which :evt.charCode); 
    
    if (keyCode == 13)
    {         
        keyCode=9;
        try
        {
            document.getElementById(BtnActionID).focus();
            document.getElementById(BtnActionID).select();
        }catch(exception){}
    }
}

/*
用途：提交按鈕只能點一次。 須配合 
      <!-- <input type="hidden" value="1" id="hiddenSubmitOneTimeOnClick" name="hiddenSubmitOneTimeOnClick"> -->
      隱藏框一起使用
輸入：提交按鈕的事件(event)
返回：如果通過驗證返回true,否則返回false
*/
function SubmitOneTimeOnClick(e)
{
	if(document.getElementsByName("hiddenSubmitOneTimeOnClick").item(0).value=="1")
	{
		document.getElementsByName("hiddenSubmitOneTimeOnClick").item(0).value="2";
		return true;
	}
	else
	{
        try
        {
            e.preventDefault();
            e.stopPropagation();
        }catch(exception){}
        try
        {
		    event.returnValue = false;
		}catch(exception){}
		
		return false;
	}
}

/*
用途：顯示或隱藏物件 (控制Visible屬性: 隱藏時保留網頁位置)
輸入：objID: 要顯示或隱藏物件的 id ; VorH: 0:隱藏, 1:顯示, 2:自動(原顯示則隱藏, 原隱藏則顯示)
返回：void
*/
function DivLayerVisible(objID, VorH)
{
    if(document.getElementById(objID)==null)
        return;
        
    if(VorH==0)
        document.getElementById(objID).style.visibility = 'hidden';
    else if(VorH==1)
        document.getElementById(objID).style.visibility = 'visible';
    else
    {
	    if(document.getElementById(objID).style.visibility = 'hidden')
		    document.getElementById(objID).style.visibility = 'visible';
	    else
		    document.getElementById(objID).style.visibility = 'hidden';
	}
}
/*
用途：顯示或隱藏物件 (控制Display屬性: 隱藏時不保留網頁位置)
輸入：objID: 要顯示或隱藏物件的 id ; VorH: 0:隱藏, 1:顯示, 2:自動(原顯示則隱藏, 原隱藏則顯示)
返回：void
*/
function DivLayerDisplay(objID, VorH)
{
    if(document.getElementById(objID)==null)
        return;
        
    if(VorH==0)
        document.getElementById(objID).style.display=="none";
    else if(VorH==1)
        document.getElementById(objID).style.display=="block";
    else
    {
	    if(document.getElementById(objID).style.display=="none")
		    document.getElementById(objID).style.display="block";
	    else
		    document.getElementById(objID).style.display="none";
	}
}

//調用 Ajax
/*
用途: Ajax
用法: 首先調用startRequest(url)方法, 然後在實現doInnerHTML(text)方法(text:Ajax接收伺服器返回的內容)
輸入: url: 要將值傳回至哪裡
返回: void
*/
function startRequest(url) 
{
    createXMLHttpRequest();
    xmlHttp.onreadystatechange = handleStateChange;
    xmlHttp.open("POST", url, true);
    xmlHttp.send(null);
}
var xmlHttp;
function createXMLHttpRequest() 
{
    if (window.ActiveXObject)
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    else if (window.XMLHttpRequest)
        xmlHttp = new XMLHttpRequest();
}
function handleStateChange() 
{
    if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {
        var reText = xmlHttp.responseText;  //返回的內容

        //服務器錯誤
        if (reText == "-1") {
            alert('error!');
            return;
        }
        
        //根據返回字串的開頭4字節判斷調用哪個方法
        var reTextStart = reText.substring(0, 4);
        switch (reTextStart) 
        {
            case "vip-":    //檢查會員註冊帳號
                doInnerHTMLvip(reText);
                break;
            case "amt-":    //取得購物車統計信息
                ResetSummaryTable(reText.substring(4));
                break;
            case "gea-":    //有貨通知我取得會員Email
                notifyMeReStockedEmail(reText.substring(4));
                break;
            case "nrs-":    //有貨通知我
                break;
            case "apm-":    //批量添加產品到ShoppingCart
                addSelectedItemsToCartOK(reText);
                break;
            case "del-":    //刪除Wishlist產品
                doInnerHTMLRemoveItem(reText);
                break;
            case "add-":    //添加產品到Cart,Wishlist, 或者刪除Cart的產品
                doInnerHTMLAddItem(reText.substring(4));
                break;
            default:
                alert('unsuccessfully!');
                break;
        }
    }
}
//end 調用 Ajax

/*
用途：CheckBox 的全選與 全不選
輸入：tableName:包含要操作的CheckBox 的 Table 名
返回：void
*/
function CheckBoxSelectAll(tableName, objAction) 
{
    var objtmp = document.getElementById(tableName);
    if (objtmp == null)
        return;
    var obj = objtmp.getElementsByTagName("input");
    if (obj == null)
        return;

    var selectState = objAction.checked;
    for (var i = 0; i < obj.length; i++) 
    {
        if (obj[i].type.toLowerCase().replace(/ /g, '') == "checkbox") 
        {
            obj[i].checked = selectState;
        }  
    }
}