var selectedNudgeID = 0;

function setSelectedNudge (value)
{
  selectedNudgeID = value;
}

var Nudge = Class.create({
	initialize	: function(extra_set){
		this.settings = {
			loading_image	: '/templates/nimble_2008_001/images/facebox/loading.gif',
			close_image		: '/templates/nimble_2008_001/images/facebox/closelabel.gif',
			image_types		: new RegExp('\.' + ['png', 'jpg', 'jpeg', 'gif'].join('|') + '$', 'i'),
      USER_SENDER_ID : 0,
      USER_RECIPIENT_ID : 0,
			HandlerURL : GJ_WEBSITE_URL + 'nudge/handler.html',
      inited				: true,
      facebox_html	: '\
	  <div id="facebox_nudge" style="display:none;"> \
	    <div class="popup"> \
	      <table id="facebox_table"> \
	        <tbody> \
	          <tr> \
	            <td class="tl"/><td class="b"/><td class="tr"/> \
	          </tr> \
	          <tr> \
	            <td class="b"/> \
	            <td class="body"> \
                <div style="padding:10px; margin-left:-10px; margin-top:-10px; margin-right:-10px; font-size:16px; font-weight:bold; color:#FFF; background-color:#044d78;">\
                  ' + LANG_JS000098 + '\
                </div>\
	              <div class="content"> \
	              </div> \
	              <div class="footer"> \
	                <a href="#" id="facebox_nudge_close"> \
	                  <img src="/templates/nimble_2008_001/images/facebox/closelabel.gif" title="close" id="facebox_nudge_close_image" /> \
	                </a> \
	              </div> \
	            </td> \
	            <td class="b"/> \
	          </tr> \
	          <tr> \
	            <td class="bl"/><td class="b"/><td class="br"/> \
	          </tr> \
	        </tbody> \
	      </table> \
	    </div> \
	  </div>'
		};
    if (extra_set) Object.extend(this.settings, extra_set);
		$(document.body).insert({bottom: this.settings.facebox_html});
		
		this.preload = [ new Image(), new Image() ];
		this.preload[0].src = this.settings.close_image;
		this.preload[1].src = this.settings.loading_image;
 
		f = this;
		$$('#facebox_nudge .b:first, #facebox_nudge .bl, #facebox_nudge .br, #facebox_nudge .tl, #facebox_nudge .tr').each(function(elem){
			f.preload.push(new Image());
			f.preload.slice(-1).src = elem.getStyle('background-image').replace(/url\((.+)\)/, '$1');
		});
 
		this.facebox = $('facebox_nudge');
    this.keyPressListener = this.watchKeyPress.bindAsEventListener(this);
    
		this.watchClickEvents();
	},
 
  watchKeyPress : function(e){
    // Close if espace is pressed or if there's a click outside of the facebox
    if (e.keyCode == 27 || !Event.element(e).descendantOf(this.facebox)) this.close();
  },
 
	watchClickEvents	: function(e){
    var f = this;
    $$('.showOverlayNudge').invoke('observe', 'click', function(event) {event.stop(); f.click_handler(event);}.bindAsEventListener(this));
	},
 
	loading	: function() {
		if ($$('#facebox_nudge .loading').length == 1) return true;
 
		contentWrapper = $$('#facebox_nudge .content').first();
		contentWrapper.childElements().each(function(elem, i){
			elem.remove();
		});
		contentWrapper.insert({bottom: '<div class="loading"><img src="'+this.settings.loading_image+'"/></div>'});
 
		var pageScroll = document.viewport.getScrollOffsets();
		this.facebox.setStyle({
			'top': pageScroll.top + (document.viewport.getHeight() / 10) + 50 + 'px',
			'left': document.viewport.getWidth() / 2 - (this.facebox.getWidth() / 2) + 'px'
		});
 
    Event.observe(document, 'keypress', this.keyPressListener);
    Event.observe(document, 'click', this.keyPressListener);
	},
 
	reveal	: function(data, klass){
    this.loading();
		load = $$('#facebox_nudge .loading').first();
		if(load) load.remove();
 
		contentWrapper = $$('#facebox_nudge .content').first();
		if (klass) contentWrapper.addClassName(klass);
		//contentWrapper.insert({bottom: data});
		contentWrapper.update(data);
 
    $$('#facebox_nudge .body').first().childElements().each(function(elem,i){
     elem.show();
    });
    		
		if(!this.facebox.visible()) new Effect.Appear(this.facebox, {duration: .0});
		this.facebox.setStyle({
			'left': document.viewport.getWidth() / 2 - (this.facebox.getWidth() / 2) - 80 + 'px'
		});
 
    Event.observe(document, 'keypress', this.keyPressListener);
    Event.observe(document, 'click', this.keyPressListener);
	},
 
	close		: function(){
     new Effect.Fade('facebox_nudge', {duration: .0});
	},
 
	loadInitialContent		: function(event){

		fb = this;
		Event.observe($('facebox_nudge_close'), 'click', function(e){
			Event.stop(e);
			fb.close();
		});
		Event.observe($('facebox_nudge_close_image'), 'click', function(e){
      Event.stop(e);
			fb.close();
		});

    var a = event.element().getAttribute('rel').split(';', 2)
    this.settings.USER_SENDER_ID = a[0];
    this.settings.USER_RECIPIENT_ID = a[1];
    var theReturn = '';
    
    new Ajax.Request(this.settings.HandlerURL, {
      method: 'post',
      parameters: 'AJAX=true&What=LOAD_CONTENT&USER_SENDER_ID=' + this.settings.USER_SENDER_ID + '&USER_RECIPIENT_ID=' + this.settings.USER_RECIPIENT_ID,
      
      onCreate: function()
      {
        //  
      }.bind(this),
      
      onSuccess: function(transport) 
      {
        if(!transport.responseText.match(/http/))
        {
          // ALREADY FRIENDS OR ALREADY REQUESTED
          this.reveal('<div class="nudge_error_message">' + transport.responseText + '</div>', false);
          this.close.delay(2);
        }
        else
        {
          var a = transport.responseText.split(';');
          
          var tempContent = '';
          for(i=2;i<a.length;i++)
          {
            var b = a[i].split(':');
            
            tempContent = tempContent + '<div class="nudge_nudge"><input type="radio" onClick="setSelectedNudge(\'' + b[0] + '\')"; name="nudge-type-radio" id="nudge-type-radio" value="' + b[0] + '"><img src="' + GJ_WEBSITE_URL + 'templates/nimble_2008_001/images/nudges/'+ b[2]  +'" alt="' + b[1] + '" /> ' + b[1] + '</div>';

            if((((i) % 4)==1) && (i != 0))
            {
              tempContent = tempContent + '<div style="clear:left;" /></div>';
            }
          }

          var faceboxContent = '\
            <div class="nudge_main_content">\
              <div class="nudge_title">' + LANG_JS000020 + ' <a href="' + GJ_WEBSITE_URL + this.settings.USER_RECIPIENT_ID  + '.html">' + a[1] + '</a> ' + LANG_JS000021 + '</a></div>\
              <div class="nudge_subject_title">' + LANG_JS000017 + '</div>\
            </div>\
            <div id="user_image_friendrequest" style="padding:5px; float:right;">\
              <img style="padding:3px; border:1px solid #cccccc;" src="' + a[0] + '" alt="' + a[1] + '" />\
            </div>\
            <div style="font-size:2px; clear:both;">&nbsp;</div>\
            <div class="nudge_container">' + tempContent + '</div>\
            <div style="font-size:2px; clear:both;">&nbsp;</div>\
            <div style="padding-top:10px;"><input type="button" name="nudge_submit_button" id="nudge_submit_button" class="button_108" value="' + LANG_JS000003 + '" /></div>\
            <div class="nudge_message_area" id="nudge_message_area" name="nudge_message_area"></div>\
          <div style="font-size:2px; clear:both;">&nbsp;</div>';

          this.reveal(faceboxContent, false);
          
      		temp = this;
          Event.observe($('nudge_submit_button'), 'click', function(e){
      			Event.stop(e);
            temp.sendRequest();
      		});
        }
      }.bind(this), // Required for correct scope
      
      onFailure: function()
      {
        return LANG_JS000029;
      }.bind(this),
      
      onComplete: function(transport)
      {
        //
      }.bind(this)
    });    
	},

  // AJAX SEND MESSAGE
  sendRequest: function() {
  
    if (selectedNudgeID == 0)
    {
      $('nudge_message_area').update('<img src="' + GJ_WEBSITE_URL + 'templates/nimble_2008_001/images/frontpage/logout2.gif" border="0" /> ' + LANG_JS000023);
      return false;
    }

    new Ajax.Request(this.settings.HandlerURL, {
      
      method: 'post',
      parameters: 'AJAX=true&What=SEND_NUDGE&USER_SENDER_ID=' + this.settings.USER_SENDER_ID + '&USER_RECIPIENT_ID=' + this.settings.USER_RECIPIENT_ID + '&NUDGE_ID=' + selectedNudgeID,
      
      onCreate: function()
      {
        //
      },
      onSuccess: function(transport) 
      {
        if (transport.responseText.match(/Success/)) // Regexp
        {
          selectedNudgeID = 0;
          this.reveal('<div class="nudge_error_message"><img src="' + GJ_WEBSITE_URL + 'templates/nimble_2008_001/images/tick.png" border="0" /> ' + LANG_JS000024 + '</div>', false);
          this.close.delay(2);
        }
        else
        {
          $('nudge_message_area').update('<img src="' + GJ_WEBSITE_URL + 'templates/nimble_2008_001/images/frontpage/logout2.gif" border="0" /> ' + transport.responseText);
        }
      }.bind(this), // Required for correct scope
      
      onFailure: function()
      {
        alert(LANG_JS000031);
      },
      
      onComplete: function(transport)
      {
        // Do something
      }
    });
  },

	click_handler	: function(e){
	  this.loading();
		Event.stop(e);
		
    
    //this.reveal(this.settings.faceboxContent, false);
    this.loadInitialContent(e);
   }	
});

document.observe('dom:loaded', function () { new Nudge(); });