jQuery.noConflict();
function TableFacadeManager() {
}

TableFacadeManager.tableFacades = new Object();

TableFacadeManager.addTableFacade = function(tableFacade) {
    TableFacadeManager.tableFacades[tableFacade.limit.id] = tableFacade;
}

TableFacadeManager.getTableFacade = function(id) {
    return TableFacadeManager.tableFacades[id];
}

function TableFacade(id) {
    this.limit = new Limit(id);
    this.worksheet = new Worksheet();
}

function Worksheet() {
    this.save;
    this.filter;
}

function Limit(id) {
    this.id = id;
    this.page;
    this.maxRows;
    this.sortSet = new Array();
    this.filterSet = new Array();
    this.exportType;
}

function Sort(position, property, order) {
    this.position = position;
    this.property = property;
    this.order = order;
}

function Filter(property, value) {
    this.property = property;
    this.value = value;
}

Limit.prototype.getId = function() {
    return this.id;
}

Limit.prototype.setId = function(id) {
    this.id = id;
}

Limit.prototype.getPage = function() {
    return this.page;
}

Limit.prototype.setPage = function(page) {
    this.page = page;
}

Limit.prototype.getMaxRows = function() {
    return this.maxRows;
}

Limit.prototype.setMaxRows = function(maxRows) {
    this.maxRows = maxRows;
}

Limit.prototype.getSortSet = function() {
    return this.sortSet;
}

Limit.prototype.addSort = function(sort) {
    this.sortSet[this.sortSet.length] = sort;
}

Limit.prototype.setSortSet = function(sortSet) {
    this.sortSet = sortSet;
}

Limit.prototype.getFilterSet = function() {
    return this.filterSet;
}

Limit.prototype.addFilter = function(filter) {
    this.filterSet[this.filterSet.length] = filter;
}

Limit.prototype.setFilterSet = function(filterSet) {
    this.filterSet = filterSet;
}

Limit.prototype.getExport = function() {
    return this.exportType;
}

Limit.prototype.setExport = function(exportType) {
    this.exportType = exportType;
}

/*other helper methods*/

TableFacade.prototype.createHiddenInputFields = function(form) {
	
    var limit = this.limit;
    var exists = jQuery(form).find(':hidden[@name=' + limit.id + '_p_]').val();
    if (exists) {
        return false;
    }
    
    if (this.worksheet.save) {
    	
        jQuery(form).append('<input type="hidden" name="' + limit.id + '_sw_" value="true"/>');
    }
    
    if (this.worksheet.filter) {
    	
        jQuery(form).append('<input type="hidden" name="' + limit.id + '_fw_" value="true"/>');
    }
    
    /* tip the API off that in the loop of working with the table */
    jQuery(form).append('<input type="hidden" name="' + limit.id + '_tr_" value="true"/>');
    
    /* the current page */
    jQuery(form).append('<input type="hidden" name="' + limit.id + '_p_" value="' + limit.page + '"/>');
    jQuery(form).append('<input type="hidden" name="' + limit.id + '_mr_" value="' + limit.maxRows + '"/>');
    
    /* the sort objects */
    var sortSet = limit.getSortSet();
    jQuery.each(sortSet, function(index, sort) {
        jQuery(form).append('<input type="hidden" name="' + limit.id + '_s_'  + sort.position + '_' + sort.property + '" value="' + sort.order + '"/>');
    });
    
    /* the filter objects */
    var filterSet = limit.getFilterSet();
    jQuery.each(filterSet, function(index, filter) {
        jQuery(form).append('<input type="hidden" name="' + limit.id + '_f_' + filter.property + '" value="' + filter.value + '"/>');
    });
    
    return true;
}

TableFacade.prototype.createParameterString = function() {
	
    var limit = this.limit;
    
    var url = '';
    
    /* the current page */
    url += limit.id + '_p_=' + limit.page;
    
    /* the max rows */
    url += '&' + limit.id + '_mr_=' + limit.maxRows;
    
    /* the sort objects */
    var sortSet = limit.getSortSet();
    jQuery.each(sortSet, function(index, sort) {
        url += '&' + limit.id + '_s_' + sort.position + '_' + sort.property + '=' + sort.order;
    });
    
    /* the filter objects */
    var filterSet = limit.getFilterSet();
    jQuery.each(filterSet, function(index, filter) {
        url += '&' + limit.id + '_f_' + filter.property + '=' + encodeURIComponent(filter.value);
    });
    
    /* the export */
    if (limit.exportType) {
        url += '&' + limit.id + '_e_=' + limit.exportType;
    }
    
    /* tip the API off that in the loop of working with the table */
    url += '&' + limit.id + '_tr_=true';
    
    if (this.worksheet.save) {
        url += '&' + limit.id + '_sw_=true';
    }
    
    if (this.worksheet.filter) {
        url += '&' + limit.id + '_fw_=true';
    }
    
    return url;
}

/* convenience methods so do not have to manually work with the api */

function addTableFacadeToManager(id) {
    var tableFacade = new TableFacade(id);
    TableFacadeManager.addTableFacade(tableFacade);	
}

function setSaveToWorksheet(id) {
    TableFacadeManager.getTableFacade(id).worksheet.save='true';
}

function setFilterToWorksheet(id) {
    TableFacadeManager.getTableFacade(id).worksheet.filter='true';
    setPageToLimit(id, '1');
}

function setPageToLimit(id, page) {
    TableFacadeManager.getTableFacade(id).limit.setPage(page);
}

function setMaxRowsToLimit(id, maxRows) {
    TableFacadeManager.getTableFacade(id).limit.setMaxRows(maxRows);
    setPageToLimit(id, '1');
}

function addSortToLimit(id, position, property, order) {
    /*First remove the sort if it is set on the limit, 
    and then set the page back to the first one.*/
    removeSortFromLimit(id, property);
    setPageToLimit(id, '1');
    
    var limit = TableFacadeManager.getTableFacade(id).limit;
    var sort = new Sort(position, property, order); 
    limit.addSort(sort);
}

function removeSortFromLimit(id, property) {
	
    var limit = TableFacadeManager.getTableFacade(id).limit;
    var sortSet = limit.getSortSet();
    jQuery.each(sortSet, function(index, sort) {
        if (sort.property == property) {
            sortSet.splice(index, 1);
            return false;
        }
    });
}

function removeAllSortsFromLimit(id) {
    var limit = TableFacadeManager.getTableFacade(id).limit;
    limit.setSortSet(new Array());
    setPageToLimit(id, '1');
}

function getSortFromLimit(id, property) {
	
    var limit = TableFacadeManager.getTableFacade(id).limit;
    var sortSet = limit.getSortSet();
    jQuery.each(sortSet, function(index, sort) {
        if (sort.property == property) {
            return sort;
        }
    });
}

function addFilterToLimit(id, property, value) {
    /*First remove the filter if it is set on the limit, 
    and then set the page back to the first one.*/
    removeFilterFromLimit(id, property);
    setPageToLimit(id, '1');
    
    var limit = TableFacadeManager.getTableFacade(id).limit;
    var filter = new Filter(property, value); 
    limit.addFilter(filter);
}

function removeFilterFromLimit(id, property) {
	
    var limit = TableFacadeManager.getTableFacade(id).limit;
    var filterSet = limit.getFilterSet();
    jQuery.each(filterSet, function(index, filter) {
        if (filter.property == property) {
            filterSet.splice(index, 1);
            return false;
        }
    });
}

function removeAllFiltersFromLimit(id) {
    var tableFacade = TableFacadeManager.getTableFacade(id);
    
    var limit = tableFacade.limit;
    limit.setFilterSet(new Array());
    setPageToLimit(id, '1');
    
    var worksheet = tableFacade.worksheet;
    worksheet.filter = null;
}

function getFilterFromLimit(id, property) {
	
    var limit = TableFacadeManager.getTableFacade(id).limit;
    var filterSet = limit.getFilterSet();
    jQuery.each(filterSet, function(index, filter) {
        if (filter.property == property) {
            return filter;
        }
    });
}

function setExportToLimit(id, exportType) {
    TableFacadeManager.getTableFacade(id).limit.setExport(exportType);
}

function createHiddenInputFieldsForLimit(id) {
    var tableFacade = TableFacadeManager.getTableFacade(id);
    var form = getFormByTableId(id);
    tableFacade.createHiddenInputFields(form);
}

function createHiddenInputFieldsForLimitAndSubmit(id) {
    var tableFacade = TableFacadeManager.getTableFacade(id);
    var form = getFormByTableId(id);
    var created = tableFacade.createHiddenInputFields(form);
    if (created) {
        form.submit();
    }
}

function createParameterStringForLimit(id) {
    var tableFacade = TableFacadeManager.getTableFacade(id);
    return tableFacade.createParameterString();
}

function getFormByTableId(id) {
    var node = document.getElementById(id);
    var found = false;
    while (!found) {
        node = node.parentNode;
        if (node.nodeName == 'FORM') {
            found = true;
            return node;
        }
    }
}

/* Special Effects */

var dynFilter;

function DynFilter(filter, id, property) {
    this.filter = filter;
    this.id = id;
    this.property = property;
}

function createDynFilter(filter, id, property) {
	
    if (dynFilter) {
        return;
    }
    
    dynFilter = new DynFilter(filter, id, property);
    
    var cell = jQuery(filter);
    var width = cell.width() + 1;
    var originalValue = cell.text();
    
    cell.html('<div id="dynFilterDiv"><input id="dynFilterInput" name="filter" style="width:' + width + 'px" value="' + originalValue + '" /></div>');
    
    var input = jQuery('#dynFilterInput');
    input.focus();
    
    jQuery(input).keypress(function(event) {
        if (event.keyCode == 13) { // press the enter key 
            var changedValue = input.val();
            cell.html(changedValue);
            addFilterToLimit(dynFilter.id, dynFilter.property, changedValue);
            onInvokeAction(dynFilter.id);
            dynFilter = null;
        }
    });
    
    jQuery(input).blur(function() {
        var changedValue = input.val();
        cell.html(changedValue);
        addFilterToLimit(dynFilter.id, dynFilter.property, changedValue);
        dynFilter = null;
    });
}

function createDynDroplistFilter(filter, id, property, options) {
	
    if (dynFilter) {
        return;
    }

    dynFilter = new DynFilter(filter, id, property);
    
    if (jQuery('#dynFilterDroplistDiv').size() > 0) {
        return; // filter already created
    }
    
    /* The cell that represents the filter. */
    var cell = jQuery(filter);
    
    /* Get the original filter value and width. */
    var originalValue = cell.text();
    var width = cell.width();
    
    /* Need to first get the size of the arrary. */
    var size = 1;
    jQuery.each(options, function() {
        size++;
        if (size > 10) {
            size = 10;
            return false;
        }
    });
    
    /* Create the dynamic select input box. */
    cell.html('<div id="dynFilterDroplistDiv" style="top:17px">');
    
    var html = '<select id="dynFilterDroplist" name="filter" size="' + size + '">';
    html += '<option value=""> </option>';
    jQuery.each(options, function(key, value) {
        if (key == originalValue) {
            html += '<option selected="selected" value="' + key + '">' + value + '</option>';
        } else {
        html += '<option value="' + key + '">' + value + '</option>';
        }
    });
    
    html += '</select>';

    var div = jQuery('#dynFilterDroplistDiv');
    div.html(html);

    var input = jQuery('#dynFilterDroplist');

    /* Resize the column if it is not at least as wide as the column. */    
    var selectWidth = input.width();
    if (selectWidth < width) {
        input.width(width + 5); // always make the droplist overlap some
    }

    input.focus();

    var originalBackgroundColor = cell.css("backgroundColor");
    cell.css({backgroundColor:div.css("backgroundColor")});

    /* Something was selected or the clicked off the droplist. */

    jQuery(input).change(function() {
        var changedValue = jQuery("#dynFilterDroplistDiv option:selected").val();
        cell.text(changedValue);
        addFilterToLimit(dynFilter.id, dynFilter.property, changedValue);
        onInvokeAction(dynFilter.id);
        dynFilter = null;
    });

    jQuery(input).blur(function() {
        var changedValue = jQuery("#dynFilterDroplistDiv option:selected").val();
        cell.text(changedValue);
        jQuery('#dynFilterDroplistDiv').remove();
        cell.css({backgroundColor:originalBackgroundColor});
        dynFilter = null;
    });
}

/* Create a dropshadow for the tables */
function addDropShadow(imagesPath, theme) {
	
    if (!theme) {
        theme = 'jmesa';
    }
    jQuery('div.' + theme + ' .table')
    .wrap("<div class='wrap0'><div class='wrap1'><div class='wrap2'><div class='dropShadow'></div></div></div></div>")
    .css({'background': 'url(' + imagesPath + 'shadow_back.gif) 100% repeat'});
    
    jQuery('.' + theme + ' div.wrap0').css({'background': 'url(' + imagesPath + 'shadow.gif) right bottom no-repeat', 'float':'left'});
    jQuery('.' + theme + ' div.wrap1').css({'background': 'url(' + imagesPath + 'shadow180.gif) no-repeat'});
    jQuery('.' + theme + ' div.wrap2').css({'background': 'url(' + imagesPath + 'corner_bl.gif) -18px 100% no-repeat'});
    jQuery('.' + theme + ' div.dropShadow').css({'background': 'url(' + imagesPath + 'corner_tr.gif) 100% -18px no-repeat'});
    
    jQuery('div.' + theme).append('<div style="clear:both">&nbsp;</div>');
}

/* Worksheet */

var wsColumn;

function WsColumn(column, id, uniqueProperties, property) {
    this.column = column;
    this.id = id;
    this.uniqueProperties = uniqueProperties;
    this.property = property;
}

function createWsColumn(column, id, uniqueProperties, property) {
	
    if (wsColumn) {
        return;
    }

    wsColumn = new WsColumn(column, id, uniqueProperties, property);
    
    var cell = jQuery(column);
    var width = cell.width();
    var originalValue = cell.text();
    
    cell.parent().width(width); // set the outer width to avoid dynamic column width changes
    
    cell.html('<div id="wsColumnDiv"><input id="wsColumnInput" name="column" style="width:' + (width + 1) + 'px" value="' + originalValue + '"/></div>');
    
    var input = jQuery('#wsColumnInput'); 
    input.focus();
    
    jQuery('#wsColumnInput').keypress(function(event) {
        if (event.keyCode == 13) { // press the enter key 
            var changedValue = input.val();
            cell.html(changedValue);
            if (changedValue != originalValue) {
                submitWsColumn(originalValue, changedValue);
            }
            wsColumn = null;
        }
    });
    
    jQuery('#wsColumnInput').blur(function() {
        var changedValue = input.val();
        cell.html(changedValue);
        if (changedValue != originalValue) {
            submitWsColumn(originalValue, changedValue);
        }
        wsColumn = null;
    });
}

function submitWsCheckboxColumn(column, id, uniqueProperties, property) {
    wsColumn = new WsColumn(column, id, uniqueProperties, property);
    
    var checked = column.checked;
    
    var changedValue = 'unchecked';
    if (checked) {
        changedValue = 'checked';
    }
    
    var originalValue = 'unchecked';
    if (!checked) { // the first time the original value is the opposite
        originalValue = 'checked';
    }
    
    submitWsColumn(originalValue, changedValue);
    
    wsColumn = null;
}

function submitWsColumn(originalValue, changedValue) {
	
    var data = '{ "id" : "' + wsColumn.id + '"';
    
    data += ', "cp_" : "' + wsColumn.property + '"';
    
    var props = wsColumn.uniqueProperties;
    jQuery.each(props, function(key, value) {
        data += ', "up_' + key + '" : "' + value + '"';
    });
    
    data += ', "ov_" : "' + originalValue + '"';
    data += ', "cv_" : "' + changedValue + '"';
    
    data += '}'
    
    jQuery.post('jmesa.wrk?', eval('(' + data + ')'), function(data) {});    
}

/********** Forcelink enhancements ************************/
function saveUserFilters(){
	UserFilterManager.saveFiltersToDBbyDWR(function(){
		alert('User filters saved to Database');
	});
}

function changeViewType(tableId,viewType){
	UserFilterManager.changeViewType(tableId,viewType,function(){
	    onInvokeAction(tableId);
	});
}

	
function saveJmesaTable(id){
	setSaveToWorksheet(id);
	onInvokeAction(id,'save_worksheet');		
}		

//var tablePostLoadEvent;
//used for all jMesa tables for filtering and exporting
function onInvokeAction(id) {
    setExportToLimit(id, '');
	var parameterString = createParameterStringForLimit(id);
	var div = document.getElementById(id+'Div');
	div.style.cursor = 'wait';     
    var url = extractBasicUrl(id)+'ajax=true&' + parameterString;
	// alert(url);
	// reload table contents with ajax, instead of re-loading the full page
	jQuery.get(url, function(data) {
		div.innerHTML=data;
		div.style.cursor = 'default';
		// measure the display time
		pageLoaded();
		RightContext.initialize();
		Shadowbox.init();
		// update the selection count
		updateRowSelectionCount();
	}); 
}

function updateRowSelectionCount(){
	UserFilterManager.getSelectedCount(tableModelClass,function(count){
		window.selectedCount = count;
	});
	refreshSelectionBox();
}

function onInvokeExportAction(id) {
    var parameterString = createParameterStringForLimit(id);
    location.href = extractBasicUrl(id) + parameterString;
}
function extractBasicUrl(id){
    var url = location.href;
    if(url.indexOf('?')==-1)
	    return url + '?';

    // check the query parameters and only keep those that are not jMesa-related
    var params = url.substring(url.indexOf('?')+1).split('&');
    url = url.substring(0,url.indexOf('?')+1);
    for(var i=0;i<params.length;i++){
    	var param = params[i];
    	if((param.indexOf(id+'_')==-1)&&(param.indexOf('maxRows')==-1)&&(param.indexOf('restore')==-1))
    		url += param+'&';
    }
	return	url;
}


function openDateFilter(filterElement,tableId,property){

	dateFilterTableId = tableId;
	dateFilterProperty = property;
	dateFilterElement = filterElement;
	
	showDateRangeDialog();

	prepareFieldValues(filterElement.innerHTML);
}

function dateDone(){

	var dateRangeText = '';
	
	if(document.getElementById('before').checked){
		if(document.getElementById('fromDate').value>'')
			dateSubmit('before \''+document.getElementById('fromDate').value+'\'');
		else alert('Please fill in the date field');
	}
	else if(document.getElementById('after').checked){
		if(document.getElementById('fromDate').value>'')
			dateSubmit('after \''+document.getElementById('fromDate').value+'\'');
		else alert('Please fill in the date field');
	}
	else if(document.getElementById('between').checked){
		if((document.getElementById('fromDate').value>'')&&(document.getElementById('toDate').value>''))
			dateSubmit('between \''+document.getElementById('fromDate').value+'\' and \''+document.getElementById('toDate').value+'\'');
		else alert('Please fill in the date fields');
	}
}

function dateSubmit(dateRangeText){
	dateFilterDone(dateRangeText);
	hideDialog();
}

function clearFilterAndClose(){
	dateFilterDone('');
	hideDialog();
}

function prepareFieldValues(dateFilterString){
	
	if(dateFilterString.indexOf('before')>=0){
		document.getElementById('before').checked = true;
		document.getElementById('toDateCell').style.visibility='hidden';
		
		var dateString = dateFilterString.substring(dateFilterString.indexOf('\'')+1,dateFilterString.lastIndexOf('\''));
		document.getElementById('fromDate').value = dateString; 
	}
	else if(dateFilterString.indexOf('after')>=0){
		document.getElementById('after').checked = true;
		document.getElementById('toDateCell').style.visibility='hidden';

		var dateString = dateFilterString.substring(dateFilterString.indexOf('\'')+1,dateFilterString.lastIndexOf('\''));
		document.getElementById('fromDate').value = dateString; 
	}
	else if(dateFilterString.indexOf('between')>=0){
		document.getElementById('between').checked = true;
		document.getElementById('toDateCell').style.visibility='visible';
		
		var part1  = dateFilterString.substring(0,dateFilterString.indexOf('and'));
		var part2  = dateFilterString.substring(dateFilterString.indexOf('and')+1,dateFilterString.length);

		var fromDateString = part1.substring(part1.indexOf('\'')+1,part1.lastIndexOf('\''));
		var toDateString = part2.substring(part2.indexOf('\'')+1,part2.lastIndexOf('\''));
		
		document.getElementById('fromDate').value = fromDateString; 
		document.getElementById('toDate').value = toDateString; 
	}
}

function selectDateRadio(radioId){
	if(radioId=='between')
		document.getElementById('toDateCell').style.visibility='visible';
	else
		document.getElementById('toDateCell').style.visibility='hidden';
}

function dateFilterDone(dateRangeText) {
	
	hideDialog();
	dateFilterElement.innerHTML = dateRangeText;
    addFilterToLimit(dateFilterTableId, dateFilterProperty, dateRangeText);
    dateRangeText = '';
    onInvokeAction(dateFilterTableId);
	
}
var multiFilterTableId;
var multiFilterProperty;
var multiFilterElement;
var selectedFiltersText;

function addMultipleSelectItems(filterElement,tableId,property,optionsString) {
	multiFilterTableId = tableId;
	multiFilterProperty = property;
	multiFilterElement = filterElement;
	selectedFiltersText = "";
	selectedFiltersArray = [];
	var message = '';
	var options = optionsString.split( "," );
	var dialogheight = 30; 
	  for ( var i = 0; i < options.length; i++ )
	  {	    
		  var option = options[ i ].trim();
		  message += '<input type="checkbox" name="choice" value="'+option+'" onclick="set_selected_items(this.value,this.checked);">'+option+'<br>';
	  }
	  	message += '<br>'+createButton("submit3",Labels.submit,"multiSelectFilterDone();");
		message += createButton("cancel3",Labels.cancel,"hideDialog();");
		dialogheight += options.length*20;
		dialogheight += 80; 
	showDialog('Select Filter Values',message,400,dialogheight);
}

var selectedFiltersArray = [];
function set_selected_items(choice,checked)
{
	if(checked)
		selectedFiltersArray.push(choice);
	else {
		var newSelection = [];
		
		for(var i=0;i<selectedFiltersArray.length;i++)
			if(selectedFiltersArray[i]!=choice)
				newSelection.push(selectedFiltersArray[i]);
				
		selectedFiltersArray = newSelection;
	}
}

function multiSelectFilterDone() {
	hideDialog();
	selectedFiltersText = selectedFiltersArray.join(",");
	selectedFiltersArray = [];
	multiFilterElement.innerHTML = selectedFiltersText;
    addFilterToLimit(multiFilterTableId, multiFilterProperty, selectedFiltersText);
    onInvokeAction(multiFilterTableId);
	
}

function selectItem(modelClass,id,checked){
	UserFilterManager.selectItem(modelClass,id,checked,function(count){
		window.selectedCount = count;
		refreshSelectionBox();
	});
}

function showSelectedFilter(element) {
	var message = createButton("multiple3",Labels.selectAll,"jMesaSelectAll();");
	message += createButton("clear3",Labels.clear,"jMesaClearAll();");
	message += createButton("search3",Labels.filterForSelected);
	message += createButton("cancel3",Labels.cancel,"hideDialog();");
	showDialog('Select Filter Values',message,250,130);
	$('b_clear3').onclick=function(){
		element.innerHTML = '';
	    removeFilterFromLimit(tableId, 'selected');
		hideDialog();
	    onInvokeAction(tableId);
	};
	$('b_search3').onclick=function(){
		element.innerHTML = 'true';
	    addFilterToLimit(tableId, 'selected','true');
		hideDialog();
	    onInvokeAction(tableId);
	};
	$('b_cancel3').onclick=function(){
		hideDialog();
		if(element.innerHTML=='true'){
			element.innerHTML = '';
		    addFilterToLimit(tableId, 'selected','');
		    onInvokeAction(tableId);
		}
	};
}

function jMesaSelectAll() {
	UserFilterManager.selectAll(tableId,tableModelClass,function(count){
		window.selectedCount = count;
		hideDialog();
	    onInvokeAction(tableId);
	});
}

function jMesaClearAll() {
	UserFilterManager.clearAllSelected(tableModelClass,function(){
		window.selectedCount = 0;
		hideDialog();
	    onInvokeAction(tableId);
	});
}

function editInMemoPopup(modelClass,id,property){
	UserFilterManager.getProperty(modelClass,property,id,function(value){
		var html = "<textarea id='memoParamValue' rows='8' cols='50'>"+value+"</textarea><br>";
		html += createButton("save3",Labels.save);
		html += createCancelButton();
		showDialog("Edit parameter value",html,440,250);
		$('b_save3').onclick = function(){
			saveMemoPopupValue(modelClass,id,property,$('memoParamValue').value);
		};
	});
}

function saveMemoPopupValue(modelClass,id,property,value){
	UserFilterManager.setProperty(modelClass,property,id,value,function(){
		hideDialog();
	    onInvokeAction(tableId);
	});
}
function refreshSelectionBox(){
}

function showOrgStructureSelectionTree(filterElement,filterProperty){

	OrgStructureManager.getSelectionTreeRootNodes(function(data) {
		
		rlt = new dTree('rlt','expandSelectionOrgNode','selectOrgUnit');
	
		for(var i=0;i<data.length;i++)
			rlt.addForcelinkNode(data[i]);
		
		var message = '<div id="orgUnitTree" title="click on a node to expand it">'+rlt.toString()+'</div>';
		var checked = '';
		SessionUtilsManager.getSessionAttribute('orgUnitFilterIncludeBlanks',{async:false,callback:function(value){
			if(value)
				checked = 'checked';
		}});
		message += '<br><input type="checkbox" id="includeBlanks" onclick="SessionUtilsManager.setSessionAttribute(\'orgUnitFilterIncludeBlanks\',this.checked)" '+checked+'>'+Labels.includeBlanks+'<br>';
		message += '<br>'+createButton("submit3",Labels.submit);
		message += createButton("clear3",Labels.clear);
		message += createButton("cancel3",Labels.cancel,"hideDialog();");
		showDialog(Labels.selectOrgUnits,message,400,400);
		// initialize RightContext
		RightContext.initialize();
		rlt.openAll();
		$('b_submit3').onclick=function(){
			hideDialog();
			var filterText = selectionCountMap.get('OrgStructure')+' selected';
			if($('includeBlanks').checked)
				filterText += ' and blanks';
			if(selectionCountMap.get('OrgStructure')==0&&$('includeBlanks').checked)
				filterText = 'blanks';
			filterElement.innerHTML = filterText;
		    addFilterToLimit(tableId, filterProperty, filterText);
		    onInvokeAction(tableId);
		};
		$('b_clear3').onclick=function(){
			SessionUtilsManager.setSessionAttribute('orgUnitFilterIncludeBlanks',false,{async:false});
			UserFilterManager.clearAllSelected('OrgStructure',function (){
				hideDialog();
				filterElement.innerHTML = '';
			    addFilterToLimit(tableId, filterProperty, '');
			    onInvokeAction(tableId);
			});
		};
	});
}

function expandSelectionOrgNode(id){

	// use DWR to expand the tree view node
	OrgStructureManager.expandSelectionTreeNode(id,function(data) {
		for(var i=0;i<data.length;i++){
			flNode = data[i];
			rlt.addForcelinkNode(flNode);
		}
		
		document.getElementById('orgUnitTree').innerHTML=rlt.toString();
		// initialize RightContext
		RightContext.initialize();
		rlt.openAll();
	});
}

function selectOrgUnit(id,checked){
	UserFilterManager.selectItem('OrgStructure',id,checked);
}

