/*
Main JS for tutorial: "Getting Started with HTML5 Local Databases"
Written by Ben Lister (darkcrimson.com) revised 12 May 2010
Tutorial: http://blog.darkcrimson.com/2010/05/local-databases/

Licensed under the MIT License:
http://www.opensource.org/licenses/mit-license.php
*/

$(function(){ initDatabase();

 	// Button and link actions
	$('#clear').click(function(){ dropTables(); });
 	$('#update').click(function(){ updateSetting(); });

});
	
function initDatabase() {

//	alert('Init database');
	try {
	    if (!window.openDatabase) {
	        alert('Local Databases are not supported by your browser. Please use a Webkit browser for this demo');
	    } else {
	        var shortName = 'CARDS';
	        var version = '1.0';
	        var displayName = 'Card Status';
	        var maxSize = 100000; // in bytes
	        CARDS = openDatabase(shortName, version, displayName, maxSize);
			createTables();
	    }
	} catch(e) {
	    if (e == 2) {
	        // Version mismatch.
	        alert("Invalid database version.");
	    } else {
	        alert("Unknown error "+ e +".");
	    }
	    return;
	} 
}



/***
**** CREATE TABLE ** 
***/
function createTables(){

//	alert('createTables');
	CARDS.transaction(
        function (transaction) {
 //       	transaction.executeSql('CREATE TABLE IF NOT EXISTS page_settings(id INTEGER NOT NULL PRIMARY KEY, fname TEXT NOT NULL,bgcolor TEXT NOT NULL, font TEXT, favcar TEXT);', [], nullDataHandler, errorHandler);
        	try{
        		transaction.executeSql('CREATE TABLE IF NOT EXISTS card_settings(id INTEGER NOT NULL PRIMARY KEY, card_name TEXT NOT NULL,card_value TEXT NOT NULL, is_visibile TEXT);', [], nullDataHandler, errorHandler);
        		transaction.executeSql('CREATE TABLE IF NOT EXISTS system_settings(property_name TEXT NOT NULL PRIMARY KEY,property_value TEXT NOT NULL);', [], nullDataHandler, errorHandler);
        	} catch(e) {
        	    alert("Unknown error "+ e +".");
        	    
        	    return;
        	}
        }
    );
	prePopulate();
}




function isApplicationSettingsTablePopulated(){
	CARDS.transaction(
		    function (transaction) {
		    	
		    	transaction.executeSql("SELECT * FROM system_settings;", [], dataExistsInApplicationSettingsHandler, errorHandler);

		    }
		);
}
function dataExistsInApplicationSettingsHandler(transaction, results){
//	alert('In dataExistsInApplicationSettingsHandler');
	if(results.rows.length > 0) {
//		alert('Application Settings has data');
		loadSystemPropertiesIntoVars();
    }
	else
	{
		preApplicationSettingsPopulate();
//		alert('Application Settings is empty');
	}
}

function preApplicationSettingsPopulate(){
//	alert('preApplicationSettingsPopulate');
	CARDS.transaction(
		    function (transaction) {
				transaction.executeSql("INSERT INTO system_settings(property_name, property_value) VALUES (?, ?)", ['suit', 'c']);
	//	    	alert('PrePopulated Application Settings.');
		    	loadSystemPropertiesIntoVars();
		    }
		);
}





function isCardSettingsTablePopulated(){
	CARDS.transaction(
		    function (transaction) {
		    	
		    	transaction.executeSql("SELECT * FROM card_settings;", [], dataExistsInCardSettingsHandler, errorHandler);

		    }
		);
}

//function isApplicationSettingsTablePopulated(){
//	CARDS.transaction(
//		    function (transaction) {
//		        return transaction.executeSql("SELECT * FROM application_settings;", [], dataExistsHandler, errorHandler);
//		    }
//		);	
//	return false;
//}

function dataExistsInCardSettingsHandler(transaction, results){
	//alert('In dataExistsInCardSettingsHandler');
	if(results.rows.length > 0) {
	//	alert('Card Settings has data');
		fillInSettings();
    }
	else
	{
		preCardSettingsPopulate();
	//	alert('Card Settings is empty');
	}
}

function dataExistsHandler(transaction, results){
	//alert('In dataExistsHandler');
	if(results.rows.length > 0) {
	//	alert('Table has data');
		return true;
    }
	else
	{
	//	alert('Table is empty');
		return false;
	}
}


function preCardSettingsPopulate(){
	//alert('preCardSettingsPopulate');
	CARDS.transaction(
		    function (transaction) {
			//Starter data when page is initialized
		   // 	alert('PrePopulating Card Settings.');
				var data = ['1','a','1','true'];
				transaction.executeSql("INSERT INTO card_settings(id, card_name, card_value, is_visibile) VALUES (?, ?, ?, ?)", [data[0], data[1], data[2], data[3]]);
				var data = ['2','2','2','true'];  
				transaction.executeSql("INSERT INTO card_settings(id, card_name, card_value, is_visibile) VALUES (?, ?, ?, ?)", [data[0], data[1], data[2], data[3]]);
				var data = ['3','3','3','true'];  
				transaction.executeSql("INSERT INTO card_settings(id, card_name, card_value, is_visibile) VALUES (?, ?, ?, ?)", [data[0], data[1], data[2], data[3]]);
				var data = ['4','4','4','false'];  
				transaction.executeSql("INSERT INTO card_settings(id, card_name, card_value, is_visibile) VALUES (?, ?, ?, ?)", [data[0], data[1], data[2], data[3]]);
				var data = ['5','5','5','true'];  
				transaction.executeSql("INSERT INTO card_settings(id, card_name, card_value, is_visibile) VALUES (?, ?, ?, ?)", [data[0], data[1], data[2], data[3]]);
				var data = ['6','6','6','false'];  
				transaction.executeSql("INSERT INTO card_settings(id, card_name, card_value, is_visibile) VALUES (?, ?, ?, ?)", [data[0], data[1], data[2], data[3]]);
				var data = ['7','7','7','false'];  
				transaction.executeSql("INSERT INTO card_settings(id, card_name, card_value, is_visibile) VALUES (?, ?, ?, ?)", [data[0], data[1], data[2], data[3]]);
				var data = ['8','8','8','true'];  
				transaction.executeSql("INSERT INTO card_settings(id, card_name, card_value, is_visibile) VALUES (?, ?, ?, ?)", [data[0], data[1], data[2], data[3]]);
				var data = ['9','9','9','false'];  
				transaction.executeSql("INSERT INTO card_settings(id, card_name, card_value, is_visibile) VALUES (?, ?, ?, ?)", [data[0], data[1], data[2], data[3]]);
				var data = ['10','10','10','false'];  
				transaction.executeSql("INSERT INTO card_settings(id, card_name, card_value, is_visibile) VALUES (?, ?, ?, ?)", [data[0], data[1], data[2], data[3]]);
				var data = ['11','j','13','true'];  
				transaction.executeSql("INSERT INTO card_settings(id, card_name, card_value, is_visibile) VALUES (?, ?, ?, ?)", [data[0], data[1], data[2], data[3]]);
				var data = ['12','q','20','true'];  
				transaction.executeSql("INSERT INTO card_settings(id, card_name, card_value, is_visibile) VALUES (?, ?, ?, ?)", [data[0], data[1], data[2], data[3]]);
				var data = ['13','k','40','true'];  
				transaction.executeSql("INSERT INTO card_settings(id, card_name, card_value, is_visibile) VALUES (?, ?, ?, ?)", [data[0], data[1], data[2], data[3]]);
				var data = ['14','jk','?','true'];
				transaction.executeSql("INSERT INTO card_settings(id, card_name, card_value, is_visibile) VALUES (?, ?, ?, ?)", [data[0], data[1], data[2], data[3]]);

		    
		    
		    
		    }
		);
	fillInSettings();
}
/***
**** INSERT INTO TABLE ** 
***/
function prePopulate(){
//	alert('Prepopulate');
	
	

//	if(!isApplicationSettingsTablePopulated()){
//		CARDS.transaction(
//			    function (transaction) {
//				//Starter data when page is initialized
//			    	alert('PrePopulating Application Settings.');
//					var data = ['1','suit','c'];
//					transaction.executeSql("INSERT INTO application_settings(id, property_name, property_value) VALUES (?, ?, ?)", [data[0], data[1], data[2], data[3]]);
//			    }
//			);	
//			
//	}
	
	isCardSettingsTablePopulated();
	isApplicationSettingsTablePopulated();

	
}

/***
**** UPDATE TABLE ** 
***/
function updateSetting(){
	
	
	
	CARDS.transaction(
	    function (transaction) {
//	    	alert('Update settings');


	    		
	//    	transaction.executeSql("UPDATE card_settings SET card_name=?, card_value=?, is_visibile=?, favcar=? WHERE id = 1", [card_name, bg, is_visibile, car]);
	    }
	);	
}

function updateACardSetting(cardIndex){
	
	CARDS.transaction(
	    function (transaction) {
//	    	alert('Update settings');
	       	transaction.executeSql("UPDATE card_settings SET card_name=?, card_value=?, is_visibile=? WHERE id = ?", [cardKeys[cardIndex], cardHours[cardIndex], cardDisplayed[cardIndex], cardIndex+1]);
	    }
	);	
}



function saveSuitToDb(suit){

//	alert('Save suit.  Suit=' + suit);
	CARDS.transaction(
	    function (transaction) {
//	    	try{
//	    		transaction.executeSql("INSERT INTO system_settings(property_name, property_value) VALUES (?, ?)", ['suit', suit]);
//	    	}
//	    	catch(e)
//	    	{
//	    		alert("Unknown error "+ e +".");
	    	  	transaction.executeSql("UPDATE system_settings SET property_value=? WHERE property_name = ?", [suit, 'suit']);

//	    	}
	    }
	);	
}



/***
**** Save 'default' data into DB table **
***/

function saveAll(){
		prePopulate(1);
}


function errorHandler(transaction, error){
 	if (error.code==1){
 		// DB Table already exists
 	} else {
    	// Error is a human-readable string.
	    console.log('Oops.  Error was '+error.message+' (Code '+error.code+')');
 	}
    return false;
}


function nullDataHandler(){
	console.log("SQL Query Succeeded");
}

/***
**** SELECT DATA **
**
function selectAll(){ 
	CARDS.transaction(
	    function (transaction) {
	        transaction.executeSql("SELECT * FROM card_settings;", [], dataSelectHandler, errorHandler);
	    }
	);	
}
*/
/***
**** DELETE DB TABLE ** 
***/
function dropTables(){
	CARDS.transaction(
	    function (transaction) {
	    	transaction.executeSql("DROP TABLE card_settings;", [], nullDataHandler, errorHandler);
	    }
	);
	console.log("Table 'card_settings' has been dropped.");
	location.reload();
}

	
