//global menu state
var menuReady = false;
var CSSRuleValues = {	menuItemHeight:"22px",
						menuItemLineHeight:"1.4em",
						menuBorderBottom:"1px",
						menuWrapperBorderWidth:"2px",
						menuWrapperPadding:"3px",
						defaultBodyFontSize:"10px",
						textBoxHeight:"20px"
					};
var limit = 20;
var query = "";
var timeoutId;
var elementId = "";
var setstart = false;
var args = getArgs();
var startCik = args.i ? args.i : -1;
var endCik = args.e ? args.e : -1;
function runQuery( elem, start)
{
	setstart = start ? true : false;
	query = elem.value;
	elementId = elem.id;
	if( query != "Search") 
	{
		clearTimeout( timeoutId);
		timeoutId = setTimeout( "getSearchResults()", 500);
	}
}
function getSearchResults()
{
	var request = HTTPnewRequest();
	request.onreadystatechange = function() 
	{
		if( request.readyState == 4 && request.status == 200)
		{
			var result = request.responseText;
			var menu = createMenuArrayFromPersonList(result);
			makeMenu( menu);	
		}
	}
	var url = "/Main/SixDegreesInsiderSearch.aspx?q=" + query + "&limit=" + limit;
	request.open("GET", url, true); // Asynchronous
	request.send(null);
}
function createMenuArrayFromPersonList( resultStr)
{
	
	var lineArray = resultStr.split("\n");
	var resultArray = new Array();
	for (var i = 0; i < lineArray.length; i++)
	{
		var line = lineArray[i];
		if( line != "") 
		{
			var splitline = line.split(",");
			if( setstart)
				resultArray[resultArray.length] = {href: url.replace("<startcik>", splitline[1]).replace("<endcik>", endCik), text: splitline[0], cik:  splitline[1] }
			else
				resultArray[resultArray.length] = {href: url.replace("<startcik>", startCik).replace("<endcik>", splitline[1]), text: splitline[0], cik:  splitline[1] }
		}
	}
	var menu = {
//				mBarId:"personListMenu",
				mBarId:elementId,
				elemId:"dynamicUserList"
				};
	menu.menuItems = resultArray;
	return menu;
}

function getElementStyle( elem, IEStyleProp, CSSStyleProp)
{
	if( elem.currentStyle)
	{
		return elem.currentStyle[ IEStyleProp];
	}
	else if( window.getComputedStyle)
	{
		var compStyle = window.getComputedStyle( elem, "");
		return compStyle.getPropertyValue(CSSStyleProp);
	}
	return "";
}
function getMenuItemHeight() 
{
	var menuItemH = 0;
	var bodyFontSize = parseInt( getElementStyle( document.body, "fontSize", "font-size") );
	if( bodyFontSize == parseInt(CSSRuleValues.defaultBodyFontSize) ) 
	{
		menuItemH = parseInt( parseFloat( CSSRuleValues.menuItemHeight) ) +
			parseInt( parseFloat( CSSRuleValues.menuBorderBottom) );
	}
	else
	{
		menuItemH = parseInt( parseFloat( CSSRuleValues.menuItemLineHeight) * bodyFontSize );
	}
	return menuItemH;
}
function getHeightAdjust() 
{
	var heightAdjust = parseInt( parseFloat( CSSRuleValues.menuWrapperPadding) ) 
		+ 2 * parseInt( parseFloat(CSSRuleValues.menuWrapperBorderWidth));
	if	( navigator.appName == "Microsoft Internet Explorer" &&
			navigator.userAgent.indexOf("Win") != -1 &&
			( typeof document.compatMode == "undefined" || document.compatMode == "BackCompat") 
		)
	{ 
		heightAdjust = -heightAdjust;
	}
	return heightAdjust;	
}

function makeMenu( menu) 
{
	var menuDiv, menuItem, itemLink, textNode;
	var menuItemH = getMenuItemHeight();
	var heightAdjust = getHeightAdjust();
	
	var menuDivOld = document.getElementById( menu.elemId);
	while( menuDivOld != undefined) 
	{
		document.body.removeChild( menuDivOld);
		menuDivOld = document.getElementById( menu.elemId);
	}
	
	menuDiv = document.createElement("div");
	menuDiv.id = menu.elemId;
	menuDiv.className = "searchMenuWrapper";
	
	/*if( menu.menuItems.length > 0)
	{
		menuDiv.style.height = ( menuItemH * menu.menuItems.length) - heightAdjust + "px";
	}
	else
	{
		menuDiv.style.height = menuItemH  - heightAdjust + "px";
	}
	*/
	menuDiv.style.zIndex = 1000;
	
	// build menus using the resultSet Array. Use array to drive div creation loop.
	for ( var index = 0; index < menu.menuItems.length ; index++)
	{
		menuItem = document.createElement("div");
		menuItem.id = menu.elemId + "_" + index;
		menuItem.className = "searchMenuItem";
		// mouse events need to be determined
		menuItem.style.top = menuItemH * index + "px";
		
		//menuItem.onclick = "loadSix(" + menu.menuItems[index].cik +")"
		itemLink = document.createElement("a");
		itemLink.href = menu.menuItems[index].href;
		itemLink.className = "menuItem";
		//itemlink mouseevents need to be established
		textNode = document.createTextNode( menu.menuItems[index].text);
		itemLink.appendChild( textNode);
		menuItem.appendChild( itemLink);
		menuDiv.appendChild( menuItem);		
	}
	if( menu.menuItems.length == 0)
	{
		menuItem = document.createElement("div");
		menuItem.id = menu.elemId + "_NoResults";
		menuItem.className = "searchMenuItemNoResult";
		
		menuItem.style.top = menuItemH * 0 + "px";
		menuItem.innerHTML = "no match found, please double check the spelling";
		//menuItem.appendChild( textNode);
		menuDiv.appendChild(menuItem);
	}
	menuDiv = positionMenu( menu.mBarId,menuDiv);
	document.body.appendChild( menuDiv);
	menuReady = true;
	if( query != "")
	{
		showMenu( menuDiv);
	}
	else
	{
		hideMenu(menuDiv);
	}
}
function positionMenu( elemId, menuDiv) 
{
	// use the image for poistion reference of related div.
	var mBar = document.getElementById( elemId);
	
	var offsetTrail = mBar;
	var offsetLeft = 0;
	var offsetTop = 0;
	
	while( offsetTrail )
	{
		//alert( offsetTrail.offsetTop);
		offsetLeft += offsetTrail.offsetLeft;
		offsetTop += offsetTrail.offsetTop;
		offsetTrail = offsetTrail.offsetParent;
	}
	if( navigator.userAgent.indexOf("Mac") != -1 &&
		typeof document.body.leftMargin != "undefined")
	{
		offsetLeft += document.body.leftMargin;
		offsetTop += document.body.topMargin;
	}
	//alert( parseInt(parseFloat(CSSRuleValues.textBoxHeight)));
	menuDiv.style.left = offsetLeft + "px";
	menuDiv.style.top = offsetTop + parseInt(parseFloat(CSSRuleValues.textBoxHeight)) + "px";
	return menuDiv;
}

function showMenu( menu) 
{
	if( menuReady )
	{
		//positionMenu( menu);
		//alert("adding kid");
		menu.style.visibility = "visible";
		menu.style.display="block";
	}
}
function hideMenu(menu)
{
	//alert( "removing kid");
	document.body.removeChild( menu);
}





/*
 * This function parses ampersand-separated name=value argument pairs from
 * the query string of the URL.  It stores the name=vlaue pairs in
 * properties of an object and returns that object.  Use it like this:
 *
 * var args = getArgs();  // Parse args from URL
 * var q = args.q || ""; // Use argument, if defined, or a default value
 * var n = args.n ? parseInt(args.n) : 10;
 */
function getArgs() 
 {
	var args = new Object();
	var query = location.search.substring(1);  // Get query string
	var pairs = query.split("&");
	
	for( var i = 0; i < pairs.length; i++) 
	{
		var pos = pairs[i].indexOf('=');
		if( pos == -1) 
			continue;
		var argname = pairs[i].substring( 0, pos);
		var value = pairs[i].substring(pos+1);
		value = decodeURIComponent(value);
		args[argname] = value;
	}
	return args;
}
