var HtmlUtil = (function(){

	var chars = new Array (	'&','ü','Ü','ä','Ä','ö','Ö','>','<');
  	var entities = new Array ('&amp;','&uuml;','&Uuml;','&auml;','&Auml;','&ouml;','&Ouml;','&lt;','&gt;');
	
	function createXMLDocument() {
		var xmlDoc;
		if (document.implementation && document.implementation.createDocument)
		{
			xmlDoc = document.implementation.createDocument("", "ajax-request", null);
		}
		else if (window.ActiveXObject)
		{
			xmlDoc = new ActiveXObject("MSXML2.DOMDocument");
			xmlDoc.appendChild(xmlDoc.createElement("ajax-request"));
		}
		return xmlDoc;
	}
	
	return ({
		encodeHTMLEntities:function encodeHTMLEntities(string) {
  			s = string;
			for (var i=0;i<chars.length;i++) {s = s.replace(new RegExp().compile(chars[i],'g'), entities[i]);}
			return s;
		},
		getFormAction:function(form) {
			return form.action;
		},
		getFormData:function(form) {
			var url = "";
			if (form) {
	    		// get all input tags
				inputTags = form.elements;
				for (var i=0;i<inputTags.length;++i) {
					switch(inputTags[i].type) {
					case 'select-one':
					case 'select-multiple':
						options = inputTags[i].options;
						for (var j=0;j<options.length;++j) {
							if (options[j].selected) {
								if (i!=0) { url+="&"; }
								url+=inputTags[i].name+"="+escapeURIComponent(options[j].value);
							}
						}
						break;
					case 'radio':
					case 'checkbox':
						if (inputTags[i].checked) {
							if (i!=0) { url+="&"; }
							url+=inputTags[i].name+"="+escapeURIComponent(inputTags[i].value);					
						}
						break;
					case 'hidden':
					case 'password':
					case 'text':
					case 'textarea':
					    // use relevant input fields only
						if (i!=0) { url+="&"; }
						url+=inputTags[i].name+"="+escapeURIComponent(inputTags[i].value);				
						break;
					default:
					}
				}
			}
			return url;
		},
		getFormAsXML:function(form) {
			var doc = createXMLDocument();
			var root = doc.getElementsByTagName("ajax-request")[0];
			var e,el;
			if (form) {
	    		// get all input tags
				inputTags = form.elements;
				for (var i=0;i<inputTags.length;++i) {
					switch(inputTags[i].type) {
					case 'select-one':
					case 'select-multiple':
						e=doc.createElement("parameter");
					    el=doc.createElement("key");
					    el.appendChild(doc.createCDATASection(inputTags[i].name));
					    e.appendChild(el);
						options = inputTags[i].options;
						for (var j=0;j<options.length;++j) {
							if (options[j].selected) {
								el=doc.createElement("value");
					    		el.appendChild(doc.createCDATASection(inputTags[i].value));
					    		e.appendChild(el);
							}
						}
						root.appendChild(e);							
						break;
					case 'radio':
					case 'checkbox':
						if (inputTags[i].checked) {
							e=doc.createElement("parameter");
					    	el=doc.createElement("key");
					    	el.appendChild(doc.createCDATASection(inputTags[i].name));
					    	e.appendChild(el);
							el=doc.createElement("value");
					    	el.appendChild(doc.createCDATASection(inputTags[i].value));
					    	e.appendChild(el);
							root.appendChild(e);					
						}
						break;
					case 'hidden':
					case 'password':
					case 'text':
					case 'textarea':
					    e=doc.createElement("parameter");
					    el=doc.createElement("key");
					    el.appendChild(doc.createCDATASection(inputTags[i].name));
					    e.appendChild(el);
						el=doc.createElement("value");
					    el.appendChild(doc.createCDATASection(inputTags[i].value));
					    e.appendChild(el);
						root.appendChild(e);			
						break;
					default:
					}
				}
			}
			return doc;
		}
	});
})();
