/***************************************************************************
      jesus/modules/forms.js  -  HTML Form functions for JesuS library
                             -------------------
    begin                : Wed Dec 19 2007
    copyright            : (C) 2007 by Filios Konstantinos
    licence              : GNU GPL 2 (or later)
    email                : drcypher@mail.ntua.gr
    last modified        : Wed Dec 19 2007
    module version       : 1.0
 ***************************************************************************/
/*
Function : FormToString
Params: HTML FORM object, Boolean multiple selects
Returns: A string for req_xxx()
*/
function str_form_vars(form, bln_mselects) {

	var opts = bln_mselects || {};
	var str = '&';
	var dom_lmnt;
	var lastElemName = '';

	for (i = 0; i < form.elements.length; i++) {
		dom_lmnt = form.elements[i];

    switch (dom_lmnt.type) {
		case 'text':
		case 'password':  
		case 'hidden':
		case 'textarea':
		case 'select-one':
			str += dom_lmnt.name + '=' + encodeURIComponent(dom_lmnt.value) + '&';
        break;

		// Here we have multiple select html element
		case 'select-multiple':
			var isSet = false;
			
			for(var j = 0; j < dom_lmnt.options.length; j++) {
				var currOpt = dom_lmnt.options[j];
				
				
			if(currOpt.selected) { 
                  if (opts.collapseMulti) { 
                      if (isSet) { 
                          str += ',' + encodeURIComponent(currOpt.value); 
                      } 
                        else { 
                          str += dom_lmnt.name + '=' + encodeURIComponent(currOpt.value); 
                          isSet = true; 
                        } 
                  } 
                  else { 
                        str += dom_lmnt.name + '=' + encodeURIComponent(currOpt.value) + '&'; 
                  } 
                } 
          	}
			
			if (opts.collapseMulti) {
          		str += '&';
        	}
        break;

      // Hmmm nice radio buttons
		case 'radio':
        	if (dom_lmnt.checked) {
          		str += dom_lmnt.name + '=' + encodeURIComponent(dom_lmnt.value) + '&';
        	}
        break;

		// Checkboxes now are parsed correct drcypher :)
		case 'checkbox':
			if (dom_lmnt.checked) {
          		// Collapse multi-select into comma-separated list
          		if (opts.collapseMulti && (dom_lmnt.name == lastElemName)) {
            		// Strip of end ampersand if there is one
            		if (str.lastIndexOf('&') == str.length-1) {
              			str = str.substr(0, str.length - 1);
            		}
            		// Append value as comma-delimited string
            		str += ',' + encodeURIComponent(dom_lmnt.value);
          		}
          		else {
            		str += dom_lmnt.name + '=' + encodeURIComponent(dom_lmnt.value);
          		}
          		str += '&';
          		lastElemName = dom_lmnt.name;
        }
        break;

    }
  }
  // Remove trailing separator
  str = str.substr(0, str.length - 1);
  return str;
}

function submit_form(str_form, var_args)
{
	if ( !(dom_form = $(str_form))) {
		alert('Form `' + str_form + '` not found!');
		return;
	}

	// Concatenate string arguments
	if (var_args) {
		if (typeof(var_args) == 'string') {
			// If no action default, set default AJAX_SCRIPT
			if (dom_form.action == '') {
				dom_form.action = JESUS_AJAX_SCRIPT;
			}
			// If no '?' in form action, replace var_arg's first character
			if (dom_form.action.indexOf('?') == -1) {
				var_args = '?' + var_args.substr(1);
			}
			dom_form.action += var_args;
		// Reset form string from anchor's href
		} else {
			dom_form.action = var_args.href;
		}
	}/* else {
		alert('No valid action script could be determined for `' + str_form + '`!');
		return false;
	}*/

	if ((dom_form.method.toLowerCase() == "get") && ((int_pos = dom_form.action.indexOf('?')) != -1)) {
		str_params = dom_form.action.substr(int_pos + 1);
		str_params = str_params.replace('&amp;', '&');
		arr_params = str_params.split('&');

		str_params = '';
		// Loop through distinct parameters
		for (i = 0; i < arr_params.length; i++) {
			arr_pair = arr_params[i].split('=');
			str_var = arr_pair[0];
			str_val = arr_pair[1];

			// Make sure no input element with that name already exists
			bln_append = true;
			for (j = 0; j < dom_form.elements.length; j++) {
				if (dom_form.elements[j].name == str_var) {
					bln_append = false;
					break;
				}
			}
			if (bln_append) {
				dom_input = document.createElement('input');
				dom_input.setAttribute('type', 'hidden');
				dom_input.setAttribute('name', str_var);
				dom_input.setAttribute('value', str_val);
				dom_form.appendChild(dom_input);
			}
		}
	}

	dom_form.submit();

	return false;
}

