var KeyWordFormHandler = Class.create();
KeyWordFormHandler.prototype = {

	initialize: function(div, form, input, keywordUrl) {
		this.div = div;
		this.input = input;
		this.form = form;
		this.keywordUrl = keywordUrl;
	},
	
	equals: function(form) {
		return (this.div == form.div && this.form == form.form && this.input == form.input && this.keywordUrl == keywordUrl.form);
	},

	submit: function() {
		var thisClass = this;
		var f = $(this.form);
		if (f) {
			f.request({
				onComplete: function() {
					thisClass.update();
				},
				onFailure: function(t) {
			  		alert('Sorry but an error occurred while saving your keyword.');
				}
			});
		}
		
	},
	
	toArray: function() {
		var table = new Array(2);
		table[0] = this.div;
	    table[1] = this.keywordUrl;
	    //table[2] = this.keywordForms[i].input;
	    return table;
	},
	
	update: function() {
		var table = new Array();
		table[0] = this.toArray();
		updateTables(table);
	},
	
	keys: function(key) {
		if (this.keyEventsActive) {
			if (!key) {
				key = event;
				key.which = key.keyCode;
			}
	
		 	switch (key.which) {
				case 10: // return
					this.submit();
					break;
				case 13: // enter
					this.submit();
					break;
			}
		}
	}
}





var KeyWordFormHelper = Class.create();
KeyWordFormHelper.prototype = {
	
	initialize: function() {
		this.keywordForms = new Array();
	},
	
	formFieldKeyPress: function(event) {
		var e = Event.element(event);
	 	if (e) {
	 		var f = e.form;
	 		if (f) {
	 			var form = this.getForm(f.id);
	 			if (form) {
					form.keys(event);
				} else {
					alert('form not found: ' + f.id);
				}
			} else {
				alert('elements form not found');
			}
		} else {
			alert('event element not found');
		}
	},
	
	getForm: function(name) {
		for ( var i=0; i < this.keywordForms.length; i++) {
			if (this.keywordForms[i][0] == name) {
				return this.keywordForms[i][1];
			}
		}
		return;
	},
	
	getFormIndex: function(name) {
		for ( var i=0; i < this.keywordForms.length; i++) {
			//alert(this.keywordForms[i][0] + "=" + name);
			if (this.keywordForms[i][0] == name) {
				return i;
			}
		}
		return -1;
	},
	
	addForm: function(form, name) {
		
		var kwForm = new Array(2);
		kwForm[0] = name;
		kwForm[1] = form;
		
		// over-write if form already exists
		var fidx = this.getFormIndex(name);
		if (fidx == -1) {
			fidx = this.keywordForms.length;
		}
		this.keywordForms[fidx] = kwForm;
		
	},
	
	submitForm: function(name) {
		if (name) {
			var form = this.getForm(name);
			if (form) {
				form.submit();
			} else {
				alert('form with name "' + name + '" not found');
			}
		} else {
			alert('no form name supplied');
		}
	},
	
	getKeywordTable: function() {
		var keywordTables = new Array();
		for ( var i=0; i < this.keywordForms.length; i++) {
		    keywordTables[i] = this.keywordForms[i][1].toArray();
		}
		return keywordTables;
	}

}


var joKeywordForms = new KeyWordFormHelper();

// call back function for key press
function joFormFieldKeyPress(key) {
	joKeywordForms.formFieldKeyPress(key);
}

// submits form
function joSubmitForm(name) {
	joKeywordForms.submitForm(name);
	return false;
}

// clear value in input box
function joClearValue(name) {
	var e = $(name);
	if (e && e.value) {
		e.value = "";
	}
}

// remove keyword by id
function joRemoveKeywordByID( id, link ) {
	joRequestHide(id, link);
}

function joRequestHide(id, link) {
	var objAJ = new Ajax.Request(link, {
    method: 'get',
    onFailure: function(request) {;},
    onComplete: function(request) {
      var obj = $( id );
      if ( obj != null ) {
        obj.hide();
      }       
    }
  });
}
