GanjaGears.Store = function() {}
GanjaGears.Store.storeName = 'gedOfflineStore';
GanjaGears.Store.manifestUrl = '/assets/ged/js/manifest.json';
GanjaGears.Store.localServer = null;
GanjaGears.Store.store = null;
GanjaGears.Store.timerId = null;

GanjaGears.Store.initStore = function()
{
	GanjaGears.Tools.debug( 'Initializing store' );
	GanjaGears.Store.getStore();
	if( GanjaGears.Store.store.enabled == false ) GanjaGears.Store.store.enabled = true;
	GanjaGears.Store.store.manifestUrl = GanjaGears.Store.manifestUrl;
	GanjaGears.Store.store.checkForUpdate();
	var progressFunc = function()
	{
		GanjaGears.Tools.debug( 'Downloading data' );
		if( GanjaGears.Store.store.currentVersion )
		{
			if( GanjaGears.Store.timerId ) window.clearInterval( GanjaGears.Store.timerId );
			GanjaGears.GED.setLabel();
		}
		else if( GanjaGears.Store.store.updateStatus == 3 ) GanjaGears.Tools.setText( 'Error: ' + GanjaGears.Store.store.lastErrorMessage );
		else GanjaGears.Tools.setText( 'Downloading...' );
	}
	GanjaGears.Store.timerId = window.setInterval( progressFunc, 50 );
}

GanjaGears.Store.getStore = function()
{
	if( !GanjaGears.Store.localServer && !GanjaGears.Store.initLocalServer() ) return null;
	var store = GanjaGears.Store.localServer.openManagedStore( GanjaGears.Store.storeName );
	if( !store ) store = GanjaGears.Store.createStore();
	GanjaGears.Store.store = store;
	return store;
}

GanjaGears.Store.createStore = function()
{
	GanjaGears.Tools.debug( 'Creating local store' );
	var store = null;
	try
	{
		store = GanjaGears.Store.localServer.createManagedStore( GanjaGears.Store.storeName );
	}
	catch( ex )
	{
		GanjaGears.Tools.debug( ex.message, 2 );
	}
	GanjaGears.Store.store = store;
	return store;
}
		
GanjaGears.Store.initLocalServer = function()
{
	GanjaGears.Tools.debug( 'Initializing local server' );
	try
	{
		GanjaGears.Store.localServer = google.gears.factory.create( 'beta.localserver' );
	}
	catch( ex )
	{
		GanjaGears.Tools.debug( ex.message, 2 );
		GanjaGears.Tools.setText('Could not create local server: ' + ex.message);
		return false;
	}
	return true;
}
		
GanjaGears.Store.removeStore = function()
{
	GanjaGears.Tools.debug( 'Removing store' );
	if( !GanjaGears.Tools.checkGears() ) return GanjaGears.GED.noGears();
	if( GanjaGears.Store.store ) GanjaGears.Store.store.enabled = false;
	GanjaGears.GED.setLabel();
}
		
GanjaGears.Store.haveOfflineData = function()
{
	var msg = 'Checking if we have offline data: ';
	if( !google.gears.factory.hasPermission ) return false;
	var ret = true;
	var store = GanjaGears.Store.getStore();
	if( !store ) ret = false;
	else ret = store.enabled;
	if( ret && !store.currentVersion ) ret = false;
	msg += ( ret ? 'we have' : 'we don\'t have' );
	GanjaGears.Tools.debug( msg );
	return ret;
}
