var loading_img = "<img src='"+window['THEME_PATH']+'/'+window['THEHE_IMG']+"/loading.gif' align='absbottom'/> ";

$(function()
{
	if(window['SYSMSG'] != undefined)
	{
		Boxy.ask(SYSMSG, [lang.ok], null, {title: lang.msgTitle,closeText:lang.close});
	}
	
});

function log()
{
	if(console == undefined) return;
	function outputString(obj)
	{
		var type = typeof obj;
		var optstr = typeof obj == 'string' ? '%s':'%o';
		console.info(optstr,obj);
	}
	var output = outputString;
	output(arguments[0]);
}

function boxy_content(strContent)
{
	return "<div class='boxy_content'>" +  strContent + "</div>";
}

function boxy_closebtn()
{
	return "<div><a href='#' onclick='Boxy.get(this).hide(); return false'>關閉</a></div>";
}

function sysurl(mod,fnc,parm)
{
	var rtval = '?mod='+mod;
	if(fnc != undefined) rtval += '&fnc='+fnc;
	if(parm != undefined)rtval += '&'+parm;
	return rtval;
}

function Tag(tag)
{
	return '<'+tag+'></'+tag+'>';
}

function DataTable(containerObj,AcitveMod,ajaxUrl,initOpt,handles,confOpt)
{
	window[containerObj] = this;
	var thisObj = this;
	
	if(initOpt == undefined) initOpt = {};
	
	var def_conf = 
	{
		showPageBar:true
	}
	
	this.param = {};
	
	confOpt = jQuery.extend(def_conf,confOpt);
	
	function getDataHandle(opt)
	{
		
		
		var defaultOpt = 
		{
			skey:'',
			page:'',
			order:'',
			odtype:''
		}
		
		opt = jQuery.extend(opt, this.param);
		
		opt = jQuery.extend(defaultOpt,opt);
		 
		opt.skey = encodeURI(opt.skey);
		if(opt.dataod_id == undefined) opt.dataod_id = '';
		if(opt.dataod_type == undefined) opt.dataod_type = '';
//		url_data = 
//		{
//			skey:opt.skey,
//			page:opt.page,
//			order:opt.order,
//			odtype:opt.odtype,
//			dataod_type:opt.dataod_type,
//			dataod_id:opt.dataod_id
//		}
		
		url_data = opt;
		
		function clearJsonEmpty(srcObj)
		{
			var temp = {};
			for (x in srcObj)
			{
				if(srcObj[x]!='')temp[x] = srcObj[x];
			}
			return temp;
		}
		
		url_data = clearJsonEmpty(url_data);
		
		getJson(
		{
			data:url_data,
			url:ajaxUrl,
			success:function(data,httpRequest)
			{
				if(data.timeout != undefined)
				{
					AlertMsg(lang.timeoutMsg,function()
					{
						window.location = sysurl('login');
					});
				}
				else
				{
					
					thisObj.setData(data);
					if(handles!=undefined)
						if(handles.AfterLoadHandle!=undefined)handles.AfterLoadHandle(data.opt);
				}
				is_busy = false;
			},
			error:function(httpRequest, textStatus, errorThrown)
			{
				is_busy = false;
			}
		});
		
		
	}
	
	var container = $('#'+containerObj);
	
	var dataTable = container.find('#dataTable');
	var dataTableContent = container.find('#dataTableContent');
	var dataTableTitle = container.find('#dataTableTitle');
	var dataTableTitle = container.find('#dataTableTitle');
	var colCount = dataTableTitle.find('td').length;
	var loadingMsg = container.find('#loadingMsg');
	var pageBar = container.find('.pageBar');
	var colW = new Array();
	var tbBgClass = 'dataTableTdBg';
	var tbHoverClass = 'dataTableTdHover';
	
	var searchKey = '';
	var nowPage = '';
	var orderColumn = '';
	var orderType = '';
	var firstTr = dataTableContent.find('tr:eq(0)').clone();
	var firstTrTds = firstTr.find('td');
	var is_busy = false;
	var OrderTitle = undefined;
	
	var currentOpt = {
		skey:'',
		page:'',
		order:'',
		odtype:''
	};
	
	this.getOpt = function()
	{
		return currentOpt;
	}
	
	dataTableTitle.find('td').each(function(idx)
	{
		colW[idx] = $(this).attr('width');
		$(firstTrTds.get(idx)).attr('width',colW[idx]);
	});
	
	
	
	
	dataTableTitle.find('td.orderCol').each(function(idx)
	{
		var def_css = 'order_desc';
		var def_odtype = 'DESC';
		$(this).click(function(e)
		{
			if(is_busy == true) return;
			var old_clsss = '';
			if($(this).find('span').hasClass('order_asc'))old_clsss = 'order_asc';
			if($(this).find('span').hasClass('order_desc'))old_clsss = 'order_desc';
			
			var spans = $(this).parent().find('td span');
			for(i=0;i<spans.length;i++)
			{
				$(spans.get(i)).removeClass('order_asc');
				$(spans.get(i)).removeClass('order_desc');
			}
			
			var str_css = def_css;
			var odtype = def_odtype;
			if(old_clsss != '')
			{
				str_css = old_clsss == 'order_asc' ? 'order_desc':'order_asc';
				odtype = old_clsss == 'order_asc' ? 'DESC':'ASC';
			}
			$(this).find('span').addClass(str_css);
			
			var opt = {order:$(this).attr('rel'),odtype:odtype};
			
			thisObj.reloadPage(opt);
			//******************************************************************************
			thisObj.OrderTitle = this;
			if(handles.titleBarOrdered != undefined) handles.titleBarOrdered(this);
		});
		
		
		if(initOpt.order == $(this).attr('rel'))
		{
			var str_css = initOpt.odtype == 'DESC' ? 'order_desc':'order_asc';
			$(this).find('span').addClass(str_css);
			thisObj.OrderTitle = this;
		}
	});
	
	this.setData = function(data)
	{
		currentOpt = data.opt;
		var item = data.item;
		
		thisObj.hideLoading();
		var row;
		var rel = '';
		
		for ( var i in item )
		{
			row = new Array();
			for(j=0;j<firstTrTds.length;j++)
			{
				rel = $(firstTrTds.get(j)).attr('rel');
				
				row[j] = new Array();
				var reg = /%([a-zA-Z0-9_])*%/g;
				var htmlContent = $(firstTrTds.get(j)).html();
				htmlContent = htmlContent.replace(reg,function(strMatch, pos)
				{
					strMatch = strMatch.replace('%','');
					strMatch = strMatch.replace('%','');
					if(item[i][strMatch] != undefined)
					{
						return	item[i][strMatch];
					}
					else
					{
						return	'';
					}
					
				});
				row[j] = htmlContent;
			}
			
			thisObj.addItem(row);
		}
		
		thisObj.highlight();
		
		if(confOpt.showPageBar)thisObj.setPageBar(currentOpt);
		thisObj.setBgColor();
		thisObj.setRowHoverClass();
		if(handles.AfterSetData != undefined) handles.AfterSetData();
	}
	
	this.getOrderTitle = function()
	{
		return thisObj.OrderTitle;
	}
	
	this.addItem = function(row,rel,alt)
	{
		//addItem.arguments[0];
		var tr = $(Tag('tr'));
		var td;
		for(i=0;i<colCount;i++)
		{
			td = $(Tag('td'));
			td.attr('align',$(firstTrTds[i]).attr('align'));
			td.attr('width',colW[i]);
			if(row[i] == undefined | '') row[i] = '&nbsp;';
			td.append(row[i]);
			if(i == colCount -1)td.addClass('last');
			tr.append(td);
		}
		dataTableContent.append(tr);
	};
	
	
	
	this.setPageBar = function(opt)
	{
		var pgbar = pageBar;

		pgbar.empty();
		
		if(opt.skey !='')
		{
			span = $(Tag('span'));
			span.addClass('searchResult');
			span.append(lang.searchResult+'<b>'+opt.skey+'</b>');
			pgbar.append(span);
			
			a = $(Tag('a'));
			a.append(lang.clearSearchResult);
			a.addClass('clearSearchResult');
			a.attr('href','#');
			a.click(function()
			{
				var optTemp = {skey:'',page:''};
				thisObj.reloadPage(optTemp);
				return false;
			});
			pgbar.append(a);
		}
		
		span = $(Tag('span'));
		span.text(lang.pageCount.replace("{i}",opt.pgCount));
		pgbar.append(span);
		
		span = $(Tag('span'));
		span.text(lang.dataCount.replace("{i}",opt.dataCount));
		pgbar.append(span);
		
		span = $(Tag('span'));
		span.text(lang.nowPage.replace("{i}",opt.page));
		pgbar.append(span);
		
		if(opt.hasPrev)
		{
			a = $(Tag('a'));
			a.text(lang.prev);
			a.attr('href','#');
			a.click(function()
			{
				var optTemp = {page:opt.perv};
				thisObj.reloadPage(optTemp);
				return false;
			});
			pgbar.append(a);
		}
		
		if(opt.hasNext)
		{
			a = $(Tag('a'));
			a.attr('href','#');
			a.text(lang.next);
			a.click(function()
			{
				var optTemp = {page:opt.next};
				thisObj.reloadPage(optTemp);
				return false;
			});
			
			pgbar.append(a);
		}
	};
	
	this.reset = function()
	{
		this.showLoading();
		dataTableContent.empty();
	}
	
	this.hideLoading = function()
	{
		loadingMsg.hide();
	};
	
	this.showLoading = function()
	{
		loadingMsg.show();
	};
	
	this.hideData = function()
	{
		dataTableContent.hide();
	};
	
	this.showData = function()
	{
		dataTableContent.show();
	};
	
	this.highlight = function(keyword)
	{
		var keyword='';
		if(currentOpt.skey != undefined) keyword = currentOpt.skey;
		if(keyword == '') return;
		keyword = keyword.toUpperCase();//高亮關鍵字必須為大寫
			
		$(dataTable).removeHighlight();//移除前次高亮結果
		$.highlight(dataTable.get(0), keyword);//高亮關鍵字

	};
	
	this.setBgColor = function()
	{
		var tbObj = dataTableContent;
		
		tbObj.find("tr:gt(0):even").each(function()
		{
			$(this).children("td").each(function()
			{
				$(this).addClass(tbBgClass);
				
			});
		});
	};
	
	this.setRowHoverClass = function()
	{
		var tbObj = dataTableContent;
		
		tbObj.find("tr td").each(function()
		{
			$(this).hover(function()
			{
				$(this).parent().find('td').addClass(tbHoverClass);
			},
			function()
			{
				$(this).parent().find('td').removeClass(tbHoverClass);
				
			});
		});
	}
	
	this.gePageBar = function()
	{
		return pageBar;
	};
	
	this.reloadPage = function(opt,param)
	{
		if(is_busy == true) return false;
		is_busy = true;
		thisObj.reset();
		
		currentOpt = jQuery.extend(currentOpt, opt);
		getDataHandle(currentOpt);
	};
	
	this.search = function(sKey)
	{
		if(sKey == undefined)
		{
			sKey = '';
		}
		var opt = {skey:sKey,page:''};
		thisObj.reloadPage(opt);
	};
	
	this.dataOrder = function(dataod_type,id)
	{
		if(dataod_type == undefined)
		{
			dataod_type = '';
		}
		var opt = {dataod_type:dataod_type,dataod_id:id};
		thisObj.reloadPage(opt);
	};
	
	this.deleteItem = function(ajaxUrl)
	{
		var dialog = ShowSubmitMsg();
		getJson(
		{
			url:ajaxUrl,
			success:function(data,httpRequest)
			{
				if(data.success != undefined)
				{
					dialog.hide();
					thisObj.reloadPage(currentOpt);
				}
				else
				{
					alert('error');
				}
			},
			error:function(httpRequest, textStatus, errorThrown)
			{
				
			}
		});
		
	};
	
	
	thisObj.reloadPage(initOpt);
	
}

function getJson(opt)
{
	var defaltOpt =
	{
		dataType:'json',
		cache :false
	}
	
	opt = jQuery.extend(defaltOpt, opt); 
	$.ajax(opt);
}

function iframeDialog(url,title,opt)
{
	//e.g.
	//var ifrmDlg = iframeDialog('./test_iframe.html',lang.fileDialogTitle);
	if(title == undefined) title = '&nbsp;';
	var def_opt = 
	{
		width:500,height:420,name:'iframe1',marginwidth:0,
		marginheight:0,scrolling:'auto',frameborder:0,src:url
	}
	opt = jQuery.extend(def_opt,opt);
	var options = {title: title,modal:true,closeText:lang.close};
	var iframe = $('<iframe frameborder="0"></iframe>');
	iframe.attr(opt);
	var dialog = new Boxy(iframe, options);
	return dialog;
}

function ShowSubmitMsg()
{
	var options = {title: lang.msgWaitTitle,modal:true,closeText:lang.close};
	var dialog = new Boxy(boxy_content(loading_img+window['lang'].msgWait), options);
//	dialog.hide();
	return dialog;
}

function AlertMsg(msg,okHandle)
{
	Boxy.ask(msg, [lang.ok], okHandle, {title: lang.msgTitle,closeText:lang.close});
}

function ConfirmMsg(msg,okHandle)
{
	Boxy.ask(msg, [lang.ok,lang.cancel], function(val)
	{
		if(val == lang.ok)
		{
			okHandle();
		}
	}, {title: lang.msgTitle,closeText:lang.close});
}

function ajaxDialog(title,handle,ajaxOpt,boxyOpt)
{
	
	var options = {title: title,modal:false,closeText:lang.close};
	options = jQuery.extend(options,boxyOpt);
	var dialog = new Boxy(boxy_content(loading_img+window['lang'].msgLodadingWait), options);
	
	var defaltOpt =
	{
		dataType:'json',
		cache :false,
		success:function(data)
		{
			if(handle.success != undefined)
			{
				handle.success(data,dialog);
			}
		},
		error:function(httpRequest,err)
		{
			if(handle.error != undefined)
			{
				handle.error(err,$(dialog.boxy).find('.boxy_content'));
			}
			else
			{
				$(dialog.boxy).find('.boxy_content').html('Error!!<br/>' + err);
			}
		}
	}
	//$(dialog.boxy).find('.boxy_content').html('AAAAAAAAAA');
	
	opt = jQuery.extend(defaltOpt, ajaxOpt); 
	$.ajax(opt);
	
	return dialog;
}

function setTableBgColor(tb,tbBgClass,starIndex)
{
	if(starIndex == undefined)starIndex = 1;
	var tbObj = $(tb);

	tbObj.find("tr:gt("+starIndex+"):even").each(function()
	{
		$(this).children("td").each(function()
		{
			$(this).addClass(tbBgClass);
		});
	});
}

function getDataTableOpt(dataTableID)
{
	var cookie_name = 'mod_'+window['MOD']+'_'+dataTableID;
	var myCookieJar = $.cookieJar(cookie_name);
	var cookie_opt = myCookieJar.toObject();

	return cookie_opt;
}

function removeDataTableOpt(dataTableID)
{
	var cookie_name = 'mod_'+window['MOD']+'_'+dataTableID;
	var myCookieJar = $.cookieJar(cookie_name);
	myCookieJar.destroy();
}


function storeTableOpt(dataTableID)
{
	
	var record_opt = window[dataTableID].getOpt();
	var cookie_name = 'mod_'+window['MOD']+'_'+dataTableID;
	var myCookieJar = $.cookieJar(cookie_name);
	myCookieJar.construct(cookie_name,{cookie:{ path: '/', expires: 1 }});
	myCookieJar.setFromObject(record_opt);
}

function delectCheck(mod,fnc,id,dataTableID)
{
	var url = sysurl(mod,fnc,'id='+id);
	
	Boxy.ask(lang.delConfirmMsg, [lang.delYesBtn,lang.delNoBtn], function(val)
	{
		if(val == lang.delYesBtn)
		{
			window[dataTableID].deleteItem(url);
		}
	}, {title: lang.delConfirmTitle});
	return false;
}

function goEdit(mod,fnc,id,dataTableID)
{
	storeTableOpt(dataTableID);
	
	var url = sysurl(mod,fnc,'id='+id);
	window.location = url;
	return false;
}

function goEdit2(mod,fnc,param,dataTableID)
{
	storeTableOpt(dataTableID);
	
	var url = sysurl(mod,fnc,param);
	window.location = url;
	return false;
}

function CheckFckEditor(form_id,id,field_title,required)
{
	var oEditor = getFckIns(id);
	if(required == undefined)required = true;
	if(oEditor == undefined)
	{
		//alert("找不到 FckEditor : " + id);
		return false;
	}
	var content = $('#'+form_id+' #'+id).get(0);
	content.value = oEditor.GetXHTML( true );
	if((content.length == 0 || content.value == "<br />" ||  content.value == "&nbsp;") && required == true)
	{
		alert(field_title+lang.requireInput);
		oEditor.Focus();
		return false;
	}
	
	return true;
}
//-------------------------------------------------------------------------
//修正FckEditor錯誤
var __fckEditorInstance_  = new Array();

function FCKeditor_OnComplete( editorInstance )
{
	__fckEditorInstance_[editorInstance.Name] = editorInstance;
}

function getFckIns(idname)
{
	return __fckEditorInstance_[idname];
}
//-------------------------------------------------------------------------

function autoFileName(fileCol,nameCol)
{
	//附加檔案自動名稱
	$(fileCol).change(function()
	{
		var file_name = $(this).attr("value");
		
		var pos = file_name.lastIndexOf("\\");
		
		if(pos == -1)
		{
			pos = file_name.lastIndexOf("/");
		}
		
		if(pos > -1) file_name = file_name.substr(pos+1,file_name.length);
		pos = file_name.lastIndexOf(".");
		if(pos > -1) file_name = file_name.substr(0,file_name.length - (file_name.length-pos));
		
		$(nameCol).attr("value",file_name);
	});
}



function selectFile(path)
{
	window.top['callerDialog'].hide();
	window.top.setSelectFile(path);
}

function selectValue()
{
	var value = arguments[0];
	var functionName = arguments[1];
	
	if(arguments.length==2)
	{
		window.top[functionName](value);
	}
	else if(arguments.length==3)
	{
		window.top[functionName](value,arguments[2]);
	}
	else if(arguments.length==4)
	{
		window.top[functionName](value,arguments[2],arguments[3]);
	}
	else if(arguments.length==5)
	{
		window.top[functionName](value,arguments[2],arguments[3],arguments[4]);
	}
	window.top['callerDialog'].hide();
	
}

function delectUploadFileCheck(mod,fnc,path,dataTableID)
{
	var ajaxUrl = sysurl(mod,fnc,'path='+path);
	
	Boxy.ask(lang.delFileConfirmMsg, [lang.delFileYesBtn,lang.delFileNoBtn], function(val)
	{
		if(val == lang.delFileYesBtn)
		{
			window[dataTableID].reset();
			
			getJson(
			{
				url:ajaxUrl,
				success:function(data,httpRequest)
				{
					if(data.timeout != undefined)
					{
						AlertMsg(lang.timeoutMsg,function()
						{
							window.top.location = sysurl('login');
						});
					}
					else
					{
						window[dataTableID].reloadPage(window[dataTableID].getOpt());
						AlertMsg(lang.deleteSuccess,function()
						{
							
						});
					}
				},
				error:function(httpRequest, textStatus, errorThrown)
				{
					
				}
			});
		}
	}, {title: lang.delFileConfirmTitle});
	return false;
}

function replaceTemplate(content,vals)
{
	var reg = /%([a-zA-Z0-9_])*%/g;
	content = content.replace(reg,function(strMatch, pos)
	{
		strMatch = strMatch.replace('%','');
		strMatch = strMatch.replace('%','');
		return	vals[strMatch];
	});
//	var reg = '%'+vname+'%';
//	content = content.replace(reg,function(strMatch, pos)
//	{
//		return	val;
//	});
	
	return content;
}

function order(obj,type,id,datatb)
{
	if(!$(obj).hasClass('disable')) window[datatb].dataOrder(type,id);
	
}
