
/*
 * ExtendedWebUI.js
 */

/*
 * Other Controls.
 */

function attachEvents(id)
{
	try
	{
		var el = document.getElementById(id);
		if(el != null)
		{
			if(navigator.appName == "Microsoft Internet Explorer")
			{
				el.onmouseout = buttonEvent;		
				el.onmouseover = buttonEvent;		
				el.onmousedown = buttonEvent;		
			}
			else 
			{
				el.addEventListener("mouseout", buttonEvent, false);
				el.addEventListener("mouseover", buttonEvent, false);
				el.addEventListener("mousedown", buttonEvent, false);
			}
		}
	}
	
	finally
	{
	}
}

function buttonEvent(e)
{
	var el;
	var type;
	var button;
	
	if (navigator.appName == "Microsoft Internet Explorer")
	{
		el = window.event.srcElement;
		type = window.event.type.toLowerCase();
		button = window.event.button;
	}
	else
	{
		el = e.target;
		type = e.type.toLowerCase();
		button = e.button;
	}
	
	swapImage(el, type, button);
}

function enableButton(id)
{
	var el = getElement(document.getElementById(id));
	if(el != null)
	{
		if(navigator.appName == "Microsoft Internet Explorer")
			el.disabled = false;
		else
			el.removeAttribute("disabled");
		
		//alert('enable: ' + el.disabled);
		
		swapImage(el, "mouseout", null);
	}
}

function disableButton(id)
{
	var el = getElement(document.getElementById(id));
	if(el != null)
	{
		if(navigator.appName == "Microsoft Internet Explorer")
			el.disabled = true;
		else
			el.setAttribute("disabled", "disabled");
		
		swapImage(el, "", null);
	}
}

function swapImage(el, type, button)
{
	el = getElement(el);
	if(el == null)
		return;
		
	var elImage = null;
	var buttons = null;
	var disabled = false;
			
	if(navigator.appName == "Microsoft Internet Explorer")
	{
		elImage = getElementImage(el);
		disabled = el.disabled;
		buttons = eval(el.id + "_Buttons");
		
		if(elImage == null || buttons == null)
			return;
		
		//alert('swapImage: ' + el.disabled);
		
		if(disabled)
		{
			elImage.src = buttons[3];
			elImage.style.cursor = "default";		
		}
		else
		{
			switch(type)
			{
				case "mouseout":
					elImage.src = buttons[0];
					elImage.style.cursor = "default";				
					break;
					
				case "mouseover":
					elImage.src = buttons[2];
					elImage.style.cursor = "hand";				
					break;

				case "mousedown":
					if(button == 1)
						elImage.src = buttons[1];				
					break;
					
				default:
					break;
			}
		}
	}
	else
	{
		elImage = getElementImage(el);
		disabled = el.getAttribute("disabled") == "disabled";
		buttons = eval(el.id + "_Buttons");

		if(elImage == null || buttons == null)
			return;
			
		if(disabled)
		{
			elImage.src = buttons[3];
		}
		else
		{				
			switch(type)
			{
				case "mouseout":
					elImage.src = buttons[0];
					break;
					
				case "mouseover":
					elImage.src = buttons[2];
					break;

				case "mousedown":
					if(button == 0)
						elImage.src = buttons[1];				
					break;
					
				default:
					break;						
			}
		}
	}	
}

function getElement(el)
{
	if(el == null)
		return null;

	if(el.tagName == "IMG" && el.parentElement.tagName == "A")
		return el.parentElement;
	else if(el.tagName == "A")
		return el;
	else if(el.tagName == "INPUT")
		return el;
	else
		return null;
}

function getElementImage(el)
{
	if(el == null)
		return null;
	
	if(el.tagName == "A" && el.firstChild.tagName == "IMG")
		return el.firstChild;
	else if(el.tagName == "IMG")
		return el;
	else if(el.tagName == "INPUT")
		return el;
	else
		return null;
}
	
/*
 * ExtendedWebDateChooser
 */
 
function extendedWebDateChooser_RequiredFieldValidate(dateChooserId)
{
	var dateChooser = igdrp_getComboById(dateChooserId); 
	if(dateChooser != null)
	{
		var d = dateChooser.getValue(); 
		return (d != null);
	}
	else
		return false;
} 
 
function extendedWebDateChooser_SetDateRange(dateChooserId1, dateChooserId2, interval)
{
	var dateChooser1 = igdrp_getComboById(dateChooserId1); 
	var dateChooser2 = igdrp_getComboById(dateChooserId2); 

	if(dateChooser1 != null && dateChooser2 != null)
	{
		var d = new Date(dateChooser1.getValue());

		switch(interval)
		{
			case 1: // year
				d.setDate(1);
				d.setMonth(0);
				
				dateChooser1.setValue(d);
				dateChooser2.setValue(dateAdd(d, -1, 0, 1));	
						
				break;
				
			default: // month
				d.setDate(1);
				
				dateChooser1.setValue(d);
				dateChooser2.setValue(dateAdd(d, -1, 1, 0));	
						
				break;
		}
	}
}

function extendedWebDateChooser_ValidateDateDiff(dateChooserId1, dateChooserId2, days)
{
	//
	// Used inside a clientvalidationfunction of the CustomValidator control.
	//
	// Example:
	//
	// function cvDateRangeDateDiff_Validate(source, args)
	// {
	//	  args.IsValid = extendedWebDateChooser_ValidateDateDiff('txtStartDate', 'txtEndDate', 31);
	// }
		
	var dateChooser1 = igdrp_getComboById(dateChooserId1); 
	var dateChooser2 = igdrp_getComboById(dateChooserId2); 

	if(dateChooser1 != null && dateChooser2 != null)
	{
		var d = dateDiff(new Date(dateChooser1.getValue()), new Date(dateChooser2.getValue()));
		return (d <= days);
	}
	else
		return false;
} 

/*
 * ExtendedWebToolbar
 */
 
function igtbar_getItemByKey(toolbarId, key)
{
	var toolbar = igtbar_getToolbarById(toolbarId);
	if(toolbar != null)
	{
		for(var i = 0; i < toolbar.Items.length; i++)
		{
			if(toolbar.Items[i].Key == key)
				return toolbar.Items[i];
		}
	}
	
	return null;
}

/*
 * ExtendedWebNavBar
 */

function extendedWebNavBar_Click(navBar, button, e, gridId, customRecordButtons, saveConfirmMsg, deleteConfirmMsg)
{
	var grid = null;
	try
	{
		grid = igtbl_getGridById(gridId);
	}
	catch(ex)
	{
	
		e.cancel = true;
		return ig_cancelEvent(e);
	}


	try
	{
		if(!Page_IsValid)
		{
			if(grid.getActiveRow() != null && grid.getActiveCell() != null)
			{
				grid.getActiveCell().endEdit();
				grid.getActiveCell().activate();
				grid.getActiveCell().beginEdit();
			}
					
			return;
		}
	}
	catch(ex)
	{
	}
		
	switch(button.Key)
	{		
		case "first":
			if(grid.Rows.length != 0)
			{
				var row = grid.Rows.getRow(0);
				if(row != null && row != grid.getActiveRow())
				{
					row.activate();
					row.setSelected();
					row.scrollToView();
				}
				else
				{
					e.cancel = true;
					return ig_cancelEvent(e);
				}
			}
			else
			{
				e.cancel = true;
				return ig_cancelEvent(e);			
			}					
			
			break;
			
		case "previous":
			if(grid.Rows.length != 0)
			{
				var row = grid.getActiveRow();
				if(row != null)
					row = row.getPrevRow();
				else
					row = grid.Rows.getRow(0);
					
				if(row != null && row != grid.getActiveRow())
				{
					row.activate();
					row.setSelected();
					row.scrollToView();
				}
				else
				{
					e.cancel = true;
					return ig_cancelEvent(e);
				}
			}
			else
			{
				e.cancel = true;
				return ig_cancelEvent(e);			
			}					
			
			break;
			
		case "next":
			if(grid.Rows.length != 0)
			{
				var row = grid.getActiveRow();
				if(row != null)
					var row = row.getNextRow();
				else
					row = grid.Rows.getRow(0);
				
				if(row != null && row != grid.getActiveRow())
				{
					row.activate();
					row.setSelected();
					row.scrollToView();
				}
				else
				{
					e.cancel = true;
					return ig_cancelEvent(e);
				}
			}
			else
			{
				e.cancel = true;
				return ig_cancelEvent(e);			
			}					
			
			break;
			
		case "last":
			if(grid.Rows.length != 0)
			{
				var row = grid.Rows.getRow(grid.Rows.length - 1);
				if(row != null && row != grid.getActiveRow())
				{
					row.activate();
					row.setSelected();
					row.scrollToView();
				}
				else
				{
					e.cancel = true;
					return ig_cancelEvent(e);
				}
			}
			else
			{
				e.cancel = true;
				return ig_cancelEvent(e);			
			}					
			
			break;
		
		case "add":	
			if(!customRecordButtons)
			{
				var bandIndex = 0;
				if(!(	grid.Bands[bandIndex].AllowAddNew == 2 || 
						grid.Bands[bandIndex].AllowAddNew == 0 && 
						grid.AllowAddNew != 1 || 
						grid.Bands[bandIndex].IsGrouped))
				{
					igtbl_setActiveRow(gridId, null);
					igtbl_clearSelectionAll(gridId);
					igtbl_addNew(gridId, bandIndex);
				}
				else
				{
					e.cancel = true;
					return ig_cancelEvent(e);
				}			
			}
			
			break;
		
		case "edit":
			if(!customRecordButtons)
			{
				if(grid.Rows.length != 0)
				{
					var row = grid.getActiveRow();
					
					var bandIndex = 0;
					if(row != null)
					{
						row.editRow();
					}
					else
					{
						e.cancel = true;
						return ig_cancelEvent(e);
					}
				}
				else
				{
					e.cancel = true;
					return ig_cancelEvent(e);			
				}	
			}
							
			break;
			
		case "delete":
			if(deleteConfirmMsg.length != 0)
			{
				if(!window.confirm(deleteConfirmMsg))
				{
					e.needPostBack = false;
					return;
				}
			}
		
			if(!customRecordButtons)
			{	
				if(grid.Rows.length != 0)
				{
					var bandIndex = 0;
					var row = grid.getActiveRow();
					if(row != null && !(grid.Bands[bandIndex].AllowDelete == 2 ||
										grid.Bands[bandIndex].AllowDelete == 0 &&
										grid.AllowDelete != 1 ||
										grid.Bands[bandIndex].IsGrouped)){
					
						row.setSelected(true);
						grid.deleteSelectedRows();
						
						igtbl_doPostBack(gridId, "");
					}
					else
					{
						e.cancel = true;
						return ig_cancelEvent(e);
					}
				}
				else
				{
					e.cancel = true;
					return ig_cancelEvent(e);			
				}	
			}							
			break;
		
		case "save":
			if(saveConfirmMsg.length != 0)
			{
				if(!window.confirm(saveConfirmMsg))
				{
					e.needPostBack = false;
					return;
				}
			}
			
			igtbl_doPostBack(gridId, "");
			
			break;
	}
	
	return 0;
}

/* 
 * ExtendedWebCombo
 */

var EXTENDEDWEBCOMBO_ALL = '[all]';
var EXTENDEDWEBCOMBO_NONE = '[none]';
var EXTENDEDWEBCOMBO_NOTREQUIRED = '[not required]';
var EXTENDEDWEBCOMBO_NEW = '[new]';
var EXTENDEDWEBCOMBO_EMPTY = '[empty list]';
var EXTENDEDWEBCOMBO_SELECT = '[please select]';

function extendedWebCombo_InitializeCombo(comboId)
{
	var combo = igcmbo_getComboById(comboId);
	if(combo != null)
	{
		var editor = document.getElementById(comboId + "_input");
		if(editor != null)
		{
			editor.onfocus = new Function("extendedWebCombo_Focus('" + comboId + "'); igcmbo_oneditfocus(event, '" + comboId + "');");
			editor.onblur = new Function("extendedWebCombo_Blur('" + comboId + "'); igcmbo_onblur(event, '" + comboId + "');");
		}
		
		if(combo.getSelectedIndex() == -1 && combo.getGrid().Rows.length != 0)
			combo.setSelectedIndex(0);
	}
}

function extendedWebCombo_BeforeDropDown(comboId)
{
	extendedWebCombo_LimitToList(comboId);
}

function extendedWebCombo_AfterCloseUp(comboId)
{
	extendedWebCombo_LimitToList(comboId);
}

function extendedWebCombo_Focus(comboId)
{
	var combo = igcmbo_getComboById(comboId);
	if(combo != null)
	{
		if(combo.getSelectedIndex() != -1)
			eval(combo.ClientID + "_SelectedIndex = combo.getSelectedIndex();");
		else
			eval(combo.ClientID + "_SelectedIndex = 0;");
	}
}

function extendedWebCombo_Blur(comboId)
{
	var combo = igcmbo_getComboById(comboId);
	if(combo != null)
	{
		if(combo.getDropDown()) { return; }
		extendedWebCombo_LimitToList(comboId);	
	}
}

function extendedWebCombo_LimitToList(comboId)
{
	var combo = igcmbo_getComboById(comboId);
	if(combo != null)
	{
		var grid = combo.getGrid();
		if(grid != null)
		{
			if(combo.getSelectedIndex() == -1)
				eval("combo.setSelectedIndex(" + combo.ClientID + "_SelectedIndex);");

			if(combo.getSelectedIndex() != -1 && combo.DataTextField.length != 0)
			{
				var displayValue = grid.Rows.getRow(combo.getSelectedIndex()).getCellFromKey(combo.DataTextField).getValue();
				if(combo.getDisplayValue() != displayValue) 
					combo.setDisplayValue(displayValue); 
			}
		}
	}
}

function extendedWebCombo_SetEnabled(comboId, b)
{
	var combo = igcmbo_getComboById(comboId);
	if(combo != null)
	{
		combo.Element.disabled = !b;
		
		if(combo.Editable)
		{	
			var combo_input = igcmbo_getElementById(comboId + '_input');
			if(combo_input != null)
				combo_input.disabled = !b;
		}
	}
}

function extendedWebCombo_IsInList(comboId, ignoreWellKnownItems)
{
	var combo = igcmbo_getComboById(comboId); 
	if(combo != null)
	{
		if(combo.Element.disabled)
			return true;
		
		if(!ignoreWellKnownItems)
		{
			if(combo.getDisplayValue() == EXTENDEDWEBCOMBO_ALL ||
				combo.getDisplayValue() == EXTENDEDWEBCOMBO_NONE || 
				combo.getDisplayValue() == EXTENDEDWEBCOMBO_NOTREQUIRED ||
				combo.getDisplayValue() == EXTENDEDWEBCOMBO_NEW ||
				combo.getDisplayValue() == EXTENDEDWEBCOMBO_EMPTY ||
				combo.getDisplayValue() == EXTENDEDWEBCOMBO_SELECT)
			{
				return false;
			}
		}
		
		return (combo.getSelectedIndex != -1);
	}
	
	return false;
}

function extendedWebCombo_IsInListByDisplayValue(comboId, ignoreWellKnownItems)
{
	var combo = igcmbo_getComboById(comboId); 
	if(combo != null)
	{
		if(combo.Element.disabled)
			return true;
		
		var grid = combo.getGrid();
		if(grid != null)
		{
			if(!ignoreWellKnownItems)
			{
				if(combo.getDisplayValue() == EXTENDEDWEBCOMBO_ALL ||
					combo.getDisplayValue() == EXTENDEDWEBCOMBO_NONE || 
					combo.getDisplayValue() == EXTENDEDWEBCOMBO_NOTREQUIRED ||
					combo.getDisplayValue() == EXTENDEDWEBCOMBO_NEW ||
					combo.getDisplayValue() == EXTENDEDWEBCOMBO_EMPTY ||
					combo.getDisplayValue() == EXTENDEDWEBCOMBO_SELECT)
				{
					return false;
				}
			}
			
			for(var i = 0; i < grid.Rows.length; ++i)
			{
				var s;
				
				if(combo.DataTextField.length == 0)
					s = grid.Rows.getRow(i).getCell(0).getValue();
				else
					s = grid.Rows.getRow(i).getCellFromKey(combo.DataTextField).getValue();
				
				if(s == combo.getDisplayValue())
					return true;
			}
		}
	}
	
	return false;
}

function extendedWebCombo_IsInListByKey(comboId, key, value, ignoreWellKnownItems)
{
	var combo = igcmbo_getComboById(comboId); 
	if(combo != null)
	{
		if(combo.Element.disabled)
			return true;
		
		var grid = combo.getGrid();
		if(grid != null)
		{
			if(!ignoreWellKnownItems)
			{
				if(combo.getDisplayValue() == EXTENDEDWEBCOMBO_ALL ||
					combo.getDisplayValue() == EXTENDEDWEBCOMBO_NONE || 
					combo.getDisplayValue() == EXTENDEDWEBCOMBO_NOTREQUIRED ||
					combo.getDisplayValue() == EXTENDEDWEBCOMBO_NEW ||
					combo.getDisplayValue() == EXTENDEDWEBCOMBO_EMPTY ||
					combo.getDisplayValue() == EXTENDEDWEBCOMBO_SELECT)
				{
					return false;
				}
			}
			
			for(var i = 0; i < grid.Rows.length; ++i)
			{
				var column = grid.Bands[0].getColumnFromKey(key);
				if(column != null)
				{
					var s = grid.Rows.getRow(i).getCellFromKey(key).getValue().toString().toLowerCase();
					if(s == value.toString().toLowerCase())
						return true;
				}
			}
		}
	}
	
	return false;
}

function extendedWebCombo_GetRow(comboId, key, value)
{
	var combo = igcmbo_getComboById(comboId); 
	if(combo != null)
	{
		var grid = combo.getGrid();
		if(grid != null)
		{
			for(var i = 0; i < grid.Rows.length; ++i)
			{
				var column = grid.Bands[0].getColumnFromKey(key);
				if(column != null)
				{
					var s = grid.Rows.getRow(i).getCellFromKey(key).getValue().toString().toLowerCase();
					if(s == value.toString().toLowerCase())
						return grid.Rows.getRow(i);
				}
			}
		}
	}
	
	return null;
}

/* 
 * ExtendedWebGrid
 */

function extendedWebGrid_Initialize(gridId, isPostBack)
{	
	var grid = null;
	try
	{
		var grid = igtbl_getGridById(gridId); 
	}
	
	catch(ex)
	{
		return;
	}
	
	if(grid != null)
	{
		if(grid.Rows.length != 0)
		{
			var row = igtbl_getActiveRow(gridId);
			if(row == null)
			{
				igtbl_clearSelectionAll(gridId);
				
				row = grid.Rows.getRow(0);
				igtbl_setActiveRow(gridId, row.Element);
			
				if(grid.CellClickAction == 1)
				{
					var cell = row.getCell(0);
					if(cell != null)
						igtbl_setActiveCell(gridId, cell.Element);
				}
				else
				{
					igtbl_selectRow(gridId, row.Element.id, true, false);
				}
			}

			if(row != null)
			{			
				igtbl_scrollToView(gridId, row.Element);
				eval(gridId + "_ExtendedWebGrid_AfterRowActivate('" + gridId + "', '" + row.Element.id + "');");
			}
		}
	}	
}

function extendedWebGrid_AfterRowActivate(gridId, rowId, navBarId, itemKey)
{
	var grid = igtbl_getGridById(gridId); 
	var row = igtbl_getRowById(rowId);
	var tbItem = igtbar_getItemByKey(navBarId, itemKey);
	
	if(grid != null && row != null && tbItem != null)
	{
		var index = row.getIndex() + 1;
		tbItem.Element.innerText = index + ' of ' + grid.Rows.length;
	}
}
	 
function extendedWebGrid_AfterRowInsert(gridId, rowId)
{
	var row = igtbl_getRowById(rowId);
	if(row != null)
	{
		var id = newGuid();
		var cell_Id = row.getCellFromKey("Id");
		if(cell_Id != null)
			cell_Id.setValue(id);
		
		var cell = row.getCell(0);
		if(cell != null && !cell.Column.getHidden())
			cell.beginEdit();
	}
}
		
function extendedWebGrid_Find(gridId, columnKey, s)
{
	var grid = igtbl_getGridById(gridId); 
	if(grid != null)
	{
		var column = grid.Bands[0].getColumnFromKey(columnKey);
		if(column != null)
		{
			var cell = column.find(s, false);
			if(cell != null)
			{
				igtbl_clearSelectionAll(gridId);
				igtbl_setActiveRow(gridId, cell.Row.Element);
			}
			else
				alert('The value \'' + s + '\' could not be found.');
		}
	}
}

function extendedWebGrid_EditKeyDown(gridId, cellId, keyCode)
{
	if(cellId == undefined)
		return;
	  
	//Get the cell being edited    
	var cell = igtbl_getCellById(cellId);
	if(cell != null)
	{
		//Get the row of the cell being edited
		var row = cell.getRow();

		//Key Codes Down = 40, Up = 38, Right = 39, Left = 37
		
		switch(keyCode)
		{
			//If Down Key
			case 40:
		        
				//Check to see if there is a next row
				var nextRow = row.getNextRow();
				if(nextRow != null)
				{
					//End editing of the current cell
					cell.endEdit(true); 
		            
					//Active and begin edit on the cell below it
					nextRow.getCell(cell.Index).activate();
					nextRow.getCell(cell.Index).beginEdit();
				}
				break;
			//If up keyCode
			case 38:
				//Check to see if there is a previous row
				var prevRow = row.getPrevRow();
				if(prevRow != null)
				{
					//End editing of the current cell
					cell.endEdit(true);
		            
					//Active and begin edit on the cell above it
					prevRow.getCell(cell.Index).activate();
					prevRow.getCell(cell.Index).beginEdit();
				}
				break;
			//If right keyCode
			case 39:
				//Check to see if there is a next cell in the row
				var nextCell = cell.getNextCell();
				if(nextCell != null)
				{
					//End editing of the current cell
					cell.endEdit(true);
		            
					//Active and begin edit on the cell to the right
					nextCell.activate();
					nextCell.beginEdit();
				}
				break;
			//If left keyCode
			case 37:
				//Check to see if there is a previous cell in the row
				var prevCell = cell.getPrevCell();
				if(prevCell != null)
				{
					//End editing of the current cell
					cell.endEdit(true);
		            
					//Active and begin edit on the cell to the left
					prevCell.activate();
					prevCell.beginEdit();
				}
				break;
		}
	}
}
