var form='';
var resultMap;
var gformName='';

FHCForms = {
  Version: '0.1',
  require: function(libraryName) {
    // inserting via DOM fails in Safari 2.0, so brute force approach
    document.write('<script type="text/javascript" src="'+libraryName+'"></script>');
  },
  load: function() {
    if(typeof Prototype=='undefined') 
      throw("FHC Forms requires the Prototype JavaScript framework >= 1.4.0");
    var scriptTags = document.getElementsByTagName("script");
    for(var i=0;i<scriptTags.length;i++) {
      if(scriptTags[i].src && scriptTags[i].src.match(/fhc_forms\.js$/)) {
        var path = scriptTags[i].src.replace(/fhc_forms\.js$/,'');
        this.require(path + 'json.js');
      }
    }
  }
}
FHCForms.load();

function form_validate(formName, resultMap_in) {
	form = $('form_'+formName);
	resultMap = resultMap_in;
	var query = "ajaxVerify=true&" + Form.serialize(form);
	var url = "/ajax/" + form.action;
	
	var request = new Ajax.Request(url,
		{
			method: 'post',
			parameters: query,
			onComplete: validation_complete
		});
	return false;
}

function submit_portlet(formname, resultMap_in) {
	form = $('form_'+formname);
	gformName = formname;
	var request = new Ajax.Request(form.action,
		{
			method: 'post',
			parameters: Form.serialize(form),
			onComplete: portlet_complete
		});
	
	var throbber = document.createElement("IMG");
	throbber.src="/eva/images/icon/throbber.gif";
	throbber.className="throbber";
	form.parentNode.insertBefore(throbber,form);
	return false;
}
  
function portlet_complete(req) {
	var portlet = $('portlet_'+gformName);
	
	var d = document.createElement("DIV");
	d.style.display = 'hidden';
	d.innerHTML = req.responseText;

	if( d.childNodes.length > 0) {
		if( d.childNodes[0].tagName == "SCRIPT" ) {
			eval( d.childNodes[0].innerHTML );
		}
	}

	for(var i=0; i<d.childNodes.length; i++) {
		var node = d.childNodes[i];
		if(node.className == "box") {
			portlet.innerHTML = node.innerHTML;
			return false;
		}
	}
}
  
function validation_complete(req) {
	var results = eval('(' + req.responseText + ')');
	var formElements = Form.getElements(form);
	
	for(var i=0; i<formElements.length; i++) {
		var name = formElements[i].name;
		var fieldErrorUL = str_to_ul( results[name] );
		if(fieldErrorUL) {
			alert("fhc_forms.js, Line 46: this is wrong!");
			$('fieldError_'+ form.name + name).innerHTML = fieldErrorUL.innerHTML;
		} else {
			var el = $('fieldError_'+ form.name + name);
			if(el) el.innerHTML = '';	
		}
	}
	
	resultMap[ results["result"] ]();	
}
  
function str_to_ul(str) {
	if(! str ) return;
	var a = str.substring(1, str.length-1).split(",");
	var ul = document.createElement("UL");
	ul.className="fieldError";
	
	for(var i=0; i<a.length; i++) {
		var li = document.createElement("LI");
  		var txt = document.createTextNode(a[i]);
  		li.appendChild(txt);
  		ul.appendChild(li);
  	}
  	return ul;
}
