
/********************************************************************
	Obsessing.org : obsessing_loader.js
	Copyright 2008 Aubrey Anderson / Particle Programmatica, Inc
	http://particlewebsite.com | aubrey [at] particularplace [dot] com
	please be cool.
********************************************************************/

/*

COPY paste idea:

have a textarea that stays focused, captures a paste or a copy and render's it to 
the screen, clears and recaps focus?

*/


// temp trace function:
function trace(out) {
	$("#debug").empty();
	$("#debug").append(out);
}	


var ide = null;
var obsessingCoderCookie = "";

$(document).ready( function() {	

	// wire them doggies up
	ide = new ObsessingIDE();
	obsessingCoderCookie = $.cookie('obsessing.org_coder_cookie') || ""; // will be the base UUID
	obsessingCoderName = $.cookie('obsessing.org_coder_name') || ""; // the friendly name
	
	// we should open your last sketch automagically so you always find it as you left it
	if ($.cookie('obsessing.org_current_sketch') && $.cookie('obsessing.org_current_sketch').length > 0) {
		var sName = $.cookie('obsessing.org_current_sketch');
		$.get('recall_sketch.php?name='+sName, function(code) {
			ide.openSketch(code);
			$.cookie('obsessing.org_current_sketch', sName, { expires: 601 });
			$('#current_sketch').empty().append(sName);
		});	
	}
	else {
		$('#current_sketch').empty().append("New Sketch, UNSAVED!");
		
		// load default.pde
		$.get('default.pde', function(code) {
			ide.openSketch(code);
		});
	}
	
		
	
	$("#run").click(function() { 
		ide.previewSketch(); 
	});
	
	$("#fileOptionsButton").bind('click', function() {
		$(this).toggleClass('activeMenu');
		$("#fileOptions").toggleClass('hidden');
	});
	
	$("#settingsButton").bind('click', function() {
		$(this).toggleClass('activeMenu');
		$("#settingsOptions").toggleClass('hidden');
	});
	
	
	// NEW
	$('#fileOptionNew').click(function() {
		hideMenus();
		
		ide.openSketch("");	
		$.cookie('obsessing.org_current_sketch', "", { expires: 601 });
		$('#current_sketch').empty().append("New, UNSAVED!");	
		$('#flexBox').addClass('hidden');
		ide.captureKeys = true;	
		ide.relocateCursor();
		
	});
	
	// OPEN
	$('#fileOptionOpen').click(function() {
	
		if (obsessingCoderCookie.length < 1) {
			hideMenus();
			alert("You have to be logged in to Open files, kid.  Login under Settings");
		}
		
		else {
			hideMenus();
			$('#flexContent').empty();
			
			obsessingCoderCookie = $.cookie('obsessing.org_coder_cookie') || ""; // will be just the ID for now
			trace(obsessingCoderCookie);
			recallSketches(obsessingCoderCookie);
		}
	
	});
	
	// SAVE
	$('#fileOptionSave').click(function() {
	
		if (obsessingCoderCookie.length < 1) {
			hideMenus();
			alert("You have to be logged in to save, kid.  Login / create accounts under Settings");
		}
		
		else {
	
		
			hideMenus();
	
			ide.captureKeys = false;	
			
			if ($.cookie('obsessing.org_current_sketch').length > 0) {
				var sName = $.cookie('obsessing.org_current_sketch');
				var saveParams = { 
					id: obsessingCoderCookie,
					name: sName,
					code: ide.getCode()
				};
				$.post("save_sketch.php", saveParams, function(json) {
					trace("back from post");
					if (json.save.success) {
						trace(sName + " saved");
						$('#current_sketch').empty().append(sName);
					}
					else {
						trace("El Nopa. Could not overwrite?");
					}
				}, "json");
			}
			else {
			
				$('#flexContent').empty();
				$('#flexBox').removeClass('hidden');
			
				$.get('save_frag.php', function(frag) {
			
					$('#flexContent').append(frag);
					
					refreshInputListeners();
					
					$('#save_form').submit(function() {
						
						trace("Save");
						var sName = $('#new_sketch_name').attr('value');
						var saveParams = { 
							id: obsessingCoderCookie,
							name: sName,
							code: ide.getCode()
						};
				
						$.post("save_sketch.php", saveParams, function(json) {
							trace("back from post");
							if (json.save.success) {
								trace("save sucess");
								
								$('#flexContent').empty().append("<p>Ok")
								$('#flexContent').append("<p>savetavular");
								$.cookie('obsessing.org_current_sketch', sName, { expires: 601 });
								$('#current_sketch').empty().append(sName);
							}
							else {
								$('#flexContent').prepend("<p>Dang, coudn't save");
								trace("El Nopa.");
							}
						}, "json");
						
						return false; // submit but don't like, submit
					});
					
				});
			
			
			}
		
		}		
		
	});
	
	
	// SAVE AS
	$('#fileOptionSaveAs').click(function() {
	
		if (obsessingCoderCookie.length < 1) {
			hideMenus();
			alert("You have to be logged in to save, kid.  Login under Settings");
		}
		else {
		
			hideMenus();
			
			$('#flexContent').empty();
			$('#flexBox').removeClass('hidden');
			
			ide.captureKeys = false;	
			
			$.get('save_frag.php', function(frag) {
			
				$('#flexContent').append(frag);
				
				refreshInputListeners();
				
				$('#save_form').submit(function() {
						
					trace("Save As");
					var sName = $('#new_sketch_name').attr('value');
					var saveParams = { 
						id: obsessingCoderCookie,
						name: sName,
						code: ide.getCode()
					};
			
					$.post("save_sketch.php", saveParams, function(json) {
						trace("back from post");
						if (json.save.success) {
							trace("save as successful");
							
							$('#flexContent').empty().append("<p>Ok")
							$('#flexContent').append("<p>You just saved the sketch as " + sName);
							$.cookie('obsessing.org_current_sketch', sName, { expires: 601 });
							$('#current_sketch').empty().append(sName);
						}
						else {
							$('#flexContent').prepend("<p>Dang, coudn't save");
							trace("El Nopa.");
						}
					}, "json");
					
					return false; // submit but don't like, submit
				});
				
			});
		}
		
	});
	
	// GET INFO
	
	$('#fileOptionInfo').click(function() {
		hideMenus();
		$('#flexContent').empty();
		$('#flexBox').removeClass('hidden');
		ide.captureKeys = false;	
		
		if ($.cookie('obsessing.org_current_sketch').length > 0) {
			var path = "http://s3.amazonaws.com/obsessing/"+obsessingCoderCookie+"/"+$.cookie('obsessing.org_current_sketch');
			$('#flexContent').append("<p>info for " + $.cookie('obsessing.org_current_sketch'));
			$('#flexContent').append("<p>Public S3 path: <a href='"+path+"' target='_new'>"+path+"</a>");
		}
		else {
			$('#flexContent').append("<p>You'll need to have a sketch open, what can I say?");
		}
	
	
	});
	
	// IMPORT
	$('#fileOptionImport').click(function() {
		
		hideMenus();
		
		$('#flexContent').empty();
		$('#flexBox').removeClass('hidden');
		
		ide.captureKeys = false;	
		
		$.get('import_frag.php', function(frag) {
		
			$('#flexContent').append(frag);
			
			refreshInputListeners();
			
			$('#import_code').click(function() {
				
				trace("Import");
				
				var code = $('#import_code_text').attr('value');
				ide.openSketch(code+"\n\n\n\n\n");
				
				$('#flexBox').addClass('hidden');
				ide.captureKeys = true;
				
				
			});
			
		});
		
	});
	
	
	
	// ACCOUNT
	$('#settingOptionAccount').bind('click', function() {
		
		trace('account');
		hideMenus();
		
		$('#flexBox').removeClass('hidden');
		$('#flexContent').empty();
		
		// turn off key capture so we can do other stuff, only really a problem in webkit
		ide.captureKeys = false;
		
		$.get('account_frag.php', function(frag) {
		
			$('#flexContent').append(frag);
			
			refreshInputListeners();
			
			$('#auth_form').submit(function() {
					
				trace("auth");
				
				var params = { email: $('#auth_coder_email').attr('value'), ps: $('#auth_coder_password').attr('value') };
				var coderName = $('#auth_coder_email').attr('value').split("@")[0];
				
				$.post("login.php", params, function(json) {
					trace("back from post");
					if (json.auth.success) {
						trace("auth sucess: " + json.auth.uuid);
						// drop cookie, will need to secure this....
						obsessingCoderCookie = json.auth.uuid;
						$.cookie('obsessing.org_coder_cookie', obsessingCoderCookie, { expires: 601 });
						$.cookie('obsessing.org_coder_name', coderName, { expires: 601 });
						
						$('#flexContent').empty().append("<p>You're in.")
						$('.user-status').empty().append("hi " + coderName);
						recallSketches();
						
						
						
					}
					else {
						$('#flexContent').prepend("<p>Dang, I couldn't log you in.  You Sure?");
						trace("El Nopa.");
					}
				}, "json");
			
				return false; // don't submit
				
			});
			
			// newbie
			$('#new_coder_form').submit(function() {
					
				trace("new");
				var params = { email: $('#new_coder_email').attr('value'), ps: $('#new_coder_password').attr('value') };
				var coderName = $('#new_coder_email').attr('value').split("@")[0];
				
				$.post("newjack.php", params, function(json) {
					trace("back from post");
					if (json.auth.success) {
						trace("auth sucess: " + json.auth.uuid);
						// drop cookie, will need to secure this....
						obsessingCoderCookie = json.auth.uuid;
						$.cookie('obsessing.org_coder_cookie', obsessingCoderCookie, { expires: 601 });
						$.cookie('obsessing.org_coder_name', coderName, { expires: 601 });
						
						$('#flexContent').empty().append("<div>You're in.")
						
						$('.user-status').empty().append("hi " + coderName);
						
					}
					else {
						$('#flexContent').prepend("<p>Dang, looks like that email is already in there.  You Sure?");
						trace("El Nopa.");
					}
				}, "json");
			
				return false; // don't submit
				
			});
			
		});
	});
	
	
	$('#settingOptionClearCookie').click(function() {
	
		$.cookie('obsessing.org_coder_cookie', null);
		$.cookie('obsessing.org_coder_name', null);
		$.cookie('obsessing.org_current_sketch', null);
		
		hideMenus();
		alert("Cookie cleared, you're like new");
		
	});
	
		
	$('#flexClose').click(function() {
		
		$('#flexBox').addClass('hidden');
		ide.captureKeys = true;
		
	});
	
	
	$('#drop_cookie').click(function() {
	
		if (!obsessingCoderCookie || obsessingCoderCookie.length < 1) {
			$.cookie('obsessing.org_coder_cookie', 'DEFAULT OBSESSING CODER VALUE SET', { expires: 601 });			
		}
		
		obsessingCoderCookie = $.cookie('obsessing.org_coder_cookie');
		$('#o_cookie').append(obsessingCoderCookie);
			
	
	});
	
	
	
	$('#update_coder').click(function() {
		trace("update coder");
		$.getJSON("/coders/json_create", { 
			'coder[id]': $('#up_coder_id').attr('value'),
			'coder[username]': $('#up_coder_name').attr('value'),
			'coder[password]': $('#up_coder_password').attr('value'),
			'coder[email]': $('#up_coder_email').attr('value'),
			'coder[prefs]': $('#up_coder_prefs').attr('value')
			
		}, function(json) {
		
			trace("updated: " + json.attributes.prefs)
		
		});
		
	});
	
	
	$('#list').click(function() {
		trace("list");
	});
	
	$('#save').click(function() {
		trace("save");
	});
	
	$('#load').click(function() {
		trace("load");
	});
	
		
	// recall cookie here and trace if we can
	obsessingCoderCookie = $.cookie('obsessing.org_coder_cookie') || ""; // will be just the ID for now
	obsessingCoderName = $.cookie('obsessing.org_coder_name') || 0; // the friendly name
	trace(obsessingCoderCookie);
	// say hi
	if (obsessingCoderName) $('.user-status').empty().append("hi " + obsessingCoderName);
	
	//if (obsessingCoderCookie.length > 0) recallSketches(obsessingCoderCookie);
	
	function recallSketches() {

		$.get("sketch_list.php", function(doc) {
			var sketches = $(doc).find("Key").length;
			trace(sketches + " sketches saved"); 
			$('#flexBox').removeClass('hidden');
			$('#flexContent').append("<p>Saved sketches for: " + obsessingCoderName);
			$(doc).find("Key").each(function() {
				$('#flexContent')
					.append("<p><span class='recalled-sketch'>" + $(this).text().replace(obsessingCoderCookie+"/", ""));
			});
			
			$('.recalled-sketch').click(function() {
				trace('recalling...');
				var sName = $(this).text();
				$.get('recall_sketch.php?name='+sName, function(code) {
					ide.openSketch(code);
					$.cookie('obsessing.org_current_sketch', sName, { expires: 601 });
					$('#current_sketch').empty().append(sName);
					$('#flexBox').addClass('hidden');
					ide.captureKeys = true;
				});
				
			});
			
		});
		
	}
	
	function hideMenus() {
		$("#fileOptions").addClass('hidden');
		$("#settingsOptions").addClass('hidden');
		$("#fileOptionsButton").removeClass('activeMenu');
		$("#settingsButton").removeClass('activeMenu');
	}

});




