//****************************************************************************
//page:		BBFormFunctions.js
//Author:	B.Wout
//Date:		09-04-2004
//Purpose:	prepare xml from filled in form and send it away
//-----------------------------------------------------------------------------
// Date changed:		By who:			Reason:
// 03-04-2004			b.wout			getDomDocumentPrefix & getXmlHttpPrefix added
// 2004 03 08			b.wout			included the redirect function goAway(), htis will redirect
// the user to the return page
//****************************************************************************
var strXML;
var bln_ReqularFormPost;
var strFormAction = "";

//=============================================================================
// function: sendForm
// purpose: creates html form the formobject
//-----------------------------------------------------------------------------
// Date changed:		By who:			Reason:
//=============================================================================
function SendForm(){
	if(intitializeXmlDoc()){
		submitBBForm();
	}
}

//=============================================================================
// function: intitializeXmlDoc
// purpose: 
//-----------------------------------------------------------------------------
// Date changed:		By who:			Reason:
//=============================================================================
function intitializeXmlDoc(){
var objFormTable = document.getElementById('formTable');
var emailFrom = objFormTable.emailFrom;
var emailTo = objFormTable.emailTo;
var subject = objFormTable.subject;
var returnPage = objFormTable.ReturnPage;
var bbFormName = objFormTable.BBFormName;
var bbFormActionTypeEmail = objFormTable.BBFormActionTypeEmail;
var bbFormActionTypeDb = objFormTable.BBFormActionTypeDb;
var strFormElements = getElements();
strFormAction = objFormTable.action;

	if (!strFormElements){
		return false;
	}else{

		// create XML document with default header and primary node 
		strXML = "<?xml version='1.0' ?><bbform xmlns='http://tempuri.org/BBForm.xsd'><bbformproperties>";
		strXML += getProperties(bbFormName, returnPage);
		strXML += "<bbformactions>" + getActions(bbFormActionTypeDb, bbFormActionTypeEmail, emailFrom, emailTo, subject) + "</bbformactions>";
		strXML += "</bbformproperties>";
		strXML += "<bbformelements>" + strFormElements + "</bbformelements>";
		strXML += "</bbform>"; 
		return true;	
	}
}

//=============================================================================
// function: getProperties
// purpose: 
//-----------------------------------------------------------------------------
// Date changed:		By who:			Reason:
//=============================================================================
function getProperties(formName, returnPage){
	var strProperties = "<bbformname>" + formName + "</bbformname>";
	strProperties += "<returnpage><![CDATA[" + returnPage + "]]></returnpage>";
	return strProperties;
}

//=============================================================================
// function: getActions
// purpose: 
//-----------------------------------------------------------------------------
// Date changed:		By who:			Reason:
//=============================================================================
function getActions(DB, email, from, to, subject){
	var strActions = "";
	if(email == "true"){
		strActions += "<bbformaction>";
		strActions += "<bbformactiontype>email</bbformactiontype>";
		strActions += "<bbform_emailto>" + to + "</bbform_emailto>";
		strActions += "<bbform_emailfrom>" + from + "</bbform_emailfrom>";
		strActions += "<bbform_emailsubject>" + subject + "</bbform_emailsubject>";
		strActions += "</bbformaction>";
	}
	if(DB == "true"){
		strActions += "<bbformaction>";
		strActions += "<bbformactiontype>db</bbformactiontype>";
		strActions += "</bbformaction>";
	}
	return strActions;
}


//=============================================================================
// function: getElements
// purpose: this function searches the formTable for FormElements and labels.
// formelements are validated against the "required" and "email" attributes.
//-----------------------------------------------------------------------------
// Date changed:		By who:			Reason:
//=============================================================================
function getElements(){
	var objForm = document.getElementById('formTable');
	var strElements = "";
	
	for(var i=0; i<objForm.rows.length; i++){
		if(objForm.rows[i].cells){
			for (var j=0; j < objForm.rows[i].cells.length; j++){
				if(objForm.rows[i].cells[j].innerHTML != ''){
					var arrFormInput = eval(objForm.rows[i].cells[j]).getElementsByTagName('INPUT');
					var arrFormSelect = eval(objForm.rows[i].cells[j]).getElementsByTagName('select');
					var arrFormTextArea = eval(objForm.rows[i].cells[j]).getElementsByTagName('textarea');
					for(k=0; k < arrFormInput.length; k++){
						if(arrFormInput[k].type != 'button' && arrFormInput[k].type != 'undefined'){
							if(validateBBFormElement(arrFormInput[k])){ 
								switch (arrFormInput[k].type){
									case  'checkbox':
										if(arrFormInput[k].checked){
											strElements += createXmlElement(arrFormInput[k].name, arrFormInput[k].value, arrFormInput[k].id, arrFormInput[k].type); 
										}
										break;
									case 'radio':
										if(arrFormInput[k].checked){
											strElements += createXmlElement(arrFormInput[k].name, arrFormInput[k].value, arrFormInput[k].id, arrFormInput[k].type); 
										}
										break;
									case 'file':
											strElements += converBBFormFileToXML(arrFormInput[k]);
										break;
									default:
										strElements += createXmlElement(arrFormInput[k].name, arrFormInput[k].value, arrFormInput[k].id, arrFormInput[k].type); // the id is same as content for label
										break;
								}
							}else{
								return false;
							}
						}
					}
					for(k=0; k < arrFormSelect.length; k++){
						if(validateBBFormElement(arrFormSelect[k])){ //
							strElements += converBBFormSelectToXML(arrFormSelect[k]); // the id is same as content for label
						}else{
							return false;
						}
					}
					for(k=0; k < arrFormTextArea.length; k++){
						if(validateBBFormElement(arrFormTextArea[k])){ //
							strElements += converBBFormTextAreaToXML(arrFormTextArea[k]); // the id is same as content for label
						}else{
							return false;
						}
					}
				}
			}
		}
	}
return strElements;
}

//=============================================================================
// function: createXmlElement
// purpose: 
//-----------------------------------------------------------------------------
// Date changed:		By who:			Reason:
//=============================================================================
function createXmlElement(element_name, element_value, element_label, element_type){
	var strXmlElement = "";
	strXmlElement += "<bbformelement>";
	strXmlElement += "<bbformelementname>" + element_name + "</bbformelementname>";
	strXmlElement += "<bbformelementvalue><![CDATA[" + element_value + "]]></bbformelementvalue>";
	strXmlElement += "<bbformelementlabel>" + element_label + "</bbformelementlabel>";
	strXmlElement += "<bbformelementtype>" + element_type + "</bbformelementtype>";
	strXmlElement += "</bbformelement>";
	return strXmlElement;
}

//=============================================================================
// function: validateBBFormElement
// purpose: 
//-----------------------------------------------------------------------------
// Date changed:		By who:			Reason:
//=============================================================================
function validateBBFormElement(element){
	if(element.required){
		if(element.required == "true" && (element.value == "" || element.value == "undefined")){
			alert(element.RequiredMsg);
			element.focus();
			return false;
		}
	}
	if(element.regex  && element.value != "" && element.value != "undefined" && !validateRegEx(element.value, element.regex)){
		alert(element.ValidationMsg);
		element.focus();
		return false;
	}
return true;
}


//=============================================================================
// function: converBBFormSelectToXML
// purpose: 
//-----------------------------------------------------------------------------
// Date changed:		By who:			Reason:
//=============================================================================
function converBBFormSelectToXML(BBFormElement){
	var elementName = BBFormElement.name;
	var elementType = BBFormElement.type;
	var elementLabel = BBFormElement.id;
	var elementValue = "";
		
	for(i=0; i <BBFormElement.options.length; i++){
		if(BBFormElement.options[i].selected){
			if(elementValue == ""){
				elementValue += BBFormElement.options[i].value;
			}else{
				elementValue += ", " + BBFormElement.options[i].value;
			}
		}
	}
	return createXmlElement(elementName, elementValue, elementLabel, elementType);
}

//=============================================================================
// function: converBBFormFileToXML
// purpose: 
//-----------------------------------------------------------------------------
// Date changed:		By who:			Reason:
//=============================================================================
function converBBFormFileToXML(BBFormElement){
	var elementName = BBFormElement.name;
	var elementValue = BBFormElement.value;
	var elementLabel = BBFormElement.id;
	var elementType = BBFormElement.type;
	elementValue = elementValue.substring(elementValue.lastIndexOf('\\')+1);
	return createXmlElement(elementName, elementValue, elementLabel, elementType);
}

//=============================================================================
// function: converBBFormTextAreaToXML
// purpose: 
//-----------------------------------------------------------------------------
// Date changed:		By who:			Reason:
//=============================================================================
function converBBFormTextAreaToXML(BBFormElement){
	var elementName = BBFormElement.name;
	var elementValue = BBFormElement.innerText;
	var elementLabel = BBFormElement.id;
	var elementType = BBFormElement.type;
	return createXmlElement(elementName, elementValue, elementLabel, elementType);
}

//=============================================================================
// function: submitBBForm
// purpose: sends xml document to server
// if the post method is a regular form post, a hidden field should be created and the xml string
// assigned as the value for that hidden field.
//-----------------------------------------------------------------------------
// Date changed:		By who:			Reason:
//=============================================================================
function submitBBForm(){
		var objFormTable = document.getElementById('formTable');
		var newHiddenField = document.createElement("input");
		with(newHiddenField){
			setAttribute("type", "hidden");
			setAttribute("name", "hid_BBForm");
			setAttribute("value", strXML);
		}
		var formRef;
		formRef = document.forms[0]; 
		formRef.appendChild(newHiddenField); 
		//alert(newHiddenField.value);
		document.forms[0].submit();
}

//=============================================================================
// function: validateRegEx
// pupose:
//-----------------------------------------------------------------------------
// Date changed:		By who:			Reason:
//=============================================================================
function validateRegEx(src, regex){
	var pattern = eval("\'" + regex + "\'");
	var RegEx = new RegExp(pattern);
	return RegEx.test(src);
}
