// JavaScript Document

var offsetx = 1;
var offsety = 1;
var offsetxResize = 1;
var offsetyResize = 1;
var target, targetResize, targetEdit, typeEdit, http, loadStatus, screenWidth, screenHeight, domainName; 
var boxCount = 1;
var currentZ = 1;
var editActive = 0;
var resizeActive = 0;
var styleArray = new Array('blue','gray','green','pink','violet','yellow','dk_blue','dk_gray','dk_green','dk_pink','dk_violet','dk_yellow');
var activeShells = new Array();
var targetRestore = new Array();

var domainName = "http://notes.joesong.com";

var browser = navigator.appName;


/* --------------------- move boxes ---------------------------------*/	

function loader() {
	target = document.getElementById('toolbar');
	target.activated = 0;
	screenWidth = window.innerWidth;
	screenHeight = window.innerHeight;

	if(browser == "Microsoft Internet Explorer"){
		screenWidth = document.body.clientWidth;
		screenHeight = Math.max(document.documentElement.clientHeight, 600);
	}
	//document.body.onmouseup = deactivate();
}

function activate(trgt) {
	target = document.getElementById(trgt.id);
	var prt = target.offsetParent;
	target.activated = 1;
	targetResize.activated = 0;
	prt.style.zIndex = currentZ + 1;
	currentZ ++;
	var targetEdit = target.id.replace('mover', '');
	echo (currentZ);
}


function move(evt) {
	if ((target.activated == 1) && (editActive == 0)) {
		var posx = 0;
		var posy = 0;
		var prt = target.offsetParent;
		
		var index = target.id.replace('mover', '');
		
		//broswer method
		var e = evt || window.event;
		
		//quick test for browser event method
		if (e.pageX || e.pageY) 	{
			posx = e.pageX;
			posy = e.pageY;
		}
		else if (e.clientX || e.clientY) 	{
			posx = e.clientX + document.body.scrollLeft
				+ document.documentElement.scrollLeft;
			posy = e.clientY + document.body.scrollTop
				+ document.documentElement.scrollTop;
		}
		
		
		//make sure the they are getting a good hold
		if (offsetx > -5) {
			offsetx = prt.offsetLeft  - posx;
		} 
		if (offsety > -5) {
			offsety = -5;
		} 
		
		var fposx = Math.max(Math.min((posx + offsetx), (screenWidth - prt.offsetWidth - 5)), 0);
		var fposy = Math.max(Math.min((posy + offsety), (screenHeight - (document.getElementById('changer'+index).offsetHeight) - 25)), 0); 
		//move shell to correspond with mouse
		prt.style.left = fposx  + "px";
		prt.style.top = fposy + "px";
		
		targetEdit = index;
	}
	
}

function deactivate(trgt) {
	target.activated = 0;
	var targetEdit = target.id.replace('mover', '');
	var pcntLeft = target.offsetParent.offsetLeft / screenWidth;
	var pcntTop = target.offsetParent.offsetTop / screenHeight;
	send_data('move',pcntLeft + 'x' + pcntTop);
	offsetx = 1;
	offsety = 1;
}

/* --------------------- resize boxes ---------------------------------*/

function loaderResize() {
	targetResize = document.getElementById('toolbar');
	targetResize.activated = 0;
	
}

function activateResize(trgt) {
	targetResize = document.getElementById(trgt);
	targetResize.activated = 1;
	target.activated = 0;
}

function resize(evt) {
	
	if (targetResize.activated == 1) {
		var posx = 0;
		var posy = 0;
		var prt = targetResize.offsetParent;
		var index = targetResize.id.replace('changer', '');
		
		//broswer method
		var e = evt || window.event;
		
		//quick test for browser event method
		if (e.pageX || e.pageY) 	{
			posx = e.pageX;
			posy = e.pageY;
		}
		else if (e.clientX || e.clientY) 	{
			posx = e.clientX + document.body.scrollLeft
				+ document.documentElement.scrollLeft;
			posy = e.clientY + document.body.scrollTop
				+ document.documentElement.scrollTop;
		}
		
		offsetxResize = prt.offsetLeft;
		offsetyResize = prt.offsetTop;
		
		var newWidth = Math.max(posx - offsetxResize + 5, 72);
		var newHeight = Math.max(posy - offsetyResize - 40, 20);

		//resize shell to correspond with mouse
		targetResize.style.width = newWidth + "px";
		targetResize.style.height = newHeight + "px";
		
		prt.style.width = document.getElementById('mover' + index).style.width = newWidth + "px";
		
		targetResize.style.zIndex = currentZ + 1;
		currentZ ++;
		
		targetEdit = index;
	} 
	
}

function deactivateResize(trgt) {
	targetResize.activated = 0;
	send_data('resize',targetResize.offsetWidth + 'x' + targetResize.offsetHeight);
	if ( targetResize.offsetHeight <= 25) {
		var minimized = 1;
	} else {
		var minimized = 0;
	}
	send_data('minimized',minimized);
	offsetxResize = 1;
	offsetyResize = 1;
	
}


/* --------------------- add boxes ---------------------------------*/

function insert_box(id) {
	boxCount ++;
	var index = id || boxCount;
	
	activeShells.push("shell" + index);

	http = newRequest();
	http.open('get', 'php/insert.php?id='+index+'&scrH='+screenHeight+'&scrW='+screenWidth);
	http.onreadystatechange = insertResponse;
    http.send(null);	
}

function insertResponse() {
    if(http.readyState == 4){
        var response = http.responseText;
		
		document.getElementById('msg').innerHTML = 'Ready.';
	
		//addend new box to body
		document.body.innerHTML += response;
		currentZ ++;
		
    } else {
		document.getElementById('msg').innerHTML = '<img src="images/loading.gif" alt="Loading..." />';
	}
}


/* --------------------- edit text ---------------------------------*/

function editText(edtarget,style) {
	//if not already editing
	if ((editActive == 0) && (target.activated == 0)) {
		//grab content
		var content = document.getElementById(edtarget).innerHTML;
		content = content.replace(new RegExp( "\<br>", "g" ),"\n");
		content = content.replace(new RegExp( "\<br />", "g" ),"\n");
		content = content.replace(new RegExp( "\<BR>", "g" ),"\n");
		if (content == '&nbsp;&nbsp;&nbsp;&nbsp;') {
			content = '';
		}
		
		
		switch (style) {
			case 'textarea':
				//set height of textarea by converting height to rows
				var index = edtarget.replace("changer","");
				var rows = parent.document.getElementById('shell' + index).offsetHeight - document.getElementById('mover' + index).offsetHeight; 
				var rows = Math.round(rows / 20);
		
				//create textarea box
				var editBox = '<form action="" name="editForm">';
				editBox += '<textarea name="text" id="text' + index + '" cols="25" rows="' + rows + '" style="width:98%;" onBlur="setText(\'' + edtarget + '\',\'textarea\')">';
				editBox += trim(content) + '</textarea><br />';
		
				//create submit button
				editBox += '<input type="submit" value="SET" onClick="setText(\'' + edtarget + '\',\'textarea\',\'' + index + '\')" class="smallbutton">';
				document.getElementById(edtarget).style.overflow = 'visible';
				
				
				
				break;
				
			case 'text':
				var index = edtarget.replace("changer_t","");
				var editBox = '<form action="" name="editForm">';
				editBox += '<input name="text" type="text" id="text" value="' + content +'" onBlur="setText(\'' + edtarget + '\',\'text\')" />';
		
				//create submit button
				editBox += '<input type="submit" value="SET" onClick="setText(\'' + edtarget + '\',\'text\',\'' + index + '\')" class="smallbutton">';
				break;
		} 

		//put textarea into div
		document.getElementById(edtarget).innerHTML = editBox;
		document.editForm.text.focus();
		
		targetEdit = index;
		

		//flag as editing
		editActive = 1;
		return false;
	}
}

function setText(edtarget, style, index) {

	//get textarea value
	var content = document.editForm.text.value;
	content = content.replace(new RegExp( "\\n", "g" ),"<br />");
	if (content == '') {
		content = "&nbsp;&nbsp;&nbsp;&nbsp;";
	}

	//insert content into div		
	document.getElementById(edtarget).innerHTML = content;
	
	
	switch (style) {
		case 'textarea':
			document.getElementById(edtarget).style.overflow = 'auto';
			break;
	}

	//flag as not editing
	editActive = 0;
	
	send_data(style,content);

	return false;
}

/* --------------------- set styles ---------------------------------*/

function pickStyle(trgt,style) {
	document.getElementById('mover' + trgt).className = 'mover_' + style;
	document.getElementById('changer' + trgt).className = 'content_' + style;
	document.getElementById('currentColor' + trgt).src = 'images/spot_' + style + '.gif';
	togglePicker(trgt);
	targetEdit = trgt;
	send_data('style',style);
	return false;
}

function togglePicker(trgt) {
	var obj = document.getElementById('colorPicker' + trgt);
	if (obj.offsetWidth >= 25) { // close Picker
		flow('colorPicker' + trgt, 'width', 80, 0);
	} else { //open Picker
		flow('colorPicker' + trgt, 'width', 10, Math.round(12 * styleArray.length));
	}
}

function closePicker(trgt) {
	document.getElementById('colorPicker' + trgt).style.display = 'none';
}

function toggleVisiblity(trgt,indicator) {
	switch (document.getElementById(trgt).offsetHeight <= 25) {
		//if already minimized, open
		case true:
			document.getElementById(trgt).style.display = 'block';
			var dSize = targetRestore[trgt] || 300;
			flow(trgt,'height',10,dSize);
			indicator.src = "images/minus.gif";
			indicator.alt = indicator.title = "Minimize."
			var minimized = 0;
			break;
		//if not already minimized, minimize
		default:
			targetRestore[trgt] = document.getElementById(trgt).offsetHeight;
			indicator.src = "images/plus.gif";
			indicator.alt = indicator.title = "Maximize."
			flow(trgt,'height',300,10);
			var minimized = 1;
			break;
	}
	targetEdit = trgt.replace('changer','');
	send_data('minimized',minimized);
	
}

/* --------------------- save data ---------------------------------*/

function send_data(style,inp) {
	echo(targetEdit);
	var params = 'input=' + inp + '&style=' + style + '&id=' + targetEdit;
	http = newRequest();
	http.open('post', 'php/index.php');
	http.onreadystatechange = handleResponse;
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.setRequestHeader("Content-length", params.length);
    http.setRequestHeader("Connection", "close");
    http.send(params);	
}

function handleResponse() {
    if(http.readyState == 4){
        var response = http.responseText;
		document.getElementById('msg').innerHTML = response;
    } else {
		document.getElementById('msg').innerHTML = '<img src="images/loading.gif" alt="Loading..." />';
	}
}

/* --------------------- load data ---------------------------------*/

function load_data(status) {
	http = newRequest();
	http.open('get', 'php/load.php?status=' + status+'&scrH='+screenHeight+'&scrW='+screenWidth);
	http.onreadystatechange = loadResponse;
    http.send(null);
	loadStatus = status;
	//alert(status);	
}

function loadResponse() {
    if(http.readyState == 4){
        var response = http.responseText;
		
		switch (loadStatus) {
			//load current boxes
			case "enabled":
				//if it doesn't load, start one box
				if (trim(response) == 'Error loading data.') {
					insert_box();
					
					return;
				}

				//split data by newline
				var lines = response.split("END OF ID LIST\n");
				
				//get ids
				var ids = lines[0].split(new RegExp( "\\t", "g" ));
				for (var i = 0; i < ids.length; i++) {
					activeShells.push("shell" + ids[i]);
					var hi = Number(ids[i]);
					currentZ = Math.max(currentZ,hi);
				}
				
				var sublines = lines[1].split("END OF MIN LIST\n");
				
				var subsublines = sublines[1].split("END OF UNIQUE ID\n");
				
				//retrieve uniqueid
				uniqueid = subsublines[0];
								
				document.body.innerHTML += subsublines[1];

				document.getElementById('msg').innerHTML = 'Welcome.';
				document.getElementById('feedLink').href = 'feeds/?uid=' + uniqueid;
				
				var minIds = sublines[0].split(new RegExp( "\\t", "g" ));
				for (var i = 0; i < minIds.length; i++) {
					if (minIds[i] > 1) {
						toggleVisiblity('changer' + minIds[i], document.getElementById('minimizer' + minIds[i]));
					}
				}
				//currentZ += 10;
				break;
			
			//load trash
			case "disabled":
				if (trim(response) == 'Error loading data.') {
					response = '';
				}
				
				var lines = response.split(new RegExp( "\\n", "g" ));
				
				var numfields = lines[0].split(new RegExp( "\\t", "g" ));
				
				var trashBox = '<table id="trash_table">\n';
				
				trashBox += '<tr><th>Title</th><th>Body</th><th>Date Deleted</th><th>&nbsp;</th></tr>\n';
				
				for (var i = 2; i < lines.length; i++) {
					if (lines[i] != '') {
						if (i%2) {
							var bgColor = '#ffffff';
						} else {
							var bgColor = '#efefef';
						}
						trashBox += '<tr bgcolor="' + bgColor + '">';
						trashBox += parseTrash(lines[i]);
						trashBox += '</tr>';
					}
				}

				trashBox += '</table>\n';
				
				//empty trash button
				trashBox += '&nbsp;<a href="javascript;" onclick="emptyTrash(); return false;">Empty trash</a>';
				
				document.getElementById('trash_display').innerHTML = trashBox;
				document.getElementById('trash').style.left = document.getElementById('trash_button').offsetLeft - 5 + "px";
				document.getElementById('trash').style.display = 'block';
				document.getElementById('msg').innerHTML = "Choose trashed item to restore.";
				break;
			
			//load specific box
			default:
				parseBoxes(trim(response));
				openTrash();
				send_data('status','enabled');
				break;
			
		}
		
    } else {
		document.getElementById('msg').innerHTML = '<img src="images/loading.gif" alt="Loading..." />';
	}
	
}

function parseBoxes(inputLine) {
	if (inputLine != '') {
		
		//split inputLine by tabs
		//var field = inputLine.split(new RegExp( "\\t", "g" ));

		
		
		
	}
}

function parseTrash(inputLine) {
	if (inputLine != '') {
		//split inputLine by tabs
		var field = inputLine.split(new RegExp( "\\t", "g" ));
		
		var output = '<td>' + field[1] + '</td><td>' + field[2] + '</td><td>' + field[7] + '</td><td>';
		output += '<a href="javascript;" onclick="load_data(\'' + field[0] + '\'); targetEdit=' + field[0] + '; return false;" ';
		output += '<img src="images/diag_arrow2.gif" alt="Restore." title="Restore." border="0" />';
		output += '</a>';
		output += '</td>\n';
		
		
		return output;
		
		
		
	}
}

/* --------------------- interface ---------------------------------*/

function swapImage(trgt, type) {

	switch (type) {
		case "minimize":
			if (trgt.src.indexOf("plus.gif") != -1) {
				trgt.src = "images/plus2.gif";
			} else if (trgt.src.indexOf("plus2.gif") != -1) {
				trgt.src = "images/plus.gif";
			} else if (trgt.src.indexOf("minus.gif") != -1) {
				trgt.src = "images/minus2.gif";
			} else if (trgt.src.indexOf("minus2.gif") != -1) {
				trgt.src = "images/minus.gif";
			}
			break;
			
		case "disable":
			if (trgt.src.indexOf("ex.gif") != -1) {
				trgt.src = "images/ex2.gif";
			} else if (trgt.src.indexOf("ex2.gif") != -1) {
				trgt.src = "images/ex.gif";
			} 
			break;
		
		case "logout":
			if (trgt.src.indexOf("logout.gif") != -1) {
				trgt.src = "images/logout2.gif";
			} else if (trgt.src.indexOf("logout2.gif") != -1) {
				trgt.src = "images/logout.gif";
			} 
			break;
			
		case "user_button":
			if (trgt.src.indexOf("user.gif") != -1) {
				trgt.src = "images/user2.gif";
			} else if (trgt.src.indexOf("user2.gif") != -1) {
				trgt.src = "images/user.gif";
			} 
			break;
		
		case "feed":
			if (trgt.src.indexOf("feed.gif") != -1) {
				trgt.src = "images/feed2.gif";
			} else if (trgt.src.indexOf("feed2.gif") != -1) {
				trgt.src = "images/feed.gif";
			} 
			break;
			
		case "new_note":
			if (trgt.src.indexOf("new_note.gif") != -1) {
				trgt.src = "images/new_note2.gif";
			} else if (trgt.src.indexOf("new_note2.gif") != -1) {
				trgt.src = "images/new_note.gif";
			} 
			break;
			
		case "trash_button":
			if (trgt.src.indexOf("trash.gif") != -1) {
				trgt.src = "images/trash2.gif";
			} else if (trgt.src.indexOf("trash2.gif") != -1) {
				trgt.src = "images/trash.gif";
			} 
			break;
	}
}

function showWelcome(trgt,tbl) {

	switch (tbl) {
		case "welcome_table":
		
			var html_block = '<form><table border="0" cellspacing="4" cellpadding="4" id="welcome_table">\n';
			html_block += '<tr><td colspan="2"><h2><img src="images/memorand_us_logo_20.gif" alt="Memorand.us" width="154" height="20" /><span class="sup"> beta</span></h2>\n';
			html_block += '<span class="smallgrey">Keep notes about everything in your life.<br />\n';
			html_block += 'Generate, resize, edit, trash, recover, and share your notes. And, there\'s more features to come soon.<br />';
			html_block += '-- Demo login: guest / demo --</span></td></tr>\n';
			html_block += '<tr><td width="75px">username</td><td>\n';
			html_block += '<label><input name="username" type="text" id="username" class="bigfield" /></label></td></tr>\n';
			html_block += '<tr><td>password</td><td>\n';
			html_block += '<label><input name="password" type="password" id="password" class="bigfield" /></label></td></tr>\n';
			html_block += '<tr><td>&nbsp;</td><td>\n';
			html_block += '<input type="submit" value="Log In" onClick="login(); return false;" class="smallbutton" />\n';
			html_block += ' &nbsp;&nbsp; <a href="javascript:void()" onClick="showWelcome(\'' + trgt + '\',\'register_table\'); return false;">Sign up.</a>\n';
			html_block += '</td></tr>\n';
			html_block += '</table></form>\n';
			
			var focusf = 'username';
			
			break;
			
		case "register_table":
			var html_block = '<form><table border="0" cellspacing="4" cellpadding="4" id="register_table">\n';
			html_block += '<tr><td colspan="2" id="tableheader"><h2>Sign up.</h2><span class="redtext">* required fields</span></td></tr>\n';
			html_block += '<tr class="required"><td width="100px">first name <span class="redtext">*</span></td><td>\n';
			html_block += '<label><input name="f_name" type="text" id="f_name" /></label></td></tr>\n';
			html_block += '<tr class="required"><td>last name <span class="redtext">*</span></td><td>\n';
			html_block += '<label><input name="l_name" type="text" id="l_name" /></label></td></tr>\n';
			html_block += '<tr class="required"><td>username <span class="redtext">*</span></td><td>\n';
			html_block += '<label><input name="username" type="text" id="username" /></label></td></tr>\n';			
			html_block += '<tr class="required"><td>password <span class="redtext">*</span></td><td>\n';
			html_block += '<label><input name="password" type="password" id="password" /></label></td></tr>\n';
			html_block += '<tr class="required"><td>confirm password <span class="redtext">*</span></td><td>\n';
			html_block += '<label><input name="password2" type="password" id="password2" /></label></td></tr>\n';
			html_block += '<tr class="required"><td>email <span class="redtext">*</span></td><td>\n';
			html_block += '<label><input name="email" type="text" id="email" /></label></td></tr>\n';
			html_block += '<tr><td>address</td><td>\n';
			html_block += '<label><input name="address" type="text" id="address" /></label><br />\n';
			html_block += '<label><input name="address2" type="text" id="address2" size="6" /></label></td></tr>\n';
			html_block += '<tr><td>city</td><td>\n';
			html_block += '<label><input name="city" type="text" id="city" /></label></td></tr>\n';
			html_block += '<tr><td>state</td><td>\n';
			html_block += '<label><input name="state" type="text" id="state" /></label></td></tr>\n';
			html_block += '<tr><td>zip</td><td>\n';
			html_block += '<label><input name="zip" type="text" id="zip" size="6" /></label></td></tr>\n';
			html_block += '<tr><td>phone</td><td>\n';
			html_block += '<label><input name="phone" type="text" id="phone" /></label></td></tr>\n';
			html_block += '<tr><td>link to you</td><td>\n';
			html_block += '<label><input name="plink" type="text" id="plink" /></label></td></tr>\n';
			html_block += '<tr><td><input type="hidden" name="new_entry" id="new_entry" value="1" /></td><td>\n';
			html_block += '<input type="submit" value="Sign Up." onClick="enforceRegistration(); return false;" class="smallbutton" />\n';
			html_block += ' &nbsp;&nbsp; <a href="javascript:void()" onClick="showWelcome(\'' + trgt + '\',\'welcome_table\'); return false;">I already signed up.</a>\n';
			html_block += '</td></tr>\n';
			html_block += '</table></form>\n';
			
			var focusf = 'f_name';
			
			break;
	
	case "acknowledgements":
			var html_block = '<div id="acknowledgements"><img src="images/ex.gif" ';
			html_block += 'alt="Close this window" width="10" height="10" align="right" ';
			html_block += 'onclick="hideWelcome(\'welcome\');" />';
			html_block += '<img src="images/memorand_us_logo_42.gif" alt="Memorand.us" ';
			html_block += 'width="323" height="42" /><br />\n';
			html_block += 'Keep notes about everything in your life.\n';
			html_block += '<br />\n';
			html_block += 'Generate, resize, edit, trash, recover, and share your notes. <br />\n';
			html_block += 'And, there\'s more features to come soon.<br />\n';
			html_block += '<br />\n';
			html_block += 'Have a feature request? Email ';
			html_block += '<a href="mailto:beta@memorand.us">beta@memorand.us</a><br />\n';
			html_block += '<br /><br /><br />\n';
			html_block += '<h3>Acknowedgements:</h3>\n';
			html_block += '<em>This project was developed using services from:</em><br />\n';
			html_block += '<a href="http://alex.dojotoolkit.org/shrinksafe/" target="_blank">';
			html_block += 'Dojo\'s ShrinkSafe</a><br />\n';
			html_block += '<a href="http://pajhome.org.uk/crypt/md5" target="_blank">';
			html_block += 'Paul Johnson\'s implementation of the MD5 algorithm</a><br />\n';
			html_block += '<a href="http://www.adobe.com/products/dreamweaver/" target="_blank">';
			html_block += 'Adobe\'s stock Dreamweaver image rollover scripts</a> <br /><br />\n';
			html_block += 'All other code has been hand-written. Seriously. <br /><br /><br />\n';
			html_block += 'Version 0.9, 07 April 2007 </div>\n';
			
			var focusf = 'acknowledgements';
			
			break;
	}
	
	document.getElementById(trgt).innerHTML = html_block;
	document.getElementById('lightbox').style.width = screenWidth*0.98 + 'px';
	document.getElementById('lightbox').style.height = screenHeight*0.98 + 'px';

	//center div
	document.getElementById('lightbox').style.left = (screenWidth - screenWidth*0.98) / 2 + 'px';
	document.getElementById('lightbox').style.top = (screenHeight - screenHeight*0.98) / 2 + 'px';
	
	//center table
	document.getElementById(tbl).style.left = (screenWidth / 2) - (document.getElementById(tbl).offsetWidth / 2) + 'px';
	
	document.getElementById(tbl).style.top = (screenHeight / 2) - (document.getElementById(tbl).offsetHeight / 2) + 'px';
	
	document.getElementById(focusf).focus();
	
	
}

function hideWelcome(trgt) {
	
	document.getElementById(trgt).innerHTML = '';
	
	//hide welcom
	document.getElementById(trgt).style.width = document.getElementById(trgt).style.height = 0 + 'px';
	document.getElementById(trgt).style.left = document.getElementById(trgt).style.top = 0 + 'px';
	
	//hide lightbox
	document.getElementById('lightbox').style.width = document.getElementById(trgt).style.height = 0 + 'px';
	document.getElementById('lightbox').style.left = document.getElementById(trgt).style.top = 0 + 'px';
		
}

function enforceRegistration() {
	
	//check for password match
	var pass1 = trim(document.getElementById('password').value);
	var pass2 = trim(document.getElementById('password2').value);
	if (pass1 != pass2) {
		//password mismatch
		alert("Your typed passwords did not match.");
		document.getElementById('password').value = document.getElementById('password2').value = '';
	} else if (document.getElementById('username').value && ((document.getElementById('password').value != '') || (document.getElementById('new_entry').value == "0"))  && document.getElementById('f_name').value && document.getElementById('l_name').value && document.getElementById('email').value) {
		//everything is good, register
		register();
	} else {
		//not all required field filled in
		alert("Please fill in all required fields.");
	}	
}
/* --------------------- trash functions ---------------------------------*/

function disable(index) {
	document.getElementById('shell' + index).style.display = 'none';
	targetEdit = index;
	send_data('status','disabled');
	return false;
}

function openTrash() {
	if ((document.getElementById('trash').style.display == 'none') || (document.getElementById('trash').style.display == '')) {
		load_data('disabled');
	} else {
		document.getElementById('trash').style.display = 'none';
		document.getElementById('trash_display').innerHTML = '';
		document.getElementById('msg').innerHTML = '';
	}
}

function emptyTrash() {
	var conf = confirm('Are you sure you want to permanently delete these notes?');
	if (conf) {
		http = newRequest();
		http.open('post', 'php/delete.php');
		http.onreadystatechange = handleEmpty;
		http.send(null);
	}
}

function handleEmpty() {
	if(http.readyState == 4){
		var response = http.responseText;
		if (trim(response) == 'empty') {
			document.getElementById('msg').innerHTML = 'Your trashed notes have been deleted.';
			document.getElementById('trash').style.display = 'none';
			document.getElementById('trash_display').innerHTML = '';
		} else {
			document.getElementById('msg').innerHTML = 'Error: 720';
		}
	}
}
		

/* --------------------- user functions ---------------------------------*/

function login(username,password) {
	var params = 'username=' + document.getElementById('username').value + '&password=' + hex_md5(document.getElementById('password').value);
	http = newRequest();
	http.open('post', 'php/login.php');
	http.onreadystatechange = handleLogin;
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.setRequestHeader("Content-length", params.length);
    http.setRequestHeader("Connection", "close");
    http.send(params);	
}

function register() {
	var params = 'username=' + document.getElementById('username').value + '&password=' + hex_md5(document.getElementById('password').value);
	params += '&f_name=' + document.getElementById('f_name').value + '&l_name=' + document.getElementById('l_name').value ;
	params += '&address=' + document.getElementById('address').value + '&address2=' + document.getElementById('address2').value;
	params += '&city=' + document.getElementById('city').value + '&state=' + document.getElementById('state').value;
	params += '&zip=' + document.getElementById('zip').value + '&phone=' + document.getElementById('phone').value;
	params += '&plink=' + document.getElementById('plink').value + '&email=' + document.getElementById('email').value;
	params += '&new_entry=' + document.getElementById('new_entry').value;
	http = newRequest();
	http.open('post', 'php/login.php');
	http.onreadystatechange = handleLogin;
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.setRequestHeader("Content-length", params.length);
    http.setRequestHeader("Connection", "close");
    http.send(params);	
}

function logout() {
	var params = 'logout=1';
	http = newRequest();
	http.open('post', 'php/login.php');
	http.onreadystatechange = handleLogin;
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.setRequestHeader("Content-length", params.length);
    http.setRequestHeader("Connection", "close");
    http.send(params);	
}

function loadUserData() {
	var params = 'loadUser=1';
	http = newRequest();
	http.open('post', 'php/login.php');
	http.onreadystatechange = handleLogin;
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.setRequestHeader("Content-length", params.length);
    http.setRequestHeader("Connection", "close");
    http.send(params);
}

function savePreferences(prfrnc,pval) { //preference, value
	var params = 'upref=1&field=' + prfrnc + '&value=' + pval;
	http = newRequest();
	http.open('post', 'php/login.php');
	http.onreadystatechange = handleLogin;
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.setRequestHeader("Content-length", params.length);
    http.setRequestHeader("Connection", "close");
    http.send(params);
}

function handleLogin() {
    if(http.readyState == 4){
        var response = http.responseText;
		var resp_parts = response.split('\t');
		switch (trim(resp_parts[0])) {
			case 'login': //loging in or after registration
				hideWelcome('welcome');
				load_data('enabled');
				if (resp_parts[2] == 1) { //show public
					togglePublic();
				}
				document.getElementById('msg').innerHTML = "Welcome " + resp_parts[1] + ".";
				break;
			case 'logout': //logout
				document.getElementById('msg').innerHTML = "You are now logged out.";
				for (var i = 0; i < activeShells.length; i++) {
					if(document.getElementById(activeShells[i])) {
						document.getElementById(activeShells[i]).style.display = 'none';
					}
				}
				showWelcome('welcome','welcome_table');
				break;
			case 'userdata': //editing account
				document.getElementById('msg').innerHTML = 'Edit your account.';
				document.getElementById('tableheader').innerHTML = '<img src="images/ex.gif" alt="Close this window" width="10" height="10" align="right" onclick="hideWelcome(\'welcome\');" />' + document.getElementById('tableheader').innerHTML;
				
				var fields = resp_parts[1].split(new RegExp( "\\n\n", "g" ));
				document.getElementById('new_entry').value = "0";
				for (var i = 0; i < fields.length; i++) {
					var bits = fields[i].split('\n');
					if (bits[1] != 'undefined') {
						document.getElementById(bits[0]).value = bits[1];
					}
				}
				
				
				break;
			case 'update': //after editing account
				hideWelcome('welcome');
				document.getElementById('msg').innerHTML = "Your account has been updated.";
				break;
			case 'prefs': //after updating preferences
				document.getElementById('msg').innerHTML = "Your preferences have been updated.";
				break;
			default: //error, usually bad credentials
				document.getElementById('msg').innerHTML = response;
				document.getElementById('password').value = '';
				document.getElementById('password2').value = '';
				alert("Access denied.");
				break;
		}
    } else {
		document.getElementById('msg').innerHTML = '<img src="images/loading.gif" alt="Loading..." />';
	}
	
}

/* --------------------- sharing functions ---------------------------------*/

function publize(id) {
	targetEdit = id;
	//get last element of array
	var fields = document.getElementById('access' + id).src.split('/');
	fields = fields.reverse();
	
	switch (fields[0]){
		case 'private.gif':
			document.getElementById('access' + id).src = "images/public.gif";
			document.getElementById('access' + id).alt = document.getElementById('access' + id).title = "This box is currently public. Click this box to turn off sharing.";
			send_data('access','public');
			//var publicTimeout = setTimeout("loadPublic('public')",1000);
			break;
		
		case 'public.gif':
			document.getElementById('access' + id).src = "images/private.gif";
			document.getElementById('access' + id).alt = document.getElementById('access' + id).title = "This box is currently private. Click this box to share it.";
			send_data('access','private');
			//var publicTimeout = setTimeout("loadPublic('public')",1000);
			break;
	}
}

function searchNotes(access) {
    var params = 'access=' + access + '&input=' + document.getElementById('searchPublic').value;
	httpPublic = newRequest();
	httpPublic.open('post', 'php/search.php');
	httpPublic.onreadystatechange = publicResponse;
    httpPublic.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    httpPublic.setRequestHeader("Content-length", params.length);
    httpPublic.setRequestHeader("Connection", "close");
    httpPublic.send(params);
}

function publicResponse() {
	 if(httpPublic.readyState == 4){
        var response = httpPublic.responseText;
		response = trim(response);
		var lines = response.split(new RegExp( "\\n\t\t\n", "g" ));
		var output = '';
		for (var i = 1; i < lines.length; i ++) {
			fields = lines[i].split(new RegExp( "\\t", "g" ));
			output += '<div class="publicItem"><h3>' + fields[1] + '</h3>\n';
			output += '<span class="smalltext">' + fields[4] + ', ' + fields[3] + '</span><br />\n';
			output += fields[2] + '</div>\n';
		}
		document.getElementById('publicContent').innerHTML = output;
			
	 } else {
		document.getElementById('publicContent').innerHTML = '<img src="images/loading.gif" alt="Loading..." />';
	}
}

function togglePublic() {
	var obj = document.getElementById('publicNotes');
	if (obj.offsetLeft == 0) { //close publicNotes
		document.getElementById('publicContent').innerHTML = '';
		flow('publicNotes','left', obj.offsetLeft, 10 - obj.offsetWidth, obj.style.overflow = 'hidden');
		flow('publicNotes','height', obj.offsetHeight, 20);
		document.getElementById('publicSwitch').src = 'images/plus.gif';
		document.getElementById('publicSwitch').alt = document.getElementById('publicSwitch').title = "Open Public Notes."
		
	} else { //open publicNotes
		flow('publicNotes','left', obj.offsetLeft, 0);
		flow('publicNotes','height', obj.offsetHeight, 400);
		document.getElementById('publicSwitch').src = 'images/minus.gif';
		document.getElementById('publicSwitch').alt = document.getElementById('publicSwitch').title = "Close Public Notes."
		obj.style.overflow = 'auto';
		
	}
	return false;
}
/* --------------------- utilities ---------------------------------*/

function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function flow(trgt,aspect,start,end,endAction){
	var timer;
	var offset = 1 ; //timing
	start = start / 1;
	end = end / 1;
	
	
	
	if (start != end) {
		
		if (Math.abs(start - end) > 400) {
			var factor = 100;
		} else if (Math.abs(start - end) > 100) {
			var factor = 20;
		} else if (Math.abs(start - end) > 10) {
			var factor = 5;
		} else {
			var factor = 1;
		}
		
		var obj = document.getElementById(trgt);
		
		switch (aspect) {
			case "height":
				if(obj.offsetHeight != end) {
					if (start > end) {  //shrink height
						obj.style.height = obj.offsetHeight - (3 * factor) + 'px'; //3 pixels instead of 1 to account for 1px border
					} else { // grow height
						obj.style.height = obj.offsetHeight + (1 * factor) + 'px';
					}
					//set timeout
					timer = setTimeout('flow(\'' + trgt + '\',\'height\',\'' + obj.offsetHeight + '\',\'' + end + '\')', offset);
				}
				break;
				
			case "width":
				if(obj.offsetWidth != end) {
					if (start > end) { //shrink width
						obj.style.width = obj.offsetWidth - (3 * factor) + 'px';//3 pixels instead of 1 to account for 1px border
						//obj.style.width = "10px";
					} else { //grow width
						obj.style.width = obj.offsetWidth + (1 * factor) + 'px';
					}
					//set timeout
					timer = setTimeout('flow(\'' + trgt + '\',\'width\',\'' + obj.offsetWidth + '\',\'' + end + '\')', offset);
				}
				break;
				
			case "left":
				if(obj.offsetLeft != end) {
					if (start > end) {  //shrink height
						obj.style.left = obj.offsetLeft - (1 * factor) + 'px'; 
					} else { // grow height
						obj.style.left = obj.offsetLeft + (1 * factor) + 'px';
					}
					//set timeout
					timer = setTimeout('flow(\'' + trgt + '\',\'left\',\'' + obj.offsetLeft + '\',\'' + end + '\')', offset);
				}
				break;
			
			case "top":
				if(obj.offsetTop != end) {
					if (start > end) {  //shrink height
						obj.style.top = obj.offsetTop - (1 * factor) + 'px'; 
					} else { // grow height
						obj.style.top = obj.offsetTop + (1 * factor) + 'px';
					}
					//set timeout
					timer = setTimeout('flow(\'' + trgt + '\',\'top\',\'' + obj.offsetTop + '\',\'' + end + '\')', offset);
				}
				break;
		}
	} else { //perform endAction
		endAction = endAction;
	}
}

function newRequest() {
	if(browser == "Microsoft Internet Explorer"){
		var newHttp = new ActiveXObject("Microsoft.XMLHTTP");
	}else{
		var newHttp = new XMLHttpRequest();
	}
	return newHttp;
}

function echo(msg) {
	//document.getElementById('trace').innerHTML = msg;
}
			
			