
function googleSuggests(cn) {
	this.cn = cn;
}
googleSuggests.prototype.getSuggestions = function(query, returnHandler)
{
	this.returnHandler = returnHandler;
	if (typeof(window.google) == 'undefined')
	{
		window.google = new Object();
	}
	if (typeof(window.google.ac) == 'undefined')
	{
		window.google.ac = new Object();
		window.google.ac.h = function (e)
	{
		googleSuggests.handleSuggestions(e);
	}
	}	
	//Caching...
	googleSuggestsData = this.getItem(query);	
	if (typeof(googleSuggestsData) != 'undefined')
	{		
		if (typeof(googleSuggestsData.expires) != 'undefined')
		{
			if (googleSuggestsData.expires > this.unixtime())
			{		
				this.handleSuggestions(googleSuggestsData.querydata);

			}
			else
			{
				var lookup = true;
				//And remove the old item from storage...
				this.clearItem(query);
			}
		}
		else
		{
			var lookup = true;
		}
	
	}
	else
	{
		var lookup = true;
	}		
	if (lookup)
	{
	
		if (googlesuggestscript = document.getElementById('googlesuggestscript'))
		{
			googlesuggestscript.parentNode.removeChild(googlesuggestscript);
		}
		googlesuggestscript = document.createElement('script');
		googlesuggestscript.id = 'googlesuggestscript';
		head = document.getElementsByTagName('head').item(0);
		head.appendChild(googlesuggestscript);
		googlesuggestscript.src = document.location.protocol+'//clients1.google.com/complete/search?lang=nl&hl=nl&q='+encodeURIComponent(query);
	}

}
googleSuggests.prototype.handleSuggestions = function(obj)
{	
	query = obj[0];

	//Caching...
    if (querydata = this.getItem(query))
	{		
		if (typeof(querydata) != 'object')
		{		
			var querydata = new Object();
		}		
		//alert(querydata);		
		querydata.querydata = obj;
		querydata.expires = (parseInt(this.unixtime())+1800);		
		this.setItem(query, querydata);
	}
	

	returnValue = new Array();
	for (i = 0; i < obj[1].length; i++)
	{
		returnValue[returnValue.length] = obj[1][i][0];
	}
	if (returnValue.length)
	{
		this.returnHandler(returnValue);
	}
	else
	{
		returnValue[returnValue.length] = query;
		this.returnHandler(returnValue);
	}
	
}
googleSuggests.prototype.unixtime = function()
{
	var foo = new Date; // Generic JS date object
	var unixtime_ms = foo.getTime(); // Returns milliseconds since the epoch
	var unixtime = parseInt(unixtime_ms / 1000);
	return unixtime;
}
googleSuggests.prototype.getItem = function(query)
{
	try
	{
		//return new Object();
		if (typeof(sessionStorage) != 'undefined')
		{
			//alert(query);
			data = sessionStorage.getItem('googleSuggests.'+query);
			if (data != null)
			{
				obj = JSON2.parse(data);
				var unixtime = this.unixtime();
				var expires = sessionStorage.getItem('googleSuggestsExpires');
				if (expires < unixtime)
				{
					this.clearStorage(query);
					return new Object();
				}

			}
			else
			{				
				return new Object();
			}
						
		}
		else
		{
			return false;
		}
	}
	catch (e)
	{		
		obj = new Object();		
	}	
	return obj;
}
googleSuggests.prototype.clearStorage = function()
{
	if (typeof(sessionStorage) != 'undefined')
	{
		var length = sessionStorage.length;
		for (i = 0; i < length; i++)
		{
			var keyName = sessionStorage.key(i);
			if (keyName.indexOf("googleSuggests.") > -1)
			{
				sessionStorage.removeItem(keyName);
			}
		}
	}
}
googleSuggests.prototype.clearItem = function(query)
{
	if (typeof(sessionStorage) != 'undefined')
	{
		sessionStorage.removeItem('googleSuggests.'+query);
	}
}
googleSuggests.prototype.setItem = function(query, obj)
{

	//return true;
	if (typeof(sessionStorage) != 'undefined')
	{		
		obj = JSON2.stringify(obj);	
		sessionStorage.setItem('googleSuggests.'+query, obj);
		sessionStorage.setItem('googleSuggestsExpires', (this.unixtime()+1800));
		return true;
	}
	else
	{
		return false;
	}
}
googleSuggests = new googleSuggests('googleSuggests');

