var Formidable = {

	Context: {
		aForms: {}	// placeholder for subscribed forms in the page
	},

	Dom: {
		bDomApiLoaded: false,
		createElement: function(sTag, aProps) {

			var element;
			if(ameosFormidableInfoBrowser().browser == "msie") {

				var sPattern = "";
				for(iIndex in aProps) {
					sPattern += " " + iIndex + "=\"" + aProps[iIndex] + "\"";
				}

				sPattern = "<" + sTag + sPattern + ">";
				
				element = document.createElement(sPattern);
			} else {	// default behaviour

				try {
					element = document.createElement(sTag)
					
					for(iIndex in aProps) {
						element.setAttribute(iIndex, aProps[iIndex]);
					}

				} catch(ex) {
					// silent exception
				}
			}

			return element;
		}
	},

	Events: {
		SUBMIT_FULL: 1,
		SUBMIT_REFRESH: -1,
		SUBMIT_TEST: -2,
		SUBMIT_DRAFT: -3,
		
		executeServerEvent: function(sFromUniqueId, sEventId, sSubmitMode, sParams, sHash, sJsConfirm) {

			if(sJsConfirm != false) {
				bThrow = confirm(unescape(sJsConfirm));
			} else {
				bThrow = true;
			}

			if(bThrow) {

				var sFormIdToUse = Formidable.Context.aForms[sFromUniqueId]["sFormIdToUse"];

				var sFormToUseUniqueId = Formidable.Context.aForms[sFromUniqueId]["sFormToUseUniqueId"];
				var oForm = document.forms[sFormIdToUse];

				var aForms = Formidable.Context.aForms[sFromUniqueId]["aForms"];
				var aUniqueForms = Formidable.Context.aForms[sFromUniqueId]["aUniqueForms"];

				window.status = "Server Event thrown";
				alert (sFormIdToUse+ "[AMEOSFORMIDABLE_SERVEREVENT]");
				$(sFormIdToUse + "[AMEOSFORMIDABLE_SERVEREVENT]").value=sEventId;

				if(sParams != false) {
					$(sFormIdToUse + "[AMEOSFORMIDABLE_SERVEREVENT_PARAMS]").value=sParams;
					$(sFormIdToUse + "[AMEOSFORMIDABLE_SERVEREVENT_HASH]").value=sHash;
				}
				
				
				if(sSubmitMode) {
					Formidable.Events.doSubmit(sFromUniqueId, sFormIdToUse, sSubmitMode);
				} else {
					oForm.submit();
				}
			}
		},

		submitDraft: function(sFromUniqueId, sSubmitFormId) {
			Formidable.Events.doSubmit(sFromUniqueId, sSubmitFormId, Formidable.Events.SUBMIT_DRAFT);
		},
		
		submitTest: function(sFromUniqueId, sSubmitFormId) {
			Formidable.Events.doSubmit(sFromUniqueId, sSubmitFormId, Formidable.Events.SUBMIT_TEST);
		},
		
		submitRefresh: function(sFromUniqueId, sSubmitFormId) {
			Formidable.Events.doSubmit(sFromUniqueId, sSubmitFormId, Formidable.Events.SUBMIT_REFRESH);
		},
		
		submitFull: function(sFromUniqueId, sSubmitFormId) {
			Formidable.Events.doSubmit(sFromUniqueId, sSubmitFormId, Formidable.Events.SUBMIT_FULL);
		},
		
		submitOnEnter: function(sFromUniqueId, myfield, e) {

			var keycode;
			
			if(window.event) {
				keycode = window.event.keyCode;
			} else if (e) {
				keycode = e.which;
			} else {
				return true;
			}
			
			if(keycode == 13) {
				Formidable.Events.doSubmit(sFromUniqueId, false, Formidable.Events.SUBMIT_FULL);
				return false;
			} else {
				return true;
			}
		},
		

		doSubmit: function(sFromUniqueId, sSubmitFormId, iMode) {

			var aEventNames = {};

			aEventNames[Formidable.Events.SUBMIT_FULL]		= "FULL SUBMIT";
			aEventNames[Formidable.Events.SUBMIT_REFRESH]	= "REFRESH SUBMIT";
			aEventNames[Formidable.Events.SUBMIT_DRAFT]		= "DRAFT SUBMIT";
			aEventNames[Formidable.Events.SUBMIT_TEST]		= "TEST SUBMIT";

			var sFormIdToUse = Formidable.Context.aForms[sFromUniqueId]["sFormIdToUse"];
			var sFormToUseUniqueId = Formidable.Context.aForms[sFromUniqueId]["sFormToUseUniqueId"];
			var oForm = document.forms[sFormIdToUse];
			
			if(!sSubmitFormId) {

				// submit form and each subform !
				
				var aForms = Formidable.Context.aForms[sFromUniqueId]["aForms"];
				var aUniqueForms = Formidable.Context.aForms[sFromUniqueId]["aUniqueForms"];

				window.status = aEventNames[iMode] + " of : " + sFormIdToUse + "," + aForms;

				for(sElementName in aForms) {
					$(aForms[sElementName] + "[AMEOSFORMIDABLE_SUBMITTED]").value=iMode;
				}

				// submitting Main form
				$(sFormIdToUse + "[AMEOSFORMIDABLE_SUBMITTED]").value=iMode;

			} else {

				window.status = aEventNames[iMode] + " of : " + sSubmitFormId;
				$(sSubmitFormId + "[AMEOSFORMIDABLE_SUBMITTED]").value=iMode;
			}
			
			oForm.submit();
		},
		doNothing: function(oSource) {
			return true;
		}
	},
	
	Lister: {
		Pager: {
			goTo: function(sFormUniqueId, iPage) {

				aForm = Formidable.Context.aForms[sFormUniqueId];
				sFormIdToUse = aForm["sFormIdToUse"];
				oForm = document.forms[sFormIdToUse];

				oForm[aForm.Misc.HiddenIds.Lister.page].value=iPage;
				Formidable.Events.submitRefresh(sFormUniqueId, sFormIdToUse);
			}
		},
		Sort: {
			by: function(sName, sDirection, sFormUniqueId) {
				
				aForm = Formidable.Context.aForms[sFormUniqueId];
				sFormIdToUse = aForm["sFormIdToUse"];
				oForm = document.forms[sFormIdToUse];
				
				oForm[aForm.Misc.HiddenIds.Lister.page].value=oForm[aForm.Misc.HiddenIds.Lister.pageBackup].value;
				oForm[aForm.Misc.HiddenIds.Lister.sortField].value=sName;
				oForm[aForm.Misc.HiddenIds.Lister.sortDirection].value=sDirection;
				oForm.action=aForm.Misc.Urls.Lister.sortAction;

				Formidable.Events.submitRefresh(sFormUniqueId, sFormIdToUse);
			}
		}
	},
	
	Debug: {

		toggleDebug: function(sFormUniqueId) {
			
			var oDiv=$(sFormUniqueId + '_debugzone');
			
			if(oDiv && oDiv.style.display == 'none'){
				oDiv.style.display='block';
				
				aDivs = document.getElementsByClassName("ameosformidable_debugcontainer_void");
				for(sKey in aDivs) { aDivs[sKey].className = "ameosformidable_debugcontainer";}
				
				aDivs = document.getElementsByClassName("ameosformidable_debughandler_void");
				for(sKey in aDivs) { aDivs[sKey].className = "ameosformidable_debughandler";}

			} else {
				oDiv.style.display='none';
				
				aDivs = document.getElementsByClassName("ameosformidable_debugcontainer");
				for(sKey in aDivs) { aDivs[sKey].className = "ameosformidable_debugcontainer_void";}
				
				aDivs = document.getElementsByClassName("ameosformidable_debughandler");
				for(sKey in aDivs) { aDivs[sKey].className = "ameosformidable_debughandler_void";}
			}
		},
		toggleBacktrace: function(sFormUniqueId, iNumCall) {

			var oDiv = $(sFormUniqueId + '_formidable_call' + iNumCall + '_backtrace');

			if(oDiv && oDiv.style.display == 'none'){
				oDiv.style.display='block';
			} else {
				oDiv.style.display='none';
			}
		},
		debugPopup: function(event, sFormIdToUse, sName, sHtml) {
			
			
			var sPopupId = "formidable_debugpopup_" + sFormIdToUse;
			var oDiv = $(sPopupId);

			if(oDiv == undefined) {

				var oParams = new Array();
				oParams["NAME"]		= sPopupId;
				oParams["ID"]		= sPopupId;
				oParams["STYLE"]	= "padding: 5px; height: 400px; overflow: auto; background-color: yellow; border: 3px black dashed;"
				
				var oElement = Formidable.Dom.createElement(
					"DIV",
					oParams
				);

				document.forms[sFormIdToUse].appendChild(
					oElement
				);

				oDiv = $(sPopupId);
			} else {
				oDiv.style.display = "block";
			}

			var sAnchorName = sPopupId + "_anchor";

			try {
				oDiv.innerHTML	=	"<a name='" + sAnchorName + "' />"
				+	"<div align='right' style='text-decoration: underline;' onclick=\"$('" + sPopupId + "').style.display='none';\">[close]</div>"
				+	"<div align='center' style='font-weight: bold;'>" + sName + "</div>"
				+	sHtml;
				
				document.location.href="#" + sAnchorName;
			} catch(e) {
			}
		}
	}
}