(function($) {
  $.fn.lead_service = function(options) {
    
    var form_div = $(this);
    
    var formLoad = function() {
      url = buildNewUrl(opts.form_params);              // build new lead url
      form_div.load(url, function(){                    // get /:version/leads/new?lead[attribute]=value&...
        opts.update_form();                             // re-draw the form
        $('.lead_form', form_div).submit( submitLead ); // re-bind the submit behavior
        form_div.show();
      });
    };
    
    var buildNewUrl = function(params) {
      var base = '/v1/leads/new?';
      var uri = '';
      if(params.session_id == undefined) { // Use the session ID if provided, otherwise set it to WT.vt_sid
        var session_id = 'webtrends_session';
        if(typeof(WT) != 'undefined' && WT.vt_sid != 'undefined' && WT.vt_sid != "" && WT.vt_sid != null) { session_id = WT.vt_sid; }
        params.session_id = session_id;
      }
      for(var i in params.required_fields) {
        uri += "lead[required_fields][]=" + params.required_fields[i] + "&";
      }
      delete params.required_fields;

      for(attr in params){
        uri += "lead[" + attr + "]=" + params[attr] + "&";
      }
      uri = uri.substring(0, uri.length - 1);
      base += encodeURI(uri);
      return base; 
    };
    
    var submitLead = function() {
      var caller = $(this);
      if( this.beenSubmitted ) return false;
      this.beenSubmitted = true;
      $.ajax({
        url: '/v1/leads/ajax.js',
        type: 'POST',
        data: $(this).serialize(),
        success: function(response){
          opts.lead_saved();
        },
        error: function(req, status, err) {
          var parent = caller.parent();
          caller.replaceWith(req.responseText);
          opts.update_form();
          $('.lead_form', parent).submit( submitLead );
          return false;
        }
      });
      return false;
    };
    
    var thankYou   = function(){ form_div.html('Thank you!'); };
    var updateForm = function(){ };

    var defaults = {
      update_form : updateForm,
      lead_saved  : thankYou
    };
    var opts = jQuery.extend(defaults, options);
    
    return this.each(function(){
      formLoad();
    });

  };
})(jQuery);
