
// general use functions
String.prototype.trim = function ()
{
	return this.replace(/^\s*|\s*$/,"");
}

String.prototype.hasContent=function ()
{
	var x=/[a-zA-Z0-9]+/;
	return x.test(this);
}

// event / layer functions
function doSomething(e)
{
	if (!e) var e = window.event
	if (e.keyCode) code = e.keyCode;
	else if (e.which) code = e.which;
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();

	if(myActions && myActionsIndex)
	{
		for(x in myActionsIndex)
		{
			if(myActionsIndex[x]==this.id)
			{
				// alert('firing ' + this.id);
				myActions[x](this);
			}
		}
	}
}

function findPosX(obj)
{
	var curleft = 0;
	if(obj.offsetParent)
	while(1)
	{
		curleft += obj.offsetLeft;
		if(!obj.offsetParent)
		break;
		obj = obj.offsetParent;
	}
	else if(obj.x)
	curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if(obj.offsetParent)
	while(1)
	{
		curtop += obj.offsetTop;
		if(!obj.offsetParent)
		break;
		obj = obj.offsetParent;
	}
	else if(obj.y)
	curtop += obj.y;
	return curtop;
}


function getPosition(e) {
    e = e || window.event;
    var cursor = {x:0, y:0};
    if (e.pageX || e.pageY) {
        cursor.x = e.pageX;
        cursor.y = e.pageY;
    }
    else {
        var de = document.documentElement;
        var b = document.body;
        cursor.x = e.clientX +
            (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
        cursor.y = e.clientY +
            (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
    }
    return cursor;
}

function removeChildNodes(myObj)
{
	if(myObj.childNodes.length>0)
	{
		while(myObj.childNodes[0])
		{
			myObj.removeChild(myObj.childNodes[0]);
		}
	}
}


function addLinkToObj(myObj,myText,myLink)
{
	newlink=document.createElement('a');
	newlink.setAttribute('href', myLink);
	newlink.className='popup_window';
	myObj.appendChild(newlink);

	var Node = document.createTextNode(myText);
	newlink.appendChild(Node);

	myObj.appendChild(document.createElement('br'));
}

function floatDiv(myObj,myParent)
{
	myObj.style.display='block';
	myObj.style.top = Math.max(0,findPosY(myParent) - parseInt(((myParent.offsetHeight / 2) + (myObj.offsetHeight / 2)))) + 'px';
	myObj.style.left = findPosX(myParent) + myParent.offsetWidth + 5 + 'px';
	if((findPosX(myParent) + myParent.offsetWidth + 5)>(document.body.clientWidth-200))
	{
		myObj.style.left = (findPosX(myParent) - myObj.offsetWidth - 50) + 'px';
	}
	// alert('floated div ' + myObj.style.top + ', ' + myObj.style.left);
}

function hideDiv(myObj)
{
	myObj.style.display='none';
}

// XML functions
function makeRequest(url,cmd)
{
	var httpRequest;
	var myCmd = cmd;

	if (window.XMLHttpRequest)
	{ // Mozilla, Safari, ...
		httpRequest = new XMLHttpRequest();
		if (httpRequest.overrideMimeType)
		{
			httpRequest.overrideMimeType('text/xml');
		}
	}
	else if (window.ActiveXObject)
	{ // IE
		try
		{
			httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
				try
				{
					httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e) {}
		}
	}

	if (!httpRequest)
	{
		myErrorAlert('server');
		return false;
	}

	httpRequest.onreadystatechange = function() { parseResponse(httpRequest,myCmd); };
	// alert(url);
	httpRequest.open('GET', url, true);
	httpRequest.send('');

}

function parseResponse(httpRequest,cmd)
{
	if (httpRequest.readyState == 4)
	{
		if (httpRequest.status == 200)
		{
			eval(cmd + '(httpRequest)');
		}
		else
		{
			alert(httpRequest.status);
			myErrorAlert('server');
		}
	}
}

function parseCategories(httpRequest)
{
	var categories = httpRequest.responseXML.getElementsByTagName('category');
	var target=document.getElementById('category_popup');

	if(categories.length>0)
	{
		var myObj=document.getElementById('category');

		removeChildNodes(target);

		newlink=document.createElement('p');
		newlink.appendChild(document.createTextNode('Please choose a category:'));
		target.appendChild(newlink);

		for(var x=0; x<categories.length; x++)
		{
			addLinkToObj(target,getNodeValue(categories[x],'categoryname'),'index.php?action=search&category=' + getNodeValue(categories[x],'categoryname'));
		}

		// add link to close window
		newlink=document.createElement('p');
		newlink.className='popup_action';
		target.appendChild(newlink);
		newlink=document.createElement('a');

		// newlink.setAttribute('href', '');
		newlink.setAttribute('onclick', 'hideDiv(document.getElementById("' + target.id + '"))' );
		newlink.appendChild(document.createTextNode('[close]'));
		target.appendChild(newlink);


		floatDiv(target,myObj);
	}
	else
	{
		hideDiv(target);
		// no data returned from server
		// myErrorAlert('XML');
	}
}

function parseKeywords(httpRequest)
{
	var keywords = httpRequest.responseXML.getElementsByTagName('keyword');
	var target=document.getElementById('keyword_popup');

	if(keywords.length>0)
	{
		var myObj=document.getElementById('search');

		removeChildNodes(target);

		newlink=document.createElement('p');
		newlink.appendChild(document.createTextNode('Please choose a keyword:'));
		target.appendChild(newlink);

		for(var x=0; x<keywords.length; x++)
		{
			addLinkToObj(target,getNodeValue(keywords[x],'keywordname'),'index.php?action=search&search=' + getNodeValue(keywords[x],'keywordname'));
		}

		// add link to close window
		newlink=document.createElement('p');
		newlink.className='popup_action';
		target.appendChild(newlink);
		newlink=document.createElement('a');

		// newlink.setAttribute('href', '');
		newlink.setAttribute('onclick', 'hideDiv(document.getElementById("' + target.id + '"))' );
		newlink.appendChild(document.createTextNode('[close]'));
		target.appendChild(newlink);


		floatDiv(target,myObj);
	}
	else
	{
		hideDiv(target);
		// no data returned from server
		// myErrorAlert('XML');
	}
}

function parsePorts(httpRequest)
{
	var ports = httpRequest.responseXML.getElementsByTagName('port');
	var target=document.getElementById('port_popup');

	if(ports.length>0)
	{
		var myObj=document.getElementById('portalpha');

		removeChildNodes(target);

		newlink=document.createElement('p');
		newlink.appendChild(document.createTextNode('Please choose a port:'));
		target.appendChild(newlink);

		for(var x=0; x<ports.length; x++)
		{
			addLinkToObj(target,getNodeValue(ports[x],'portname'),'index.php?action=search&tcmListing_nearestportid=' + getNodeValue(ports[x],'id'));
		}

		// add link to close window
		newlink=document.createElement('p');
		newlink.className='popup_action';
		target.appendChild(newlink);
		newlink=document.createElement('a');

		// newlink.setAttribute('href', '');
		newlink.setAttribute('onclick', 'hideDiv(document.getElementById("' + target.id + '"))' );
		newlink.appendChild(document.createTextNode('[close]'));
		target.appendChild(newlink);


		floatDiv(target,myObj);
	}
	else
	{
		hideDiv(target);
		// no data returned from server
		// myErrorAlert('XML');
	}
}


function getNodeValue(obj,tag)
{
	//return obj.getElementsByTagName(tag)[0].firstChild.nodeValue;
	if(obj)
	{
		var myObj = obj.getElementsByTagName(tag)[0];
		if(typeof(myObj)!='undefined')
		{
			if(myObj.firstChild)
			{
				if('nodeValue' in myObj.firstChild) return myObj.firstChild.nodeValue;
			}
		}
	}
	return '';
}

function submitNewWindow(myForm,windowName)
{
	var w = window.open('about:blank',windowName);
	myForm.target = windowName;
	return true;
}
