/**
 * Utility methods
 */

 var CookieManager = Class.create();

 CookieManager.set = function(name, value, daystoexpire) {
     var expirestring;
     if (daystoexpire) {
	 var exp = new Date();
	    exp.setDate(exp.getDate() + daystoexpire);
	    expirestring = ";expires=" + exp.toGMTString();
     } else {
	    expirestring = "";
     }
     document.cookie = name + "=" + escape(value) +";path=/ " + expirestring;
 }

 CookieManager.get = function (name) {
     cookie = document.cookie;
     if (cookie.length > 0) {
	 i = cookie.indexOf(name + "=");
	 if (i != -1) {
	     i += name.length + 1;
	     j = cookie.indexOf(";", i);
	     if (j == -1) j = cookie.length;
	     return unescape(cookie.substring(i, j));
	 }
     }
     return null;
 }


/**
  * SalesLead
  * class to model capturing a sales lead before allowing someone to download something
  */
  var SalesLead = Class.create({

      _salesLeadId: null,
      _url: null,
      _formdiv: null,
      _messagediv: null,
      _sourceselectiondiv: null,
      _presenting:false,

      initialize: function () {
		  id = CookieManager.get('VisitorId');
		  if (id) {
		      this._salesLeadId = id;
		  }
      },

      // download the url capturing the saleslead first if needed
      _download: function (url, formdiv, sourceselectiondiv, messagediv) {
		  this._url = url;
		  this._formdiv = formdiv;
		  this._messagediv = messagediv;
		  if (sourceselectiondiv)
		     this._sourceselectiondiv = sourceselectiondiv;
	
		  // see if we already have a sales lead id
		  if (this._salesLeadId) {
		  	  new PageAPI(this._onVerifySalesLead.bindAsEventListener(this)).fetchPage('/salesleadverify/' + this._salesLeadId + '/'+url.split('/').pop());
		  } else {
		      new PageAPI(this._onLoadSalesLead.bindAsEventListener(this)).fetchPage('/ajax/saleslead.html');
		  }
      },


      // callback for verifying the sales lead ID
      _onVerifySalesLead: function(transport) {
		  response = transport.responseText;
		  if (response == 'OK') {
		      //document.location.href= this._url+this._salesLeadId+'/';
		      //return;
		      $('download_form').action = this._url+this._salesLeadId+'/';
		      $('download_form').submit();
		  } else {
		      new PageAPI(this._onLoadSalesLead.bindAsEventListener(this)).fetchPage('/saleslead/');
		  }
      },

      // callback for loading the sales lead capture form
      _onLoadSalesLead: function(transport) {
	  	  $(this._formdiv).update(transport.responseText);
	  	  this.show();
	  	  
      },

      // submit the form asynchronously
      _formSubmit: function(form) {
	  	  $(form).request({ onComplete: this._onFormSubmitted.bindAsEventListener(this) });
      },

      hide: function() {
	  	  $(this._formdiv).hide()
      },

      // callback for the form submit
      _onFormSubmitted: function(transport) {
		  response = transport.responseText;
		  // @todo: should be xml!
		  // check if the form was successful
		  if (response.substring(0, 3) == 'ID=') {
		      this._salesLeadId = response.substring(3);
		      CookieManager.set('VisitorId', this._salesLeadId, 365);
		      $(this._formdiv).update();
		      //finally request the dang thing!
		      PageAPI.downloadDocument(this._url+this._salesLeadId+'/');
		      SalesLead.formCancel();
		  } else {
		      $(this._formdiv).update(response);
		  }
      },
      
      show:function() {
          $(this._formdiv).show();
      },
      
      _hideForm:function(){
      	if (this._sourceselectiondiv != null)
	  	  {
	  	  	  //new Effect.Tween(this._sourceselectiondiv, 300, 0,{duration:.8} , function(p){ 
	  	  	  //   this.setStyle({marginLeft:p+'px'});
	  	  	  //}); 
	  	  	 //$(this._sourceselectiondiv).setStyle({marginLeft:'0px'});
	  	  }
	  	  
	  	  this._presenting = false;
      },
      _presentLoading:function(){
      	  if (this._messagediv != null)
	  	  {
	  	  	  new Effect.Tween(this._messagediv, 0, 200,{duration:.8} , function(p){ 
	  	  	     this.setStyle({width:p+'px'});
	  	  	  }); 
	  	  	 //Effect.Fade(this._messagediv,{duration:.5,from:2, to:1});
	  	  }
	  	  this._timer = window.setTimeout(this._hideLoading(),2500  );
      },
      _hideLoading:function(){
      	
	  	  	  new Effect.Tween(this._messagediv, 200,0,{duration:2.8} , function(p){ 
	  	  	     this.setStyle({width:p+'px'});
	  	  	  }); 
      	    //Effect.Fade(this._messagediv,{duration:1.5,from:1, to:0});
      },
      _salesLeadList:null
      
  });

  SalesLead.download = function(url, formdiv, selectionDiv , messageDiv) {
  	
      if (!SalesLeadList.object) {
	     SalesLeadList.object = new SalesLeadList();
      }
      if (! SalesLeadList.object.salesLeads[formdiv])
      {
      	  SalesLeadList.object.salesLeads[formdiv] = new SalesLead();
      	  SalesLeadList.object.salesLeadsKeys.push(formdiv);
      }
      SalesLeadList.object.salesLeads[formdiv]._download(url, formdiv, selectionDiv ,messageDiv);
  }

  SalesLead.formSubmit = function(form) {
  	for ( var i=0; i < SalesLeadList.object.salesLeadsKeys.length;i++)
  	{
           SalesLeadList.object.salesLeads[SalesLeadList.object.salesLeadsKeys[i]]._formSubmit(form);
  	} 
  }

  // Cancels both 
  SalesLead.hide = function() {
  	for ( var i=0; i < SalesLeadList.object.salesLeadsKeys.length;i++)
  	{
        SalesLeadList.object.salesLeads[SalesLeadList.object.salesLeadsKeys[i]].hide();
  	} 
  }
  // The new singleton
  var SalesLeadList = Class.create({
  	  salesLeadsKeys:[],
  	  salesLeads:[],
  	  object:null
  });
  
  SalesLeadList.object = null;
  
  /*Specialized function for downloading the research SalesLead.*/
  SalesLead.research = function(url){
      // Tell the server which 
      return SalesLead.download("/static/uploads/research/"+url+"?", '_researchSalesLeadFormDiv', '_researchSourceSelectionDiv'); 
  }