/**
 * extras.js
 * by Moos (http://blog.42at.com):
 * 
 * extra featuers for Harmony 
 * @ref http://mrdoob.com/lab/javascript/harmony
 * 
 * v0.1 - 10 March 2010
 *    	- offline capable (iphone)
 * 		- added optgroup on brush selector
 * 		- support for multitouch pan/zoom
 * 		- support for autoSave using local/session storage
 * 			(doesn't work on iPhone OS 3.1.3 browser due to canvas same-origin bug!)  
 */

var saveTimer = null,	// auto save timer
	saveDelay = 5000,	// wait time after last stroke before saving (msec)
	storage = null, 	// session storage
	init_base = init;	// remember original init()

// override init
var init = function(){
	try{
		if (window.Touch && window.localStorage)	// ipod/iphone/ipad/iX
			storage = window.localStorage;
		else if (window.sessionStorage)			// session priority over local storage
			storage = window.sessionStorage;
		else if (window.localStorage)
			storage = window.localStorage;
	} catch(e)
	{
		// FF 3.6 barks on window.sessionStorage when running local file:///
	} 
	
	state = loadState(storage);
	if (!state.imageSrc && window.localStorage) {
		// try local storage
		state = loadState(window.localStorage);
	}
	
	if (state.brush) {
		window.location.hash = '#' + state.brush;
	}
	
	init_base();	// call original
	
	if (state.imageSrc) {
		drawImage(state.imageSrc);
	}
}

function autoSave(now){
	// disable for iphone/ipod due to canvas origin bug (see below)
	if (window.Touch) return;
	
	if (!now) {
		clearTimeout(saveTimer);
		saveTimer = setTimeout(autoSave,saveDelay,true);
		return;
	}
	clearTimeout(saveTimer);
	saveState(storage);
}

function clearState(){
	if (!storage) return;
	storage.clear();
	if (window.localStorage)
		window.localStorage.clear();
}

function saveLocal(){
	autoSave(true);
	if (window.localStorage && !window.Touch)	// disable for iphone/ipod
		saveState(window.localStorage);
}

function saveState(storage) {
	if (!canvas ||!storage) return;
	try {
		// this will cause SECURITY_ERR: DOM Exception 18 on older Chrome/Safari browsers and iPhone OS 3.1.3
		// see bug: https://bugs.webkit.org/show_bug.cgi?id=33029
		var data = canvas.toDataURL('image/png');
		
		storage.setItem('imageSrc', data);
		storage.setItem('brush', STYLES[styleIndex]);
	} catch(e){}
}

function loadState(storage){
	var state = {};
	if (!storage) return state;
	try {
		state.imageSrc = storage.getItem('imageSrc');
		state.brush = storage.getItem('brush');
	} catch(e){}
	//console.log(['loadstate', state.imageSrc && state.imageSrc.length, state.brush, state]);
	return state;
}

function drawImage(data){
	if (!canvas || !data) return;
	var ctx = canvas.getContext('2d'),
		img = new Image();

	img.src = data;
	img.onload = function(){
		ctx.drawImage(img,0,0);
	}
}
