var dataGridHighlightedRow = ""
var datagrid = {
/*
	  var deleter = trs[i].getElementsByTagName('td')[0].getElementsByTagName('span')[0].onclick = function(evt) {
	    confirm('Are you sure?')
		if (!evt) var evt = window.event
	    evt.cancelBubble = true
	    if (evt.stopPropagation) evt.stopPropagation()
	  }
	  */
  highlight       : function(el) {
    Element.addClassName(el,'highlighted')
  },
  removeHighlight : function (el) {
    Element.removeClassName(el,'highlighted')
  },
  edit            : function (cnt,id,url) {
    this.editUrl = url+'/'+id
	this.container = cnt
	Element.show(cnt+'_datagrid_status')
	new Ajax.Updater(cnt+'_form_div',this.editUrl,{onComplete: function(request){
	  Element.hide(datagrid.container+'_datagrid_status')
	  Element.show(datagrid.container+'_form_div')
      Element.hide('datagridtable-cnt_'+datagrid.container)
	 }
	})
  },
  update        : function(id,url) {
    this.updateUrl = url+'/'+id
	Element.show(this.container+'_datagrid_status')
  },
  cancel        : function() {
    Element.hide(datagrid.container+'_form_div')
    Element.show('datagridtable-cnt_'+datagrid.container)
  },
  init          : function(id,url) {
	this.grids[id] = url
	if ($(id).getElementsByTagName('tr').length > 0) {
	  $(id).style.width = Element.getDimensions('datagridtable-'+id).width + 'px'
	}
  },
  reset         : function(id) {
	datagrid.currentId = id
	Element.show(id+'_datagrid_status')
	new Ajax.Updater(id,this.grids[id],{parameters:'reset=true',onComplete: function() {Element.hide(datagrid.currentId+'_datagrid_status')}})
  },
  select        : function(tblRow) {
	if (getHighlightedRow) alert(getHighlightedRow)
	var tdArr = tblRow.getElementsByTagName('td');
    if (dataGridHighlightedRow && dataGridHighlightedRow == tblRow.id)  {
      tdArr = $(dataGridHighlightedRow).getElementsByTagName('td');
	  for(i=0;i<tdArr.length;i++) {
	    tdArr[i].style.backgroundColor = 'beige';
		if (tdArr[i].getElementsByTagName('input')[0]) {
	      tdArr[i].getElementsByTagName('input')[0].style.backgroundColor = 'beige';
		}
	  }
	  return
	}

	var currentTable = tblRow.parentNode.parentNode.id;
	for(i=0;i<tdArr.length;i++) {
		  tdArr[i].style.backgroundColor = 'beige';
		  if (tdArr[i].getElementsByTagName('input')[0]) {
	         tdArr[i].getElementsByTagName('input')[0].style.backgroundColor = 'beige';
		  }
	}
	if (dataGridHighlightedRow != '' && document.getElementById(dataGridHighlightedRow)) { 
	  var prevTdArr = document.getElementsByTagName('td');
	  for(i=0;i<prevTdArr.length;i++) {
			 if (currentTable == prevTdArr[i].parentNode.parentNode.parentNode.id && prevTdArr[i].parentNode.id != tblRow.id) {
				 prevTdArr[i].style.backgroundColor = 'white';
				 if (prevTdArr[i].getElementsByTagName('input')[0]) {
	               prevTdArr[i].getElementsByTagName('input')[0].style.backgroundColor = 'white';
		         }
			 }
	  }
    }
	dataGridHighlightedRow = tblRow.id;
  },
  grids         : [],
  currentId     : null
}

var livegrid = {
  
  sortAscendImg : '/STON/STON_images/general/sort_asc.gif',
  sortDescendImg : '/STON/STON_images/general/sort_desc.gif',
  gridAry : [],
  
  init       : function(id,url,perPage) {
	//$(id).style.width = Element.getDimensions('datagridtable-'+id).width +30+'px'
	this.gridAry[id] = new Rico.LiveGrid('datagridtable-'+id,perPage, 0, url, {prefetchBuffer: true})
    ajaxEngine.registerAjaxObject( 'datagridtable-'+id+'_callback',new SearchRowsConfigurator(this.gridAry[id]))
  },
  reset      : function(id) {
	 this.removeSortImages(id)
	 this.resetForm(id)
	 this.gridAry[id].setRequestParams()
     this.gridAry[id].resetContents()
     this.gridAry[id].requestContentRefresh(0)
  },
  filter     : function(id) {
	this.removeSortImages(id)
    this.gridAry[id].options.requestParameters = this.getParams(id)
    this.gridAry[id].resetContents()
    this.gridAry[id].requestContentRefresh(0)
  },
  sort      : function(id,field) {
    var pAry = this.getParams(id)
	var dir  = this.getSortImageDir(id,field)
	this.removeSortImages(id)
	pAry.push('sort_col='+field)
	pAry.push('sort_dir='+dir)
    new Insertion.After('sort_by_'+field,this.sortImage(dir))
    this.gridAry[id].options.requestParameters = pAry
    this.gridAry[id].resetContents()
    this.gridAry[id].requestContentRefresh(0)
  },
  getParams : function(id) {
	var form = $(id).getElementsByTagName('form')[0]
	var fAry = Form.getElements(form)
	var pAry = Array()
	for(var i=0;i<fAry.length;i++) {
	  if (fAry[i].name.match(/searches\[([a-z_]*)\]/)) {
	    pAry.push('search_'+RegExp.$1+'='+$F(fAry[i]))
	  } else if(fAry[i].name.match(/filters\[([a-z_]*)\]/)) {
		pAry.push('filter_'+RegExp.$1+'='+$F(fAry[i]))
	  }
	}
	return pAry
  },
  sortImage : function(dir) {
    return dir == 'ASC'? "<img src=\""+this.sortAscendImg+"\" />" : "<img src=\""+this.sortDescendImg+"\" />"
  },
  removeSortImages : function(id) {
    var imgs = $(id).getElementsByTagName('img')
	for(var i=0;i<imgs.length;i++){
	  if (imgs[i].src.indexOf(this.sortAscendImg) > -1 || imgs[i].src.indexOf(this.sortDescendImg) > -1) {
	    Element.remove(imgs[i])
		--i
	  }
	}
  },
  getSortImageDir  : function(id,field) {
    var imgs = $('sort_by_'+field).parentNode.getElementsByTagName('img')
	if (imgs[0] && imgs[0].src.indexOf(this.sortAscendImg) > -1){
	  return 'DESC'
	} else {
      return 'ASC'
	}
  },
  resetForm      : function(id) {
	$(id).getElementsByTagName('form')[0].reset()
  },
  toggleClass    : function(row) {
	var tds = row.getElementsByTagName('td')
	for(var i=0;i<tds.length;i++) {
      if (tds[i].className == 'highlighted') {
	    Element.removeClassName(tds[i],'highlighted')
	  } else {
	    Element.addClassName(tds[i],'highlighted')	
	  }
	}
  },
  dataView      : function(view,row) {
	 var lastCell = row.getElementsByTagName('td')[row.getElementsByTagName('td').length-1]
	 var id = lastCell.getElementsByTagName('span')[0].id.stripNum()
	 window.location = view+'/'+id
  }
}

SearchRowsConfigurator = Class.create();

SearchRowsConfigurator.prototype = {

   initialize: function(liveGrid) {
     this.liveGrid = liveGrid;
   },

   ajaxUpdate: function(ajaxResponse) {
      var cell = ajaxResponse.getElementsByTagName("numresults")[0];
      var numResults = cell.text != undefined ? cell.text : cell.textContent;
      if ( this.liveGrid.metaData.getTotalRows() != numResults ) {
         this.liveGrid.metaData.setTotalRows(numResults);
         this.liveGrid.scroller.updateSize();
      }
   }
};