function Form(_form, _title, _redirect, _from, _to, _database)
{
	// Create hidden input boxes

	// Content
	input = document.createElement( 'INPUT' );
	input.type = 'hidden';
	input.name = 'df_content';
	input.value = stripHTMLFormObjects(_form); //_form.innerHTML;
	_form.appendChild(input);
	
	// Title
	var input = document.createElement( 'INPUT' );
	input.type = 'hidden';
	input.name = 'df_title';
	input.value = _title;
	_form.appendChild(input);

	// Redirect
	input = document.createElement( 'INPUT' );
	input.type = 'hidden';
	input.name = 'df_redirect';
	input.value = _redirect;
	_form.appendChild(input);

	// From
	input = document.createElement( 'INPUT' );
	input.type = 'hidden';
	input.name = 'df_from';
	input.value = _from;
	_form.appendChild(input);

	// To
	input = document.createElement( 'INPUT' );
	input.type = 'hidden';
	input.name = 'df_to';
	input.value = _to;
	_form.appendChild(input);

	for (i=0; i < _form.getElementsByTagName("INPUT").length; i++)
	{
		if (_form.getElementsByTagName("INPUT")[i].type == "button" || _form.getElementsByTagName("INPUT")[i].type == "submit" || _form.getElementsByTagName("INPUT")[i].type == "image")
		{
			_form.getElementsByTagName("INPUT")[i].disabled = true;
		}
	}
	

    // Database
	input = document.createElement( 'INPUT' );
	input.type = 'hidden';
	input.name = 'df_database';
	input.value = _database;
	_form.appendChild(input);
	
    GetNameValuePair(_form);


    //return false;
	return true;	
}

function stripHTMLFormObjects(_form)
{
    htmlOuter();

    var cleanForm = _form.innerHTML;
    var allElements = _form.elements;
    for (i = 0; i < allElements.length; i++)
    {
        if (allElements[i].type == 'text' || allElements[i].type == 'password' || allElements[i].type == 'textarea')
        {
            cleanForm = cleanForm.replace(outerHTMLFix(allElements[i]), allElements[i].value + ' ');
        }
        else if (allElements[i].type == 'checkbox' || allElements[i].type == 'radio')
        {
            if (allElements[i].checked)
            {
                cleanForm = cleanForm.replace(outerHTMLFix(allElements[i]), '[X] ');
            }
            else
            {
                cleanForm = cleanForm.replace(outerHTMLFix(allElements[i]), '[ ] ');
            }
        }
        else if (allElements[i].type == 'select-one' || allElements[i].type == 'select-multiple')
        {  
           var selectValues = '';
           selectOptions = allElements[i].options;
           for (j = 0; j < selectOptions.length; j++)
           {
                if (selectOptions[j].selected)
                {
                    selectValues = selectValues + '<br>' + selectOptions[j].text + ' ';
                }
           }
           cleanForm = cleanForm.replace(outerHTMLFix(allElements[i]), selectValues);
        }
        else if (allElements[i].type == 'hidden' || allElements[i].type == 'reset' || allElements[i].type == 'submit' || allElements[i].type == 'button' || allElements[i].type == 'image')
        {
            cleanForm = cleanForm.replace(outerHTMLFix(allElements[i]), ' ');
        }
    }    
    return cleanForm;
}

function GetNameValuePair(_form)
{
    var allElements = _form.elements;
    var nameValue = '';
    for (i = 0; i < allElements.length; i++)
    {
        if (allElements[i].type == 'text' || allElements[i].type == 'password' || allElements[i].type == 'textarea' || allElements[i].type == 'hidden')
        {
            name = allElements[i].name;
            if (name != 'df_content')
            {
                value = allElements[i].value;
                nameValue = nameValue +  name + '||=@=||' + value + '{{<SEPERATOR>}}'
            }
        }
        else if (allElements[i].type == 'checkbox' || allElements[i].type == 'radio')
        {
            name = allElements[i].name;
            if (allElements[i].checked)
            {
                value = allElements[i].value;
                nameValue = nameValue +  name + '||=@=||' + value + '{{<SEPERATOR>}}'
            }
        }
        else if (allElements[i].type == 'select-one' || allElements[i].type == 'select-multiple')
        {  
           name = allElements[i].name;
           selectOptions = allElements[i].options;
           for (j = 0; j < selectOptions.length; j++)
           {
                if (selectOptions[j].selected)
                {
                    value = selectOptions[j].text;
                    nameValue = nameValue +  name + '||=@=||' + value + '{{<SEPERATOR>}}'
                }
           }
        }
        
    }
    
	input = document.createElement( 'INPUT' );
	input.type = 'hidden';
	input.name = 'df_nameValuePair';
	input.value = nameValue;
	_form.appendChild(input);
}

function outerHTMLFix(element)
{
    return element.outerHTML;
}

function htmlOuter()
{
        if (document.body.__defineGetter__) {
            if (HTMLElement) {
                var element = HTMLElement.prototype;
                if (element.__defineGetter__) {
                    element.__defineGetter__("outerHTML",
                        function () {
                            var parent = this.parentNode;
                            var el = document.createElement(parent.tagName);
                            el.appendChild(this);
                            var shtml = el.innerHTML;
                            parent.appendChild(this);
                            return shtml;
                        }
                    );
                }
            }
        }
}