var dom = (document.getElementsByTagName) ? true : false;
var ie5 = (document.getElementsByTagName && document.all) ? true : false;

var _settings = {
	sortNone : '/res/sys/i/l/s0.png',
	sortUp   : '/res/sys/i/l/s1.png',
	sortDown : '/res/sys/i/l/s2.png'
}
function login(){
	var obj = window;
  if(obj.parent){obj = obj.parent;}
  if(obj.parent){obj = obj.parent;}
  if(obj.parent){obj = obj.parent;}
  obj.location='/app/login.do';
}
function doAction(url){
	if(!doCheck()) {
		return;
	}
	doSubmit(url);
}
function doCheck(){
	return true;
}
function doSubmit(url){
	//_loading();
	if(url){
		document.forms[0].action=url;
	}
	document.forms[0].submit();
}
function doLink(link){
	if(link && link!=''){
		window.location=link;
	}
}
function doParentLink(link){
	if(link && link!=''){
		if(window.parent){
			window.parent.location=link;
		}else{
			window.location=link;
		}
	}
}
function doListDelete(url,unitId){
	if(!doCheck()) {return;}
	var action = false;
	unitId = _getUnitId(unitId);
	var table = _getGrid(unitId);
  var selects = _getArray(table.all("_s_"+unitId));
	for(var i=0;i<selects.length;i++){		
		if(selects[i].value=="1"){
			action = true;
			break;
		}
	}
	if (action && confirm("删除操作不可恢复，你确认吗？")){
		_doRemoveSelected(unitId,false);
		document.forms[0].action=url;
		doSubmit();
	}
}
function doFormDelete(url,unitId){
	if(!doCheck()) {return;}
	unitId = _getUnitId(unitId);
	var table = _getGrid(unitId);
  var operator = table.all(unitId+".");
	if (operator && !operator.length && confirm("删除操作不可恢复，你确认吗？")){
		operator.value=3;
		document.forms[0].action=url;
		doSubmit();
	}
}
function doRemove(unitId){
	_doRemoveSelected(unitId,true);
}
function doListAdd(unitId){
	unitId = _getUnitId(unitId);
	var table = _getGrid(unitId);
	if(!table){
		return;
	}
	var wrapper = _getTable(table.parentNode);
	var insertRow = wrapper.all("_in_");
	if(insertRow){
			table.parentNode.innerHTML = table.outerHTML.substring(0,table.outerHTML.length-8)+insertRow.value +"</table>";
			var grid = new Grid(unitId);
			grid.setId();
			grid.setIndex();
			_checkSelectAll(unitId);
	}
}
function doFormAdd(unitId){
	unitId = _getUnitId(unitId);
	var wrapper = _getWrapper(unitId);
	if(!wrapper){
		return;
	}
	var insertRow = wrapper.all("_in_");
	if(insertRow){
		wrapper.parentNode.innerHTML = wrapper.outerHTML.substring(0,wrapper.outerHTML.length-8)+insertRow.value +"</table>";
	}
}
//---------------
function _doRemoveSelected(unitId,makeInvisible){
	unitId = _getUnitId(unitId);
	var table = _getGrid(unitId);
  var selects = _getArray(table.all("_s_"+unitId));
	var operators = _getArray(table.all(unitId+"."));
	if(selects.length==0 || selects.length!=operators.length){
		return;
	}
	var grid = new Grid(unitId);
	for (var i=0;i<selects.length;i++){
		grid.groups[i].doRemove(selects[i],operators[i],makeInvisible);
	}
	grid = new Grid(unitId);
	grid.setIndex();
	_checkSelectAll(unitId);
}
function _loading(){
	document.forms[0].style.display="none";
	var loading = document.all("_loading");
	loading.src = "/sys/i/obj/loading.png";
	loading.style.display="block";
}
function _selectAll(unitId){
	var obj = event.srcElement;
	var table=_getTable(obj);
  var selects = _getArray(table.all("_s_"+unitId));
	for (var i=0;i<selects.length;i++){
		selects[i].value = (obj.checked?"1":"0");
		selects[i].parentNode.childNodes[1].checked=obj.checked;
	}
}
function _checkSelectAll(unitId){
	unitId = _getUnitId(unitId);
	var table = _getGrid(unitId);
	var obj = table.all("_sa_");
	if(obj){
		var grid = new Grid(unitId);
		obj.checked=grid.allSelected() && !grid.allInvisible() ;
	}
}
function _showCard(groupId){
	var tab = _getCell(event.srcElement).getElementsByTagName("DIV")[0];
	if(tab.className=="C1"){
		return;
	}
	var cardWrapper = _getCardWrapper(event.srcElement);
	_showCardWithWrapper(cardWrapper,groupId);
}
function _showCardWithWrapper(wrapper,groupId){
	var unitId = wrapper.id.substring(2,wrapper.length);
	var tabsTable = wrapper.all("tabs_"+unitId);
	if(tabsTable){
		var tabs = tabsTable.getElementsByTagName("DIV");
		for(var i=0;i<tabs.length;i++){
			if(tabs[i].id){
				tabs[i].className = (tabs[i].id==groupId?"C1":"C0");
			}
		}
	}
	var rows = wrapper.all("g_"+unitId).rows;
	for(var i=0;i<rows.length;i++){
		rows[i].style.display = ((!rows[i].id || rows[i].id==groupId)?"block":"none");
	}	
}
function _showGroup(groupId){
	var grid = _getGridWithoutId()
	_showGroupWithGrid(grid,groupId);
}
function _showGroupWithGrid(grid,groupId){
	var group = new Group(grid.rows,groupId);
	group.show();
}
//navigator
function _go(currentPageNumber,maxPageNumber){
	var cell = _getCell(event.srcElement);
	var fields =  cell.getElementsByTagName("INPUT");
	var pageNumber = fields[1].value;
	if(!_isInt(pageNumber) || parseInt(pageNumber)<1 || parseInt(pageNumber)>maxPageNumber || parseInt(pageNumber)==currentPageNumber){
		fields[1].value = "";
		 return ;
	}else{
		fields[0].value = pageNumber;
		doSubmit();
	}
}
function _to(pageNumber){
	var cell = _getCell(event.srcElement);
	var fields =  cell.getElementsByTagName("INPUT");
	fields[0].value = pageNumber;
	doSubmit();
}
//sort
function _sort(name,type){
	var start = new Date;
	var last = new Date;
	//var message ="sort:";
	var cell = _getCell(event.srcElement);
	var img = cell.getElementsByTagName("IMG")[0];
	//set img and desc
	var desc =false;
	if(img.src.indexOf(_settings.sortNone)>0){
		img.src = _settings.sortUp;
	}else if(img.src.indexOf(_settings.sortUp)>0){
		img.src = _settings.sortDown;
		desc = true;
	}else if(img.src.indexOf(_settings.sortDown)>0){
		img.src = _settings.sortUp;
	}	
	//message+=" img("+(new Date - last)+")";
	last = new Date;
	//set index
	var gridTable = _getTable(cell);
	var unitId = gridTable.id.substring(2,gridTable.id.length);
	var head = new Group(gridTable.rows,"x");
	var index = head.getIndex(cell);
	//message+=" position("+(new Date - last)+")";
	last = new Date;
	//sorting
	var grid = new Grid(unitId);
	var groups = grid.groups;
	//message+=" init("+(new Date - last)+")";
	last = new Date;
	groups.sort(_compareGroup(name,type,desc,index));
	//message+=" sorting("+(new Date - last)+")";
	last = new Date;
	//set index
	grid.setIndex();
	//message+=" index("+(new Date - last)+")";
	last = new Date;
	//updating
	var tBody = gridTable.tBodies[0];
	for (var i = 0; i < groups.length; i++) {
		var rows = groups[i].rows;
		for (var j = 0; j < rows.length; j++) {
			tBody.appendChild(rows[j]);
		}
	}
	//message+=" updating("+(new Date - last)+") all:"+(new Date - start);
	//window.status=message;
}
function _compareGroup(name,type,desc, index) {
	var formatter = String;	
	if (type == "1"){
		formatter = Number;
	}else if (type == "3"){
		formatter = _formatCase;
	}else if (type == "4"){
		formatter = _formatDate;
	}
	return function (group1, group2) {
		var value1 = formatter(_getCellValue(group1.rows[index[0]].cells[index[1]],name));
		var value2 = formatter(_getCellValue(group2.rows[index[0]].cells[index[1]],name));
		if(value1<value2){
			return desc ? 1 : -1;
		}else if(value1>value2){
			return desc ? -1 : 1;
		}else{
			return 0;
		}
	};
}
function _getCellValue(cell,name) {
	var obj = cell.all(name);
	return obj?obj.value:cell.innerText;
}
function _formatCase(s) {
	return s.toUpperCase();
}
function _formatDate(s) {
	return Date.parse(s.replace(/\-/g, '/'));
}
// mark row ----------------------------------
//TODO 改为控制tr class提高效率
var _lastOverRowId ;
var _lastOverRowClassName ;
var _lastSelectedRowId ;
var _lastSelectedRowClassName ;
function _onRowOver(){
	var row = _getRow(event.srcElement);
	if(!_isValidRow(row) || row.id==_lastSelectedRowId){
		return;		
	}
	_lastOverRowId = row.id;
	_lastOverRowClassName = row.className;
	var group = new Group(_getTable(row).rows,row.id);
	group.setCss("RO");
}
function _onRowOut(){
	var row = _getRow(event.srcElement);
	if(!_isValidRow(row) || !_lastOverRowId || _lastOverRowId ==_lastSelectedRowId){
		return;
	}
	var group = new Group(_getTable(row).rows,_lastOverRowId);
	group.setCss(_lastOverRowClassName);
}
function _onRowSelected(){
	var row = _getRow(event.srcElement);
	if(!_isValidRow(row) || row.id==_lastSelectedRowId){
		return;
	}
	var rows = _getTable(row).rows;
	if(_lastSelectedRowId){
		var group = new Group(rows,_lastSelectedRowId);
		group.setCss(_lastSelectedRowClassName);
	}
	_lastSelectedRowId = row.id;
	_lastSelectedRowClassName =row.className;// _lastOverRowClassName;
	var group = new Group(rows,row.id);
	group.setCss("RS");
}
function _isValidRow(row){
	return  row.id && row.id!="x";
}
//grid --------------------------------------------------
function Grid(unitId){
	this.id = unitId;
	this.index = 1;
	this.groups = new Array();
	var rows = _getGrid(unitId).rows;
	if(!rows){return;}
	var lastRowId="x";
	var rowId;
	for (var i=0;i<rows.length ;i++)	{
		rowId = rows[i].id;
		if(rowId && rowId!=lastRowId){
			this.groups[this.groups.length] = new Group(rows,rowId,this);
		}
		lastRowId = rowId;
	}
}
Grid.prototype.getIndex = function(){
	return this.index++;
}
Grid.prototype.setId = function(){
	for (var i=0;i<this.groups.length ;i++)	{ this.groups[i].setId(i);}
}
Grid.prototype.setIndex = function(){
	for (var i=0;i<this.groups.length ;i++)	{ this.groups[i].setIndex(); }
}
Grid.prototype.allSelected = function(){
	for (var i=0;i<this.groups.length ;i++)	{
		if(!this.groups[i].selected()){return false;}
	}
	return true;
}
Grid.prototype.allInvisible = function(){
	for (var i=0;i<this.groups.length ;i++)	{
		if(!this.groups[i].invisible()){return false;}
	}
	return true;
}
function Group(rows,rowId,parent){
	this.id = rowId;
	this.parent = parent;
	this.rows= new Array();
	var row;
	for (var i=0;i<rows.length ;i++)	{
		row = rows[i];
		if(row.id==rowId){
			this.rows.push(row);
		}
	}
}
Group.prototype.setCss = function(css){
	for (var i=0;i<this.rows.length ;i++)	{
		this.rows[i].className=css;
	}
}
Group.prototype.setId = function(rowId){
	for (var i=0;i<this.rows.length ;i++)	{ this.rows[i].id=rowId; }
}
Group.prototype.setIndex = function(){
	var indexCell = this.rows[0].all("_i_");
	if(indexCell && indexCell.parentNode.style.display !="none"){
		indexCell.innerHTML=this.parent.getIndex();
	}
}
Group.prototype.doRemove = function(select,operator,makeInvisible){
	if(select.value=="1"){
		if(operator.value=="2" || operator.value=="0"){
			operator.value = "3";
			if(makeInvisible){
				this.show(false);
			}
		}else if(operator.value=="1"){
			this.remove();
		}
	}
}
Group.prototype.show = function(){
	if(this.rows.length>0){
		var show = this.rows[0].style.display=="none";
		for (var i=0;i<this.rows.length ;i++)	{
			this.rows[i].style.display=show?"block":"none";
		}
	}
}
Group.prototype.remove = function(){
	for (var i=0;i<this.rows.length ;i++)	{this.rows[i].removeNode(true);}
}
Group.prototype.selected = function(){
	return this.rows[0].all("_s_"+this.parent.id).parentNode.childNodes[1].checked;
}
Group.prototype.invisible = function(){
	return this.rows[0].style.display=="none";
}
Group.prototype.getIndex = function(cell){
	for (var i=0;i<this.rows.length ;i++)	{
		var cells = this.rows[i].cells;
		for (var j=0;j<cells.length ;j++)	{
			if(cells[j]==cell){
				return new Array(i,j);
			}
		}
	}
	return null;
}
Group.prototype.getValue = function(index,name){
	var cell = this.rows[index[0]].cells[index[1]];
	var obj = cell.all(name);
	if(obj){
		return obj.value;
	}else{
		return cell.innerHTML;
	}
}
//components------------------------------------------------
//tip
function _showTip(str){
	alert(str);
}
function _ec41(){
	var c = _getSpan(event.srcElement);
	var obj =c.getElementsByTagName("INPUT")[0];
	var items =c.getElementsByTagName("OPTION");
	var value ="";
	for (var i=0;i<items.length ;i++)	{
		if(items[i].selected){
			value += ","+items[i].value;
		}
	}
	obj.value = value.length>0?value.substring(1,value.length):"";
}
function _ec46(){
	var objs = _getSpan(event.srcElement).getElementsByTagName("INPUT");
	var obj = objs[0];
	var value ="";
	for (var i=1;i<objs.length ;i++)	{
		if(objs[i].checked){
			value = objs[i].value;
		}
	}
	obj.value = value;
	return obj;
}
function _ec48(){
	var obj = _ec46();
	objs = document.all(obj.name);
	for (var i=0;i<objs.length ;i++)	{
		if(objs[i]!=obj){
			objs[i].value="";
		}
	}
}
function _ec52(){
	var objs = _getSpan(event.srcElement).childNodes;
	if(objs[1].checked){
		objs[0].value="1";
	}else{
		objs[0].value="0";
	}
}
function _ec53(){
	var objs = _getSpan(event.srcElement).getElementsByTagName("INPUT");
	var obj = objs[0];
	var value ="";
	for (var i=1;i<objs.length ;i++)	{
		if(objs[i].checked){
			value += ","+objs[i].value;
		}
	}
	obj.value = value.length>0?value.substring(1,value.length):"";
}
// get unit object by event----------------------------
function _getUnitId(unitId){
	if(unitId){
		return unitId;
	}
	var parent=event.srcElement.parentNode;	
	while((parent.tagName!="TABLE" || !parent.id) && parent.parentNode){
		parent = parent.parentNode;
	}
	if(parent.id && parent.id.length>2){
		return parent.id.substring(2,parent.id.length);
	}else{
		return null;
	}
}
function _getUnit(unitId){
	return _getFirstObject(document.all("_ou_"+unitId));
}
function _getGrids(unitId){
	return document.all("g_"+unitId);
}
function _getGrid(unitId){
	return _getFirstObject(_getGrids(unitId));
}
function _getGridWithoutId(obj){
	var parent=obj?obj.parentNode:event.srcElement.parentNode;	
	while((parent.tagName!="TABLE" || !parent.id || parent.id.indexOf("g_")!=0) && parent.parentNode){
		parent = parent.parentNode;
	}
	return parent;
}
function _getWrappers(unitId){
	return document.all("w_"+unitId);
}
function _getWrapper(unitId){
	return _getFirstObject(_getWrappers(unitId));
}
function _getCardWrapper(obj){
	var parent=obj.parentNode;	
	while((parent.tagName!="TABLE" || !parent.id || parent.id.indexOf("c_")!=0) && parent.parentNode){
		parent = parent.parentNode;
	}
	return parent;
}
function _getTree(treeId){
	return _getFirstObject(document.all("_ot_"+treeId));
}
function _getChart(id){
	return _getFirstObject(document.all("_oc_"+id));
}
function _getEditor(id){
	return _getFirstObject(document.all("_oe_"+id));
}
function _getFirstObject(objs){
	if(!objs){
		return null;
	}
	if(objs.length){
		return objs[0];
	}else{
		return objs;
	}
}
//utils-----------------------------------------
function _isInt(obj) {  
  var integer = parseInt(obj); 
  return !isNaN(integer) && integer.toString().length==obj.length ;
} 
function _getArray(objs){
	var array = new Array();
	if(objs){
	  if(objs.length){
			for (var i=0;i<objs.length ;i++)	{
				array[i] = objs[i];
			}
		}else{
			array[0]= objs;
		}
	}
	return array;
}
function _getDiv(obj){
	return _getObj(obj,"DIV");
}
function _getSpan(obj){
	return _getObj(obj,"SPAN");
}
function _getCell(obj){
	return _getObj(obj,"TD");
}
function _getRow(obj){
	return _getObj(obj,"TR");
}
function _getTable(obj){
	return _getObj(obj,"TABLE");
}
function _getObj(obj,tagName){
	if(obj.tagName==tagName){
		return obj;
	}
	var parent=obj.parentNode;	
	while(parent.tagName!=tagName && parent.parentNode){
		parent = parent.parentNode;
	}
	return parent.tagName==tagName?parent:null;
}
function _getValue(name){
	var obj = document.all(name);
	return obj?(obj.length?obj[0].value:obj.value):null;
	//return obj?obj.value:null;
}
function _getRadioValue(name){
	var obj = document.all(name);
	if(obj){
		if(obj.length){
			for(var i=0;i<obj.length;i++){
				if(obj[i].checked){return obj[i].value}
			}
		}else{
			return obj.value;
		}
	}else{
		return null;
	}
}
function _setValue(name,value){
	var obj = document.all(name);
	if(obj){obj.value = value;}
}


