/* global nuf */

nuf.rowHlColor = new Array(); 
nuf.restoreRowHlColor = new Array(); 
nuf.itemCSS= new Array(); 
nuf.altItemCSS= new Array(); 
nuf.hiliteItemCSS= new Array(); 
nuf.storeItemCSS= new Array(); 

function __GridRequery(gridname) {
    
    var agrid = AsynchGrid.getAsynchGrid(gridname);
    if (agrid) {
        var vars = AsynchGrid.fixValuesMap('GRID_EVENT_SORT');
        AsynchGrid.loadAjaxGrid( gridname,agrid.asyncPageUrl, vars);
    } else {
        document.forms[0].action=document.URL; // set the form action to itself
        __doPostBack('refresh');
    }   
    
}
function __GridGoPage(gridname, pageno){
    
	var agrid = AsynchGrid.getAsynchGrid(gridname);
    if (agrid) {
        var vars = AsynchGrid.fixValuesMap('GRID_EVENT_NAVIGATE', gridname+':'+pageno);
        AsynchGrid.loadAjaxGrid( gridname,agrid.asyncPageUrl, vars);
    } else {
        document.forms[0].action=document.URL; // set the form action to itself
        __doPostBack('GRID_EVENT_NAVIGATE', gridname+':'+pageno);
    }
    
	
}

function __GridRowRollover(e, gridname){

	e = e || event;
	var obj = e.target || e.srcElement;
	var tname = (obj.nodeType === 1) ? obj.tagName.toLowerCase() : '';
	while (tname !== 'tr' && tname !== 'table') {
		obj = obj.parentNode || obj.parentElement;
		tname = obj.tagName.toLowerCase();
	}
	if (tname === 'tr') {
		switch (e.type) {
		case 'mouseover':
			var hcolor = __restoreRowHlColor[gridname];
			setTrCellsColor(obj, hcolor);
			break;
		case 'mouseout':
			setTrCellsColor(obj, '');
			break;
		}
	}

}//eof

function setTrCellsColor(tr, bgcolor) {

	tr.style.backgroundColor  = bgcolor;
	for (var i=0; i < tr.cells.length; i++) {
		tr.cells[i].style.backgroundColor  = bgcolor;
	}
	
}


function __GridRowMouseOver( row, gridname) {
	
	//Note: if the tds have a backround color set
	//then the highlite will not work because we are setting the tr's color
	if (__hiliteItemCSS[gridname]) {
		__storeItemCSS[gridname]=row.className;
		row.className = __hiliteItemCSS[gridname];
		
	} else {
		row.style.backgroundColor  ='#eaebc3';
	}
	
}
function __GridRowMouseOut( row,gridname) {
	
	// if class names are set...
	if (__storeItemCSS[gridname]) {
		row.className = __storeItemCSS[gridname];
		
	} else {
		row.style.backgroundColor ='White';
	}
		
	//row.bgColor ='White';
}

function doNavigate(pstrWhere, pintTot, gridname) {

    var strTmp = $(gridname + 'CurrentPage').value;
    var intPg = strTmp.parseNumber();
	
    if (intPg==0) intPg = 1; 
    
    if ((pstrWhere == 'F' || pstrWhere == 'P') && intPg == 1){
        //alert("You are already viewing first page!");
        return;
    }
    else if ((pstrWhere == 'N' || pstrWhere == 'L') && intPg == pintTot){
        //alert("You are already viewing last page!");
        return;
    }
    if (pstrWhere == 'F') {
		intPg = 1;
    } else if (pstrWhere == 'P'){
		intPg = intPg - 1;
    } else if (pstrWhere == 'N'){
		intPg = intPg + 1;
    } else if (pstrWhere == 'L') {
		intPg = pintTot;
    }
	
    if (intPg < 1) intPg = 1;
    if (intPg > pintTot) intPg = pintTot;
    
	__GridGoPage(gridname, intPg);

}

function __GridDoSort(pstrFld, pstrOrd, gridname) {
    var agrid = AsynchGrid.getAsynchGrid(gridname);
    if (agrid) {
        var vars = AsynchGrid.fixValuesMap('GRID_EVENT_SORT', gridname +':'+ pstrFld+':'+pstrOrd);
        AsynchGrid.loadAjaxGrid( gridname,agrid.asyncPageUrl, vars);
    } else {
        document.forms[0].action=document.URL; // set the form action to itself
        __doPostBack('GRID_EVENT_SORT',gridname +':'+ pstrFld+':'+pstrOrd, document.forms['frm'+gridname]);
    }
    
}


function __GridToExcel(gridname) {
	
	var loc = __contextPath + "/GridToExcelServlet?gridname="+gridname;
	var w = launchCenter(loc, gridname, '500', '500') ;
	w.focus();
}

// function called when a row in the dbgrid is clicked
function __GridRowMouseDown(chkId, e, allowMultiple, gridname) {

	if (typeof(__page__GridRowMouseDown)=='function') {
		__page__GridRowMouseDown(chkId, e, allowMultiple, gridname);
	} else {
		//by default just click the ckechkob click event
		__GridClickCheckBox(chkId, e, allowMultiple, gridname);
	}
}

function __GridClickCheckBox(chkId, e, allowMultiple, gridname) {
				
		var tmpStatus ;
		var chk = document.getElementById(chkId);
				
		if (chk && (!chk.disabled)) {
			
			var target= e.srcElement ? e.srcElement : e.target;
			if (target.name==='_anch_'||target.tagName.toLowerCase()==='img') {
				return;
			}
			if(target.disabled) {
				return;
			}
			//alert(target.Type);
			if (target.type==='checkbox' ) {
				if (!allowMultiple){__GridClearAll(gridname, target)};
				return;
				
			} else {
				chk.checked = !chk.checked;
				tmpStatus = chk.checked;
			}
				
			if (!allowMultiple && tmpStatus) {
				__GridClearAll(gridname);			
				chk.checked = true;
			}
			
		}
	}

function __GridDeleteMultiple(gridname) {
	
	if (__GridGetCheckedCount(gridname)===0) {
		alert('Please select one or more entries from the list below.');
		return;
	} else {
		if (confirm('Are you sure you want to delete all selected entries?', function(){
			__doPostBack('DELETEMULTIPLE', '');
		}));
	}

}

function __GridNewRecord(gridName) {
	
	if (typeof(__page_GridNewRecord)=='function') {
		__page_GridNewRecord(gridName);
		
	}
	
}

function __GridDeleteRecord(gridName, pk ) {
    
	var confirmMsg = msg_EL2[10];
	if  (__lang=='EN')confirmMsg=msg_EN2[10];
	
	if (confirm(confirmMsg, function() {
		if (typeof(__page__GridDeleteRecord)=='function') {
			__page__GridDeleteRecord(gridName, pk);
		} else {
		
		   alert('You must define __page__GridDeleteRecord function on your page');
		}
	}));
}

	function __GridEditRecord(gridName, pk) {
		
		if (typeof(__page__GridEditRecord)=='function') {
			__page__GridEditRecord(gridName,pk);
		} else {
			 alert('You must dfine __page__GridEditRecord function on your page');
		}
	    
	}
	
	function __GridSelectSelf(gridname, idx) {
		
		var checkboxes = document.getElementsByName(gridname + '_checkbox');
				
		if (checkboxes && checkboxes.length > 0) {
			for (var i=0; i < checkboxes.length; i++) {
				if ( i!=idx && checkboxes[i].checked){
					checkboxes[i].checked = false;
				} else {
					checkboxes[i].checked = true;
				}
				
			}		
		}
		return;
	}
	
	function __GridClearAll(gridname, skipCheckbox) {
		
		var checkboxes = document.getElementsByName(gridname + '_checkbox');
				
		if (checkboxes && checkboxes.length > 0) {
			for (var i=0; i < checkboxes.length; i++) {
				if(skipCheckbox && checkboxes[i].value==skipCheckbox.value) {
					continue;
				} else {
					if (checkboxes[i].checked){
						checkboxes[i].checked = false;
					}
				}
			}		
		}
		return;
	}

	function __GridToggleAll(gridname) {
		
		var checkboxes = document.getElementsByName(gridname + '_checkbox');
		var bcheched = true;
		
		if (checkboxes && checkboxes.length > 0) {
			if (checkboxes[0].checked){
				bcheched = false;
			}
	
			for (var i=0; i < checkboxes.length; i++) {
				checkboxes[i].checked=bcheched;
			}
		}
		return;
	}

function __GridGetFirstChecked(gridname) {
	
	var ret=0;
	var checkboxes = document.getElementsByName(gridname + '_checkbox');
	
	if (checkboxes) {
		for (var i=0; i < checkboxes.length; i++) {
			if (checkboxes[i].checked) {
				ret = checkboxes[i].value;
				
				break;
			}
	    }
    }
    
	return ret;
}

function __GridGetCheckedValues(gridname) {

	var ret = new Array();
	var checkboxes = document.getElementsByName(gridname + '_checkbox');
	
	if (checkboxes) {
		for (var i=0; i < checkboxes.length; i++) {
			if (checkboxes[i].checked) {
				ret[ret.length] = checkboxes[i].value;
			}
	    }
    }
    
	return ret;
}

function __GridGetCheckedCount(gridname) {
	
	var selCount=0;
	var checkboxes = document.getElementsByName(gridname + '_checkbox');
	
	if (checkboxes) {
		for (var i=0; i < checkboxes.length; i++) {
			if (checkboxes[i].checked) {
				selCount++;
			}
	    }
    }
    
	return selCount;
}

function __gridCheckboxClick(gridname) {
	//call function on page, if defined
	if (typeof(__page__gridCheckboxClick)=='function') {
		__page__gridCheckboxClick(gridname);
	}
}
/**
* Function to hide the grid header row
*/
function __hideGridHeaderRow(gridname) {
	var tbl = $$(gridname);// get elements by tag name.  There will be 2 elements returned, one for the "a" tag and one for the DBGrid table.
	tbl[1].rows[0].style.display ="none";
}

/**
* Function get the grid reference
**/
function __getGridRef(gridname) {
	var tbl = $$(gridname);
	return tbl[1];
}
/**
* function to hide the grid
**/
function __hideGrid(gridname) {
	var tbl = $$(gridname);
	tbl[1].style.display ="none";
}

function __GridRemoveRow(gridname, rowIndex) {
	var tbl = $$(gridname);
	tbl[1].deleteRow(rowIndex);
}

function __GridAddRow(gridname, values) {
	var tbl = $$(gridname);
	var row = tbl[1].rows( tbl[1].count-1 );
    var clone = row.cloneNode(true); // copy children too
    table.appendChild(clone); // add new row to end of table
    
    for (var i=1; i < clone.cells.length; i++) {
        clone.cells[i].innerHTML = values[i-1];
    }
}

var AsynchGrid = {
    
    setupAjaxGrid: function (asyncPageUrl, gridname)  {
        addonload( function(){
			__setupAjaxActivity(); // this is in formvalidation.js
            AsynchGrid.addAsynchGrid( gridname, asyncPageUrl);
            logMessage('added ajax grid:' + gridname + ', pageAsynchGrids:' + AsynchGrid.pageAsynchGrids.length);
            
            AsynchGrid.loadAjaxGrid(gridname, asyncPageUrl, AsynchGrid.fixValuesMap(''));
            logMessage('setup and loaded ajax grid:' + gridname + ', pageAsynchGrids:' + AsynchGrid.pageAsynchGrids.length);
        });
    },
    
    /**
     * An associative array holding refernces to asynchornous grids on the jsp
     */
    pageAsynchGrids: new Array(),

    asynchGridObject: function ( _gridname, _asyncPageUrl) {
        this.gridname = _gridname;
        this.asyncPageUrl = _asyncPageUrl;
        
        // function reference to be executed after grid has been loaded
        // to set this call: getAsynchGrid('gridname').onload = function(){alert('I am loaded');};
        this.onload = null;
    },

    getAsynchGrid: function(_gridname) {
        return AsynchGrid.pageAsynchGrids[_gridname];
    },
    
    addAsynchGrid: function(_gridname, _asyncPageUrl) {
        AsynchGrid.pageAsynchGrids[_gridname] = new AsynchGrid.asynchGridObject(_gridname,_asyncPageUrl );
    },
    
    refreshAjaxGrid:function(gridname) {
        var x = AsynchGrid.getAsynchGrid(gridname);
        AsynchGrid.loadAjaxGrid(x.gridname, x.asyncPageUrl);
    },
    
    loadAjaxGrid: function ( gridname, asyncPageUrl, vars) {
        //return (do not sent ajax) even if nothing is filled in
        if(!vars) {
            vars = AsynchGrid.fixValuesMap('GRID_EVENT_SORT');
        }
		vars["isLoadDBGridAsynch"]="1"; // indicate to framework that we are doing a load of a DBGrid Asynch 
        __currentAjaxControl = $('div' + gridname);
		ajaxCRUD.sentAjaxFormRequest(function(responseText){
                                        self.status ='';
										
                                        replaceResponseDiv('div' + gridname, responseText);
                                        enableSubmit();
                                        
                                        var x = AsynchGrid.getAsynchGrid(gridname);
                                        if(x && x.onload ) {
                                            x.onload();
                                        }
                                    },vars,asyncPageUrl, 'GET');
    },
    
    /**
     * Returns an associative array and sets the __EVENTTARGET and __EVENTARGUMENT fields
     */
    fixValuesMap: function(eventTarget, eventArgument) {
        var vars = getJroAttributesMap();
        if(eventTarget)vars['__EVENTTARGET'] = eventTarget;
        if(eventArgument)vars['__EVENTARGUMENT'] = eventArgument;
        if(nuf.formReadOnly){vars["readonly"] = "1";}
        return vars;
    }
};



