/* Manage functions */

// Load
function loadItems() {

	// Check configuration
	if(fields.length!=headers.length) {
		alert("ERROR: Number of fields not equal to number of headers");
		return;
	}
	if(fields.length!=field_types.length) {
		alert("ERROR: Number of fields not equal to number of field types");
		return;
	}
	
	var container = document.getElementById(container_id);
	var old_html = container.innerHTML;
	
	try {
		var html = "<table";
		if(table_id) html += " id='"+table_id+"'";
		html += " class='manage'>";
		
		// Headers
		html += "<tr><th></th>";
		for(i=0; i<headers.length ;i++) {
			if(field_types[i]!="hidden") html += "<th class='"+fields[i]+"'>"+headers[i]+"</th>";
		}		
		html += "<th class='delete'>&nbsp;</th>";
		if(change_order) html += "<th class='move'>&nbsp;</th>";
		html += "</tr>";
		
		// Table
		for(x=0; x<items.length ;x++) {
			html += "<tr>";
			html += "<th class='count'>"+(x+1)+")";
			html += "</th>";
			for(i=0; i<fields.length ;i++) {
				if(field_types[i]!="select") {
					if(field_types[i]!="hidden") html += "<td class='"+fields[i]+"'>";
					if(field_types[i]!="") html += "<input name='"+fields[i]+"[]' class='"+fields[i]+"' type='"+field_types[i]+"' value=\""+htmlSpecialChars(items[x][fields[i]])+"\">";
					else if(items[x][fields[i]]) html += items[x][fields[i]];
					if(field_types[i]!="hidden") html += "</td>";
				} else {
					html += "<td><select name='"+fields[i]+"[]' class='"+fields[i]+"'>";
					for(k=0; k<select_list[fields[i]].length ;k++) {
						html += "<option";
						if(items[x][fields[i]]==select_list[fields[i]][k]) html += " selected";
						html += " value='" + select_list[fields[i]][k] + "'>" + select_list[fields[i]][k] + "</option>";
					}
					html += "</select></td>";			
				}	
			}
			
			// Delete and move up/down buttons
			delete_button = "delete_"+x;
			html += "<td class='delete_item'><a href='#' onclick='deleteItem("+x+",\""+jsSpecialChars(items[x][primary_field])+"\");'><img src='"+image_folder+"/cross.png' alt='Delete' title='Delete item'";
			html += " /></a></td>";
			html += "<td class='change_order'>";
			if(change_order) {
				if(x!=0) {
					up_button = "up_"+x;
					html += "<a href='#' onclick='moveItemUp("+x+");'><img src='"+image_folder+"/up.gif' width='12' alt='Move up' title='Move item up'";
					html += " /></a>";
				} else html += "<img class='action_button' src='"+image_folder+"/blank.gif' alt='' width='12' />";
				if(x<items.length-1) {
					down_button = "down_"+x;
					html += "<a href='#' onclick='moveItemDown("+x+");'><img src='"+image_folder+"/down.gif' width='12' alt='Move down' title='Move item down'";
					html += " /></a>";
				}
			}
			html += "</td></tr>";
		}
		if(items.length==0) html += "<tr><td class='status' colspan='7'><em>(none)</em></td></tr>";
		
		// Add item
		html += "<tr><td colspan='10'><hr></td></tr>";
		html += "<tr>";
		html += "<th class='count'>add";
		html += "</th>";
		for(i=0; i<fields.length ;i++) {
			if(field_types[i]!="select") {
				if(field_types[i]!="hidden") html += "<td class='"+fields[i]+"'>";
				if(field_types[i]!="") {
					html += "<input name='add' id='"+fields[i]+"' class='"+fields[i]+"' type='"+field_types[i]+"' value=''";
					if(i==1) html += " accesskey='"+accesskey+"'";
					html += " onKeyPress='return submitEnter(event);'>";
				}
				if(field_types[i]!="hidden") html += "</td>";
			} else {
				html += "<td><select name='add' id='"+fields[i]+"' class='"+fields[i]+"'";
				if(i==1) html += " accesskey='"+accesskey+"'";
				html += ">"
				for(k=0; k<select_list[fields[i]].length ;k++) {
					html += "<option value='" + select_list[fields[i]][k] + "'>" + select_list[fields[i]][k] + "</option>";
				}
				html += "</select></td>";			
			}		
		}
		html += "<td><a href='#' onclick='addItem();'><img src='"+image_folder+"/add.png' alt='Add' title='Add item'";
		html += " /></a></td>";
		html += "</tr>";
	
		html += "</table>";
		container.innerHTML = html;

	} catch(e) {
		container.innerHTML = old_html;
	}
}
function submitEnter(e) {
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;
	if (keycode == 13) {
		addItem();
		return false; 
	} else return true;
}


/* Actions */
function saveItems() {
	
	var field = new Array();
	var num_items = items.length;					// total number of items
//	alert("# of fields: "+fields.length);
	
	for(x=0; x<fields.length ;x++) {
		if(field_types[x]) field[fields[x]] = document.getElementsByName(fields[x]+"[]");	
//	alert("field["+fields[x]+"]:"+field[fields[x]].length);
	}
	
	for(i=0; i<num_items; i++) {
		for(x=0; x<fields.length ;x++) {
			if(field_types[x]) {
				var element = field[fields[x]][i];
				if(element.type!="checkbox") items[i][fields[x]] = element.value.replace(/\"/g,"&quot;");
					else items[i][fields[x]] = element.checked;
			}
		}
	}
}

function deleteItem(index,name) {
	saved = false;		// set status for being saved in the database
	
	saveItems();		// save items to the array
	
	// Confirmation
	if(name=="") name = "(untitled)";
	var agree = confirmDelete(name);
	
	// Delete item
	if(agree) {
		items.splice(index,1);		//delete title & item from arrays
		loadItems();		// reload page
	}
}

function addItem() {	// adds input elements with name "add" to the items array at "id"
	saved = false;		// set status for being saved in the database

	saveItems();		// save items to the array

	// Add item
	var new_item = new Array();
	var add_fields = document.getElementsByName("add");
	for(x=0; x<add_fields.length ;x++) {
		if(add_fields[x].type!="checkbox") value = add_fields[x].value;
		else value = add_fields[x].checked;
		new_item[add_fields[x].id] = value;
//	alert(add_fields[x].id + ": "+value+"\n");
	}	items.push(new_item);			// add new item to the items array
	
	loadItems();		// reload page
	
	// Focus on first non-hidden add field
	document.forms[0].elements[0].focus();	// without this line, the next block doesn't work in IE6 (?)
	var x;
	for(x=0; add_fields[x].type=="hidden" && x<add_fields.length ;x++);
	add_fields[x].focus();
}
function moveItemUp(index) {
	if(index==0) return;		// can't move first element up
	saved = false;		// set status for being saved in the database
	
	saveItems();		// save items to the array
	
	// Move item
	var temp = items[index-1];		//store item in temp vars
	items[index-1] = items[index];	//move other item
	items[index] = temp;
		
	loadItems();		// reload page
}
function moveItemDown(index) {
	if(index>items.length-1) return;		// can't move last element down
	saved = false;		// set status for being saved in the database
	
	saveItems();		// save items to the array

	// Move item
	var temp = items[index+1];		//store item in temp vars
	items[index+1] = items[index];	//move other item
	items[index] = temp;
	
	loadItems();		// reload page
}


function showError(error,id) {
	if(id==null) id = "items";
	var span = document.getElementById(id);
	span.innerHTML = "<em>"+error+"</em>";
}