/*-------------------------------------------------------------------------------------------------------------------
 Script Name: functions.js
 Author: Tony Wei (魏志國)  tonywei123@gmail.com
 Description: JavaScript 共用函式庫
 Revision History:
   1.0: original version 2007/1/25
-------------------------------------------------------------------------------------------------------------------*/


// 忘記密碼表單
function check_forget()
{
	if ( ! check_required( 'uid2', '帳號' )   ) return false;
	return true;
}

// 聯絡我們
function check_contact()
{
	if ( ! check_required( 'account', '會員帳號 (非會員請填姓名)' )     ) return false;
	if ( ! check_required( 'email', '電子信箱' )     ) return false;
	if ( ! check_email( 'email' ) ) return false;
	if ( ! check_required( 'code', '圖片內的驗證碼' ) ) return false;
	if ( ! check_required( 'content', '您的意見' )   ) return false;
	return true;
}

// Contact Us
function check_contact_en()
{
	if ( ! check_required_en( 'email', 'your E-MAIL' )     ) return false;
	if ( ! check_email_en( 'email' ) ) return false;
	if ( ! check_required_en( 'code', 'confirmation code' ) ) return false;
	if ( ! check_required_en( 'content', 'your comments' )   ) return false;
	return true;
}

// 加入會員表單
function check_join_form( fm )
{
	if ( ! check_required( 'account', '會員帳號' )   ) return false;
	if ( ! check_member_account() ) {
		return false;
	}
	if ( ! check_required( 'password1', '會員密碼' )   ) return false;
	if ( ! check_required( 'password2', '密碼確認' )   ) return false;
	if ( fm.password1.value != fm.password2.value ) {
		alert( "會員密碼與密碼確認須一致!" );
		fm.password1.value = "";
		fm.password2.value = "";
		fm.password1.focus();
		return false;
	}
	if ( fm.password1.value.length < 4 ) {
		alert( "會員密碼須為 4 ~ 12 個英文及數字組合!" );
		fm.password1.value = "";
		fm.password2.value = "";
		fm.password1.focus();
		return false;
	}
	if ( ! check_required( 'email', 'E-mail' )   ) return false;
	if ( ! check_email( 'email' ) ) return false;
	if ( ! check_required( 'real_name', '真實姓名' )   ) return false;
	//if ( ! check_required( 'tel', '電話(日)' )   ) return false;
	//if ( ! check_required( 'tel2', '電話(夜)' )   ) return false;
	//if ( ! check_required( 'mobile', '行動電話' )   ) return false;
	//if ( ! check_required( 'zip', '郵遞區號' )   ) return false;
	if ( ! check_required( 'address', '通訊地址' )   ) return false;
	/*
	if ( ! ( fm.age1.checked || fm.age2.checked || fm.age3.checked || fm.age4.checked || fm.age5.checked ) ) {
		alert( "請勾選您的年齡!" );
		return false;
	}
	if ( ! ( fm.edu1.checked || fm.edu2.checked || fm.edu3.checked || fm.edu4.checked ) ) {
		alert( "請勾選您的教育程度!" );
		return false;
	}
	if ( ! ( fm.how1.checked || fm.how2.checked || fm.how3.checked || fm.how4.checked || fm.how5.checked || fm.how6.checked ) ) {
		alert( "請勾選如何得知此網站!" );
		return false;
	}
	*/
	return true;
}

// 修改會員資料
function check_modify_member( fm )
{
	if ( fm.password1.value.length > 0 && ( fm.password1.value != fm.password2.value ) ) {
		alert( "會員密碼與密碼確認須一致!" );
		fm.password1.value = "";
		fm.password2.value = "";
		fm.password1.focus();
		return false;
	}
	if ( fm.password1.value.length > 0 && fm.password1.value.length < 4 ) {
		alert( "會員密碼須為 4 ~ 12 個英文及數字組合!" );
		fm.password1.value = "";
		fm.password2.value = "";
		fm.password1.focus();
		return false;
	}
	if ( ! check_required( 'email', 'E-mail' )   ) return false;
	if ( ! check_email( 'email' ) ) return false;
	if ( ! check_required( 'real_name', '真實姓名' )   ) return false;
	//if ( ! check_required( 'tel', '電話(日)' )   ) return false;
	//if ( ! check_required( 'tel2', '電話(夜)' )   ) return false;
	//if ( ! check_required( 'mobile', '行動電話' )   ) return false;
	//if ( ! check_required( 'zip', '郵遞區號' )   ) return false;
	if ( ! check_required( 'address', '通訊地址' )   ) return false;
	return true;
}

// 會員登入表單
function check_member_form()
{
	if ( ! check_required( 'uid', '帳號' )   ) return false;
	if ( ! check_required( 'pwd', '密碼' ) ) return false;
	return true;
}

// 會員登入表單
function check_member_form2()
{
	if ( ! check_required( 'uid2', '帳號' )   ) return false;
	if ( ! check_required( 'pwd2', '密碼' ) ) return false;
	return true;
}

// 搜尋表單
function check_search_form()
{
	if ( ! check_required( 'keyword', '關鍵字' )   ) return false;
	objField = document.getElementById( "keyword" );
	if ( objField.value == "輸入產品關鍵字" ) {
		alert( "請輸入關鍵字!" );
		objField.value = "";
		objField.focus();
		return false;
	}
	return true;
}

// 搜尋表單
function check_search_form_en()
{
	objField = document.getElementById( "keyword" );
	if ( objField.value == "" || objField.value == "products search" ) {
		alert( "Please input the keyword!" );
		objField.value = "";
		objField.focus();
		return false;
	}
	return true;
}


// 購物清單表單
var info_body  = new Array();
var info_count = new Array();
function addInfo( pid )
{
	info_count[ pid ]++;
	document.getElementById( "div_" + pid ).innerHTML += info_body[ pid ].replace( /\_x/g, "_" + info_count[ pid ] );
}

function check_shopping_list_form( fm )
{
	var radio = new Array();
	for ( var i=0 ; i < fm.elements.length ; i++ )	{
		var em = fm.elements[i];
		if ( em.type == "text" ) {
			if ( em.name.substr( 0, 1 ) == "p" ) {
				if ( ! check_numeric( em.name, '數量' )   ) return false;
				if ( ! check_range( em.name, 0, 100, '數量' )   ) return false;
				
				// 產品型號
				var sum = 0;
				var hasInfo = false;
				for ( var j=1 ; j <11 ; j++ )
				{
					var objName = "infov_" + em.name.substr( 1 ) + "_" + j;
					var objAmount = document.getElementById( objName );
					if ( objAmount ) {
						hasInfo = true;
						sum += parseInt( objAmount.value );
					}
				}
				if ( hasInfo && sum != parseInt( document.getElementById( "p" + em.name.substr( 1 ) ).value ) ) {
					alert( "左邊的商品數量加起來應該與右邊填寫的數量相等!" );
					em.select();
					return false;
				}
			}
		}
		if ( em.type == "radio" ) {
			if ( radio[ em.name ] == null ) {
				radio[ em.name ] = 0;
			}
			if ( em.checked ) {
				radio[ em.name ] = 1;
			}
		}
	}
	for ( key in radio ) {
		if ( radio[ key ] == 0 ) {
			alert( "請勾選商品型號!" );
			return false;
		}
	}
	return true;
}

// 刪除購物清單內的某項目
function remove_item( number )
{
	var objField = document.getElementById( "p" + number );
	objField.value = "0";
	objField.form.submit();
}

// 填寫資料表單
function check_shopping_list2_form( fm )
{
	if ( ! check_required( 'receiver', '收件者姓名' )   ) return false;
	if ( ! check_required( 'tel', '聯絡電話' )   ) return false;
	if ( ! check_required( 'mobile', '行動電話' )   ) return false;
	if ( ! check_required( 'email', 'E-mail' )   ) return false;
	if ( ! check_email( 'email' ) ) return false;
	//if ( ! check_required( 'region', '鄉鎮市區名' )   ) return false;
	if ( ! check_required( 'address', '收件地址' )   ) return false;
	if( fm.invoice[1].checked ) { // 三聯式發票
		if ( ! check_required( 'inv_no', '三聯式發票的統一編號' )   ) return false;
		if ( ! check_numeric( 'inv_no', '統一編號' )   ) return false;
		if ( ! check_required( 'inv_title2', '三聯式發票的發票抬頭' )   ) return false;
	}
	return true;
}

// 電子報訂閱
function check_subscribe()
{
	if ( ! check_required( 'email', '電子郵件信箱' )   ) return false;
	if ( ! check_email( 'email' ) ) return false;
	return true;
}

// 後端--新增產品
function check_product_new()
{
	if ( document.getElementById( "content" ).value == "" ) {
		alert( "請輸入內容!" );
		return false;
	}
	if ( ! check_required( 'sn', '產品編號' )    ) return false;
	if ( ! check_required( 'prod_name', '產品名稱' )    ) return false;
	if ( ! check_required( 'price', '市價' )    ) return false;
	if ( ! check_required( 'discount_price', '會員價' )    ) return false;
	if ( ! check_required( 'vip_price', 'VIP會員價' )    ) return false;
	return true;
}


/*-------------------------------------------------------------------------------------------------------------------
 Function: buy()
 Description: 放入購物車
 Input: 商品ID, 商品名稱
 Output: N/A
 Example: 
	buy( 1, '棒球手套' );
Revision History:
   1.0: original version 2007/1/7
-------------------------------------------------------------------------------------------------------------------*/
function buy( product_ID, prod_name )
{
	call_cart( "add", product_ID + ":1" );
	alert("已將 " + prod_name + " 放入購物車");
}

/*-------------------------------------------------------------------------------------------------------------------
 Function: favorite()
 Description: 加入我的最愛
 Input: 商品ID, 商品名稱
 Output: N/A
 Example: 
	favorite( 1, '棒球手套' );
 Revision History:
   1.0: original version 2007/1/7
-------------------------------------------------------------------------------------------------------------------*/
function favorite( product_ID, prod_name )
{
	var url = "/favorite_add?pid=" + product_ID;
	ccioo_ajax_xmlHttp = ccioo_ajax_createHttp();
	ccioo_ajax_xmlHttp.open( "HEAD", url, true ); // 送出動作之後就不處理了
    ccioo_ajax_xmlHttp.send( null );
	alert("已將 " + prod_name + " 加入我的最愛");
	return;
}

/*-------------------------------------------------------------------------------------------------------------------
 Function: favorite_del()
 Description: 從我的最愛中刪除
 Input: product_ID
 Output: N/A
 Example: 
	del( 23 );
 Revision History:
   1.0: original version 2007/1/7
-------------------------------------------------------------------------------------------------------------------*/
function favorite_del( product_ID )
{
	var url = "/member_05?did=" + product_ID;
	location.href( url );
	return;
}

// -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


/*-------------------------------------------------------------------------------------------------------------------
 Function: check_required()
 Description: 檢查表單欄位是否有填寫
 Input: 物件ID, 訊息
 Output: 是否驗證通過 true or false
 Example: 
	check_required( "username", "姓名" );
Revision History:
   1.0: original version 2007/1/5
-------------------------------------------------------------------------------------------------------------------*/
function check_required( objID, sMessage )
{
	var objField = document.getElementById( objID );
	if ( objField.value.replace( /\s/g, "" ).length == 0 ) {
		alert( "請填寫" + sMessage + "!" );
		objField.focus();
		return false;
	}
	return true;
}

 /*-------------------------------------------------------------------------------------------------------------------
 Function: check_numeric()
 Description: 檢查表單欄位是否是數字
 Input: 物件ID, 訊息
 Output: 是否驗證通過 true or false
 Example: 
	check_numeric( "amount", "數量" );
Revision History:
   1.0: original version 2007/1/8
-------------------------------------------------------------------------------------------------------------------*/
function check_numeric( objID, sMessage )
{
	var objField = document.getElementById( objID );
	if ( isNaN( parseInt( objField.value ) ) ) {
		alert( sMessage + "必須是數字!" );
		objField.select();
		objField.focus();
		return false;
	}
	return true;
}

 /*-------------------------------------------------------------------------------------------------------------------
 Function: check_range()
 Description: 檢查表單欄位值是否介於最小值與最大值之間, 並轉換為整數
 Input: 物件ID, 最小值, 最大值, 訊息
 Output: 是否驗證通過 true or false
 Example: 
	check_range( "amount", 1, 100, "數量" );
Revision History:
   1.0: original version 2007/1/8
-------------------------------------------------------------------------------------------------------------------*/
function check_range( objID, iMin, iMax, sMessage )
{
	var objField = document.getElementById( objID );
	objField.value = parseInt( objField.value );
	iMin  = parseInt( iMin );
	iMax = parseInt( iMax );
	if ( objField.value < iMin || objField.value > iMax ) {
		alert( sMessage + "必須介於 " + iMin + " 與 " + iMax + " 之間!" );
		objField.select();
		objField.focus();
		return false;
	}
	return true;
}

 /*-------------------------------------------------------------------------------------------------------------------
 Function: check_email()
 Description: 檢查表單欄位是否是合法 Email 帳號
 Input: 物件ID, 訊息
 Output: 是否驗證通過 true or false
 Example: 
	check_email( "email" );
Revision History:
   1.0: original version 2007/1/8
-------------------------------------------------------------------------------------------------------------------*/
function check_email( objID, sMessage )
{
	var objField = document.getElementById( objID );
	var filter= /^([\w-]+(?:\.\w+)*)@((?:\w+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
	if ( ! filter.test( objField.value ) ) {
		alert( "請填寫正確的Email信箱!" );
		objField.select();
		objField.focus();
		return false;
	}
	return true;
}

/*-------------------------------------------------------------------------------------------------------------------
 Function: check_member_account()
 Description: 檢查會員帳號是否已經有人使用
 Input: N/A
 Output: true or false
 Example: 
	check_member_account()
 Revision History:
   1.0: original version 2008/1/11
   1.1: 加入亂數，避免快取 2008/1/17
-------------------------------------------------------------------------------------------------------------------*/
function check_member_account()
{
	var url = "/check_member?rand=" + Math.round( ( Math.random() * 90000 )+1 ) + "&account=" + document.getElementById("account").value;
	ccioo_ajax_xmlHttp = ccioo_ajax_createHttp();
	ccioo_ajax_xmlHttp.open( "GET", url, false ); // 不使用非同步, 直接等待取回
    ccioo_ajax_xmlHttp.send( null );
	var objTag = ccioo_ajax_xmlHttp.responseXML.getElementsByTagName("item");
	var sReturn = objTag[0].firstChild.nodeValue;
	if ( parseInt( sReturn ) > 0 ) {
		alert( "此帳號已經有人使用，請您換一個帳號!" );
		document.getElementById("account").value = "";
		return false;
	}
	return true;
}

/*-------------------------------------------------------------------------------------------------------------------
 Function: change_select_index()
 Description: 更改 <SELECT> 下拉選單的選取項目
 Input: 物件ID, 被選取值
 Output: N/A
 Example: 
	change_select_index( "education", "{education}" );
Revision History:
   1.0: original version 2007/1/5
-------------------------------------------------------------------------------------------------------------------*/
function change_select_index( objID, sValue )
{
	var coll = document.getElementById( objID );
	for ( i=0; i< coll.options.length ; i++ ) {
		if ( coll.options(i).value == sValue ) {
			coll.selectedIndex = i;
		}
	}
}

/*-------------------------------------------------------------------------------------------------------------------
 Function: jump_form()
 Description: 換頁, 使用 POST
 Input: 新頁碼
 Output: N/A
 Example: 
	jump_form(2);
Revision History:
   1.0: original version 2007/1/8
-------------------------------------------------------------------------------------------------------------------*/
function jump_form(p) {
	document.form1.page.value = p;
	document.form1.submit();
}

/*-------------------------------------------------------------------------------------------------------------------
 Function: jump_get()
 Description: 換頁, 使用 GET
 Input: 新頁碼
 Output: N/A
 Example: 
	jump_get(2);
Revision History:
   1.0: original version 2007/1/10
-------------------------------------------------------------------------------------------------------------------*/
function jump_get(p) {
	location.href = location.pathname + "?p=" + p;
}

/*-------------------------------------------------------------------------------------------------------------------
 Function: jump_prod()
 Description: 換頁, 使用 GET
 Input: cat_id, 新頁碼
 Output: N/A
 Example: 
	jump_prod( 5, 2 );
Revision History:
   1.0: original version 2007/1/27
-------------------------------------------------------------------------------------------------------------------*/
function jump_prod( cno, p) {
	location.href = location.pathname + "?cno=" + cno + "&p=" + p;
}

/*-------------------------------------------------------------------------------------------------------------------
 Function: go_search()
 Description: 搜尋
 Input: N/A
 Output: N/A
 Example: 
	go_search();
Revision History:
   1.0: original version 2007/1/10
-------------------------------------------------------------------------------------------------------------------*/
function go_search()
{
	var words = document.getElementById('words');
	if ( words.value == "" || words.value == "請輸入關鍵字" ) {
		alert( "請輸入關鍵字!" );
		words.focus();
		return false;
	}
	location.href = location.pathname + "?w=" + encodeURI( words.value );
}

 /*-------------------------------------------------------------------------------------------------------------------
 Function: sum_it()
 Description: 自動加總左邊的產品型號數量
 Input: 物件ID
 Output: N/A
 Example: 
	sum_it( "infov_1" );
Revision History:
   1.0: original version 2007/1/8
-------------------------------------------------------------------------------------------------------------------*/
function sum_it( objSelf, number )
{
	var fm   = objSelf.form;
	var sum = 0;
	for ( var i=0 ; i < fm.elements.length ; i++ )	{
		if ( fm.elements[i].name.indexOf( "infov_" + number + "_" ) > -1 ) {
			sum += parseInt( fm.elements[i].value );
		}
	}
	document.getElementById( "p" + number ).value = sum;
}

/*-------------------------------------------------------------------------------------------------------------------
 Function: thesame_click()
 Description: "勾選"同訂購人資料
 Input: this
 Output: N/A
 Example: 
	go_search();
Revision History:
   1.0: original version 2007/1/11
-------------------------------------------------------------------------------------------------------------------*/
function thesame_click( objSelf )
{
	if ( objSelf.checked ) {
		var fm = objSelf.form;
		for ( var i=0 ; i < fm.elements.length ; i++ )	{
			if ( fm.elements[i].value1 ) {
				if ( fm.elements[i].type == "text" ) {
				  fm.elements[i].value = fm.elements[i].value1;
				}
				if ( fm.elements[i].type == "select-one" ) {
				  fm.elements[i].selectedIndex = fm.elements[i].value1;
				}
			}
		}
	}
}

/*-------------------------------------------------------------------------------------------------------------------
 Function: check_required_en()
 Description: 檢查表單欄位是否有填寫
 Input: 物件ID, 訊息
 Output: 是否驗證通過 true or false
 Example: 
	check_required( "username", "姓名" );
Revision History:
   1.0: original version 2007/1/5
-------------------------------------------------------------------------------------------------------------------*/
function check_required_en( objID, sMessage )
{
	var objField = document.getElementById( objID );
	if ( objField.value.replace( /\s/g, "" ).length == 0 ) {
		alert( "Please input the " + sMessage + "." );
		objField.focus();
		return false;
	}
	return true;
}

 /*-------------------------------------------------------------------------------------------------------------------
 Function: check_email_en()
 Description: 檢查表單欄位是否是合法 Email 帳號
 Input: 物件ID, 訊息
 Output: 是否驗證通過 true or false
 Example: 
	check_email( "email" );
Revision History:
   1.0: original version 2007/1/8
-------------------------------------------------------------------------------------------------------------------*/
function check_email_en( objID, sMessage )
{
	var objField = document.getElementById( objID );
	var filter= /^([\w-]+(?:\.\w+)*)@((?:\w+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
	if ( ! filter.test( objField.value ) ) {
		alert( "Please input the correct E-mail." );
		objField.select();
		objField.focus();
		return false;
	}
	return true;
}
