String.prototype.trim = function(){return this.replace(/(^\s*)|(\s*$)/g, "");};
String.prototype.len = function(){return this.replace(/[^\x00-\xff]/g,"aa").length;};
Object.extend = function(destination, source) 
{
	if ( typeof destination == 'object' && destination != null )
	{
		for (var property in source) destination[property] = source[property];
	}
	return destination;
};
/*firefox*/ 
function __firefox()
{ 
	HTMLElement.prototype.__defineGetter__("runtimeStyle", __element_style); 
	window.constructor.prototype.__defineGetter__("event", __window_event); 
	Event.prototype.__defineGetter__("srcElement", __event_srcElement); 
}
function __element_style(){ return this.style; } 
function __window_event(){ return __window_event_constructor(); } 
function __event_srcElement(){ return this.target;}
function __window_event_constructor()
{
	if(document.all)return window.event;
	var _caller = __window_event_constructor.caller; 
	while(_caller!=null)
	{ 
		var _argument = _caller.arguments[0]; 
		if(_argument)
		{ 
			var _temp = _argument.constructor; 
			if(_temp.toString().indexOf("Event")!=-1)return _argument; 
		}
		_caller = _caller.caller; 
	}
	return null; 
}
if(window.addEventListener){ __firefox(); }
/*end firefox*/ 
function $empty(){}
// 引用的try catch語句
function $try(fn,args,errfn,_win)
{
	try
	{
		if ( typeof fn == 'function' ) {return fn(args);}
	}
	catch(e)
	{
		if ( typeof errfn  == 'function' ) {return errfn(args,e);}
		else if ( typeof args == 'string' ){$alert(( !errfn ? '' : e.message+ '\nError Source:'+errfn) + '\n' + args);return false;}
		else{$alert(e.name+":"+e.message + (errfn ? '\nError Source:'+errfn : ''));return false;}
	}
};
function $trys()
{
	var returnValue;
	for (var i = 0, length = arguments.length; i < length; i++) 
	{
		var lambda = arguments[i];
		try 
		{
			returnValue = lambda();
			break;
		} catch (e) {}
	}
	return returnValue;
};
// 生成數組對象
function $splat(obj){if ($type(obj) != 'array') {obj = [obj];}return obj;};
function $err(obj,_sContent)
{
	if ( Browser.isIE )obj.focus();
	else
	{
		var _xy = WF.getElementCoordinate(obj);
		_xy[1] = _xy[1] > 10 ? _xy[1]- 10 : 0;
		if ( Browser.isFirefox )document.documentElement.scrollTop = _xy[1];else document.body.scrollTop = _xy[1];
		_xy = null;
	}
	$alert(_sContent || obj.innerHTML);
}
function $alert(_sAlarm,_sTitle,_fCallBack)
{
	if ( typeof Panel == 'function')
	{
		_sTitle = _sTitle || '錯誤信息';
		Panel.setCaption(_sTitle);
		Panel.setColor('#FF0000');
		Panel.open($alertformat(_sAlarm),_fCallBack);
	}
	else alert($alertformat(_sAlarm)); 
};
function $prompt(_sPrompt,_fID,_fCallBack)
{
	if ( _fID )
	{
		if ( $type(_fID) == 'string' ) _fID = $(_fID);
		_fID.style.display = 'block';
		_fID.prompt = true;
		_fID.innerHTML = _sPrompt;
	}
	else $alert(_sPrompt,'信息提示',_fCallBack);
}
function $msg(_sTitle,_sContent)
{
	Panel.setCaption((_sTitle || '無標題'));
	Panel.open(_sContent,null,0);
}
function $alertformat(_str){return typeof _str == 'string' && _str.trim().length > 0 ? _str.replace(/<br([ ]*)\/>/g,'\n') : _str;};
function $()
{
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) 
	{
		var element = arguments[i];
		if (typeof element == 'string') element = document.getElementById(element);
		if ( typeof element == 'object' && element )
		{
			element.set = function(_val)
			{if ( this.nodeName == 'INPUT' || this.nodeName == 'TEXTAREA' ) this.value = _val; else this.innerHTML = _val;}
			element.get = function(_int)
			{ 
				var _str = this.nodeName == 'INPUT' || this.nodeName == 'TEXTAREA' ? this.value : this.innerHTML;
				return _int ? parseInt(_str) : _str;
			}
			element.hide = function()
			{this.style.display = 'none';this.style.visibility  = 'hidden';}
			element.disp = function()
			{this.style.display = 'block';this.style.visibility  = 'visible';}
			element.isDisplay = function()
			{return (this.style.display == 'block' || this.style.visibility == 'visible' || this.style.display == '');}
		}
		if (arguments.length == 1) return element;
		elements.push(element);
	}
	return elements;
}
function $N(_name,_win){if ( !_name || _name == '' ) return null;_win = _win || self;if ( _win.document ) return _win.document.getElementsByName(_name); else return null;}
function $T(_tag,_doc){if ( !_tag || _tag == '' ) return null;_doc = _doc || document;if ( _doc ) return _doc.getElementsByTagName(_tag); else return null;}
// 獵取目標對象的屬性
function $type(obj)
{
	if (obj == undefined) return false;
	if (obj.$family) return obj.$family;
	if (obj.htmlElement) return 'element';
	var type = typeof obj;
	if (obj.nodeName)
	{
		switch (obj.nodeType)
		{
			case 1: return 'element';
			case 3: return (/\S/).test(obj.nodeValue) ? 'textnode' : 'whitespace';
		}
	}
	else if (typeof obj.length == 'number')
	{
		if (obj.item) return 'collection';
		if (obj.callee) return 'arguments';
		if (type == 'object') return 'array';
	}
	if (type == 'number' && !isFinite(obj)) return false;
	return type;
}
function MM_findObj(n, d) 
{
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length){
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_dragLayer(objName,e) 
{
	var i,j,aLayer,retVal,curDrag=null,curoutPut=null,curLeft,curTop,IE=document.all,NS4=document.layers;
	var NS6=(!IE&&document.getElementById), NS=(NS4||NS6); if (!IE && !NS) return false;
	retVal = true;
	if(IE && event ) event.returnValue = true;
	if (MM_dragLayer.arguments.length > 1 )
	{
		e   =   window.event||e; 
		if(!document.curDrag) document.curDrag = MM_findObj(objName);
		with(document.curDrag)
		{
			MM_dragOk=true;
			MM_oldX = offsetLeft || 0;
			MM_oldY = offsetTop || 0;
			MM_oldClientX = e.clientX;
			MM_oldClientY = e.clientY;
		}

		document.onmousedown = MM_dragLayer; 
		document.onmouseup = MM_dragLayer;
		if (NS) document.captureEvents(Event.MOUSEDOWN|Event.MOUSEUP);
	}
	else
	{
		var theEvent = ((NS)?objName.type:event.type);
		if (theEvent == 'mousedown') 
		{
			if (document.curDrag) 
			{
				if (NS) document.captureEvents(Event.MOUSEMOVE);
				document.onmousemove = MM_dragLayer;
				retVal = false; if(!NS4&&!NS6) event.returnValue = false;
			}
		}
		else if (theEvent == 'mousemove') 
		{
			if (document.curDrag) with (document.curDrag) 
			{
				var mouseX = (NS)?objName.pageX : event.clientX + document.body.scrollLeft;
				var mouseY = (NS)?objName.pageY : event.clientY + document.body.scrollTop;
				if (NS4) 
				{
					left = MM_oldX - (MM_oldClientX - mouseX);
					top = MM_oldY - (MM_oldClientY - mouseY) - window.pageYOffset;
				}
				else if (NS6)
				{
					style.left = (MM_oldX - (MM_oldClientX - mouseX)) + "px"; 
					style.top = (MM_oldY - (MM_oldClientY - mouseY)- window.pageYOffset) + "px";
				}
				else
				{
					style.pixelLeft = MM_oldX - (MM_oldClientX - mouseX); 
					style.pixelTop = MM_oldY - (MM_oldClientY - mouseY);
				}
				retVal = false; if(!NS) event.returnValue = false;
			}
		}
		else if (theEvent == 'mouseup') 
		{
			if (NS) document.releaseEvents(Event.MOUSEMOVE);
			if (NS) document.captureEvents(Event.MOUSEDOWN); 
			if (document.curDrag) with (document.curDrag) {retVal = false; if(!NS) event.returnValue = false;}
			document.curDrag = null;
		}
		//if (NS) document.routeEvent(objName);
	}
	return retVal;
}
function getUrlHead(_nofull)
{
	_nofull = _nofull || false;
	var _h = document.URL.match(/(\/~[\w]*)/ig);
	return takeUrlTailBacklash(window.location.protocol + "//" + window.location.hostname+ ( _nofull || !_h ? '' : _h));
}
function takeUrlTailBacklash(_string,_backlash)
{
	_backlash = _backlash || '/' ;
	return ( _string.charAt(_string.length-1) != '/' || _string.charAt(_string.length-1) != '\\' ) ? _string + _backlash : _string;
}
function getAjaxRequest()
{
	var xmlHttp;
	try{xmlHttp=new ActiveXObject("MSXML2.XMLHTTP");return xmlHttp;}catch(e){}
	try{xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");return xmlHttp;}catch(e){}
	try{xmlHttp=new XMLHttpRequest();return xmlHttp;}catch(e){}
	return null;
}
function unmarkAllPrompt(form)
{
	var _tags = $T('div',form);
	var i = 0;
	while(_tags[i])
	{
		if ( _tags[i].prompt )
		{
			_tags[i].prompt = false;
			_tags[i].style.display = 'none';
		}
		i = -(~i);
	}
}
function unmarkAllFields(form) 
{
	for (i = 0; i < form.elements.length ; i++) 
	{
		form.elements[i].style.backgroundColor = "";
	}
}
function markTheField(obj,nofocus) 
{
	if(obj[0])
	{
		var i = 0;
		while(obj[i])
		{
			obj[i].style.backgroundColor = "#FFF8CE";
			i = -(~i);
		}
	}
	else
	{
		if ( !nofocus )obj.focus();
		obj.style.backgroundColor = "#FFF8CE";
	}
}
// 整理使用者於表單上的輸入

function refineUserEntry(theForm)
{
	for (var i = 0; i < theForm.elements.length; i++) 
	{
		if (theForm.elements[i].type == "text") {
			theForm.elements[i].value = toSafeStr(theForm.elements[i].value);
		}
	}
}
// 安全字串轉換

function toSafeStr(strMessage) 
{
	var strResult;
	var charTemp;
	var str;
	var safeStr = '';

	str = strMessage.trim();

	for (var i = 0; i < str.length; i++) 
	{
		charTemp = str.charAt(i);
		if ( charTemp == "\"") charTemp = "」";
		if ( charTemp == "'")charTemp = "』";
		safeStr = safeStr + charTemp;
	}
	return safeStr;
}
function regExpressionValid(controlToValidID,validationExpression,msgSpanID,errMsg,nofocus)
{
	var objRegExp = new RegExp(validationExpression,"g");
    var objControlToValid=typeof controlToValidID == 'string' ? $(controlToValidID) : controlToValidID;
	var isValid=objRegExp.test(objControlToValid.value);
	if(!isValid)
    {
		var objSpan=null;
		markTheField(controlToValidID,nofocus);
		if ( (objSpan = $(msgSpanID)) )
		{
			objSpan.innerHTML = errMsg;
			objSpan.style.display = 'block';
		}
		else $alert(errMsg);
		return false;
	}
	else return true;
}
function checkRequiredField(field, prompt,field_name, max_length, min_length,nofocus) 
{
	switch(field.type)
	{
		case 'text':
		case 'password':
			return checkTextRequiredField(field, prompt,field_name, max_length, min_length,nofocus);
		default:
			if ( field.nodeName == 'TEXTAREA') return checkTextRequiredField(field, prompt,field_name, max_length, min_length,nofocus);
			return checkEleRequiredField(field, prompt,field_name,nofocus);
	}
}
function checkEleRequiredField(field, prompt,field_name,nofocus)
{
	var checked = false;
	if ( field.length )
	{
		var i = 0;
		while(field[i])
		{
			if ( ( checked = field[i].checked) ) break;
			i = -(~i);
		}
	}
	else checked = field.checked;
	if ( !checked )
	{
		markTheField(field,nofocus);
		if ( typeof prompt == 'string' )
			$prompt(field_name + '未選擇',prompt);
		else
			$alert(field_name + '未選擇');
		return false;
	}
	return checked;
}
function checkTextRequiredField(field, prompt,field_name, max_length, min_length,nofocus) 
{
	var len = field.value.len();
	if ( len == 0) 
	{
		markTheField(field,nofocus);
		if ( typeof prompt == 'string' )
			$prompt(field_name + '未填',prompt);
		else
			$alert(field_name + '未填');
		return false;
	}
	else if ( max_length && len > max_length) 
	{
		markTheField(field,nofocus);
		if ( typeof prompt == 'string' )
			$prompt(field_name + '的長度超過 ' + max_length + ' 個字元',prompt);
		else
			$alert(field_name + '的長度超過 ' + max_length + ' 個字元');
		return false;
	} 
	else if ( min_length  && len < min_length) 
	{
		markTheField(field,nofocus);
		if ( typeof prompt == 'string' )
			$prompt(field_name + '的長度不足 ' + min_length + ' 個字元',prompt);
		else
			$alert(field_name + '的長度不足 ' + min_length + ' 個字元');
		return false;
	}
	len = null;
	return true;
}
function sendAjaxRequest(_url,successFun,_postPars)
{
	var ajax = null;
	if( (ajax=getAjaxRequest()) )
	{
		ajax.onreadystatechange= function()
		{
			if(ajax && ajax.readyState==4 )
			{
				if( ajax.status==200 )
				{
					if ( typeof successFun == 'function' ) successFun(ajax);
				}
				else alert('err:'+ajax.status);
			}
		};
		if ( _postPars != "" )
		{
			ajax.open("POST", _url, true);
			ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
			ajax.send(_postPars);
		}
		else
		{
			ajax.open("GET",_url,true);
			ajax.setRequestHeader("Content-Type","multipart/form-data");
			ajax.send(null);
		}
	}
}
function getTabContentToContainer(name,index,_paras,id)
{
	if ( !_paras || !_paras.length ) return '';
	var obj = null;
	if( (obj = $T('div',$(name+'_c'))) )
	{
		if ( !checkIsNeedLoad(obj,index) ) getAjaxContent(_paras,name,index,id);
		else setTabContent(obj,null,index);
	}
}
function checkIsNeedLoad(obj,index)
{
	if ( obj && obj.length > 0 )
	{
		var i = 0;
		while(obj[i])
		{
			if( i == index ) return obj[i].innerHTML.length;
			i = -(~i);
		}
		i = null;
	}
	return 0;
}
function setTabContent(obj,content,index)
{
	if ( obj && obj.length > 0 )
	{
		var i = 0;
		while(obj[i])
		{
			if( i == index )
			{
				obj[i].style.display = 'block';
				if ( !obj[i].length && content ) obj[i].innerHTML = content;
			}
			else obj[i].style.display = 'none';
			i = -(~i);
		}
		i = null;
	}
}
function getTabUrl(_paras,_id)
{
	return getUrlHead()+'ajax/tab.html?invoke='+_paras + (_id ? "&id="+_id : '');
}
function getMemberUrl(_invoke)
{
	_invoke = _invoke || 'sign';
	return getAjaxUrl('member',_invoke);
}
function getOrdUrl(_invoke)
{
	_invoke = _invoke || 'getPrdFromCart';
	return getAjaxUrl('order',_invoke);
}
function getAjaxUrl(_doc,_invoke)
{
	var _serach = window.location.search || '';
	if ( _serach && _serach.length ) _serach = _serach.replace('?','&');
	return getUrlHead()+'ajax/'+_doc+'.html?invoke='+_invoke+_serach;
}
function getAjaxContent(_paras,name,index,id)
{
	if ( !_paras || !_paras.length) return null;
	sendAjaxRequest(getTabUrl(_paras,id),function(_ajax)
	{
		setTabContent($T('div',$(name+'_c')),_ajax.responseText,index);
	});
}
function __doPostBack(eventTarget, eventArgument,actionUrl) 
{
	var theForm = document.forms['form1'];
	if (!theForm)theForm = document.form1;
	if ( theForm && !theForm.onsubmit ) 
	{
		var newElement = null;
		if (!theForm.__EVENTTARGET)
		{
			newElement = document.createElement("<INPUT TYPE='hidden' NAME='__EVENTTARGET' VALUE='"+eventTarget+"'>")
			theForm.insertBefore(newElement);
		}
		if ( !theForm.__EVENTARGUMENT ) 
		{
			newElement = document.createElement("<INPUT TYPE='hidden' NAME='__EVENTARGUMENT' VALUE='"+eventArgument+"'>")
			theForm.insertBefore(newElement);
		}
		theForm.__EVENTTARGET.value = eventTarget;
		theForm.__EVENTARGUMENT.value = eventArgument;
		if ( actionUrl ) theForm.action = actionUrl;
		else if ( !theForm.action ) theForm.action = window.location.href;
		theForm.submit();
	}
}
function getcolor(st, mycolor) { st.style.backgroundColor = mycolor; }
function abar(st) { st.style.backgroundColor = '#FFE6D9'; }
function aabar(st) { st.style.backgroundColor = '#FFFFFF'; }
function isValidEmailFormat(email) 
{
	var rege = /^([a-zA-Z0-9_\.\-])+\@{1,1}(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
	if (rege.exec(email) == null) return false; else return true;
}

// 整理使用者於表單上的輸入

function refineUserEntry(theForm) {
	for (var i = 0; i < theForm.elements.length; i++) {
		if (theForm.elements[i].type == "text") {
			theForm.elements[i].value = toSafeStr(theForm.elements[i].value);
		}
	}
}
function isChinese(str) {
	var strlen = str.length;
	if (strlen > 0) {
		var oldstrlen = str.length;
		for (var i = 0; i < strlen; i++) {
			c = '';
			c = escape(str.charAt(i));
			if (c.charAt(0) == '%') {
				cc = c.charAt(1);
				// IE : ~ u, NS : ~ A
				if (cc == 'A' || cc == 'u') {	// 是中文字
					return true;
				}
			}
		}
		return false;
	} else {
		return false;
	}
}
function removeNonChinese(obj) 
{
	var orilen = obj.value.length;
	for (; ;) {
		for (var i = 0; i < chars.length; i++) {
			obj.value = obj.value.replace(chars.charAt(i), "");
		}
		if (orilen == obj.value.length) return;
		orilen = obj.value.length;
	}
}
//打開小窗口
function popUpWindow(url, width, height,name) 
{
	var chasm = screen.availWidth;
	var mount = screen.availHeight;
	if(typeof name != 'undefined') window.name = name;
	var hWnd = window.open(url, '_blank', 'dependent, resizable=yes, scrollbars=yes, width = ' + width + ', height = ' + height + ', left = ' + ((chasm - width - 10) * .5) + ', top = ' + ((mount - height - 30) * .5));
	if ((document.window != null) && ( ! hWnd.opener)) hWnd.opener = document.window;
}
function atLeastOneChecked(opt) 
{
	for (var i = 0; i < opt.length; i++) 
	{
		if (opt[i].checked === true) 
		{
			return true;
			break;
		}
	}
	return false;
}