var SelectedColorFocused = "#adc3e7";
var SelectedColorUnfocused = "#eeeeee";
var _mode = 0;
var LookupBrowse = 0x1;
var LookupMulti = 0x4;
var LookupSingle = 0x2;

var DNN = 1;
var ADSI = 2;
var CRM = 3;
var GALLERY = 5;
var LIBRARY = 6;

var popUp; 

function RefreshParent() 
{ 			
	popUp.close();	
	window.location.reload();		
} 

function OpenGalleryPopup(tdDisplay, idField, url, features)
{		
	var args = new PopupArguments();
	
	if (tdDisplay != null)
	{		
		args.items = tdDisplay.getElementsByTagName("SPAN");		
	}
	
    var returnValue = window.showModalDialog(url, args, features);	
	if (!returnValue || returnValue.items.length == 0)
	{		
		ClearTargetControl(tdDisplay, idField);		
	}
	else
	{		
		PopuplateTargetControl(tdDisplay, idField, returnValue);
	}	
} 
               

function PopupArguments()
{	
	this.items = null;
}

function ClearTargetControl(tdDisplay, idField)
{
	tdDisplay.innerHTML = "(None Specified)";	
	idField.value = "";
}

function PopuplateTargetControl(tdDisplay, idField, resultValues)
{
	var iHTML = "";
	var idList = "";
	for (var i = 0; i < resultValues.items.length; ++i)
	{	
		var item = resultValues.items[i];
		if (item.name == 'popupcancel')
		{
			return;
		}
		var elem = parent.document.createElement("SPAN");		
		elem.className	= 	"TTTNormalTextBox";
		elem.oid	= 	item.id;
		elem.otype	= 	item.type;
		elem.olocation = item.location;
		elem.innerHTML	= 	item.html;		
		iHTML += elem.outerHTML;
		iHTML += "<br>";
		idList += ";" + item.id + ":" + item.name;
	}	
	if (iHTML.length == 0)
	{
		iHTML = "(None Specified)";
	}	
	tdDisplay.innerHTML = iHTML;	
	idField.value = idList;
}

function checkMode(mode, option)
{
	return ((mode & option) == option);
}

function openPopup()
{
	return window.createPopup();
}

function search()
{
	document.body.style.cursor = "wait";
	var url = "popupdata.aspx";
	url += window.location.search;	
	url += "&objectclass=" + selObject.returnValue;		
	url += "&location=" + selLocation.returnValue;
	url += "&searchvalue=" + URLEncode(findValue.value);
	btnGo.disabled = true;
	findValue.focus();
	
	frmResults.location.href = url;
}
function selectChange(o)
{	
	if (checkMode(_mode, LookupBrowse))
	{
		search();
	}
}
function buildReturnValue(rows, objectclass)
{	
	var lookupItems = new LookupItems();
	lookupItems.objectclass = objectclass;
	var len = rows.length;
	
	for (var i = 0; i < len; i++)
	{
		var tr = rows[i];
		var columns = tr.parentElement.parentElement.getElementsByTagName("col");		
		if (tr.oid != undefined)		
		{
			lookupItems.add(tr, columns)
		}
	}
	
	return lookupItems;
}
function initSelectedItems(table)
{
	//alert("initSelectedItems");
	if (table.selectedItems == undefined)
	{
		table.selectedItems = new Array();
		
		table.onactivate=activateItems;
		table.ondeactivate=deactivateItems;
	}
}
function getActiveItem(elem)
{
	//alert("getActiveItem");
	while (elem.tagName != "TR")
	{
		elem = elem.parentElement;
	}
	
	return elem;
}
function unselectItems(table)
{
	//alert("unselectItems1");
	var multiSelect = checkMode(_mode, LookupMulti);
	if (table.selectedItems == undefined) return;
	if (multiSelect && event.shiftKey) return;
	if (multiSelect && event.ctrlKey && event.keyCode == 0) return;
	
	while (table.selectedItems.length > 0)
	{
		unselectItem(table, table.selectedItems[0]);	
	}
}
function unselectItem(table, item)
{
	//alert("unselectItems2");
	if (table.selectedItems == undefined) return;
	var items = table.selectedItems;
	for (var i = 0; i < items.length; i++)
	{
		if (items[i] == item)
		{
			items[i].selected = 0;
			items[i].runtimeStyle.backgroundColor = "";
			table.selectedItems.splice(i, 1);
			break;
		}
	}
}
function selectItem(table, item, focused)
{
	//alert("selectItem");
	if (item.unselectable != undefined) return;
	
	
	initSelectedItems(table);
	item.selected = 1;
	
	if (focused)
		item.runtimeStyle.backgroundColor = SelectedColorFocused;
	else
		item.runtimeStyle.backgroundColor = SelectedColorUnfocused;
	
	table.lastSelected = item;
	
	
	
	table.selectedItems.push (item);
	
	
	
	if ( table.id == "tblResults" && "undefined" != typeof(parent.btnProperties))
	{
		parent.btnProperties.disabled = (item.oid == undefined);
	}
}
function shiftSelectItems(table, o)
{
	if (table.lastSelected != undefined)
	{
		var lastSelected = table.lastSelected;
		
		if (lastSelected.rowIndex >= o.rowIndex)
		{
			var rows = table.rows;
			for (var i = o.rowIndex; i < lastSelected.rowIndex; i++)
			{
				selectItem(table, rows[i], true);
			}
		} 
		else
		{
			var rows = table.rows;
			
			for (var i = lastSelected.rowIndex + 1; i <= o.rowIndex; i++)
			{
				selectItem(table, rows[i], true);
			}
		}
	}
}
function clickItem(table)
{	
	if (event.srcElement.tagName == "TBODY") return;
	var item = getActiveItem(event.srcElement);
	var multiSelect = checkMode(_mode, LookupMulti);
	
	if (multiSelect && event.shiftKey && !item.selected)
	{
		shiftSelectItems(table, item);
	}
	else if (multiSelect && event.ctrlKey && item.selected)
	{
		unselectItem(table, item, true);
	}
	else
	{
		unselectItems(table);
		
		selectItem(table, item, true);
	}
	return item;
}
function findValueKeyDown()
{
	if (event.keyCode == 13)
	{
		search();	
	}
}
function listKeyDown(table)
{

	if (event.keyCode == 32)
	{
		table.ondblclick();
	}
	else if (event.keyCode == 38)
	{
		var item = table.lastSelected;
		
		if (item && item.rowIndex > 0)
		{
			item = item.previousSibling;
			
			if (item.unselectable != undefined)
			{
				item = item.previousSibling;
				
				if (item == null)
					return;
			}
			unselectItems(table);
			
			selectItem(table, item, true);
			
			
			
			item.scrollIntoView(true);
		}
	} 
	else if (event.keyCode == 40)
	{
		var item = table.lastSelected;
		if (item && item.rowIndex < table.rows.length- 1)
		{
			item = item.nextSibling;
			
			if (item.unselectable != undefined)
			{
				item = item.nextSibling;
				
				if (item == null)
					return;
			}
			unselectItems(table);
			
			selectItem(table, item, true);
			
			
			
			item.scrollIntoView(false);
		}
	}
	else if (!(event.shiftKey || event.ctrlKey) && ((event.keyCode > 47 && event.keyCode < 58) || (event.keyCode > 64 && event.keyCode < 91)))
	{
		var code;
		var len = table.rows.length;
		
		for (i = (checkMode(_mode, LookupMulti)) ? 0 : 2; i < len; i++)
		{
			code = table.rows[i].cells[0].innerText.charCodeAt(0);
			
			if ((code == event.keyCode) || ((event.keyCode > 64 && event.keyCode < 91) && (code == event.keyCode + 32)))
			{
				item = table.rows[i];
				
				unselectItems(table);
			
				selectItem(table, item, true);
				item.scrollIntoView(true);
				break;
			}
		}
	}
}
function focusSelectedItems(table, focused)
{
	//alert("focusSelectedItems");
	if (table.selectedItems == undefined) return;
	var items = table.selectedItems;
	
	if (items.length == 0 && table.rows.length > 0)
	{
		selectItem(table, table.rows[0], true);
		//alert("table.rows.length > 0");
	}
		
	for (var i = 0; i < items.length; i++)
	{
		if (focused)
		{
			items[i].runtimeStyle.backgroundColor = SelectedColorFocused;
		}
		else
		{
			items[i].runtimeStyle.backgroundColor = SelectedColorUnfocused;
		}
	}
}
function activateItems()
{	
	if (!this.contains (event.toElement))
	{
		focusSelectedItems(this, true);
	}
}
function deactivateItems()
{
	if (!this.contains (event.toElement))
	{
		focusSelectedItems(this, false);
	}
}
//function showProperties()
//{
//	var items = frmResults.tblResults.selectedItems;	
//	if (items.length == 0)
//	{
//		alert("You must first select an object.");
//	}
//	else if (items.length > 1)
//	{
//		alert("You must only select one object.");
//	}
//	else
//	{		
//	}
//}

function LookupItem()
{
	//alert("LookupItem");
	LookupItems
	this.id = "";
	this.name = "";
	this.location = "";
	this.html = "";
	this.type = "";
	this.objectclass = "" ;
	this.values = null;
	this.keyValues = null;
}
function LookupItemData(name, value)
{
		
	this.name = name;
	this.value = value;
}
function popupCancel()
{
	this.items = new Array();
	var ci = new LookupItem();
	ci.id = '0';
	ci.name = 'popupcancel';
	this.items.push (ci);
}
		
function LookupItems()
{
		
	this.add = _add;
	this.items = new Array();
	
	
	function _add(tr, columns)
	{	
		var li = new LookupItem();
		var td = tr.cells[0];
		li.id		= tr.oid;
		li.name		= td.innerText;
		li.location = tr.olocation;
		li.html		= td.innerHTML;
		li.type		= tr.otype;		
		li.values	= new Array();
		li.keyValues	= new Array();
		
		var len = columns.length;
		if (len > 1)
		{
			for (var i = 1; i < len; ++i)
			{
				li.keyValues[new String(columns[i].name)] = new LookupItemData(columns[i].name, tr.cells[i].innerText)
				li.values.push(new LookupItemData(columns[i].name, tr.cells[i].innerText));
			}
		}		
		this.items.push (li);
	}
}

function URLEncode(s)
{
	s = s.replace(" ", "%20");
	s = s.replace("\"", "%22");
	s = s.replace("#", "%23");
	s = s.replace("&", "%26");
	return s.replace("+", "%2B");
}

/*/
/ /  Author: Jeremy Falcon
/ /    Date: November 08, 2001
/ / Version: 1.4
/*/

/*/ THIS FILE CONTAINS FUNCTIONS THAT WILL WRAP THE POP-UP PROCESS /*/

// this variable will hold the window obect
// we only allow one pop-up at a time
var popup = null;
/*/
/ / PURPOSE:
/ /		To create and center a pop-up window.
/ /
/ / COMMENTS:
/ /		It will replace to old pop-up if called
/ / 	without calling DestroyWnd() first..
/*/

function CreateWnd (file, width, height, resize)
{
	var doCenter = false;

	if((popup == null) || popup.closed)
	{
		attribs = "";

		/*/ there's no popup displayed /*/

		// assemble some params
		if(resize) size = "yes"; else size = "no";

		/*/
		/ / We want to center the pop-up; however, to do this we need to know the
		/ / screen size.  The screen object is only available in JavaScript 1.2 and
		/ / later (w/o Java and/or CGI helping), so we must check for the existance
		/ / of it in the window object to determine if we can get the screen size.
		/ /
		/ / It is safe to assume the window object exists because it was implemented
		/ / in the very first version of JavaScript (that's 1.0).
		/*/
		for(var item in window)
			{ if(item == "screen") { doCenter = true; break; } }

		if(doCenter)
		{	/*/ center the window /*/

			// if the screen is smaller than the window, override the resize setting
			if(screen.width <= width || screen.height <= height) size = "yes";

			WndTop  = (screen.height - height) / 2;
			WndLeft = (screen.width  - width)  / 2;

			// collect the attributes
			attribs = "width=" + width + ",height=" + height + ",resizable=" + size + ",scrollbars=" + size + "," + 
			"status=no,toolbar=no,directories=no,menubar=no,location=no,help=no;,top=" + WndTop + ",left=" + WndLeft;
		}
		else
		{
			/*/
			/ / There is still one last thing we can do for JavaScrpt 1.1
			/ / users in Netscape.  Using the AWT in Java we can pull the
			/ / information we need, provided it is enabled.
			/*/
			if(navigator.appName=="Netscape" && navigator.javaEnabled())
			{	/*/ center the window /*/

				var toolkit = java.awt.Toolkit.getDefaultToolkit();
				var screen_size = toolkit.getScreenSize();

				// if the screen is smaller than the window, override the resize setting
				if(screen_size.width <= width || screen_size.height <= height) size = "yes";

				WndTop  = (screen_size.height - height) / 2;
				WndLeft = (screen_size.width  - width)  / 2;

				// collect the attributes
				attribs = "width=" + width + ",height=" + height + ",resizable=" + size + ",scrollbars=" + size + "," + 
				"status=no,toolbar=no,directories=no,menubar=no,location=no,help=no,top=" + WndTop + ",left=" + WndLeft;
			}
			else
			{	/*/ use the default window position /*/

				// override the resize setting
				size = "yes";

				// collect the attributes
				attribs = "width=" + width + ",height=" + height + ",resizable=" + size + ",scrollbars=" + size + "," + 
				"status=no,toolbar=no,directories=no,menubar=no,location=no,help=no";
			}
		}

		// create the window
		popup = open(file, "", attribs);
	}
	else
	{
		// destory the current window
		DestroyWnd();
		// recurse, just once, to display the new window
		CreateWnd(file, width, height, resize);
	}
}

/*/
/ / PURPOSE:
/ /		To destroy the pop-up window.
/ /
/ / COMMENTS:
/ /		This is available if wish to destroy
/ / 	the pop-up window manually.
/*/

function DestroyWnd ()
{
	// close the current window
	if(popup != null)
	{
		popup.close();
		popup = null;
	}
}




