
(typeof fw=="undefined"?fw={}:"");
fw.FormFactory=function() {
}


fw.FormFactory.parseParameterString = function (parameterString, formScope) {

	if (parameterString != "") {
		var params = parameterString.split("&");
		for (var i=0;i<params.length;i++) {

			params[i]=params[i].split("=");
			var name=params[i][0];
			if (typeof params[i][1]=="undefined") {
				var value = "";
			} else {
				var value=params[i][1];
			}
			params[i]={name: decodeURIComponent(name), value: decodeURIComponent(value)};
		}

		return params;
	}
	return [];
}


fw.FormFactory.encodeURIParameterString = function (parameterString, formScope) {

	var items = [];
	params = fw.FormFactory.parseParameterString(parameterString);
	for (var i=0;i<params.length;i++) {
		if (params[i].name.indexOf(formScope) == 0) {
			items[items.length] = encodeURIComponent(params[i].name)+'='+encodeURIComponent(params[i].value);
		}
	}
	return items.join("&");
}

fw.FormFactory.createForm = function (container, url, method, target, encType, doc) {

	if (typeof doc == "undefined") {
		doc=document;
	}
	var frm=doc.createElement("FORM");
	frm.action=url;
	frm.method=method;
	frm.target=target;
	frm.encoding=(typeof encType=="undefined" || encType=="" ? "application/x-www-form-urlencoded" : encType);
	container.appendChild(frm);
	return frm;
}

fw.FormFactory.createFormField = function (frm, name, value, doc, type) {

	if (typeof doc == "undefined") {
		doc=document;
	}
	var field=doc.createElement("INPUT");
	field.type=(typeof type == "undefined" ? "hidden" : type);
	field.name=name;
	field.value=value;
	frm.appendChild(field);
	return field;
}

fw.FormFactory.copyForm = function (frm, container, url, method, target, encType, doc, formScope) {

	if (typeof formScope == "undefined") {
		formScope = "";
	}

	var newFrm = fw.FormFactory.createForm(container, url, method, target, encType, doc);

	var el,name,value,isDisabled,collection=[];
	var hasSubmit=false;

	for(var i=0;i<frm.elements.length;i++){
		el=frm.elements[i];
		isDisabled=frm.elements[i].disabled;
		name=frm.elements[i].name;
		value=frm.elements[i].value;
		if(!isDisabled && name && name.indexOf(formScope) == 0){

			switch(el.type){
				case'select-one':
				case'select-multiple':
					for(var j=0;j<el.options.length;j++){
						if(el.options[j].selected){
							if(document.all){
								name = encodeURIComponent(name);
								value = encodeURIComponent(el.options[j].attributes['value'].specified ? el.options[j].value : el.options[j].text);
							}else{
								name = encodeURIComponent(name);
								value = encodeURIComponent(el.options[j].hasAttribute('value') ? el.options[j].value : el.options[j].text);
							}
							fw.FormFactory.createFormField(newFrm, name, value, doc);
						}
					}
					break;
				case'radio':
				case'checkbox':
					if(el.checked){
						name = encodeURIComponent(name);
						value = encodeURIComponent(value);
						fw.FormFactory.createFormField(newFrm, name, value, doc);
					}
					break;
				case'file':

					var newEl=el.cloneNode(true);
					var parentNode=el.parentNode;
					var insertedElement = parentNode.insertBefore(newEl, el);
					newFrm.appendChild(el);
					break;
				case undefined:
				case'reset':
				case'button':
					break;
				case'submit':
					if(hasSubmit==false){
						name = encodeURIComponent(name);
						value = encodeURIComponent(value);
						fw.FormFactory.createFormField(newFrm, name, value, doc);
					}
					break;
				default:
					name = encodeURIComponent(name);
					value = encodeURIComponent(value);
					fw.FormFactory.createFormField(newFrm, name, value, doc);
					break;
			}
		}
	}
	return newFrm;
}

fw.FormFactory.getFormValues = function (frm, formScope) {

	if (typeof formScope == "undefined") {
		formScope = "";
	}
	var el,name,value,isDisabled,values="";
	var hasSubmit=false;
	for(var i=0;i<frm.elements.length;i++){
		el=frm.elements[i];
		isDisabled=frm.elements[i].disabled;
		name=frm.elements[i].name;
		value=frm.elements[i].value;
		if(!isDisabled && name && name.indexOf(formScope) == 0){
			switch(el.type){
				case'select-one':
				case'select-multiple':
					for(var j=0;j<el.options.length;j++){
						if(el.options[j].selected){
							if(document.all){
								values += encodeURIComponent(name) + '=' + encodeURIComponent(el.options[j].attributes['value'].specified ? el.options[j].value : el.options[j].text) + '&';
							}else{
								values += encodeURIComponent(name) + '=' + encodeURIComponent(el.options[j].hasAttribute('value') ? el.options[j].value : el.options[j].text) + '&';
							}
						}
					}
					break;
				case'radio':
				case'checkbox':
					if(el.checked){
						values += encodeURIComponent(name)+'='+encodeURIComponent(value)+'&';
					}
					break;
				case'file':
				case undefined:
				case'reset':
				case'button':
					break;
				case'submit':
					if(hasSubmit==false){
						values += encodeURIComponent(name)+'='+encodeURIComponent(value)+'&';
						hasSubmit=true;
					}
					break;
				default:
					values += encodeURIComponent(name)+'='+encodeURIComponent(value)+'&';
					break;
			}
		}
	}
	values=values.substr(0, values.length-1);
	return values;
}


fw.FormFactory.submitUrl = function (container, url, parameterString, method, target, encType, doc, formScope) {

	var frm=fw.FormFactory.createForm(container, url, method, target, encType, doc);
	var params=fw.FormFactory.parseParameterString(parameterString, formScope);

	for (var i=0;i<params.length;i++) {

		fw.FormFactory.createFormField(frm,params[i].name,params[i].value, doc);
	}

	//alert(""
	//	+"\n frm.action: " + frm.action
	//	+"\n frm.target: " + frm.target
	//	+"\n frm.encoding: " + frm.encoding
	//	+"\n parameterString: " + parameterString);
	frm.submit();
}
fw.FormFactory.inherits(fw.PwObject);

