function getxml()
{
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
 try {
  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) {
  try {
   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) {
   xmlhttp = false;
  }
 }
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
	try {
		xmlhttp = new XMLHttpRequest();
	} catch (e) {
		xmlhttp=false;
	}
}
if (!xmlhttp && window.createRequest) {
	try {
		xmlhttp = window.createRequest();
	} catch (e) {
		xmlhttp=false;
	}
}
return xmlhttp;
}

function create(mapurl, thurl, key)
{
	var submform = document.createElement("form");
	submform.setAttribute("method", "POST");
	submform.setAttribute("action", "/tracker/create_from_url/index.php");
	submform.setAttribute("name", "search_result_form");
	var body = document.getElementsByTagName("body").item(0);
	var url = document.createElement("input");
	url.setAttribute("type", "hidden");
	url.setAttribute("name", "url");
	url.setAttribute("value", mapurl);
	submform.appendChild(url);
	var thumburl = document.createElement("input");
	thumburl.setAttribute("type", "hidden");
	thumburl.setAttribute("name", "thumburl");
	thumburl.setAttribute("value", thurl);
	submform.appendChild(thumburl);
	var keyinput = document.createElement("input");
	keyinput.setAttribute("type", "hidden");
	keyinput.setAttribute("name", "key");
	keyinput.setAttribute("value", key);
	submform.appendChild(keyinput);
	body.appendChild(submform);
	submform.submit();
}

function addslashes(str) {
str=str.replace(/\\/g,'\\\\');
str=str.replace(/\'/g,'\\\'');
str=str.replace(/\"/g,'\\"');
str=str.replace(/\0/g,'\\0');
return str;
}
function stripslashes(str) {
str=str.replace(/\\\\/g,'\\');
str=str.replace(/\\'/g,'\'');
str=str.replace(/\\"/g,'"');
str=str.replace(/\\0/g,'\0');
return str;
}

function DisplayLocalResult(token, name)
{
/*	var sr = document.getElementById("localresults_wrap").style.display = "inline";
	var sr = document.getElementById("localresults");
	var 'li = document.createElement("li");
	var a = document.createElement("a");
	var img = document.createElement("img");
	img.setAttribute("src", '/'+token+'_small.png');
	a.setAttribute("href", '/map/'+token);
	a.appendChild(img);
	li.appendChild(a);
	sr.appendChild(li);*/
}

var has_results = false;

function DisplayResult(url, thumburl, keyword)
{
  if (keyword == undefined) return;

	has_results = true;

	var sr = document.getElementById("searchresults_wrap").style.display = "inline";
	var sr = document.getElementById("searchresults");
	var li = document.createElement("li");
	var a = document.createElement("a");
	var img = document.createElement("img");
	var hidden = document.createElement("input");
	img.setAttribute("src", thumburl);
	a.setAttribute("href", 'javascript:create("'+url+'", "'+thumburl+'", "'+addslashes(keyword)+'");');
	a.appendChild(img);
	li.appendChild(a);
	sr.appendChild(li);
}


function NotFound()
{
	if (has_results) return;

	var sr = document.getElementById("loading");
	sr.innerHTML = "";//<strong>Not Found!<br/><br/>Please note that you can also use the \"Create a Map of Your Own\" in <a href=\"/static/maps/\">Maps</a>-page to create new maps.</strong>";
	sr.style.display = "inline";
}

var searcher_form = null;

function run_search(value, key)
{
	searcher_form.execute(value);
}

function RawSearchControl()
{
	var form = new google.search.SearchForm(true, document.getElementById("searchform"));
	form.setOnSubmitCallback(this, RawSearchControl.prototype.onSubmit);
	form.setOnClearCallback(this, RawSearchControl.prototype.onClear);
	searcher_form = form;
}

var keyword = "";
var n_searched = 0;

RawSearchControl.prototype.searchComplete = function(searcher)
{
	var res = document.getElementById("searchresults");
	if (searcher.results && searcher.results.length > 0)
	{
		for (var i=0;i<searcher.results.length;i++)
		{
			var result = searcher.results[i];

			var tbUrl = result.tbUrl;
			var url = result.url;
			var key = keyword;

			if (result.width * result.height > 30*1024*1024)
				continue;

			DisplayResult(url, tbUrl, key);
		}
	}


	n_searched+=1;

if (n_searched == 1)
{
	geonameSearch(keyword);

	var x = getxml();
	x.open("GET", "/ajax/search?l="+encodeURIComponent(keyword), true);
	x.onreadystatechange = function() {
		if (x.readyState == 4 && x.status == 200)
		{
			document.getElementById("loading").style.display = "none";
			eval(x.responseText);
		}
	};
	x.send(null);
}

};

RawSearchControl.prototype.onClear = function(form)
{
	document.getElementById("searchresults").innerHTML = "";
	document.getElementById("searchresults_wrap").style.display = "none";
	document.getElementById("localresults").innerHTML = "";
	document.getElementById("localresults_wrap").style.display = "none";
}

RawSearchControl.prototype.onSubmit = function(form)
{
has_results = false;
n_searched = 0;
var full_key = ''+form.input.value+' '+'map';
keyword = form.input.value;

	var sr = document.getElementById("loading");
	//ser.innerHTML = '<img src="/images/static/loading.gif" alt="loading..."/>';
	document.getElementById("searchresults").innerHTML = "";
	document.getElementById("searchresults_wrap").style.display = "none";
	document.getElementById("localresults").innerHTML = "";
	document.getElementById("localresults_wrap").style.display = "none";

	var imgsearch = new google.search.ImageSearch();
	imgsearch.setNoHtmlGeneration();
	imgsearch.setResultSetSize(google.search.Search.LARGE_RESULTSET);
	imgsearch.setSearchCompleteCallback(this, RawSearchControl.prototype.searchComplete, [imgsearch]);
	imgsearch.execute(full_key);

	return false;
};

function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

function init()
{
	var elem = document.getElementById("searchcontrol");
	elem.innerHTML =
'<div style="float: left; background: #ffffff; color: #222222; padding-top: 4px; font-size: 1.5em; width: 160px; text-align: right;">I\'m going to</div><div id="searchform" style="width: 200pt; font-size: 2em"></div>'+
'<div id="loading"></div>'+
'<div id="localresults_wrap" style="display:none"><strong>Maps by Other Users</strong><ul id="localresults"></ul><!--<br style="clear:both"/><br style="clear:both"/>--></div>'+
'<div id="searchresults_wrap" style="display:none"><form method="POST" action="/maps/create">Click on any of the map images to get it on your phone!<ul id="searchresults"></ul><br style="clear:both"/></form><br style="clear:both"/></div>';

	new RawSearchControl();

	var keywords = [ "amusement park", "airport", "Verbier", "golf course", "shopping mall", "store", "nature", "jungle", "Mecca City", "Manchester United Stadium", "Bangalore", "Honolulu", "Bronx", "Cambridge", "theme", "Palo Alto", "Eiffel Tower", "tourist attractions in Madrid" ];
	//run_search(keywords[Math.floor(Math.random()*keywords.length)], "map");
	return;

	if (elem.className != "prefill")
		return;

	if (gup("category") != "")
	{
		run_search(decodeURIComponent(gup("category")), "map");
		return;
	}

	var x = getxml();
	x.open("GET", "/ajax/location", true);
	x.onreadystatechange = function() {
		if (x.readyState == 4 && x.status == 200)
		{
			var matches = /^([0-9]*\.?[0-9]+) ([-]?[0-9]*\.?[0-9]+) ([A-Z]{2}) (\+[0-9]{1,}) (.*)/.exec(x.responseText);

			if (matches) {
				run_search(matches[5], 'map');
			} else {
				run_search('map', 'map');
			}

			document.getElementById("searchform").getElementsByTagName("input").item(0).focus();
		}
	}
	x.send(null);
}

google.load("search", "1");

window.onload = init;
