// version 2.1.4
// last mod. 1.11.2007

/****************************** PROTOTYPES ************************************/

Array.prototype.in_array = function(obj)
{
	var found = false;
	for(var i in this)
	{
		if(this[i] === obj)
		{
			found = i;
			break;
		}
	} 
	return found;
}
/****************************** SUGGESTIONS ***********************************/

activeSuggestionBox  = false;
actHighlight = 0;
cNodes = 0;

function showSuggestionArrow(e,offSetY,offSetX)
{
	deleteSuggestionArrow();
	suggestionArrow = new Image();
	suggestionArrow.src = "/images/ttSugArrow.png";
	e.parentNode.insertBefore(suggestionArrow,e);
	var ePos = findObjPos(e);
	suggestionArrow.style.position = "absolute";
	suggestionArrow.style.left 	= ePos[0] + e.offsetWidth - (offSetX + 14) + "px";
	suggestionArrow.style.top 	= ePos[1] + offSetY + "px";
	suggestionArrow.style.zIndex = 1000;
	suggestionArrow.id = "actArrow";
	document.getElementById("actArrow").onclick = function(){showSuggestionBox(e,false)}
}

function deleteSuggestionArrow()
{
	if(document.getElementById('actArrow'))
	{
		var toRemove = document.getElementById('actArrow');
		toRemove.parentNode.removeChild(toRemove);
		suggestionArrow = false;
	}
}

function showSuggestionBox(o,e)
{
	switch (e.keyCode)
	{
		case 27: //escape
			hideSuggestionBox();
		break;
		case 40: //down
			if(actHighlight < cNodes - 1) actHighlight++; 
			highlightSuggestedLink(actHighlight);
		break; 
		case 38: //up
			if(actHighlight > 0) actHighlight--;
			highlightSuggestedLink(actHighlight);		
		break;
		case 13: //enter
			insertSuggestion(o.getAttribute('name'),document.getElementById('ttSuggestionBox').getElementsByTagName("a")[actHighlight]);
			hideSuggestionBox();
		break;
		default:
			hideSuggestionBox();
			var table		 = o.getAttribute('table');
			var column	 = o.getAttribute('column');
			var filter	 = o.getAttribute('filter');
			addAjaxElement(o,'/ajax_snippets/suggestionslist.php?eName=' + o.getAttribute('name') + '&sugText=' + encodeURI(o.value) + '&table=' + table + '&column=' + column + '&filter=' + escape(filter) , 'after');
			actHighlight = -1;
		break;
	}
}

function highlightSuggestedLink(c)
{
	if(cNodes > 0)
	{
		for(i=0 ; i < cNodes ; i++)	document.getElementById('ttSuggestionBox').getElementsByTagName("a")[i].className = 'ttSuggestionUnmarked';
		document.getElementById('ttSuggestionBox').getElementsByTagName('a')[c].className = 'ttSuggestionMarked';
	}
}

function hideSuggestionBox()
{
	if(activeSuggestionBox == true)
	{
		activeSuggestionBox = false;
		var promptBox = document.getElementById('ttSuggestionBox');
		promptBox.parentNode.removeChild(promptBox);
		cNodes = actHighlight = 0;
		deleteSuggestionArrow();
	}
}

function insertSuggestion(id,v)
{
	document.getElementsByName(id)[0].value = (v.innerText) ? v.innerText : v.innerHTML;	
	document.getElementsByName(id)[0].focus();	
	hideSuggestionBox();
}


/********************************* AJAX ***************************************/
lastFieldNumber = 0;
countAttr = 0;
tmpSavedElements = new Array;
function addAjaxElement(e , fileName , addPosition, replaceElement)
{
	lastFieldNumber++;
	if (window.XMLHttpRequest)
	{
		cType = true;
		ajaxRequest = new XMLHttpRequest();
	} else {
		cType = false;
		ajaxRequest = new ActiveXObject('Microsoft.XMLHTTP');
	}
	at = (fileName.indexOf("?") == -1) ? "?" :"&";
	ajaxRequest.open('GET', fileName + at + 'ajaxElementID=' + lastFieldNumber ,cType);
	ajaxRequest.onreadystatechange = function ()
	{
		if (ajaxRequest.readyState == 4 && ajaxRequest.status == 200) 
		{
			newNode = document.createElement('x');
			newNode.id = "ajaxElementID" + lastFieldNumber;
			newNode.innerHTML = ajaxRequest.responseText;
			if(addPosition)
			{
				e = (!replaceElement) ? e : document.getElementById(replaceElement);
				tmpSavedElements[lastFieldNumber] = e;
				switch (addPosition)
				{
					case "before":
						e.parentNode.insertBefore(newNode,e);
					break;
					case "replace":
						e.parentNode.replaceChild(newNode,e);
						break;
					case "after":
					default: //after
						e.parentNode.insertBefore(newNode,e.nextSibling);
					break;
				}
			} 
			if(ajaxRequest.responseText.indexOf('<script>') > - 1 && agentName() != "Firefox") 			//eval javascript;
			{
				eval(ajaxRequest.responseText.substring( ajaxRequest.responseText.indexOf('<script>') + 8, ajaxRequest.responseText.indexOf('</script>')));
			}
		} 
	}
	ajaxRequest.send(null);
	return ajaxRequest;
}

function removeAjaxElement(ajaxID,restore) 
{
	var e = document.getElementById("ajaxElementID" + ajaxID);
	var newNode = tmpSavedElements[ajaxID];
	if(restore)
	{	
		e.parentNode.replaceChild(newNode,e);
	} else {
		e.parentNode.removeChild(e);
	}
}

/******************************* FADINGS **************************************/

function fadeInOut(layerID , fps , alphaTo)
{
	var actElement = document.getElementById(layerID);
	var frameDuration = (!fps)? 5 : Math.ceil(1000/fps); // frameDuration in ms!
	if(agentName() == "MSIE")
	{
		var actFilter = actElement.currentStyle.filter;
		var actAlpha = (actFilter) ? Number(actFilter.substring(actFilter.indexOf('=')+1,actFilter.indexOf(')'))) : 100;
	} else {
		var actAlpha = document.defaultView.getComputedStyle(actElement,"").opacity * 100;
	}
	if(!alphaTo) var alphaTo = (actAlpha == 100)?0:100;
	var alphaDelta = (actAlpha - alphaTo) * -1;
	var frame = 0;
	if(actAlpha > alphaTo)
	{
		for(var i = actAlpha; i >= alphaTo; i--)
		{
			setTimeout("doFade(" + i + ",'" + layerID + "');" , frame * frameDuration);
			frame++;
		}
	} else {
		for(var i = actAlpha; i <= alphaTo; i++)
		{
			setTimeout("doFade(" + i + ",'" + layerID + "');" , frame * frameDuration);
			frame++;
		}
	}

}

function doFade(newAlpha,layerID)
{
  var o = document.getElementById(layerID).style; 
  o.opacity = (newAlpha / 100); 
  o.MozOpacity = (newAlpha / 100); 
  o.filter = "alpha(opacity=" + newAlpha + ")"; 	
}


/****************************** FUNCTIONS *************************************/
function updatePwdField(f)
{
  if(f==1)
  {
    document.getElementById('pwdclearField').value = document.getElementById('pwdField').value;
  } else {
    document.getElementById('pwdField').value = document.getElementById('pwdclearField').value;
  }
}


function agentName()
{
	var browserTypes = new Array('MSIE','Firefox','Opera','Safari');
	for (var i in browserTypes) if (navigator.userAgent.indexOf(browserTypes[i])>-1) return browserTypes[i];
}

function showHide(id,dType,setCookie)
{
	d = (!dType)?"inline":dType;
	state = (document.getElementById(id).style.display == "none") ? d : "none";
	document.getElementById(id).style.display = state;
	if(setCookie)	document.cookie = "showHide_" + id + "=" + state;
}

function getCookieValue(c)
{
	var dc = document.cookie;
	switch (dc.indexOf(c + '='))
	{
		case -1:
			return null;
		break;
		case 0:
			varEnd = dc.indexOf(";");
			return dc.substring(c.length + 1 ,varEnd);
		break;
		default:
			varBegin = dc.indexOf(c + '=');
			valueEnd = dc.indexOf(";",varBegin);
			b = c.length + varBegin + 1;
			return (valueEnd > 1) ? dc.substring(b,valueEnd) : dc.substring(b,dc.length);
		break;
	}
}

function getGETvalue(key)
{
	var allValues = location.search.substring(1,location.search.length).split('&');
	for(var i = 0 ; i < allValues.length ; i++)
	{
 		var singleValue = allValues[i].split('=');
		if(singleValue[0] === key) return singleValue[1];
	}
}
function findObjPos(o)
{

	var cLeft = cTop = 0;
	if (o.offsetParent) 
	{
		cLeft = o.offsetLeft;
		cTop = o.offsetTop;
		while (o = o.offsetParent) 
		{
			if(o.style.position == 'absolute') break;
			cLeft += o.offsetLeft;
			cTop += o.offsetTop;
		}
	}
	return [cLeft,cTop]; // x, y
}

function x(e)
{
	if(!document.getElementById("ttDebug"))
	{
		newNode = document.createElement('div');
		newNode.id = "ttDebug";
		debugNode = document.getElementsByTagName('html')[0];
		debugNode.childNodes[debugNode.childNodes.length - 1].appendChild(newNode);
		document.getElementById("ttDebug").className = "ttDebug";
	}
	document.getElementById("ttDebug").innerHTML = '<b>[variable type: ' + typeof(e) + ']</b><br>';
	switch (typeof(e))
	{
		case 'object':
			for (i in e) document.getElementById("ttDebug").innerHTML +=  i + ' :: ' + e[i] + ' :: ' + typeof(e[i]) + '<br>'; 
		break;
		default:
			document.getElementById("ttDebug").innerHTML += e;
		break;
	}
}