// Form Processor: Process form via ajax calls to server-side script
var formProcessor=function(config){return{config:{formNum:1,formSelectorBase:'#form',alertContainerSelector:'alertContainer',alertMsgeSelector:'formAlertMsge',alertHeadlineSelector:'formAlertHeadline',loadingImgSelector:'loadingImg'},global:{ajaxResponse:{},$alertText:''},init:function(config){if(config&&typeof(config)=='object'){$.extend(this.config,config);}
var formSelector=this.config.formSelectorBase+this.config.formNum;var $form=$(formSelector);var $subButton=$form.find("input[name='subbutton']");this.global.$alertText=$('<div class="zzz'+this.config.formNum+'"></div>');var fp=this;$subButton.click(function(){fp.initAlertContainer();fp.submitForm($form);return false;});},initAlertContainer:function(){var fp=this;var formNum=fp.config.formNum;$(fp.createIdSelector(fp.config.alertContainerSelector)).hide();fp.global.$alertText.text('');$(fp.createIdSelector(fp.config.alertMsgeSelector)).removeClass('successalertmsge erroralertmsge');$(fp.createIdSelector(fp.config.alertHeadlineSelector)).removeClass('successalertheadline erroralertheadline');$(fp.createIdSelector(fp.config.loadingImgSelector)).show();},submitForm:function($form){var fp=this;var qStr='';var formFieldsQStr=$.param($form.find(':input').not('select[multiple],:checkbox,:radio'));qStr=formFieldsQStr;var qStrMultiSelect=fp.createMultSelectQueryStr();if(qStrMultiSelect!=''){if(qStr==''){qStr=qStrMultiSelect;}else{qStr+='&'+qStrMultiSelect;}}
var allChecked=$.param($form.find(':checked'));if(allChecked!=''){if(qStr==''){qStr=allChecked;}else{qStr+='&'+allChecked;}}
$.ajax({type:"POST",cache:false,url:fp.config.procUrl,data:qStr,success:function(msg){fp.global.ajaxResponse=eval('('+msg+')');fp.procAjaxResponse();}});},createMultSelectQueryStr:function(){var selectNames={};var qStr='';$("select[multiple] :selected").each(function(){var selectElName=$(this).parent().attr('name');if(selectNames[selectElName]==null)selectNames[selectElName]=[];var opVal=encodeURIComponent($(this).val());if(opVal!='')selectNames[selectElName].push(selectElName+'='+opVal);});for(var n in selectNames){var qStrForList=selectNames[n].join('&');if(qStr!='')qStrForList='&'+qStrForList;qStr+=qStrForList;}
return qStr;},procAjaxResponse:function(){var fp=this;var formNum=fp.config.formNum;$(fp.createIdSelector(fp.config.loadingImgSelector)).hide();var rObj=fp.global.ajaxResponse;var $alertText=fp.global.$alertText;$alertText.append(rObj.genMsg).appendTo($(fp.createIdSelector(fp.config.alertMsgeSelector)));$(fp.createIdSelector(fp.config.alertContainerSelector)).show();if(rObj.status=='success'){$(fp.createIdSelector(fp.config.alertMsgeSelector)).addClass('successalertmsge');$(fp.createIdSelector(fp.config.alertHeadlineSelector)).addClass('successalertheadline');fp.clearForm();}
if(rObj.status=='error'){$(fp.createIdSelector(fp.config.alertMsgeSelector)).addClass('erroralertmsge');$(fp.createIdSelector(fp.config.alertHeadlineSelector)).addClass('erroralertheadline');}},createIdSelector:function(selectorText){var fp=this;var formNum=fp.config.formNum;return'#'+selectorText+formNum;},clearForm:function(){var formProcessor=this;var formSelector=formProcessor.config.formSelectorBase+formProcessor.config.formNum;$(formSelector).find(':input').not(':button, :submit, :reset, :hidden').val('').removeAttr('checked').removeAttr('selected');}}.init(config);};