// version 1.6.6

window.module = window.module || {};
window.module.lp = window.module.lp || {};
window.module.lp.form = window.module.lp.form || {};
window.module.lp.form.data = null;

jQuery(document).ready(function() {
  var formContainer = '#'+window.module.lp.form.data.formContainerId;
  var formButton = '#'+window.module.lp.form.data.formButtonId;
  var errorContainer = '#'+window.module.lp.form.data.errorContainerId;
  var errorLabelContainer = errorContainer + ' ul';
  var formSelector = formContainer + ' form';
  
  var positionErrors = function() {
    //get the position of the form container element
    var pos = jQuery(formContainer).offset();  
    var width = jQuery(formContainer).width();
    var docWidth = jQuery(document).width();
    
    var left =  (docWidth - (pos.left + width + 16)) < 280 ?
      pos.left - 296 :
      pos.left + width + 16;
  	
    jQuery(errorContainer).css({
      "left":left + "px", 
      "top":pos.top + "px",
      "width":"280px"
    });

    var e = document.getElementById(window.module.lp.form.data.formContainerId);
  };
  
  var getScrollBarWidth = function() {
  	var inner = document.createElement('p');
  	inner.style.width = "100%";
  	inner.style.height = "200px";

  	var outer = document.createElement('div');
  	outer.style.position = "absolute";
  	outer.style.top = "0px";
  	outer.style.left = "0px";
  	outer.style.visibility = "hidden";
  	outer.style.width = "200px";
  	outer.style.height = "150px";
  	outer.style.overflow = "hidden";
  	outer.appendChild (inner);

  	document.body.appendChild (outer);
  	var w1 = inner.offsetWidth;
  	outer.style.overflow = 'scroll';
  	var w2 = inner.offsetWidth;
  	if (w1 == w2) w2 = outer.clientWidth;

  	document.body.removeChild (outer);

  	return (w1 - w2);
  };
  
  var showSuccessModal = function(data) {
    jQuery.fancybox({
      // content:jQuery('#'+window.module.lp.form.data.confirmData).html(),
      href: data.url,
      hideOnOverlayClick: false,
      padding:0,
      type: 'iframe',
      width: data.size.width,
      height: data.size.height,

      onComplete: function() {
        if (data.size.height > jQuery('#fancybox-content').height()) {
          var content = jQuery('#fancybox-content')[0];
          var outer = jQuery('#fancybox-outer')[0];

          content.style.width = (data.size.width + getScrollBarWidth()) + 'px';
          outer.style.width = (data.size.width + getScrollBarWidth()) + 'px';
        }
      }
    });
  };
  
  var enableForm = function() {
    jQuery(formButton).removeClass('disabled');
  };
  
  var disableForm = function() {
    jQuery(formButton).addClass('disabled');
  };
  
  var isFormDisabled = function() {
    return jQuery(formButton).hasClass('disabled');
  };
  
	var getFormAction = function(form) {
	  var action = form.getAttribute('action');
	  if (typeof action === 'object' && action.nodeType === 1) {
	    var parent = action.parentNode;
	    var node = parent.removeChild(action);
	    action = getFormAction(form);
	    parent.appendChild(node);
	  }
    return action;
	};
	
	var setFormAction = function(form, url) {
	  var action = form.getAttribute('action');
	  if (typeof action === 'object' && action.nodeType === 1) {
	    var parent = action.parentNode;
	    var node = parent.removeChild(action);
	    action = setFormAction(form, url);
	    parent.appendChild(node);
	  }
    form.setAttribute('action', url);
	};
  
  var initialize = function() {
    jQuery(formSelector).validate( {
      rules: window.module.lp.form.data.validationRules,
      messages: window.module.lp.form.data.validationMessages,
      errorContainer: errorContainer,
      errorLabelContainer: errorLabelContainer,
      wrapper: 'li',
      invalidHandler: function(form) {
        positionErrors();
      },
      submitHandler: function(form) {
        if (isFormDisabled()) {
          return;
        }
        
        disableForm();

        jQuery.ajax({
          url: getFormAction(jQuery(form).get(0))+'&lp-form-submit-method=ajax',
          type: 'POST',
          data: jQuery(form).serialize(),
          debug:true,
          error: function() {
            alert(window.module.lp.form.data.errorMessage ||
              'We\'re sorry the form could not be submitted because something went wrong. Please try again.');
          },
          success: function(data) {
            if (data.protected_assets) {
              window.module.lp.form.responseData = {
                protectedAssets: data.protected_assets
              };
            }

            switch (window.module.lp.form.data.confirmAction) {
              case 'url':
                window.location.href = window.module.lp.form.data.confirmData;
                break;
              case 'message':
                alert(window.module.lp.form.data.confirmData);
                break;
              case 'modal':
                showSuccessModal(window.module.lp.form.data.confirmData);
                break;
              case 'post':
                var $form = jQuery("form");
                $form.unbind();
                setFormAction($form.get(0), window.module.lp.form.data.confirmData);
                $form.submit();
                break;
            }
          },
          complete: function() {
            form.reset();
            enableForm();
          }
        });
      }
    });
  };
  
  var getUrlParams = function() {
    var params = {}, hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for (var i=0; i<hashes.length; i++) {
      hash = hashes[i].split('=');
      params[hash[0]] = hash[1];
    }
    return params;
  };
  
  var copyURLParamsToFields = function() {
    var params = getUrlParams();
    var form = jQuery('#'+window.module.lp.form.data.formContainerId+' form');
    var field;
    for (var param in params) {
      field = jQuery(form).find('input[name='+param+']')[0] || jQuery(form).find('textarea[name='+param+']')[0];
      if (typeof field !== 'undefined') {
        if (field.type === 'text' || field.type === 'hidden' || field.type === 'textarea') {
          field.value = decodeURIComponent(params[param]);
        }
      }
    }
  };

// jQuery.fancybox.showVars();
  initialize();
  copyURLParamsToFields();
});
