/**
* Library of functions called from the XSL-stylesheet, these functions are NOT used from the formDesigner
* @version $Id: submitter.js,v 1.0 2006/7/12
* @author Ivo Toby <ivo@i-v-o.nl> 
* @copyright Internet Voor Ondernemers 2006
* @package WPS
*/

	function postForm(formID){
		var form = $(formID); 
		handlePost(form);
	}

	function handleRealPost(req, aForm){
		var resDOM = req.responseXML;
		var messages = resDOM.getElementsByTagName('message');
		var form = getFormFromDOM(resDOM, aForm.getAttribute('id'))
		var responseText = getResponseText(form, 'handled');
		var aDiv = document.createElement('div');
		aDiv.setAttribute("class", "form_handled");
		aDiv.appendChild(document.createTextNode(responseText));
		new Effect.BlindUp(aForm, {duration : 0.5});
		$('formLayer_'+aForm.getAttribute('id')).appendChild(aDiv);
	}

	function handleHandlers(aForm){
		var func = function(req){handleRealPost(req, aForm);}
		var wpsRPC = new wps.rpc;
		//wpsRPC.debug = true;
		wpsRPC.createCall('form', func);
		wpsRPC.call('handleForm', createArgs(aForm));
		return;
	}
	
	function removeForm(aForm){
		for (var i=0;i<aForm.elements.length;i++){
			aForm.removeChild(aForm[i]);
		}
		return;
	}
	
	function handleRequestForID(req, aForm){
		var resDOM = req.responseXML;
		var messages = resDOM.getElementsByTagName('message');
		for (var i = 0;i<messages.length;i++){
			if (!messages[i].childNodes[0].nodeValue){
				if (confirm("Er is een error opgetreden bij het opslaan van het veld. Druk op OK om de pagina opnieuw te laden, en het nog eens te proberen.")){
					window.location.reload();
				}else{
					return false;
				}
			}else{
				// add hidden input with UUID()
				var uuidValue = messages[i].childNodes[0].nodeValue;
				var uuidElem = document.createElement("input");
				uuidElem.setAttribute("type", "hidden");
				uuidElem.setAttribute("name", "UUID");
				uuidElem.setAttribute("value", uuidValue);
				aForm.insertBefore(uuidElem, aForm.elements[0]);
				handleHandlers(aForm);
			}
		}
		
	}
	
	function handlePost(aForm){
		var func = function(req){handleRequestForID(req, aForm);}
		var wpsRPC = new wps.rpc;
		wpsRPC.createCall('form', func);
		wpsRPC.call('getPostID');
	}
	
	
	function createArgs(aForm){
		var args = '';
		for (var i=0;i<aForm.elements.length;i++){
			if (aForm.elements[i].getAttribute("type") == 'radio'){
				if (aForm.elements[i].checked == true){
					args += '<arg>' + aForm.elements[i].getAttribute("name") + '=' + aForm.elements[i].getAttribute("value") + '</arg>';
				}
			}else if ( !((aForm.elements[i].getAttribute("type") == 'button') || (aForm.elements[i].getAttribute("type") == 'checkbox') || (aForm.elements[i].getAttribute("type") == 'submit')) && (aForm.elements[i].name)){
				args += '<arg>' + aForm.elements[i].getAttribute("name") + '=' + aForm.elements[i].value + '</arg>';
			}
		}
		args += collectCheckBoxValues(aForm);
		return args + '<arg>formSrc=' + aForm['formSrc'].value + '</arg>';
	}	
	//OLD
	function getResponseText(formNode, responseType){
		var responses = formNode.getElementsByTagName('response');
		for (var i=0;i<responses.length;i++){
			if ( (responses.item(i).getAttribute('type') == responseType) && (responses.item(i).hasChildNodes()) ){
				return responses.item(i).childNodes.item(0).nodeValue;
			}
		}
	}
	
	function getFormFromDOM(aDOM, formID){
		var forms = aDOM.getElementsByTagName('form');
		for (var i=0;i<forms.length;i++){
			if (forms.item(i).getAttribute('id') == formID) return forms.item(i); 
		}
		return null;
	}
	
	function collectCheckBoxValues(aForm){
		var elements = aForm.elements;
		var handled = new Array();
		var output = '';
		for (var i=0;i<elements.length;i++){
			if (elements.item(i).getAttribute("type") == 'checkbox'){
				if (handled.indexOf(elements.item(i).getAttribute("name")) == -1){
					output += "<arg>" +  elements.item(i).getAttribute("name") + '=' + (getCheckboxValues(aForm, elements.item(i).getAttribute("name"))) + "</arg>";
					handled.push(elements.item(i).getAttribute("name"));
				}
			}
		}
		return output;
	}
	
	function getCheckboxValues(aForm, nameVal){
		var elements = aForm.elements;
		var handled = new Array();
		var output = new String('');
		for (var i=0;i<elements.length;i++){
			if (elements.item(i).getAttribute("name") == nameVal){
				if (elements.item(i).checked) output += elements.item(i).getAttribute("value") + ',';
			}
		}
		return output.substr(0, (output.length-1));
	}
	
	
