function displayError( msg )
{

	$( 'errorMessage' ).innerHTML = msg;
	$( 'errorDisplay' ).show();

}

function resetServicesList()
{

	$( 'errorDisplay' ).hide();
	$( 'errorMessage' ).innerHTML = "";

	$( 'recommendedServices' ).hide();
	clearElementChildren( $( 'recommendedServicesList' ) );

	// $( 'services' ).hide();
	// clearElementChildren( $( 'servicesList' ) );

	$( 'noResults' ).hide();

}

function clearElementChildren( element )
{

	if ( element.hasChildNodes() )
	{
		while ( element.childNodes.length >= 1 )
		{
			element.removeChild( element.firstChild );
		}
	}

}

function populateServicesList( element, servicesData )
{

	for ( var i = 0; i < servicesData.length; i++ )
	{
		isLast = false;

		if ( i == ( servicesData.length - 1 ) )
		{
			isLast = true;
		}

		element.appendChild( createServiceElement( servicesData[ i ]
		        .split( '|' ), isLast ) );
	}

}

function createServiceElement( serviceData, isLast )
{

	var serviceItemElement = document.createElement( 'div' );
	var className = "serviceItem";
	if ( isLast )
	{
		className = className + " last";
	}
	serviceItemElement.setAttribute( 'class', className );

	var serviceTitleElement = document.createElement( 'div' );
	serviceTitleElement.setAttribute( 'class', 'serviceTitle' );
	var serviceTitle = document.createTextNode( serviceData[ 0 ] );
	serviceTitleElement.appendChild( serviceTitle );

	serviceItemElement.appendChild( serviceTitleElement );

	if ( 'null' != serviceData[ 1 ] )
	{
		var serviceDescElement = document.createElement( 'div' );
		serviceDescElement.setAttribute( 'class', 'serviceDesc' );
		var serviceDesc = document.createTextNode( serviceData[ 1 ] );
		serviceDescElement.appendChild( serviceDesc );

		serviceItemElement.appendChild( serviceDescElement );
	}

	var address = createAddress( serviceData );

	var serviceContactElement = document.createElement( 'div' );
	serviceContactElement.setAttribute( 'class', 'serviceContact' );
	var serviceContactTable = document.createElement( 'table' );
	serviceContactTable.setAttribute( 'class', 'siteFont' );
	serviceContactTable.setAttribute( 'width', '594' );
	serviceContactTable.setAttribute( 'cellpadding', '0' );
	serviceContactTable.setAttribute( 'cellspacing', '0' );

	var serviceContactTableBody = document.createElement( 'tbody' );

	if ( address.length > 0 )
	{
		var serviceContactAddressRow = document.createElement( 'tr' );
		var serviceContactAddressLabel = document.createElement( 'td' );
		serviceContactAddressLabel.setAttribute( 'class', 'bold' );
		serviceContactAddressLabel.setAttribute( 'width', '100' );
		var serviceContactAddressLabelText = document
		        .createTextNode( "Address:" );
		serviceContactAddressLabel.appendChild( serviceContactAddressLabelText );

		serviceContactAddressRow.appendChild( serviceContactAddressLabel );

		var serviceContactAddressData = document.createElement( 'td' );
		var serviceContactAddressDataText = document.createTextNode( address );
		serviceContactAddressData.appendChild( serviceContactAddressDataText );

		serviceContactAddressRow.appendChild( serviceContactAddressData );

		serviceContactTableBody.appendChild( serviceContactAddressRow );
	}

	if ( serviceData[ 7 ].length > 0 && serviceData[ 7 ] != 'null' )
	{
		var serviceContactTelRow = document.createElement( 'tr' );
		var serviceContactTelLabel = document.createElement( 'td' );
		serviceContactTelLabel.setAttribute( 'class', 'bold' );
		serviceContactTelLabel.setAttribute( 'width', '100' );
		var serviceContactTelLabelText = document.createTextNode( "Telephone:" );
		serviceContactTelLabel.appendChild( serviceContactTelLabelText );

		serviceContactTelRow.appendChild( serviceContactTelLabel );

		var serviceContactTelData = document.createElement( 'td' );
		var serviceContactTelDataText = document
		        .createTextNode( serviceData[ 7 ] );
		serviceContactTelData.appendChild( serviceContactTelDataText );

		serviceContactTelRow.appendChild( serviceContactTelData );

		serviceContactTableBody.appendChild( serviceContactTelRow );
	}

	serviceContactTable.appendChild( serviceContactTableBody );

	serviceContactElement.appendChild( serviceContactTable );

	serviceItemElement.appendChild( serviceContactElement );

	return serviceItemElement;

}

function createAddress( serviceData, forHTML )
{

	var address = "";

	for ( var i = 2; i < 7; i++ )
	{
		if ( address.length > 0
		        && ( address.charAt( address.length - 2 ) != ',' || address
		                .charAt( address.length - 2 ) != '/' )
		        && serviceData[ i ].length > 0 && serviceData[ i ] != 'null' )
		{

			if ( i != 3 )
			{
				if ( forHTML )
				{
					address = address + "<br />";
				}
				else
				{
					address = address + ", ";
				}
			}
			else
			{
				address = address + " ";
			}
		}

		if ( serviceData[ i ].length > 0 && serviceData[ i ] != 'null' )
		{
			address = address + serviceData[ i ];
		}

	}

	return address;

}

function fetchServices( cityid, serviceid, subserviceid )
{

	resetServicesList();

	$( 'servicesLoader' ).show();

	new Ajax.Request( '/ajax/localservices_service.php', {
	    method :'get',
	    parameters : {
	        command :'getServices',
	        cid :cityid,
	        sid :serviceid,
	        suid :subserviceid
	    },

	    onSuccess :processServices,
	    onFailure :processServicesFailed
	} );

}

function processServices( transport )
{

	$( 'servicesLoader' ).hide();

	if ( null != transport && 200 == transport.status )
	{
		var data = transport.responseText;
		
		processServicesData( data );
		
		data = null;

	}
	else
	{
		processServicesFailed();
	}

}

function processServicesData( data )
{
	
	if ( null != data )
	{
		
		var messageParts = data.split( '|||', 2 );
		var result = messageParts[ 0 ];
		var data = messageParts[ 1 ];
	
		if ( result == "SUCCESS" )
		{
	
			var services = data.split( '||' );
	
			if ( data.length > 0 )
			{
	
				var recommendedServices = new Array();
				var normalServices = new Array();
	
				for ( var i = 0; i < services.length; i++ )
				{
	
					var service = services[ i ];
					var serviceValues = service.split( '|' );
	
					// 0 = Name
					// 1 = Description
					// 2 = Street Number
					// 3 = Street Name
					// 4 = City
					// 5 = County
					// 6 = Post Code
					// 7 = Contact Number
					// 8 = Recommended
					// 9 = Latitude
					// 10 = Longitude
	
					// if ( serviceValues[ 8 ] == "true" )
					// {
					//
					// recommendedServices.push( service );
					//						
					// var data = new Array();
					//						
					// data.push( serviceValues[ 0 ] );
					// data.push( createAddress( serviceValues, true ) );
					// data.push( serviceValues[ 7 ] );
					//						
					// addPinToMap( data, serviceValues[ 9 ], serviceValues[ 10
					// ] );
					//
					// }
					// else
					// {
					//
					// normalServices.push( service );
					//
					// }
	
					recommendedServices.push( service );
	
					var data = new Array();
	
					data.push( serviceValues[ 0 ] );
					data.push( createAddress( serviceValues, true ) );
					data.push( serviceValues[ 7 ] );
	
					addPinToMap( data, serviceValues[ 9 ], serviceValues[ 10 ] );
	
					service = null;
					serviceValues = null;
	
				}
	
				if ( viaAJAX )
				{
				
					if ( recommendedServices.length > 0 )
					{
		
						populateServicesList( $( 'recommendedServicesList' ),
						        recommendedServices );
						$( 'recommendedServices' ).show();
		
					}
		
					if ( normalServices.length > 0 )
					{
		
						populateServicesList( $( 'servicesList' ), normalServices );
						$( 'services' ).show();
		
					}
					
				}
	
				recommendedServices = null;
				normalServices = null;
	
			}
			else
			{
	
				$( 'noResults' ).show();
	
			}
	
			services = null;
	
		}
		else
		{
	
			processServicesFailed();
	
		}
	
		messageParts = null;
		result = null;
		data = null;
		
	}
	
}

function processServicesFailed()
{

	$( 'servicesLoader' ).hide();

	displayError( "There was a problem retrieving the service list." );

}

function fetchCities( cityid )
{

	new Ajax.Request( '/ajax/localservices_service.php', {
	    method :'get',
	    parameters : {
	        command :'getCities',
	        cid :cityid
	    },

	    onSuccess :processCities,
	    onFailure :processCitiesFailed
	} );

}

function processCities( transport )
{

	if ( null != transport && 200 == transport.status )
	{
		var response = transport.responseText;
		var messageParts = response.split( '|||', 2 );
		var result = messageParts[ 0 ];
		var data = messageParts[ 1 ];

		if ( result == "SUCCESS" )
		{

			var cities = data.split( '||' );

			if ( data.length > 0 )
			{

				var countyCities = new Array();

				for ( var i = 0; i < cities.length; i++ )
				{

					var city = cities[ i ];
					countyCities.push( city );

				}

				populateCities( cities );

			}

		}
		else
		{

			processCityLocationFailed();

		}

		response = null;
		messageParts = null;
		result = null;
		data = null;

	}
	else
	{
		processCityLocationFailed();
	}

}

function processCitiesFailed()
{

	$( 'localServicesMap' ).hide();

	displayError( "There was a problem retrieving the cities for this county." );

}