// 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);
}



// XML functions

function makeRequestPinpoint(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() { parseResponsePinpoint(httpRequest,myCmd); };
	httpRequest.open('GET', url, true);
	httpRequest.send('');

}

function parseResponsePinpoint(httpRequest,cmd)
{
	if (httpRequest.readyState == 4)
	{
		if (httpRequest.status == 200)
		{
			// alert(cmd);
			if(cmd=='parseDistance')
			{
				parseDistance(httpRequest);
			}
			else if(cmd=='parseCities')
			{
				parseCities(httpRequest);
			}
			else if(cmd=='parseStateprov')
			{
				parseStateprov(httpRequest);
			}
			else if(cmd=='parseCategories')
			{
				parseCategories(httpRequest);
			}
		}
		else
		{
			alert(httpRequest.status);
			myErrorAlert('server');
		}
	}
}

function showNeedleHeading(id)
{
	for(x=1;x<5;x++)
	{
		my_heading=document.getElementById('pinpoint_step_' + x);
		if(x==id)
		{
			//my_heading.style.display='block';
			my_heading.style.fontStyle='italic';
		}
		else
		{
			my_heading.style.fontStyle='normal';
			//my_heading.style.display='none';
		}
	}
}

// remove the currently set option and reset form
function stepBack()
{
	var my_category=document.getElementById('needle');
	var my_stateprov=document.getElementById('my_stateprov');
	var my_city=document.getElementById('my_city');

	var my_val="";

	if(my_stateprov.value!="")
	{
		if(my_city.value!="")
		{
			my_city.value="";
			my_val=my_stateprov.value;
			my_stateprov.value="";
			//alert('stepping back to select city - resetting city');
			findNeedle(my_val);
		}
		else
		{
			my_stateprov.value="";
			my_val=my_category.value
			my_category.value="";
			//alert('stepping back to select stateprov - resetting stateprov: ' + my_stateprov.value);
			findNeedle(my_val);
		}
	}
	else
	{
		my_category.value="";
		//alert('stepping back to select category - resetting category');
		findNeedle("");
	}
}

function findNeedle(myNeedle,myTitle,selector)
{
	var my_category=document.getElementById('needle');
	var my_stateprov=document.getElementById('my_stateprov');
	var my_city=document.getElementById('my_city');
	var my_distance=document.getElementById('my_distance');
	var my_zipcode=document.getElementById('needle2');

	var my_title="Pinpoint Search >";

	// alert('needle: ' + myNeedle + ' category: ' + my_category.value + ' stateprov: ' + my_stateprov.value + ' city: ' + my_city.value);
  switch(selector){
    case 'category':
     	my_title = my_title + ' ' + my_category.value;
     	my_category.value=myNeedle;
			document.myPinpointForm.needle.value=my_category.value; // force our specific form value
			my_title = my_title + ' ' + my_category.value;
			makeRequestPinpoint('directory/webservices/rv_ws.php?m=stateprovlist&category=' + escape(my_category.value),'parseStateprov');
			showNeedleHeading(2);
			changeTextNode('search_pinpoint_location',my_title);
			break;
    case 'state':
	if (myNeedle=="This Category searches All States")
	{
			//document.getElementById("needle_ajax_city").options
			//my_form=document.getElementById('myPinpointForm');
			//my_form.submit();
	}
      my_stateprov.value=myNeedle;
      my_title = my_title + ' : ' + my_stateprov.value;
			changeTextNode('search_pinpoint_location',my_title);
			// lookup cities
			makeRequestPinpoint('directory/webservices/rv_ws.php?m=citylist&category=' + escape(my_category.value) + '&stateprov=' + escape(my_stateprov.value),'parseCities');
			showNeedleHeading(3);
  		break;
    case 'city':
      my_city.value=myNeedle;
      showNeedleHeading(4);
			setupDistanceSelect();
  		break;
		case 'distance':
	    my_distance.value=myNeedle;
			my_zipcode.value=my_city.value;
			my_form=document.getElementById('myPinpointForm');
			my_form.submit();
			// got final myNeedle so fill in form and submit it to original pinpoint search form
  		break;
		default:
		  //none
  }
/*
	if(myNeedle!="")
	{
		if(my_category.value!="")
		{
			my_title = my_title + ' ' + my_category.value;
			// alert('got category: ' + my_category.value);
			if(my_stateprov.value!="")
			{
				my_title = my_title + ' : ' + my_stateprov.value;
				if(my_city.value!="")
				{
					// alert('got distance: ' + myNeedle);
					my_distance.value=myNeedle;
					my_zipcode.value=my_city.value;
					my_form=document.getElementById('myPinpointForm');
					// alert('needle: ' + document.myPinpointForm.needle.value);
					my_form.submit();
					// got final myNeedle so fill in form and submit it to original pinpoint search form
				}
				else
				{
					// alert('got city: ' + myNeedle);
					showNeedleHeading(4);
					my_city.value=myNeedle;
					setupDistanceSelect();
				}
				my_title = my_title + ' : ' + myTitle;
				changeTextNode('search_pinpoint_location',my_title);
			}
			else
			{
				// alert('got stateprov: ' + myNeedle);
				my_stateprov.value=myNeedle;
				my_title = my_title + ' : ' + my_stateprov.value;
				changeTextNode('search_pinpoint_location',my_title);
				// lookup cities
				makeRequestPinpoint('directory/webservices/rv_ws.php?m=citylist&category=' + escape(my_category.value) + '&stateprov=' + escape(my_stateprov.value),'parseCities');
				showNeedleHeading(3);

			}
		}
		else
		{
			// lookup stateprov
			// alert('got category (myneedle): ' + myNeedle);
			my_category.value=myNeedle;
			document.myPinpointForm.needle.value=my_category.value; // force our specific form value
			my_title = my_title + ' ' + my_category.value;
			makeRequestPinpoint('directory/webservices/rv_ws.php?m=stateprovlist&category=' + escape(my_category.value),'parseStateprov');
			showNeedleHeading(2);
			changeTextNode('search_pinpoint_location',my_title);
		}
	}
	else
	{
		// alert('no needle - grabbing categories');
		makeRequestPinpoint('directory/webservices/rv_ws.php?m=categorylist','parseCategories');
		showNeedleHeading(1);
		changeTextNode('search_pinpoint_location',my_title);
	}
*/
	document.title=my_title;

}

function parseCategories(httpRequest)
{
	// alert(httpRequest.responseText);
	var categories = httpRequest.responseXML.getElementsByTagName('category');
	var category_select=document.getElementById('needle_ajax_category');
	//category_select.disabled=true;
	if(categories.length>0)
	{
		resetNeedleSelect('category',category_select);
		x=category_select.options.length;

		for(var x=0; x<categories.length; x++)
		{
			category_select.options.length++;
			category_select.options[x+1].value=getNodeValue(categories[x],'categoryname');
			category_select.options[x+1].text=getNodeValue(categories[x],'categoryname');
		}
		disableAllButMe('category');
	}
	else
	{
		resetNeedleSelect('category',category_select);
		//category_select.disabled=true;
		// no data returned from server
		// myErrorAlert('XML');
	}
}

function parseStateprov(httpRequest)
{
	// alert(httpRequest.responseText);
	var cities = httpRequest.responseXML.getElementsByTagName('city');
	var city_select=document.getElementById('needle_ajax_city');
	var stateprov = httpRequest.responseXML.getElementsByTagName('stateprov');
	var stateprov_select=document.getElementById('needle_ajax_state');
	var distance_select=document.getElementById('needle_ajax_distance');
	//stateprov_select.disabled=true;
	if(stateprov.length>0)
	{
		test=false;
		resetNeedleSelect('state',stateprov_select);
		for(var x=0; x<stateprov.length; x++)
		{
			stateprov_select.options.length++;
			stateprov_select.options[x+1].value=getNodeValue(stateprov[x],'stateprovname');
			stateprov_select.options[x+1].text=getNodeValue(stateprov[x],'stateprovname');
			if (getNodeValue(stateprov[x],'stateprovname')=="This Category searches All States")
			{
				test=true;
				city_select.options.length++;
				city_select.options[1].value="This Category searches All Cities";
				city_select.options[1].text="This Category searches All Cities";
				city_select.options[1].selected=true;
				city_select.style.fontColor="#000000";
				stateprov_select.options[x+1].selected=true;
				stateprov_select.disabled=true;
				distance_select.options.length++;
				distance_select.options[1].value="This Category searches All Distances";
				distance_select.options[1].text="This Category searches All Distances";
				distance_select.options[1].selected=true;
			}
		}
		if (test==false)
		disableAllButMe('state');
	}
	else
	{
		resetNeedleSelect('state',stateprov_select);
		//stateprov_select.disabled=true;
		// no data returned from server
		// myErrorAlert('XML');
	}
}

function setupDistanceSelect()
{
	// alert(httpRequest.responseText);
	var distance_select=document.getElementById('needle_ajax_distance');
	distance_select.disabled=true;

	var x=0;
	resetNeedleSelect('distance',distance_select);
	distance_select.options.length++;
	distance_select.options[x+1].value=10;
	distance_select.options[x+1].text='10 miles';
	x++;

	distance_select.options.length++;
	distance_select.options[x+1].value=25;
	distance_select.options[x+1].text='25 miles';
	x++;

	distance_select.options.length++;
	distance_select.options[x+1].value=50;
	distance_select.options[x+1].text='50 miles';
	x++;

	distance_select.options.length++;
	distance_select.options[x+1].value=100;
	distance_select.options[x+1].text='100 miles';
	x++;

	disableAllButMe('distance');
}


function parseCities(httpRequest)
{
	// alert(httpRequest.responseText);
	var cities = httpRequest.responseXML.getElementsByTagName('city');
	var city_select=document.getElementById('needle_ajax_city');
	city_select.disabled=true;
	if(cities.length>0)
	{
		resetNeedleSelect('city',city_select);
		for(var x=0; x<cities.length; x++)
		{
			city_select.options.length++;
			city_select.options[x+1].value=getNodeValue(cities[x],'zipcode');
			city_select.options[x+1].text=getNodeValue(cities[x],'cityname');
		}
		disableAllButMe('city');
	}
	else
	{
		resetNeedleSelect('city',city_select);
		city_select.disabled=true;
		// no data returned from server
		// myErrorAlert('XML');
	}
}

function disableAllButMe(me)
{
	var category_select=document.getElementById('needle_ajax_category');
	var stateprov_select=document.getElementById('needle_ajax_state');
	var city_select=document.getElementById('needle_ajax_city');
	var distance_select=document.getElementById('needle_ajax_distance');

	if(me=='category')
	{
		category_select.disabled=false;
		stateprov_select.disabled=true;
		city_select.disabled=true;
		distance_select.disabled=true;
	}
	else if (me=='state')
	{
		category_select.disabled=false;
		stateprov_select.disabled=false;
		city_select.disabled=true;
		distance_select.disabled=true;
	}
	else if (me=='city')
	{
		category_select.disabled=false;
		stateprov_select.disabled=false;
		city_select.disabled=false;
		distance_select.disabled=true;
	}
	else if (me=='distance')
	{
		category_select.disabled=false;
		stateprov_select.disabled=false;
		city_select.disabled=false;
		distance_select.disabled=false;
	}
}

// general form related functions

function resetNeedleSelect(label,needle_select)
{
	// var needle_select=document.getElementById('needle_ajax');
	needle_select.options.length=0;
	needle_select.options.length++;
	needle_select.options[0].value='';
	needle_select.options[0].text='-- please choose a ' + label + ' --';
	needle_select.selectedIndex=0;
}

function changeTextNode(parentNodeId,newValue)
{
	pnode=document.getElementById(parentNodeId);
	if(pnode)
	{
		// first get rid of any existing children
		if(pnode.childNodes.length>0)
		{
			//while(node.childNodes.length>0)
			//{

			//}
			pnode.childNodes[0].nodeValue=newValue;
		}
	}
}
