var	valid_username = 0;
var valid_firstname = 0;
var valid_email = 0;
var valid_password = 0;
var valid_verify = 0;


function in_user_list( newName )
{
	for(x in user_list){
		if( newName == user_list[x])
			return 1;
	}
	return 0;
}

function email_check( email )
{
	emailPattern = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9])+(\.[a-zA-Z0-9_-]+)+$/;

	return emailPattern.test( email );
}

function message_check( message )
{
	//Message can't contain < or >
	//Message can't have a period with another charecter right after.
	messagePattern = /<|>|\.(?=\S)/;
	
	return messagePattern.test( message );
}


function contact_verify()
{
	error_string = "";
	is_valid = 0;
	is_error = 0;
	from = document.getElementById('from').value;
	message = document.getElementById('message').value;
	
	if( from ){
		if(email_check( from ) )
			is_valid=1;
		else{
			error_string+="<p>The email address entered has invalid charecters.</p>";
			is_error=1;
			is_valid=0;
		}
	}
	
	if( message){
		if(!message_check( message ))
			is_valid*=1;
		else{
			error_string+="<p>The message can not contain any html codes such as < or >.  In addition a period must be followed by white space.</p>";
			is_error=1;
			is_valid=0;
		}	
	}
	else
		is_valid=0;
		
	button = document.getElementById("submit_comment");
	back_button = document.getElementById("back_submit_comment");
		
	if(is_error)
		show_div("error","Form Input is not valid",error_string);
	else
		hide_div("error");
		
	if(is_valid){	
		button.disabled = false;
		setBackground(back_button,"url(graphics/green_glass.png) no-repeat");
	}
	else{	
		button.disabled = true;
		setBackground(back_button,"url(graphics/clear_glass.png) no-repeat");
	}	
}

function signup_verify( object )
{		

	var comment_id = object.name + "_error";
	var comment_object = document.getElementById(comment_id);
	
	switch(object.name){
		case "username":
			if( object.value == "" ){
				comment_object.innerHTML="<p class='error'>You must enter a username!</p>";
				valid_username = 0;
			}
			else{
				if( in_user_list( object.value ) ){
					comment_object.innerHTML="<p class='error'>That username is already used</p>";
					valid_username = 0;
				}
				else{
					comment_object.innerHTML="<p class='valid'>Input is valid</p>";
					valid_username = 1;
				}
			}
			break;
		case "firstname":
			if( object.value == "" ){
				comment_object.innerHTML="<p class='error'>Firstname is required!</p>";
				valid_firstname = 0;
			}
			else{
				comment_object.innerHTML="<p class='valid'>Input is valid</p>";
				valid_firstname = 1;
			}
			break;
		case "email":
			if( object.value == "" ){
				comment_object.innerHTML="<p class='error'>Email is required!</p>";
				valid_email = 0;
			}
			else{
				if( object.value.indexOf("@") == -1 ){
					comment_object.innerHTML="<p class='error'>Email does not have an @ symbol</p>";
					valid_email = 0;
				}
				else{
					comment_object.innerHTML="<p class='valid'>Email appears to be valid</p>";
					valid_email = 1;
				}
			}
			break;
		case "password":
			if( object.value == "" ){
				comment_object.innerHTML="<p class='error'>Password is required!</p>";
				valid_password = 0;
			}
			else{
				if(object.value.length < 6 ){
					comment_object.innerHTML="<p class='error'>Password must be at least 6 characters!</p>";
					valid_password = 0;
				}
				else{
					comment_object.innerHTML="<p class='valid'>Password is okay</p>";
					valid_password = 1;
				}
			}
			break;
		case "verify":
			if( object.value != document.getElementsByName("password")[0].value ){
				comment_object.innerHTML="<p class='error'>Passwords do not match!</p>";
				valid_verify = 0;
			}
			else{
				comment_object.innerHTML="<p class='valid'>Input is valid</p>";
				valid_verify = 1;
			}
			break;
	}
	back_button = document.getElementById("back_verify_submit");
	button = document.getElementById("verify_submit");
	if( valid_username & valid_firstname & valid_email & valid_password & valid_verify){
		button.disabled = false;
		setBackground(back_button,"url(graphics/green_glass.png) no-repeat");
	}
	else{
		document.getElementById("verify_submit").disabled = true;
		setBackground(back_button,"url(graphics/clear_glass.png) no-repeat");
	}
	setBackground( object, "url(graphics/cloud.png)" );
}


function verify_login( object, leave )
{
	username = document.getElementById("login_username").value;
	password = document.getElementById("login_password").value;
	button = document.getElementById("login_button");
	back_button = document.getElementById("back_login_button");
		
	if ( (username == "") || (password == "") ){
		button.disabled = true;
		setBackground(back_button,"url(graphics/clear_glass.png) no-repeat");
	}
	else{
		button.disabled = false;
		setBackground(back_button,"url(graphics/green_glass.png) no-repeat");
	}
	if(leave)
		setBackground( object, "transparent url('graphics/cloud.png')" );
}

function glass_enable( button_name )
{
	back_button = "back_"+button_name;
	
	document.getElementById(button_name).disabled=false;
	set_background(document.getElementById(back_button),"url(graphics/green_glass.png) no-repeat");
}

function glass_disable( button_name )
{
	back_button = "back_"+button_name;
	
	document.getElementById(button_name).disabled=true;
	set_background(document.getElementById(back_button),"url(graphics/clear_glass.png) no-repeat");
}

//Use these functions for button control
function setBorder ( object, newBorder )
{
	object.style.border = newBorder;
}

function setImage( object, newImage )
{
	object.src=newImage;
}


function table_info()
{
	var table = document.getElementById("ingredient_table");
	var numrows = table.rows.length;
	var html_string="<p>(Number of rows in table: "+numrows+")</p>";

	for(var i=1; i<numrows; i++){
		rowObject = table.rows[i];
		var index=rowObject.id.substr(5);
		html_string+="<p>"+document.getElementById("order"+index).value+" - ";
		html_string+=document.getElementById("quant"+index).value+" - ";
		html_string+=document.getElementById("unit"+index).value+" - ";
		html_string+=document.getElementById("item"+index).value+"</p>";
	}
	html_string+="<p>High = "+document.getElementById("high_index").value+"</p>";
	document.getElementById("info").style.display='block';
	document.getElementById("info").innerHTML="<h1>Table Info</h1><p class=error>"+html_string+"</p>";
}


function setButtonImage( object, newImage )
{
	object.childNodes[0].src=newImage;
}

function setBackground( object, newBackground )
{
	object.style.background=newBackground
}


function recipe_change( mainChange )
{
	var button = document.getElementById("submit_recipe");
	var back_button = document.getElementById("back_submit_recipe");
	
	setBorder(document.getElementById("paper"),"1px red solid");
	document.getElementById("changed").value = mainChange;
	
	//check data - must have a title
	if( document.getElementById("title").value == ""){
		button.disabled = true;
		setBackground(back_button,"url(graphics/clear_glass.png) no-repeat");
	}
	else{
		button.disabled = false;
		setBackground(back_button,"url(graphics/green_glass.png) no-repeat");
	}	
}


function ingredient_update()
{
	document.getElementById("ing_changed").value = "1";	
	
	recipe_change( 0 );
}

function remove_ingredient_row( index )
{
	var object = document.getElementById("entry"+index);
	var row = object.rowIndex;
	var table = document.getElementById("ingredient_table");
	var numrows = document.getElementById("ingredient_table").rows.length;
	
	table.deleteRow(row);
	
	/*for( var i=parseInt(row); i<=numrows; i++){
		var rowObject = table.rows[i];
		var rowIndex = rowObject.id.substr(5);
		document.getElementById("order"+rowIndex).value--;
	}*/
	set_ingredient_buttons();
	ingredient_update();
}

function move_ingredient_row( index, direction )
{
	//direction 1 is down, -1 is up
	var table = document.getElementById("ingredient_table");
	var object = document.getElementById("entry"+index);
	var row = object.rowIndex;
	var row2 = parseInt(row)+direction;
	var rowObject2=table.rows[row2];
	var index2 = rowObject2.id.substr(5);
	var elements=["quant","unit","item"];
	
	for (x in elements){
		temp = document.getElementById(elements[x]+index).value;
		document.getElementById(elements[x]+index).value = document.getElementById(elements[x]+index2).value;
		document.getElementById(elements[x]+index2).value = temp;
	}
	ingredient_update();
}

function insert_ingredient_row( index )
{
	//Find the rownumber associated with this id.
	object = document.getElementById("entry"+index);
	row = object.rowIndex;
	add_ingredient_row(row,0);
	
	var numrows = document.getElementById("ingredient_table").rows.length;
	
	for( var i=parseInt(row)+1; i<=numrows; i++){
		rowObject = document.getElementById("ingredient_table").rows[i];
		//table[row][0].value
		var rowIndex=rowObject.id.substr(5);
		document.getElementById("order"+rowIndex).value++;
	}
	ingredient_update();
}

function ing_delete_button ( index )
{
	return("<button type='button' title='Remove this ingredient' onmouseover='setButtonImage(this,\"graphics/remove.png\")' onmouseout='setButtonImage(this,\"graphics/remove_dim.png\")'  onClick='remove_ingredient_row("+index+")'><img src='graphics/remove_dim.png'></button>");
}

function ing_insert_button( index )
{
	return("<button type='button' title='Insert new row below this one' onmouseover='setButtonImage(this,\"graphics/add.png\")' onmouseout='setButtonImage(this,\"graphics/add_dim.png\")' onClick='insert_ingredient_row("+index+")'><img src='graphics/add_dim.png'></button>");
}

function ing_up_button( index )
{
	return("<button type='button' title='Move this ingredient up'  onmouseover='setButtonImage(this,\"graphics/up.png\")' onmouseout='setButtonImage(this,\"graphics/up_dim.png\")'  onClick='move_ingredient_row("+index+",-1)'><img src='graphics/up_dim.png'></button>");
}

function ing_down_button( index )
{
	return("<button type='button' title='Move this ingredient down'  onmouseover='setButtonImage(this,\"graphics/down.png\")' onmouseout='setButtonImage(this,\"graphics/down_dim.png\")'  onClick='move_ingredient_row("+index+",1)'><img src='graphics/down_dim.png'></button>");
}

function set_ingredient_buttons()
{
	var table=document.getElementById("ingredient_table");
	var last = table.rows.length-1;
	
	document.getElementById("high_index").value=last;
	
	for(row=1;row<=last;row++)
	{
		rowObject = table.rows[row];
		index = rowObject.id.substr(5);
		document.getElementById("order"+index).value=row;
		if(row == last)
			rowObject.cells[5].innerHTML="";
		else
			rowObject.cells[5].innerHTML=ing_delete_button(index);
		rowObject.cells[6].innerHTML=ing_insert_button(index);
		if(row==1)
			rowObject.cells[7].innerHTML="";
		else
			rowObject.cells[7].innerHTML=ing_up_button(index);
		if(row==last)
			rowObject.cells[8].innerHTML="";
		else
			rowObject.cells[8].innerHTML=ing_down_button(index);
	}
	
}

function add_ingredient_row( row, last )
{
	var high_index = document.getElementById("high_index").value;
	var index = parseInt(high_index)+1;
	var controls = "onblur='setBackground(this,\"transparent url(graphics/cloud.png)\")' onfocus='setBackground(this,\"transparent url(graphics/highlight.png)\")' onmouseover='setBorder(this,\"inset 2px red\")' onmouseout='setBorder(this,\"inset 2px white\")' onchange='ingredient_change(\""+index+"\")'";
		
	newRow = document.getElementById("ingredient_table").insertRow(row);
	order=newRow.rowIndex;
	newRow.id = "entry"+index;
	newCell = newRow.insertCell(0);
	newCell.innerHTML="<input type='hidden' id='order"+index+"' name='order"+index+"' value='"+order+"'>";
	newCell = newRow.insertCell(1);
	newCell.innerHTML="--";
	newCell = newRow.insertCell(2);
	newCell.innerHTML="<input type='text' id='quant"+index+"' name='quant"+index+"' size=3 "+controls+" >";
	newCell = newRow.insertCell(3);
	newCell.innerHTML="<input type='text' id='unit"+index+"' name='unit"+index+"' size=10 "+controls+" >";
	newCell = newRow.insertCell(4);
	newCell.innerHTML="<input type='text' id='item"+index+"' name='item"+index+"' size=23 "+controls+" >";
	newCell = newRow.insertCell(5);
	newCell = newRow.insertCell(6);
	newCell = newRow.insertCell(7);
	newCell = newRow.insertCell(8);
	
	set_ingredient_buttons();
}

function ingredient_change( index )
{
	//if this is currently the last row add a new row.
	var table = document.getElementById("ingredient_table")
	var numrows = table.rows.length;
	var row = document.getElementById("entry"+index).rowIndex;
	
	if( row >= numrows-1 ){
		add_ingredient_row( parseInt(row)+1,1 );
		table.rows[row].cells[5].innerHTML=ing_delete_button(index);
	}
	ingredient_update();
}


function access_button( id )
{
	object = document.getElementById("access_"+id);
	
	if(object.value == 1){
		object.value = 0;
		object.src = "graphics/off.png";
	}
	else{
		object.value = 1;
		object.src = "graphics/on.png";
	}
	attach_file("mysql_update.php?table=user&index="+id+"&column=valid&value="+object.value);
}


function admin_button( id )
{
	object = document.getElementById("admin_"+id);
	
	if(object.value == 1){
		object.value = 0;
		object.src = "graphics/off.png";
	}
	else{
		object.value = 1;
		object.src = "graphics/red.png";
	}
	attach_file("mysql_update.php?table=user&index="+id+"&column=admin&value="+object.value);
}


function delete_button( id, row_object )
{
	username = document.getElementById("username_"+id).value;
	row = row_object.parentNode.parentNode.rowIndex;
	
	if(confirm("Do you really want to delete "+username+"(id: "+id+") from the user table?")){
		attach_file("mysql_delete.php?table=user&index="+id);
		document.getElementById("user_table").deleteRow(row);
	}
}

function user_update( id, column, oldValue, object )
{
	if( oldValue != object.value)
		attach_file("mysql_update.php?table=user&index="+id+"&column="+column+"&value="+object.value);
	setBackground( object, "transparent url('graphics/cloud.png')" );
}

function new_category()
{
	button = document.getElementById("btn_category")

	setBorder(document.getElementById("newRow"),"red 1px solid");
	if(document.getElementById("new_name").value == ""){
		button.disabled = true;
		setImage(button,"graphics/add_dim.png");
	}
	else{
		button.disabled = false;
		setImage(button,"graphics/add.png");
	}
}

function category_change( id )
{
	rowObject = document.getElementById("row"+id);
	buttonObject = document.getElementById("save"+id);
	
	setBorder(document.getElementById("paper"),"1px red solid");
	setBorder(rowObject,"red 1px solid");
	setImage(buttonObject,"graphics/save.png");
	buttonObject.disabled = false;	
}

function enable_adjust( object )
{
	button = document.getElementById("adjust_button");
	back_button = document.getElementById("adjust_button");
	
	if( (object.value != "") && (object.value!="0") )
	{
		button.disabled = false;
		setBackground(back_button,"url(graphics/green_glass.png) no-repeat");
	}
	else{
		button.disabled = false;
		setBackground(back_button,"url(graphics/clear_glass.png) no-repeat");
	}
}



function star_over( rank, number )
{
	for( counter=1; counter<=parseInt(number); counter++){
		var id = rank + counter;
		setImage(document.getElementById(id),"graphics/star_full.png");
	}
	//setImage(object,"graphics/star_full.png");
}


function star_off( rank )
{
	current = document.getElementById(rank).value;
	
	for( x=1; x<=5; x++){
		var id = rank + x;
		if(x<=current)
			setImage(document.getElementById(id),"graphics/star_full.png");
		else
			setImage(document.getElementById(id),"graphics/star_empty.png");
	}

}

function star_click( recipe, user, rank, number )
{
	document.getElementById(rank).value = number;
	star_off( rank );
	document.getElementById("clear_rating").disabled=false;
	attach_file("mysql_rank.php?user="+user+"&recipe="+recipe+"&type="+rank+"&value="+number);
}


function clearRatings( recipe, user )
{
	document.getElementById("taste").value = 0;
	star_off("taste");
	document.getElementById("ease").value = 0;
	star_off("ease");
	document.getElementById("cost").value = 0;
	star_off("cost");
	attach_file("mysql_delete.php?table=rank&recipe="+recipe+"&user="+user);
}

function collapseHover( object )
{
	if(object.value==1)
		setButtonImage(object,"graphics/minus_red.png");
	else
		setButtonImage(object,"graphics/plus_red.png");
}

function collapseOff( object )
{
	if(object.value==1)
		setButtonImage(object,"graphics/minus.png");
	else
		setButtonImage(object,"graphics/plus.png");
}



function collapseClick( object, listId )
{	
	if(object.value==1){
		document.getElementById(listId).style.display="none";
		setButtonImage(object,"graphics/plus.png");
		object.value = 0;
		object.title="Expand this category";	
	}
	else{
		document.getElementById(listId).style.display="block";
		setButtonImage(object,"graphics/minus.png");
		object.value = 1;
		object.title="Collapse this category";
	}
	//update variable database...
	varname = "menu"+listId;
	attach_file("mysql_variable.php?variable="+varname+"&value="+object.value);	
}


function tab_hover( object )
{
	object.style.fontWeight = "bold";
}

function tab_out( object )
{
	object.style.fontWeight = "normal";
}

function tab_down( object, div )
{
	document.getElementById(div).style.display='block';
	object.style.display = "none";
	//move tab and update text and value.
}

function tab_up( tab, div )
{
	document.getElementById(div).style.display='none';
	document.getElementById(tab).style.display='block';
}


function search_category_click ( level, object )
{
	selection = object.value;
	
	list_name="search_sub"+level;
	list=document.getElementById(list_name);
	if( (selection==0) || (category_list[selection]=="") ){
		list.style.display='none';
	}
	else{
		list.style.display='inline';
		list.innerHTML=category_list[selection];
	}
}

function full_search()
{
	submitter = document.getElementById('search_submit').value;
	//build a query string from the filled in sections
	where = 0;
	query = "select * from recipe";
	
	
	if(document.getElementById('search_category') ){
		//Add category (header) to query.
	}	
	if( submitter != "0" ){
		if(!where){
			query+=" where";
			where=1;
		}
		query+=" owner_id="+submitter;
	}
	//title
	//Description
	//Ingredients
	//Instructions
	alert("Query string is: "+query);
}

function limitComment( object, limit ) {

	limitText(object, limit);
	if( (document.getElementById("comment").value) && (document.getElementById("subject").value) )
		glass_enable("save_comment");
	else
		glass_disable("save_comment");
}

function show_div( type, title, text )
{
	document.getElementById(type).style.display='block';
	document.getElementById(type).innerHTML="<h1>"+title+"</h1><p class=error>"+text+"</p>";
}

function hide_div( type )
{
	document.getElementById(type).style.display='none';
}

//This function allows the ability to attach a php file to an inline script.
//Make sure to put this line at the start of the file that is called:
//   header( 'Content-Type: text/javascript');
function attach_file( p_script_url )
{
	script = document.createElement( 'script' );
	script.src = p_script_url;
	document.getElementsByTagName( 'head' )[0].appendChild( script );
}

function trap_enter_key(evt)
{ 
  var evt = (evt) ? evt : ((event) ? event : null); 
  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); 
  if ( (evt.keyCode == 13) && (node.type=="text") ) {
  	return false;
  } 
} 

function limitText( object, limit ) {
	if (object.value.length > limit )
		object.value = object.value.substring(0, limit);
}

