var activemenu = "az";

function show(x){
	var l = document.getElementById(x);
	l.className = (l.className == 'flipped') ? '' : 'flipped';
}

function getentries(tx,result){
	var layer = document.getElementById('menu');
	layer.innerHTML = "";
	if(result.rows.length>0){
		for(var i=0; i<=result.rows.length;i++){
   			var html = "<dt><a id=\"layer" + i + "\" href=\"javascript:void(0);\" onclick=\"show('layer" + i + "');\">";
			html += "<span class=\"top\">" + result.rows.item(i)['entry'];
			html += "<em>+</em>";
			html += "</span>";
   			html += "<span class=\"bottom\"><strong>" + result.rows.item(i)['definition'] + "</strong></span></dt>";
   			layer.innerHTML += html;
        }
	} else {
		getglossary();
	}
}


/* ////////////////////////////// SQL STUFF ////////////////////////////// */

function createquery(start,end){
	var sql = "SELECT entry,definition FROM dictionary WHERE";
	for(var i = start.charCodeAt();i<=end.charCodeAt();i++){
		sql += " entry LIKE '" + String.fromCharCode(i) + "%'";
		if(i<end.charCodeAt()) sql += " OR";
	}
	sql += " ORDER BY entry;";
	return sql;
}

function runsql(sql){
	db.transaction(
		function(tx) {
	        tx.executeSql(
	        	sql, 
	        	[],	
	        	function(tx,result){getentries(tx,result);},
			    function(tx,error) {
			    	tx.executeSql(
			    		"CREATE TABLE dictionary (entry TEXT UNIQUE, definition TEXT)",
			    		[], 
			    		null, 
			    		null
			    	);
					getglossary();
			    }
	    	);
		}
	);
}

function changequery(x){
	var layer = document.getElementById('menu');
	var am = document.getElementById(activemenu);
	var l = document.getElementById(x);
	layer.innerHTML = "<dt><span class=\"loading\">Updating dictionary view...</span></dt>";
	l.className = 'active';
	am.className = '';
	activemenu = x;
	var start = x[0].toUpperCase();
	var end = x[1].toUpperCase();
	var query = createquery(start,end);
	runsql(query);
}

function showhidemenu(){
	var l = document.getElementById('mainmenu');
	var m = document.getElementById('menubutton');
	var s = document.getElementById('definition');
	l.className = (l.className == 'active') ? '' : 'active';
	m.className = (m.className == 'active') ? '' : 'active';
	s.className = (s.className == 'active') ? '' : 'active';
}

function initialquery(q){
	if(!db)
		alert("Browser not compatible.");
	else {
		db.transaction(
        	function(tx) {
				tx.executeSql(q);
			}
		);
	}
}

function getglossary(){
	var l = document.getElementById('setup');
	l.style.display = 'block';
	$.ajax({
		type: "GET",
		url: "glossary.xml",
		dataType: "xml",
		success: function(xml) {
			$(xml).find('item').each(function(){
				initialquery("INSERT INTO dictionary(entry,definition) VALUES('" + $(this).attr('entry') + "','" + $(this).text() + "');");
			});
			l.style.display = 'none';
			runsql("SELECT entry,definition FROM dictionary ORDER BY entry");
		}
	});

}

function init(){
	db = openDatabase("fooddictionary16", "0.1", "Food dictionary.", 2*1024*1024);
	if(!db)
		alert("Browser not compatible.");
	else {
		runsql("SELECT entry,definition FROM dictionary ORDER BY entry");
    }
}
