function getPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
	    curleft = obj.offsetLeft
	    curtop = obj.offsetTop
	    while (obj = obj.offsetParent) {
	        curleft += obj.offsetLeft
	        curtop += obj.offsetTop
	    }   
	}   
	return [curleft,curtop];
}

function cancelMasq() {
	overlayPopup('overallWidth','&nbsp;Removing masquerade...','/widgets/masq/clearmasq.mhtml',300);
}
function loadMasq() {
	overlayPopup('overallWidth','&nbsp;Loading...','/widgets/masq/popup.mhtml',300);
	
}
function setMasq(u) {
	overlayPopup('overallWidth','&nbsp;Please wait while this page refreshes.','',300);
	window.location.reload(true);
}
var suggestTimer = null;
function masqSearch(e) {
	var val = typeof(e.which) != 'undefined' ? e.which : e.keyCode;
	switch (val) {

		case 0:
			return false;

		case 37:
			return false;

		case 39:
			return false;

		case 38: // up arrow
			nextSuggestion(-1);
			return false;

		case 40: // down arow
			nextSuggestion(1);	
			return false;
		
		case 13: // enter
			hideSuggestions(true);
			var u = top.document.getElementById('masq_username');
			if ( u.value ) {
				top.document.getElementById('masq_username_loading').style.display='block';
				insertGetRequestInto('__BUFFER','/widgets/masq/setmasq.mhtml?u='+u.value);
			}
			return false;	

		default: // reset the timer between keypresses
			hideSuggestions();
			if ( suggestTimer ) {
				clearTimeout(suggestTimer);
			}
			suggestTimer = setTimeout('masq_suggest()',200);
			return true;
	}
}

function nextSuggestion( dir ) {
	var l = top.document.getElementById('suggestionList');
	if ( ! l ) return;
	var li = new Array();
	for ( var i=0; i < l.childNodes.length; i++ ) {
		if ( l.childNodes[i].tagName == 'LI' ) li.push( l.childNodes[i] );
	}
	var selected=-1;
	for ( var i=0; i < li.length; i++ ) {
		if ( li[i].className == 'selected' ) selected=i;
		li[i].className='';
	}
	var i = selected + dir < 0 ? 0 : 
			selected + dir >= li.length ? li.length - 1 : 
			selected + dir;
	li[i].className='selected';

	var d = top.document.getElementById('masq_suggestions');
	if ( li[i].offsetTop > d.scrollTop + d.offsetHeight ) {
		d.scrollTop += ( 2 * li[i].offsetHeight );
	} else if ( li[i].offsetTop + li[i].offsetHeight < d.scrollTop ) {
		d.scrollTop -= li[i].offsetHeight;
	}
	
}

function takeSuggestion(li) {
	hideSuggestions();
	var u = top.document.getElementById('masq_username');
	u.value = li.innerHTML;
	u.focus();
}

function masq_suggest() {
	clearTimeout(suggestTimer);
	var str = top.document.getElementById('masq_username').value;
	if ( str ) {
		suggest(str, 'account','username',20);
	} else {
		var d = top.document.getElementById('masq_suggestions');
		if ( d ) {
			d.style.display='none';
		}
	}
}

function suggest(str,table,fields,limit) {
	isSuggesting=1;
	var obj = top.document.getElementById('masqForm');
	obj.fields.value = fields;
	obj.__TABLE.value = table;
	obj.term.value = str;
	obj.callback.value = 'suggestCallBack';
	var qs = '?' + serializeForm(obj);
	top.document.getElementById('masq_username_loading').style.display='inline';
	insertGetRequestInto('__BUFFER','/widgets/masq/suggest.mhtml'+qs);
}
function hideSuggestions(doTake) {
	var d = top.document.getElementById('masq_username_loading');
	if ( d ) d.style.display='none';
	d = top.document.getElementById('masq_suggestions');
	if ( d ) d.style.display='none';
	if ( doTake == true ) {
		var l = top.document.getElementById('suggestionList');
		if ( ! l ) return;
		for ( var i=0; i < l.childNodes.length; i++ ) {
			var li = l.childNodes[i];
			if ( li.tagName == 'LI' && li.className == 'selected' ) {
				takeSuggestion(li);
				break;
			}
		}
	}
	top.document.getElementById('masq_username').focus();
}
function suggestCallBack(data) {
	var d = top.document.getElementById('masq_suggestions');
	var u = top.document.getElementById('masq_username');
	if ( ! d ) {
		d = top.document.createElement('div');
		d.id = 'masq_suggestions';
		d.className='inputSuggestions';
		top.document.body.appendChild(d);
	}
	d.style.width= ( parseInt(u.offsetWidth) - 3 ) +'px';
	var pos = getPos( u );
	d.style.left = ( pos[0] + 1 ) +'px';
	d.style.top  = (pos[1]+parseInt(u.offsetHeight) )+'px';
	d.style.display='none';
	var html = "<ul id='suggestionList'>";
	for ( var i=0; i < data.length; i++ ) {
		html += "<li onClick='takeSuggestion(this);' onMouseOver='this.className=\"selected\";' onMouseOut='this.className=\"\";' >"+data[i].username+"</li>";
	}
	html += "</ul>";
	d.innerHTML = html;
	d.style.display='block';
	top.document.getElementById('masq_username_loading').style.display='none';
}
