/**
 * set up namespaces
 */
var vwd4 = (typeof(vwd4) === 'undefined') ? {} : vwd4;
vwd4.cms_forms = (typeof(vwd4.cms_forms) === 'undefined') ? {} : vwd4.cms_forms;

jQuery(document).ready(function () {
  vwd4.cms_forms.load();
});


vwd4.cms_forms.load = function() {
  //show wicket/server errors
  $('.ajax_form_container').ajaxError(function(info,xhr){
    $(info.target).append(xhr.responseText);
  });
  
  var url = $('.ajax_form_container a').attr('href');
  if(url){
    vwd4.cms_forms.ajaxWicketLoad(url);
  }
};

vwd4.cms_forms.ajaxWicketLoad = function(pUrl) { 
  $.get(pUrl, function(pData) {
    
    var formWrapper = $("<div />").append(pData.replace(/<script(.|\s)*?\/script>/g, "")).find('#wicket_form_content_wrapper');
    
    var container = $('.ajax_form_container'); 
    container.append(formWrapper);
    vwd4.cms_forms.bindAjaxSubmit();
    vwd4.cms_forms.frontendPE(container);
    var scripts = pData.match(/<script(.|\s)*?\/script>/g);
    if(scripts){
      for (i=0; i<scripts.length; i++) {
        var func = function(index) {
          return function() {
            $('head').append(scripts[index]);
            if (Wicket && Wicket.Event && Wicket.Event.addDomReadyEvent) {
              Wicket.Event.addDomReadyEvent = function(fn) {
                fn();
              };
            }
          };
        }(i);
        // try to fix ie6-problem with inserting script-tags
        if($.browser.msie && $.browser.version.substr(0,1)<7) {
          setTimeout(func, 50+1000*i);
        }
        else {
          func();
        }
      }
    }
  });
};


vwd4.cms_forms.bindAjaxSubmit = function() {
  $('.ajax_form_container form').unbind('submit');
  $('.ajax_form_container form button[class!=ajaxsubmit]').unbind('click').click(vwd4.cms_forms.ajaxSubmit); 
    
};


vwd4.cms_forms.ajaxSubmit = function(event) {  
  // prevent default 
  event.preventDefault();
  
  // get element from event 
  var targetElement = $(event.target);
  
  // do submit 
  vwd4.cms_forms.doAjaxSubmit(targetElement);
  
  // cancel default event 
  return false;
};


vwd4.cms_forms.doAjaxSubmit = function (pTargetElement) {
  var form = $('.ajax_form_container form');
   
  var formFields = form.serializeArray();
  
  var buttonObject = { name: pTargetElement.attr('name'), value: ''};    
  formFields.push(buttonObject);
  // DVDI-538: Supply the sling encoding parameter to make the servlet engine transcode the parameters properly
  formFields.push({ name: "_charset_", value: "UTF-8" });
  
  //get url
  var url = form.attr('action');
  // post 
  $.post(url, formFields, function(pData) {
    vwd4.cms_forms.onSuccess(pData);
  });  
  
};


vwd4.cms_forms.onSuccess = function(pData) {
  var container = $('.ajax_form_container');
  container.html($("<div />").append(pData).find('#wicket_form_content_wrapper'));
  vwd4.cms_forms.frontendPE(container);
  vwd4.cms_forms.bindAjaxSubmit();
};

//call to frontend method to apply its progressive enhancement
vwd4.cms_forms.frontendPE = function(pContainer) {
  if (vwd4 && vwd4.utils && vwd4.utils.refreshAjaxContent) {
    vwd4.utils.refreshAjaxContent(pContainer);
  }
};
