function SK_FormHandler(a){var b;for(b in a){this[b]=a[b]}}SK_FormHandler.prototype={DOMConstruct:function(a,j){this.form_class=a;this.auto_id=j;this.events={submit:[],success:[],error:[],complete:[]};this.$form=jQuery("#"+j);var h={};regex=/^([\w\-]+)(\[([^\]]+)?\])?/i,elem_list=this.$form.get(0).elements,name;for(var c=0,g;g=elem_list[c];c++){if(!g.name){continue}name=regex.exec(g.name)[1];if(!h[name]){h[name]=$(g)}else{h[name].add(g)}}for(name in this.fields){if(h[name]){var b=this.auto_id+"-"+name;this.fields[name].construct(h[name],this,b)}}var d=this;if(this.default_action){this.$form.submit(function(i){d.submit(i,d.default_action);return false})}var f;for(name in this.actions){f=$("#"+j+"-"+name+"-button");if(!f.length||(f.get(0).type=="submit"&&this.default_action)){continue}f.bind("click",{action:name},function(i){d.submit(i,i.data.action)})}},$:function(a,b){a=a.replace("#","#"+this.auto_id+"-");b=b||this.container_node;return jQuery(a,b)},collectData:function(d){var k=this.$form.formToArray();var f=this.actions[d];var h={};var o=/^([\w\-]+)(\[([^\]]+)?\])?(\[([^\]]+)?\])?/i;var a,j,q;for(var g=0,s;s=k[g];g++){j=o.exec(s.name);a=j[1];s.value=s.value||"";if(typeof f.fields[a]=="undefined"){continue}if(j[2]){if(j[2]=="[]"){if(h[a]===undefined){h[a]=[]}h[a].push(s.value)}else{if(j[3]){q=j[3];if(typeof h[a]=="undefined"){h[a]={length:0}}h[a].length++;if(j[4]=="[]"){if(h[a][q]===undefined){h[a][q]=[]}h[a][q].push(s.value)}else{if(j[5]){var r=j[5];if(typeof h[a][q]=="undefined"){h[a][q]={length:0}}h[a][q][r]=s.value}else{h[a][q]=s.value}}}}}else{h[a]=s.value}}var p=[];var n,m;for(q in f.fields){m=f.fields[q];n=this.fields[q];if(h[q]&&(h[q].length!==0)){try{n.validate(h[q],m)}catch(l){var c=SK_Language.text("$forms."+this.name+".fields."+q+".errors.required",{label:SK_Language.text("$forms."+this.name+".fields."+q)});p.push({msg:c,key:q})}}else{if(m){var c=SK_Language.text("$forms."+this.name+".fields."+q+".errors.required",{label:SK_Language.text("$forms."+this.name+".fields."+q)});p.push({msg:c,key:q})}}if(h[q]&&h[q].length!==undefined){delete (h[q]["length"])}if(p.length==1){n.focus()}}if(p.length){for(var g=p.length-1,b;b=p[g];g--){this.error(b.msg,b.key)}return false}return h},submit:function(event,action_name,confirmed,data){confirmed=confirmed||false;if(!confirmed){$(".macos_msg_node").remove();$(".form_field_error",this.$form).next("br").remove().andSelf().remove()}data=data||this.collectData(action_name);if(data){this.disable();this.$("#"+action_name+"-button").add(this.$form).addClass("in_process");var handler=this;if(this.actions[action_name].confirm_msg&&!confirmed){SK_confirm("<span>"+SK_Language.text(this.actions[action_name].confirm_msg)+"</span>",function(){handler.submit(event,action_name,true,data)}).bind("close",function(){handler.enable();handler.$("#"+action_name+"-button").add(handler.$form).removeClass("in_process")});return false}if(this.file_upload_in_process){var int_pointer=window.setInterval(function(){if(!handler.file_upload_in_process){window.clearInterval(int_pointer);handler.submit(event,action_name,confirmed,data)}},300)}this.trigger("submit");jQuery.ajax({url:URL_FORM_PROCESSOR,type:"POST",data:{form:this.name,action:action_name,data:encodeURIComponent(JSON.stringify(data))},dataType:"json",success:function(response){if(response.debug_vars){for(var i=0,dbg_var;dbg_var=response.debug_vars[i];i++){console.debug(dbg_var)}}if(response.errors){for(var i=0,error;error=response.errors[i];i++){if(error.constructor==Array){handler.error(error[0],error[1])}else{handler.error(error)}}handler.trigger("error")}if(response.exec){response.exec.call(handler)}if(response.messages){for(var i=0,msg;msg=response.messages[i];i++){handler.message(msg)}}if(!response.errors){handler.trigger("success",[response.data])}},complete:function(response){handler.$("#"+action_name+"-button").add(handler.$form).removeClass("in_process");handler.enable();handler.trigger("complete",[response.data])},error:function(xhr,textStatus,errorThrown){if(xhr.responseText){SK_alert(xhr.responseText)}else{handler.error("There is an error occurred during the post form")}var json_e=xhr.getResponseHeader("SK-Exception");if(json_e){eval("var e = "+json_e);e.toString=function(){return e.message+"\ntrace: "+e.trace_str+"\nfile: "+e.file+" in line: "+e.line};SK_alert("<div>"+nl2br(e.toString())+"</div>")}}})}},disable:function(){jQuery(this.$form.get(0).elements).attr("disabled","disabled")},enable:function(){jQuery(this.$form.get(0).elements).removeAttr("disabled")},bind:function(a,b){if(this.events[a]==undefined){throw'undefined form event type "'+a+'"'}this.events[a].push(b)},trigger:function(b,d){if(this.events[b]==undefined){throw'undefined form event type "'+b+'"'}d=d||[];for(var a=0,c;c=this.events[b][a];a++){if(c.apply(this,d)===false){return false}}},error:function(d,a){if(a){var c=this.$("#"+a+"-container");c.append('<div class="form_field_error" style="display: none"></div><br clear="all" />').children(".form_field_error").html(d).fadeIn("fast");var b=this.$("#"+a);if(b.is("input, select, textarea")){b.attr("disabled",false).focus()}else{$("input:eq(0), select:eq(0), textarea:eq(0)",b.get(0)).attr("disabled",false).focus()}}else{SK_drawError(d,-1)}},message:function(a,b){SK_drawMessage(a,b,-1)}};function SK_FormFieldValidationException(a){this.message=a;this.toString=function(){return err_msg}};
