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

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

String.prototype.isNumeric=function ()
{
	var x=/[0-9]{1,5}/;
	return x.test(this);
}

String.prototype.makeInt=function ()
{
	return this.replace(/[^0-9]/,"");
}

// 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 floatZoom(e,myParent,myID,myTitle,myImage,myClass)
{
	var myPos=getPosition(e);
	
	var newDiv=createDiv(myID);
	newDiv.setAttribute('class',myClass);
	newDiv.style.position='absolute';
	
	var newheader=document.createElement('h1');
	var Node = document.createTextNode(myTitle);
	newheader.appendChild(Node);
	newDiv.appendChild(newheader);
	
	var newImage = document.createElement('img');
	newImage.setAttribute('src',myImage);
	newDiv.appendChild(newImage);
	
	document.getElementById(myParent).appendChild(newDiv);
	newDiv.style.display='';
// 	newDiv.style.top=(findPosY(document.getElementById(myParent))+parseInt(newDiv.offsetHeight/2)) + 'px';
// 	newDiv.style.left=(findPosX(document.getElementById(myParent)) + 20) + 'px';
	
	
}

function destroyObject(myID)
{
	var myObj=document.getElementById(myID);
	if(myObj)
	{
		myObj.parentNode.removeChild(myObj);
	}
}

function createDiv(myID)
{
	var newDiv=document.createElement('div');
	newDiv.setAttribute('id', myID);
	newDiv.style.display='none';
	
	return newDiv;
}


function addLinkToObj(myObj,myText,myLink)
{
	var 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'));
	
	return newlink;
}

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 floatDivAbsolute(myObj,myParent)
{
	myObj.style.display='block';
	myObj.style.top = Math.max(0,findPosY(myParent) + parseInt(myParent.offsetHeight)) + 'px';
	myObj.style.left = findPosX(myParent) + 'px';
	myObj.style.height='auto';
	if(myObj.offsetHeight>300) myObj.style.height=300 +'px';	
}

// hide div and reset text if needed
function resetDiv(myObj,myString)
{
	if(myObj)
	{
		removeChildNodes(myObj);

		if(myString)
		{
			newlink=document.createElement('p');
			var Node = document.createTextNode(myString);
			newlink.appendChild(Node);
			myObj.appendChild(newlink);
		}
	}
	myObj.style.display='none';
}

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('search_category_popup');

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

		removeChildNodes(target);

		newlink=document.createElement('p');

		for(var x=0; x<categories.length; x++)
		{
			myAction=addLinkToObj(target,getNodeValue(categories[x],'categoryname'),'#');	
			myAction.setAttribute('onclick', 'document.getElementById("' + myObj.id + '").value="' + getNodeValue(categories[x],'categoryname') + '";resetDiv(document.getElementById("' + target.id + '"),"..searching"); hidePopUps(document.getElementById("' + myObj.id + '")); checkSubmit(); return false;' );
		}

		target.appendChild(newlink);
		floatDivAbsolute(target,myObj);
	}
	else
	{
		resetDiv(target,'...searching');
		// no data returned from server
		// myErrorAlert('XML');
	}
}

function parseOrganizations(httpRequest)
{
	var organizations = httpRequest.responseXML.getElementsByTagName('organization');
	var target=document.getElementById('search_organization_popup');

	if(organizations.length>0)
	{
		var myObj=document.getElementById('search_organization');

		removeChildNodes(target);

		newlink=document.createElement('p');

		for(var x=0; x<organizations.length; x++)
		{	
			myAction=addLinkToObj(target,getNodeValue(organizations[x],'organizationname'),'#');	
			myAction.setAttribute('onclick', 'document.getElementById("' + myObj.id + '").value="' + getNodeValue(organizations[x],'organizationname') + '";resetDiv(document.getElementById("' + target.id + '"),"...searching"); hidePopUps(document.getElementById("' + myObj.id + '")); checkSubmit(); return false;' );
		}
		target.appendChild(newlink);
		floatDivAbsolute(target,myObj);
	}
	else
	{
		resetDiv(target,'..searching');
		// no data returned from server
		// myErrorAlert('XML');
	}
}

function parseCity(httpRequest)
{
	var cities = httpRequest.responseXML.getElementsByTagName('city');
	var target=document.getElementById('search_location_popup');

	if(cities.length>0)
	{
		var myObj=document.getElementById('search_location');

		removeChildNodes(target);

		newlink=document.createElement('p');

		var myAction=false;
		
		for(var x=0; x<cities.length; x++)
		{
			myAction=addLinkToObj(target,getNodeValue(cities[x],'cityname'),'#');	
			myAction.setAttribute('onclick', 'document.getElementById("' + myObj.id + '").value="' + getNodeValue(cities[x],'cityname') + '";resetDiv(document.getElementById("' + target.id + '"),"...searching"); checkSubmit(); hidePopUps(document.getElementById("' + myObj.id + '")); return false;' );
		}
		target.appendChild(newlink);
		floatDivAbsolute(target,myObj);
	}
	else
	{
		resetDiv(target,'...searching');
	}
}

function parsePostalCodes(httpRequest)
{
	var postalcodes = httpRequest.responseXML.getElementsByTagName('postalcode');
	var target=document.getElementById('search_location_popup');

	if(postalcodes.length>0)
	{
		var myObj=document.getElementById('search_location');

		removeChildNodes(target);

		newlink=document.createElement('p');

		for(var x=0; x<postalcodes.length; x++)
		{
			myAction=addLinkToObj(target,getNodeValue(postalcodes[x],'postalcodename'),'#');	
			myAction.setAttribute('onclick', 'document.getElementById("' + myObj.id + '").value="' + getNodeValue(postalcodes[x],'postalcodename') + '";resetDiv(document.getElementById("' + target.id + '"),"...searching"); hidePopUps(document.getElementById("' + myObj.id + '")); checkSubmit(); return false;' );
		}
		target.appendChild(newlink);
		floatDivAbsolute(target,myObj);
	}
	else
	{
		resetDiv(target,'...searching');
	}
}


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', 'resetDiv(document.getElementById("' + target.id + '"),"...searching")' );
		newlink.appendChild(document.createTextNode('[close]'));
		target.appendChild(newlink);


		floatDiv(target,myObj);
	}
	else
	{
		resetDiv(target,'searching');
		// 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;
}

