//是否為IE
function is_IE()
{
	return !( (navigator.appName).match(/Internet Explorer/) == null ) ;
}

//取得javascript執行錯誤的物件
function handleJSError(e)
{
	//var str = "";
	//for(var i in e) {
	//	str += "i: " + i + ", e[i]: " + e[i] + "\n";
	//}
	//alert(str);
}

//將javascript轉為一般文字
function script_to_string(script)
{
	return script.replace(/<script>|<\/script>/g, "");
}


//建立指定物件發生事件
function addEvent(evtObj, evtName, func, useCapture)
{
	if(is_IE()) evtObj.addEventListener = addEventListener;
	evtObj.addEventListener(evtName, func, useCapture);
}

//建立傾聽事件
function addEventListener(evtName, func, useCapture)
{
	this["on"+evtName] = func;
	if (useCapture) {
		//?? document.body.setCapture();
	}
} // end of addEventListener

//將超連結設為可嵌入一個iframe視窗的物件
function toInnerIframe(linkObj, size, flag)
{
	flag = (flag == null) ? false : flag;
	size = (size==null) ? [700, 450] : size;
	if(linkObj!=null) {
		var linkStr = linkObj.href;
		linkObj.href = linkStr + "&amp;TB_iframe=true&amp;height=#{height}&amp;width=#{width}&amp;modal=#{modal}";
		linkObj.href = template2String({width: size[0], height: size[1], modal: flag}, linkObj.href);
		linkObj.className = "thickbox";
	}
}

//將物件屬性插入格式化的字串中, 並回傳一個字串
//dataObj: {title: 'The Simpsons', author: 'Matt Groening', network: 'FOX' }
//formatStr: 'The TV show #{title} was created by #{author}.'
function template2String(dataObj, formatStr)
{
	var myTemplate = new Template(formatStr);

	return myTemplate.evaluate(dataObj);;
}

//建立自動完成的輸入控制項
function autocompleter(obj, url)
{
	if(obj == null || url == null || url == "") return ;

	//取得相似標籤的方法
	obj.ACF = function (arrStr){
		var fetchStr = arrStr.last();
		arrStr.pop();

		//alert("mode=fetch_tag&like="+fetchStr+"&not_like="+arrStr.join(","));
		this.ajaxObj = new Ajax.Request(url, {
			method: 'post',
			parameters: "mode=fetch_tag&like="+fetchStr+"&not_like="+arrStr.join(","),
			onSuccess: function(transport) {
				//transport.responseText
				//alert(transport.responseText);
				if(transport.responseText == "") return ;

				var divObj = $(obj.id+"_divObj");
				if( divObj == null) {
					divObj = document.createElement('div');
					divObj.id = obj.id+"_divObj";
					divObj.style.position = "absolute";
					divObj.style.borderWidth = "1px";
					divObj.style.borderStyle = "solid";
					divObj.style.borderColor = "#000000";
					divObj.style.width = "300px";
					divObj.style.overflowX = "visible"
					divObj.style.overflow = "auto";
					divObj.style.backgroundColor = "#FFFFFF";

					obj.parentNode.insertBefore(divObj, obj.nextSibling);
					var brObj = document.createElement("br");
					brObj.id = obj.id+"_brObj";
					obj.parentNode.insertBefore(brObj, obj.nextSibling);
				}

				divObj.innerHTML = "";
				var arrResult = transport.responseText.split(",");
				arrResult.each(function (s){
					var tagStr = arrStr.join(',') + ((arrStr.length>0) ? "," : "") + s;
					var aStr = "<span class='NavLink'><a href='#' onclick='$(\""+obj.id+"\").value = \""+tagStr+"\"; $(\""+obj.id+"\").focus(); $(\""+divObj.id+"\").parentNode.removeChild($(\""+divObj.id+"\"));  $(\""+obj.id+"_brObj"+"\").parentNode.removeChild($(\""+obj.id+"_brObj"+"\"))'>"+arrStr.join(',') + ((arrStr.length>0) ? "," : "") + "<b>" + s+"</b></a></span>";
					var divStr = "<div style='margin: 4px;'>" + aStr + "</div>";
					divObj.innerHTML += divStr;
				});


			}
		});
	};

	addEvent(obj, "keydown", function(){

		this.title = this.value;

	}, false);

	addEvent(obj, "keyup", function(){

		if(this.title.strip() != this.value.strip()) {
			//取得目前輸入值的陣列
			var arrStr = new Array();
			var arrTitle = this.value.split(",");
			arrTitle.each(function(s){
				arrStr.push(s.strip());
			});

			if(!arrStr[arrStr.length-1].empty())
			obj.ACF(arrStr);
		}

	}, false);
}

//表單自動存檔
function autoSaveData(saveForm)
{
	if(saveForm==null) return ;
	var arrData = new Array();
	for(var i=0; i<saveForm.length; i++) {
		if(saveForm[i].name!=null && saveForm[i].name!="")

		if(saveForm[i].tagName.toUpperCase() == "input".toUpperCase()) {
			if(saveForm[i].type.toUpperCase() == "radio".toUpperCase()) {
				if(saveForm[i].checked)
				arrData.push([saveForm[i].name, saveForm[i].value]);
			}
			else {
				arrData.push([saveForm[i].name, saveForm[i].value]);
			}
		}
		else {
			arrData.push([saveForm[i].name, saveForm[i].value]);
		}
	}

	arrData.each(function (arrRow, index) {
		arrData[index] = arrRow.join('=');
	});

	window.status = "資料存檔中.........";
	//alert(arrData.join('&'));

	var URL = saveForm.action;
	new Ajax.Request(URL, {
		method: saveForm.method,
		parameters: arrData.join('&'),
		asynchronous: false,
		onSuccess: function(transport) {
			//transport.responseText
			//alert("資料已存檔");
			//alert(transport.responseText);
			window.status = "資料已存檔";
		},
		onComplete: function () {

		}
	});
}

//建立修改用的資料輸入項
function changeModifyInput(tObj, callBackFun)
{
	//建立輸入控制項
	var input = document.createElement('input');
	input.type = 'text';
	//input.style.width = '80%';
	input.name = input.id = 'cmi_'+tObj.id;
	input.value = tObj.innerHTML;
	input.className = 'changeName';
	input.style.position = 'absolute';
	//alert(tObj.style.top);

	input.changeBack = function(){
		var newObj = this.objData1;
		var parentObj = this.parentNode;
		parentObj.replaceChild(newObj, this);
	};

	//複制文字節點
	input.objData1 = tObj.cloneNode(true);
	//使用者離開輸入控制項
	input.onblur = function () {
		this.changeBack();
		callBackFun(this, this.objData1, true);	//存檔
	};
	//使用者在輸入控制項按按鍵, 並判斷按鈕的值, 13：Enter, 27：Esc
	input.onkeypress = function (evt) {
		var e = evt || window.event;
		var arrErrorCode = [92,47,58,42,63,34,60,62,124];
		if(arrErrorCode.indexOf(e.keyCode) != -1) {
			this.value = this.value.replace(/\\|\/|:|\*|\?|\"|<|>|\|/g, "");
		}
		else if(e.keyCode==13) {	//Enter
			this.changeBack();
			callBackFun(this, this.objData1, true);	//存檔
		}
		else if(e.keyCode==27) {	//Esc
			this.changeBack();
			callBackFun(this, this.objData1, false);	//放棄存檔
		}
	};

	//隱藏控制項
	tObj.style.display = 'none';
	//將輸入控制項加入節點物件
	var parentObj = tObj.parentNode;
	parentObj.replaceChild(input, tObj);
	//焦點在輸入控制項上面
	input.focus();
	input.select();
}

//請稍後
function waitLoading(obj, content, path)
{
	path = (path=="") ? "" : path;
	content = (content=="") ? "" : content;

	var imgObj = document.createElement('IMG');	//建立圖片標籤
	imgObj.src = path+'img/ajax-loader.gif';
	imgObj.width = imgObj.height = 32;
	imgObj.align = 'absmiddle';
	imgObj.border = 0;
	var newText = document.createTextNode(content);	//建立字串物件
	obj.innerHTML = "";
	obj.appendChild(imgObj);
	obj.appendChild(newText);
}

//建立選擇日期物件
function newZapatecCalendar(dateObj, inputField, button, symbols)
{
	symbols = (symbols == null) ? "/" : symbols;

	dateObj = Zapatec.Calendar.setup({
		firstDay          : 1,
		showOthers        : true,
		electric          : false,
		inputField        : inputField,
		button            : button,
		ifFormat          : "%Y"+symbols+"%m"+symbols+"%d",
		daFormat          : "%Y"+symbols+"%m"+symbols+"%d"
	});
}

//檢查日期欄位, 並設定正確日期大小範圍
function setRightData(sdate_id, edate_id, newvalue)
{
	var sdate = $(sdate_id);
	var edate = $(edate_id);
	if(sdate!=null && edate!=null) {
		var flag = (sdate.value == newvalue);
		if(sdate.value > edate.value) {
			if(flag)
			edate.value = newvalue;
			else
			sdate.value = newvalue;
		}

	}
}

//判斷目標範圍的選擇控制項是否都沒被選擇
function isSelected(targetId)
{
	var flag = false;
	//取得目標內容所有的目標物件
	$$('#'+targetId+' input[type="checkbox"]').each(function(s) {
		if(s.checked) {
			flag = true;
			throw $break;
		}
	});
	return flag;
}

//刪除已被選取的項目
function deleteSelected(targetId, doWorkman, mudle, fsn, page, node_id)
{
	if(isSelected(targetId)) {
		if(confirm('請問是否要將被勾選的資料項目刪除?')) {
			var myTemplate = new Template('#{doWorkman}?mudle=#{mudle}&fsn=#{fsn}&mode=#{mode}&id=#{id}&node_id=#{node_id}&page=#{page}');
			var show = {doWorkman: doWorkman, mudle: mudle, fsn: fsn, node_id: node_id, mode: 'delete', id: getSelectedValues(targetId).join(','), page: page };
			//alert(myTemplate.evaluate(show));
			location.href = myTemplate.evaluate(show);
		}
	}
	else {
		alert('請選擇要刪除的項目!');
	}
}

//設定已被選取的項目
function settingHots(URLMODE, URLFSN, URLPAGE)
{
	if(isSelected('box'))
	requireCoverForm('', [250, 225], '熱門維護精靈', 'mod_adminSettingHots.php?mode='+URLMODE+'&fsn='+URLFSN+'&page='+URLPAGE+'&value='+getSelectedValues('box').join(','), function (){}, '../');
	else
	alert('請選擇要設定熱門的項目!!');
}

//使用上傳圖片精靈
function photoUploadWizard() {
	requireCoverForm('', [parseInt(getBodyAttr('clientWidth'), 10)*95/100, parseInt(getBodyAttr('clientHeight'), 10)*85/100]
	, '上傳圖片精靈', '../apps/tw/net/go/applet/photoUpload/photoUploadWizard.php', function (){
		//$('wizard_iFrame').src = "../apps/tw/net/go/IMGUpload.php";
	}, '../');
}

//上傳圖片
function multipleUploadPanel(path, num) {
	if(!isNaN(parseInt(get_IMG_FLODER_ID(), 10)) && parseInt(get_IMG_FLODER_ID(), 10) > -1) {
		num = (isNaN(parseInt(num, 10))) ? 3 : num;
		requireCoverForm('', [270, 350], '上傳圖片器', 'mod_adminMultipleUpload.php?path='+path+'&fileId=fileID&showId=showID&formId=formID'
		, function (){
			//設定上傳器名稱
			var multi_selector = new MultiSelector( document.getElementById( 'showID' ), num );
			multi_selector.addElement( document.getElementById( 'fileID' ) );

		}
		, '../');
	}
	else
	alert('上傳位置錯誤!!');
}

//將formObj表單物件內所有checkbox型態的物件設定成和obj相同的動作
function eachStopByThis(formId, obj, Symbols)
{
	var index = obj.id.indexOf(Symbols);
	if(index != -1) {
		$$("#"+formId+" input[type='checkbox']").each(function (s){
			if(s.id.indexOf(Symbols) != -1)
			if(obj.checked) {
				if(s.id.substring(index+Symbols.length) > obj.id.substring(index+Symbols.length))
				s.checked = obj.checked;
			}
			else{
				if(s.id.substring(index+Symbols.length) < obj.id.substring(index+Symbols.length))
				s.checked = obj.checked;
			}
		});
	}
}

//臨時新增的呼叫
function temporaryAddRow(doWorkman, mudle, fsn, page, node_id)
{
	var myTemplate = new Template('#{doWorkman}?mudle=#{mudle}&fsn=#{fsn}&mode=#{mode}&node_id=#{node_id}&page=#{page}');
	var show = {doWorkman: doWorkman, mudle: mudle, fsn: fsn, mode: 'temporaryAddRow', node_id: node_id, page: page };
	//alert(myTemplate.evaluate(show));
	location.href = myTemplate.evaluate(show);
}

//檢查欄位必填值是否正確
function checkMustFields(mode, targetId)
{
	var flag = true;

	if($(targetId).mode.value == 'save_datas') {

		//檢示一般商品資料輸入的控制項是否完整(必填已填)
		if(mode.toUpperCase() == 'GOODS') {
			$$('#'+targetId+' input[type="checkbox"]').each(function(s) {
				//id開頭為cb[的input[type="checkbox"]
				if(s.id.match(/^cb/) != null && s.checked) {
					var id = s.value;
					if($('name['+id+']').value == '') {
						alert('請輸入商品名稱!');
						$('name['+id+']').focus();
						flag = false;
					}
				}
			});
		}
		//檢示目錄資料輸入的控制項是否完整(必填已填)
		else if(mode.toUpperCase() == 'FLODERS') {
			$$('#'+targetId+' input[type="checkbox"]').each(function(s) {
				//id開頭為cb[的input[type="checkbox"]
				if(s.id.match(/^cb/) != null && s.checked) {

				}
			});
		}
	}

	return flag;
}

//快速編輯 編輯完成送出
function confirm_FE(mode)
{
	$('mode').value = mode;
	if(confirm('編輯的資料確定無誤，要進行資料的全部更新嗎？')) $('box').submit();
}

//勾選隱藏或顯示
function changeRowsStatus(flag)
{
	if(typeof flag == "string") {
		if(flag == "true")
		$('mode').value = 'status_active';
		else if(flag == "false")
		$('mode').value = 'status_disabled';
		else
		$('mode').value = flag;

	}
	else
	$('mode').value = (flag) ? 'status_active' : 'status_disabled';

	if(isSelected('box'))
	$('box').submit();
	else
	alert('請選擇欲改變狀態的項目。');
}

//所有的符合的控制項disabled or abled
function setStatusForTagName(tagName, flag)
{
	var controller = document.getElementsByTagName(tagName);
	for(var i=0; i<controller.length; i++)
	controller[i].disabled = flag;
}

//取得window.document.body的指定物件
function getBodyAttr(attrName)
{
	var result = null;
	var obj = window.document.body;
	for(var i in obj)
	if(i.indexOf(attrName) != -1) {
		result = obj[i];
		break;
	}

	return result;
}

//取得網址列的參數, 並將參數轉換成陣列資料回傳
function getURLParams()
{
	var urlString = new String(window.location);
	var urlIndex = urlString .indexOf('?');
	if(urlIndex == -1) return null;

	var paramStr = urlString .substr(urlIndex+1);
	var args = paramStr.split('&');
	for(var i=0; i<args.length; i++)
	args[i] = args[i].split('=');

	return args;
}

//取得符合key索引陣列的值
function getURLParamValue(key)
{
	if(key == null) return ;

	var args = getURLParams();
	if(args == null) return args;

	for(var i=0; i< args.length; i++)
	if(args[i][0] == key) return args[i][1];
}

//將現有網址參數做一些資料改變或新增刪除一些參數
function inheritanceParamers(arrParameter, arrNotInheritance, inheritance_flag)
{
	var args = (arrParameter == null) ? new Array() : arrParameter;
	arrNotInheritance = (arrNotInheritance == null) ? new Array() : arrNotInheritance;
	//是否繼承原本的網址參數
	inheritance_flag = (inheritance_flag == null) ? true : inheritance_flag;

	if(inheritance_flag) {
		var presently = getURLParams();
		presently.each(function (ap, api) {
			//判斷是否要繼承
			var exist_flag = false;

			//將不繼承的網址參數移除
			arrNotInheritance.each(function (ani, anii){
				if(ap[0] == ani) {
					exist_flag = true;
					$break;
				}
			});

			if(!exist_flag) {
				args.each(function (aa, aai) {
					if(ap[0] == aa[0]) {
						exist_flag = true;
						$break;
					}
				});
			}

			if(!exist_flag) args[args.length] = ap;
		});
	}

	args.each(function (arrRow, index) {
		args[index] = arrRow.join('=');
	});
	
	return args.join('&');
}

//一樣網址，一樣參數，只是換到幾個網址參數後，再導入那張網頁
function gotoSameUrlDifferentParameter(arrParameter, arrNotInheritance, inheritance_flag)
{
	var argStr = inheritanceParamers(arrParameter, arrNotInheritance, inheritance_flag);

	var urlString = new String(window.location);
	var urlIndex = urlString .indexOf('?');
	var URL = urlString.substring(0, urlIndex) + "?" + argStr;

	window.location.replace(URL);
}

//改變字串內容
function replaceString(oldS,newS,fullS) {
	// Replaces oldS with newS in the string fullS
	for (var i=0; i<fullS.length; i++) {
		if (fullS.substring(i,i+oldS.length) == oldS) {
			fullS = fullS.substring(0,i)+newS+fullS.substring(i+oldS.length,fullS.length);
		}
	}
	return fullS;
}

//用於判斷一個數字型字符串是否為整數，
//還可判斷是否是正整數或負整數，返回值為true或false
//string: 需要判斷的字符串
//sign: 若要判斷是正負數時使用，正用'+'，負'-'，不用則表示不作判斷
function IsInteger(string ,sign)
{
	var integer;
	if ((sign!=null) && (sign!='-') && (sign!='+'))
	{
		alert('IsInter(string,sign)的參數出錯： sign為null或"-"或"+"');
		return false;
	}
	integer = parseInt(string);
	if (isNaN(integer))
	{
		return false;
	}
	else if (integer.toString().length==string.length)
	{
		if ((sign==null) || (sign=='-' && integer<0) || (sign=='+' && integer>0))
		{
			return true;
		}
		else
		return false;
	}
	else
	return false;
}

//產生輸入電話格式
function getTelCode(codeSel)
{
	//建立區碼內容
	['02', '03', '037', '04', '049', '05', '06', '07', '08',
	'089', '0823', '0826', '0827', '0836'].each(function(s){
		codeSel.options[codeSel.length] = new Option(s, s);
	});
}

//改變部份字串
//replaceString("World","Web","Brave New World")
function replaceString(oldS,newS,fullS) 
{
	// Replaces oldS with newS in the string fullS   
	for (var i=0; i<fullS.length; i++) {      
		if (fullS.substring(i,i+oldS.length) == oldS) {         
			fullS = fullS.substring(0,i)+newS+fullS.substring(i+oldS.length,fullS.length);      
		}   
	}   
	return fullS;
}

//判斷此物件(CheckBox)是否被選取
function is_selected(cbObj)
{
	return cbObj.checked;
}

//尋找離obj最近的form
function getNearForm(obj)
{
	var tempObj = obj;
	while(1) {
		tempObj = tempObj.parentNode;
		if(tempObj==document) return null;
		if(tempObj.tagName == "FORM") return tempObj;
	}
}

//宣告排序物件集合
var SortSet = {
	//儲存排序陣列的集合
	arrInps: new Array(),
	//將input標籤物件存入集合
	addInput: function (inpobj) {
		if(inpobj != null && inpobj.tagName == "INPUT") {
			this.arrInps[this.arrInps.length] = inpobj;
		}
	},
	//設置可變更的排序物件
	availableInp: function (inp, chb) {
		this.arrInps.each(function (s, ind){
			//取得父節點
			var pNode = s.parentNode;
			if(pNode) {
				//刪除同一層的所有節點(除了本身之外)
				while (s.nextSibling)
				pNode.removeChild(s.nextSibling);
				if(inp == s) {
					//按鈕群的背景
					var panel = document.createElement("div");
					panel.className = "panel_1";
					pNode.appendChild(panel);

					//加入排序之確定按鈕
					var submit = document.createElement("input");
					submit.type = "submit";
					submit.value = "確定";
					addEvent(submit, "click", function () {
						selectAll(false);
						chb.checked = true;
						var form = getNearForm(s);
						form.action = '?'+inheritanceParamers([['act', 'changesort']], [], true);
						//form.act.value ="changesort" ;
					});
					panel.appendChild(submit);

					//加入排序之取消按鈕
					var cancle = document.createElement("input");
					cancle.type = "button";
					cancle.value = "取消";
					addEvent(cancle, "click", function () {
						SortSet.availableInp();
					});
					panel.appendChild(cancle);
				}
			}
		});
	}
};

//宣告自動執行Script的物件
var AutoRunScript = {
	//儲存自動執行的script
	arrAutoRun: new Array(),
	//加入一個script
	addScript: function (fun) {
		if(fun != null)
		this.arrAutoRun[this.arrAutoRun.length] = fun;
	},
	//執行已存在的scripts, 並將已被執行的script 移除
	scriptExecute: function () {
		this.arrAutoRun.each(function (fun, ind) {
			fun(); fun = null;
		});
	}
};

//選擇物件
var CheckBoxSelect = {
	checkboxs: [],
	//取得目標範圍的選項控制項
	init: function(target) {
		this.checkboxs = [];
		if(target!=null) {
			var nodes = target.getElementsByTagName("input");
			var checkboxs = new Array();
			for(var i=0; i<nodes.length; i++) {
				if(nodes[i].type == "checkbox") {
					this.checkboxs[this.checkboxs.length] = nodes[i];
				}
			}
		}
	},
	//選擇控制項(全選、取消全選) by Charles
	selectAll: function (flag) {
		var nodes = this.checkboxs;
		for(var i=0; i<nodes.length; i++) {
			nodes[i].checked = flag;
		}
	},
	//取得已被選取項目的值, 並傳回值的陣列
	getSelectedValues: function () {
		var result = [];
		var nodes = this.checkboxs;
		for(var i=0; i<nodes.length; i++) {
			if(nodes[i].checked) result.push(nodes[i].value);
		}
		return result;
	}
};

//選擇控制項(全選、取消全選) by Charles
function selectAll(flag, workPanel) {
	CheckBoxSelect.init(workPanel);
	CheckBoxSelect.selectAll(flag);
}

//刪除已被選取的項目
function deleteSelected(workPanel)
{
	CheckBoxSelect.init(workPanel);
	vals = CheckBoxSelect.getSelectedValues();
	new Ajax.Request(workPanel.url, {
		method: 'POST',
		parameters: "mod=del&ids="+vals.join(','),
		onSuccess: function(transport) {
			workPanel.reset();
			eval(transport.responseText);
		}
	});
}

function dorwCanvasGraph(target, notyet, total, backgroundColor)
{
	if(target == null || $(target) == null) return ;
	backgroundColor = (backgroundColor == "" || backgroundColor==null) ? 'f2f2f2' : backgroundColor;
	// Define a dataset.
	var dataset = {
		'apie': 	[[0, notyet], [1, total-notyet]]
	};
			
	// Define options.
	var options = {
		// Define a padding for the canvas node
		padding: {left: 5, right: 5, top: 5, bottom: 5},
		
		// Background color to render.
		backgroundColor: backgroundColor,
		
		// Use the predefined blue colorscheme.
		colorScheme: 'blue',
		
		// Set the labels.
	   	xTicks: [
			{v:0, label:'未完成'}, 
	      	{v:1, label:'已完成'}
		]
	};
	
	// Instantiate a new LineCart.
	var line = new Plotr.PieChart(target,options);
	// Add a dataset to it.
	line.addDataset(dataset);
	// Render it.
	line.render();		
				
	// Instead of instantiating a new LineChart object,
	// you also can use reset(), that resets the options and datasets.
	line.reset();
}
