var renderMethod = "gallery";
var resultSetData = new Array();
var searchParameters = null;
var geocoder = null;
var map = null;
 
function showAddress(address,html) {
  if (geocoder) {
    geocoder.getLatLng(
      address,
      function(point) {
        if (!point) {
//          alert(address + " not found");
        } else {
          var marker = new GMarker(point);
          map.addOverlay(marker);
          marker.bindInfoWindowHtml(html);
        }
        addNextMapResult();
      }
    );
  }
}

function centerAddress(address) {
  if (geocoder) {
    geocoder.getLatLng(
      address,
      function(point) {
        if (!point) {
          //alert(address + " not found");
        } else {
          map.setCenter(point, 7);
        }
      }
    );
  }
}

function setCookie( name, value, expires, path, domain, secure )
{
	var today = new Date();
	today.setTime( today.getTime() );
	
	if ( expires )
	{
		expires = expires * 1000 * 60 * 60 * 24;
	}
	
	var expires_date = new Date( today.getTime() + (expires) );
	
	document.cookie = name + "=" +escape( value ) +
	( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
	( ( path ) ? ";path=" + path : "" ) +
	( ( domain ) ? ";domain=" + domain : "" ) +
	( ( secure ) ? ";secure" : "" );
}

function getCookie( check_name ) 
{
	// first we'll split this cookie up into name/value pairs
	// note: document.cookie only returns name=value, not the other components
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; // set boolean t/f default f

	for ( i = 0; i < a_all_cookies.length; i++ )
	{
		// now we'll split apart each name=value pair
		a_temp_cookie = a_all_cookies[i].split( '=' );


		// and trim left/right whitespace while we're at it
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

		// if the extracted name matches passed check_name
		if ( cookie_name == check_name )
		{
			b_cookie_found = true;
			// we need to handle case where cookie has no value but exists (no = sign, that is):
			if ( a_temp_cookie.length > 1 )
			{
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
			}
			// note that in cases where cookie is initialized but no value, null is returned
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if ( !b_cookie_found )
	{
		return null;
	}
}
function SearchParameter()
{
	this.pricelevel = -1;
	this.category = -1;
	this.breed = -1;
	this.minage = -1;
	this.maxage = -1;
}

function ResultSetItem(id,name,year,pricelevel,imgurl,postnr,emphasize)
{
	this.id = id;
	this.name = name;
	this.year = year;
	this.pricelevel = pricelevel;
	this.imgurl = imgurl;
	this.postnr = postnr;
	this.emphasize = emphasize;
}

function renderResultSetGallery()
{
	html = 	"<table border=0 cellspacing=0 cellpadding=5 width=100%>" +
			"<tr>";
	
	rowcount = 0;		
	for (i=0;i<resultSetData.length;++i)
	{
		var styleclass = "resultsetgallery";
		if (resultSetData[i].emphasize) styleclass = "emphasizegallery";
		
		html = html + "<td align=center class="+styleclass+" onclick=gotoPage('?hid="+resultSetData[i].id+"')>" + 
					  resultSetData[i].name + '<br>' + 
					  '<img src=http://hestebasen.com/img/fancyresize.php?w=150&h=100&i='+resultSetData[i].imgurl+'><br>'+
					  resultSetData[i].pricelevel + '<br>' + 
					  '</td>';
		rowcount++;
		if (rowcount == 5)
		{
			html = html + '</tr><tr>';
			rowcount = 0;
		}
	}
	
	html = html + '</tr></table>';
	
	var i = document.getElementById('resultSet');
	i.innerHTML = html;
}

var mapResultIndex = 0;

function addNextMapResult()
{
	if (mapResultIndex<resultSetData.length)
	{
	    var by = getPostNrText(resultSetData[mapResultIndex].postnr);
	    html = '<div class=mappopup><img height=100 src=http://hestebasen.com/img/fancyresize.php?w=150&h=100&i='+resultSetData[mapResultIndex].imgurl+'><br>'+
	    	   resultSetData[mapResultIndex].name+'<br>'+
	    	   resultSetData[mapResultIndex].pricelevel+'<br>'+
	    	   '<a class=mappopup href=?hid='+resultSetData[mapResultIndex].id+'>Vis annonce</a></div>';
	    var tmp = mapResultIndex;
	    mapResultIndex++;
	    if (resultSetData[tmp].postnr) showAddress(resultSetData[tmp].postnr + ' ' + by + ', Denmark', html);
	    else showAddress("Samsø",html); 
	}
}


function renderResultSetMap()
{
	html = '<div id="map_canvas" style="width: 100%; height: 600px;">&nbsp;</div>';
	var i = document.getElementById('resultSet');
	i.innerHTML = html;

      if (GBrowserIsCompatible()) {
    	geocoder = new GClientGeocoder();
        map = new GMap2(document.getElementById("map_canvas"));
        map.setUIToDefault();
        centerAddress("Denmark");
        mapResultIndex=0;
        addNextMapResult();
        /*
        for (i=0;i<resultSetData.length;++i)
        {
	        var by = getPostNrText(resultSetData[i].postnr);
	        html = '<div class=mappopup><img height=100 src=http://hestebasen.com/img/fancyresize.php?w=150&h=100&i='+resultSetData[i].imgurl+'><br>'+
	        	   resultSetData[i].name+'<br>'+
	        	   resultSetData[i].pricelevel+'<br>'+
	        	   '<a class=mappopup href=?hid='+resultSetData[i].id+'>Vis annonce</a></div>';
	        if (resultSetData[i].postnr) showAddress(resultSetData[i].postnr + ' ' + by + ', Denmark', html);
	        else showAddress("Samsø",html); 
        }
        */
      }
}

function renderResultSetList()
{
	html = 	"<table border=0 cellspacing=0 cellpadding=5 width=100%>" +
			"<tr class=resultsetlistheader><td class=resultsetlistheader>Billede</td><td class=resultsetlistheader>Navn</td><td class=resultsetlistheader align=right>Pris</td><td class=resultsetlistheader align=right>Post nr.</td></tr>";
			
	rowcount = 0;		
	for (i=0;i<resultSetData.length;++i)
	{
		var styleclass = "resultsetlistrow";
		if (resultSetData[i].emphasize) styleclass = "emphasizelistrow";
		var onclick = 'onclick="gotoPage(\'?hid='+resultSetData[i].id+'\');"'
		html = html + "<tr class="+styleclass+" "+onclick+">" +
			   '<td '+onclick+' width=150><img src=http://hestebasen.com/img/fancyresize.php?w=150&h=100&i='+resultSetData[i].imgurl+'></td>' +
			   '<td '+onclick+'>'+resultSetData[i].name+'</td>'+
			   '<td align=right '+onclick+'>'+resultSetData[i].pricelevel+'</td>'+
			   '<td '+onclick+' align=right>'+resultSetData[i].postnr+'</td>'+
			   '</tr>';
	}
	
	html = html + '</table>';
	
	var i = document.getElementById('resultSet');
	i.innerHTML = html;
}

function renderResultSet()
{
	if (renderMethod == 'list') renderResultSetList();
	else if (renderMethod == 'map') renderResultSetMap();
	else renderResultSetGallery();
}

function gotoPage(url)
{
	document.location.href = url;
}
function addToResultSet(id,name,year,pricelevel,imgurl,postnr,emphasize)
{
	resultSetData[resultSetData.length] = new ResultSetItem(id,name,year,pricelevel,imgurl,postnr,emphasize);
}
function clearResultSet()
{
	document.getElementById('resultSet').innerHTML = 'Indlæser ...';
}
function changeRenderMethod(m)
{
	setCookie("renderMethod", m, 30, "/", "", "");
	clearResultSet();
	renderMethod = m;
	renderResultSet();
}


function searchParametersUpdateURL()
{
	var hash = "";
	if (searchParameters.pricelevel!=-1) hash = hash + 'pricelevel=' + searchParameters.pricelevel + '&';
	if (searchParameters.category!=-1) hash = hash + 'category=' + searchParameters.category + '&';
	if (searchParameters.breed!=-1) hash = hash + 'breed=' + searchParameters.breed + '&';
	if (searchParameters.minage!=-1) hash = hash + 'minage=' + searchParameters.minage + '&';
	if (searchParameters.maxage!=-1) hash = hash + 'maxage=' + searchParameters.maxage + '&';
	document.location.hash = hash;
}


function setSearchParameter(key,value)
{
	if (key == 'maxage') searchParameters.maxage = value;
	if (key == 'minage') searchParameters.minage = value;
	if (key == 'category') searchParameters.category = value;	
	if (key == 'pricelevel') searchParameters.pricelevel = value;	
	if (key == 'breed') searchParameters.breed = value;	
}

function guiSelectItem(container,v)
{
	var o = document.getElementById(container);
	if (o) 
	{
		for (i=0;i<o.options.length;i++)
		{
			if (o.options[i].value==v) o.options[i].selected=true;
			else o.options[i].selected=false;
		}
	}
}

function parseSearchParametersURL()
{
	//todo: sync UI
	var hash = document.location.hash.substring(1);
	var items = hash.split('&');
	for (j=0;j<items.length;j++)
	{
		var indata = items[j].split('=');
		setSearchParameter(indata[0],indata[1]);
		if (indata[0] == 'category') guiSelectItem('selectCategory', indata[1]);
		if (indata[0] == 'pricelevel') guiSelectItem('selectPriceLevel', indata[1]);
		if (indata[0] == 'breed') guiSelectItem('selectBreed', indata[1]);
		if (indata[0] == 'minage') guiSelectItem('selectMinAge', indata[1]);
		if (indata[0] == 'maxage') guiSelectItem('selectMaxAge', indata[1]);
	}
}

function backendQuerySearch()
{
   var head= document.getElementsByTagName('head')[0];
   var script= document.createElement('script');
   var q = document.location.hash.substring(1);
   script.type= 'text/javascript';
   script.src= 'backend.js.php?action=search&'+q;
   head.appendChild(script);
   setCookie("hashHorseQuery", q, 30, "/", "", "");
}

function updateSearch(key,value)
{
	setSearchParameter(key,value);
	searchParametersUpdateURL();
	backendQuerySearch();
	return true;
}


function bootSearch() {
if (document.location.hash == '' || !document.location.hash) document.location.hash = getCookie('hashHorseQuery');
renderMethod = getCookie("renderMethod");
if (!renderMethod) renderMethod = "gallery";
searchParameters = new SearchParameter();
parseSearchParametersURL();
backendQuerySearch();
}


function boot()
{
}

