// 1. ENABLE GET FORM
prepareDataFieldFormLoader = function() {
  var divs = collectionToArray(document.getElementById("content").getElementsByTagName("DIV"));
  if (document.getElementById("footer")) {
	var cols = document.getElementById("footer").getElementsByTagName("DIV");
	for (i = 0; i < cols.length; i++) {
	  divs[divs.length] = cols[i];
	}
  }
  if (document.getElementById("actionNavContainer")) {
	var cols = document.getElementById("actionNavContainer").getElementsByTagName("DIV");
	for (i = 0; i < cols.length; i++) {
	  divs[divs.length] = cols[i];
	}
  }
  if (document.getElementById("panelContainer")) {
	var cols = document.getElementById("panelContainer").getElementsByTagName("DIV");
	for (i = 0; i < cols.length; i++) {
	  divs[divs.length] = cols[i];
	}
  }

  var reDataFieldLoader = /dataFieldFormLoader/;
  for (var i=0; i<divs.length; i++) {
	if (divs[i].className && divs[i].className.match(reDataFieldLoader)) {
	  dataFieldFormLoaderOnclick(divs[i].id);
	}
  }
}
if (window.addEventListener) { window.addEventListener("load", prepareDataFieldFormLoader, false) }
else if (window.attachEvent) window.attachEvent("onload", prepareDataFieldFormLoader);

function dataFieldFormLoaderOnclick(dataFieldFormLoaderId) {
  document.getElementById(dataFieldFormLoaderId).onclick = function() {

	// get params from container and content divs
	var params = _getParams(this);
	var contentTarget = _getContentTarget(this);

	var textheight;
	if (params.formType == 'textarea') {
	  textheight  = get_height_of_element(this) + 30;
	}

	var parameters = new Hash();
	parameters.set('level1',        params.dataType);
	parameters.set('level2',        'edit');
	parameters.set('level3',        params.dataTypeId);
	parameters.set('dataFieldName', params.dataFieldName);
	parameters.set('formType',      params.formType);
	parameters.set('ws',            '1');
	parameters.set('rand',          Math.random());

	contentTarget.innerHTML = contentTarget.innerHTML + loader_html;

	new Ajax.Request(url_prefix + '/neo/index.pl', {
	  parameters: parameters,
	  onSuccess: function(transport) {
		contentTarget.innerHTML = transport.responseText;
		handleDataFieldForm(dataFieldFormLoaderId,textheight);
      }
    });

	this.onclick = function() {};
  }
}

// 2. LAYOUT AND ENABLE SAVE FORM
handleDataFieldForm = function(dataFieldFormLoaderId, textheight) {

  var dataFieldFormLoader = document.getElementById(dataFieldFormLoaderId);

  var inputs    = collectionToArray(dataFieldFormLoader.getElementsByTagName("INPUT"));
  var textareas = collectionToArray(dataFieldFormLoader.getElementsByTagName("TEXTAREA"));
  var selects   = collectionToArray(dataFieldFormLoader.getElementsByTagName("SELECT"));
  var formFields = inputs;
  for (i = 0; i < textareas.length; i++) {
	formFields[formFields.length] = textareas[i];
  }
  for (i = 0; i < selects.length; i++) {
	formFields[formFields.length] = selects[i];
  }

  for (i = 0; i < formFields.length; i++) {

	if (textheight) {
	  var fieldheight = get_height_of_element(formFields[i]);
	  if (textheight > fieldheight) {
		formFields[i].style.height = textheight + 'px';
	  }
	}

	try {
	  formFields[i].focus()
	} catch(error) {}

	formFields[i].onclick = function() {}

	formFields[i].onchange = function() {
	  this.onblur = function() {};
	  var re = /dataFieldFormLoader/;
	  var dataFieldFormLoader = this.parentNode.parentNode.className.match(re) ? this.parentNode.parentNode : this.parentNode.parentNode.parentNode;

	  // get params from container and content divs
	  var params        = _getParams(dataFieldFormLoader);
	  var contentTarget = _getContentTarget(dataFieldFormLoader);

	  var parameters = new Hash();
	  parameters.set('level1',               params.dataType);
	  parameters.set('level2',               'save');
	  parameters.set('level3',               params.dataTypeId);
	  parameters.set('dataFieldName',        params.dataFieldName);
	  parameters.set('dataFieldValue',       this.value);
	  parameters.set('textile',              params.textile);
	  parameters.set('forceReloadAfterSave', params.forceReloadAfterSave);
	  parameters.set('autoCreateType',       params.autoCreateType);
	  parameters.set('autoCreateValue',      params.autoCreateValue);
	  parameters.set('ws',                   '1');
	  parameters.set('rand',                 Math.random());

	  contentTarget.innerHTML = contentTarget.innerHTML + loader_html;

	  new Ajax.Request(url_prefix + '/neo/index.pl', {
		parameters: parameters,
		onSuccess: function(transport) {
		  contentTarget.innerHTML = transport.responseText;
		  checkForceRedirectTo();
		  checkForceReload();
		  dataFieldFormLoaderOnclick(dataFieldFormLoaderId);
    	}
	  });
	}

	formFields[i].onblur = function() {
	  var re = /dataFieldFormLoader/;
	  var dataFieldFormLoader = this.parentNode.parentNode.className.match(re) ? this.parentNode.parentNode : this.parentNode.parentNode.parentNode;

	  // get params from container and content divs
	  var params = _getParams(dataFieldFormLoader);
	  var contentTarget = _getContentTarget(dataFieldFormLoader);

	  var parameters = new Hash();
	  parameters.set('level1',        params.dataType);
	  parameters.set('level2',        'read');
	  parameters.set('level3',        params.dataTypeId);
	  parameters.set('dataFieldName', params.dataFieldName);
	  parameters.set('textile',       params.textile);
	  parameters.set('token',         params.token);
	  parameters.set('ws',            '1');
	  parameters.set('rand',          Math.random());

	  contentTarget.innerHTML = contentTarget.innerHTML + loader_html;

	  new Ajax.Request(url_prefix + '/neo/index.pl', {
		parameters: parameters,
		onSuccess: function(transport) {
		  contentTarget.innerHTML = transport.responseText;
		  dataFieldFormLoaderOnclick(dataFieldFormLoader.id);
		}
	  });
	}
  }
}
