/* Meetpips basic functionality
/* Created: Andrew Okonetchnikov, Wildbit LLC */


var Meetpips = {
	initSearchForm: function(form){
		var form = $(form);
		form.select('#search_nav li').each(function(li){
			var link = li.down('a');
			link.observe('click', function(event){
				Event.stop(event);
				this.blur();
				li.fire('search:tabChanged', {ID: link.id.replace('_link', '')});
			});
			
			$('search_nav').observe('search:tabChanged', function(event){	
				// Deactivating currently selected tab
				this.select('.active').each(function(li){
					$(li.down('a').id.replace('_link', '')).hide();
					li.removeClassName('active');
				});
				// Activating tab + corresponding fieldset
				$(event.memo.ID + '_link').up().addClassName('active');
				$(event.memo.ID).toggle().select('input, select').first().focus();
			});
		});
	},
	
	initAutoFocus: function(){
	  $$('input.auto-focus').each(function(el){
	    el.focus();
	  });
	},

  disableEmpty : function(fields) {
		fields.each(function(field){
      field.stopObserving('focus');
      field.stopObserving('blur');
    });
  },
  enableEmpty: function(fields) {
		fields.each(function(field){

      if (field.value && field.value != field.title) {
        field.removeClassName('empty');
      } else {
        field.value = field.title;
      } 

			field.observe('focus', function(event){
				if(field.title == field.value) {
					field.removeClassName('empty').value = '';
				}
			});

      Event.observe(field.form, 'submit', function (e) {
        if (field.value == field.title)
        {
          field.value = '';
        }
      });

			field.observe('blur', function(event){
				if(field.value == '') {
					field.addClassName('empty').value = field.title;
				}
			});
    });
  },

	initFormFields: function() {
    this.enableEmpty($$('form .empty'));
		
		$$('.reset-to-default').each(function(el){
		  if (el.value != '') {
		    el._backup = el.value;
		  } else {
		    el._backup = ' ';
		  }
		});
	},
	
	suggestUnits: function(el){
		var hide;
		var position  = 1;
		var input     = el;
		
		if (!$('suggest_' + el)) {
			var suggest = new Element('div', { id: 'suggest_' + el }).addClassName('suggestion');
			
			$(el).insert({ after: suggest });
		}
    
		$(el).observe('keydown', function(event){
		  var num = suggest.getElementsBySelector('a').size();
      
		  switch(event.keyCode) {
        case Event.KEY_UP:
          if (position == 1) {
            position = num;
          } else {
            position--;
          }
          Meetpips.setSelected(el, suggest, position);
        return;
        case Event.KEY_DOWN:
          if (position == num) {
            position = 1;
          } else {
            position++;
          }
          Meetpips.setSelected(el, suggest, position);
        return;
        case Event.KEY_RETURN:
          suggest.getElementsBySelector('a').each(function(a){
            if (a.hasClassName('selected')) {
              $(el).value = a.rel;
              
              suggest.setStyle({ display: 'none' });
            }
          });
          Event.stop(event);
        break;
      }
      
		});
		
		$(el).observe('blur', function(event){
		  window.setTimeout(function(){ suggest.setStyle({ display: 'none' }); }, 500);
		});
		  
		$(el).observe('keyup', function(event){
		  if (event.keyCode != 38 && event.keyCode != 40 && event.keyCode != 13) {
		    position = 0;
		    
			  suggest.setStyle({
  				top		: $(el).positionedOffset().top + $(el).getDimensions().height + 'px',
  				left	: $(el).positionedOffset().left + 'px',
  				width	: $(el).getDimensions().width + 'px',
  				display	: 'block'
  			});
			
  			var html    = '<div>';
  			var tens    = new Array(100, 1000, 10000, 100000);
			
  			tens.each(function(ten){
  				if ($(el).value < ten && $(el).value > 0) {
  					value = $(el).value * ten;
					
  					html += "<a href=\"#\" rel=\"" + value + "\" onClick=\"$('" + el + "').value='" + value + "';$$('.suggestion').each(function(el){ el.setStyle({display:'none'})});\">" + Meetpips.formatNumber(value) + '</a><br />';
  				}
  			});
			
  			if (html == '<div>') {
  				suggest.setStyle({ display: 'none' });
  			} else {
  				suggest.update(html + '</div>');
  			}
  		}
		});
	},
	
	setSelected: function(input, el, position){
	  var i = 1;

    el.getElementsBySelector('a').each(function(el){
      if (el.hasClassName('selected')) el.removeClassName('selected');
    });
    
    el.getElementsBySelector('a').each(function(el){
      if (i == position) el.addClassName('selected');
      
      i++;
    });
	},
	
	formatNumber: function(number){
		number = '' + number;
		
		if (number.length > 3) {
			var mod 	= number.length % 3;
			var output 	= (mod > 0 ? (number.substring(0, mod)) : '');
			
			for (i = 0; i < Math.floor(number.length / 3); i++) {
				if ((mod == 0) && (i == 0)) {
					output += number.substring(mod+ 3 * i, mod + 3 * i + 3);
				} else {
					output += ',' + number.substring(mod + 3 * i, mod + 3 * i + 3);
				}
			}
			
			return output;
		} else {
			return number;
		}
	},
  
  resizeImages: function(){
    $$('.img-link-frame img').each(function(image){
      if (image.getWidth() > 75 && !image.hasClassName('was-resized')) {
        image.setStyle({ height: 80 + 'px' });
        var wrapper = new Element('div', { 'class': 'image-wrapper' });
        image.wrap(wrapper);
        image.addClassName('was-resized');
      }
      
      image.setStyle({ display: 'inline' });
    });
  },
  
  initPips: function(){
    $$('p.journal-count.pips-incr,p.journal-count.pips-decr,p.pips-current.pips-positive').each(function(el){
      var pips        = el.firstDescendant().innerHTML;
      var max_length  = 4;
      
      if (el.hasClassName('pips-current')) {
        max_length = 7;
      }
      
      if (pips.length > max_length) {
        el.firstDescendant().update(pips.slice(0, max_length) + '...');
        el.setStyle({ cursor: 'help' })
        
        var tooltip = new Tooltip(el, {
          content: pips + ' pips',
          styles: 'font-size: 15px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;',
          borderColor: el.firstDescendant().getStyle('color'),
          backgroundColor: el.firstDescendant().getStyle('color'),
          opacity: .9
        });
      }
    });
  },
  
	disableFollowLink: function(){
    if ($('link_to_unfollow_profile')) $('link_to_unfollow_profile').hide();
    if ($('link_to_follow_profile')) $('link_to_follow_profile').hide();
    if ($('updating_relation_to_profile')) $('updating_relation_to_profile').show();
  },
  
  setup_trade_mood_selector: function(){
    $$('.entry-mood label').each(function(label){
      var input = label.down('input');
      if(input.checked == true){
        label.addClassName('selected');
      }
      label.observe('click', function(event){
  			$$('.entry-mood label').invoke('removeClassName', 'selected');
  			this.addClassName('selected');
  			this.down(1).checked = true;
  		}); 
  	});
  },
  
  checkFormValues: function(){
    if ($('submit_update')) {
      $('submit_update').observe('click', function(event){
        var submit = true;
      
        Event.stop(event);
      
        if ($('trade_data_stop_loss').value == '') {
          $('trade_data_stop_loss').setStyle({ 'border': '2px solid #cd2913' });
        
          submit = false;
        }
      
        if ($('trade_data_target_profit').value == '') {
          $('trade_data_target_profit').setStyle({ 'border': '2px solid #cd2913' });
        
          submit = false;
        }
      
        if (submit == true) {
          $('form_update_content').submit();
        }
      });
    }
  },
  
  disableSubmitButtons: function(){
    $$('input[type=submit]').each(function(el){
      if (!el.hasClassName('no-event')) {
        el.observe('click', function(){
          if (el.up('form')) {
            setTimeout(function() { el.disable(); }, 0);
          }
        });
      }
    });
  },

  initReportSpam: function(){
    $('reveal-report-spam').observe('click', function(event){
      Event.stop(event);

      if ($('report-spam').hasClassName('hide')) {
		    $('report-spam').removeClassName('hide');
		  } else {
		    $('report-spam').addClassName('hide');
		  }
    });

    $$('.hide-report-spam').each(function(el){
      el.observe('click', function(event){
        Event.stop(event);

  		  $('report-spam').addClassName('hide');
  		});
    });
  },

  pulsateInbox: function(){
    if (exists('.inbox-count')) {
      new Effect.Pulsate($$F('.inbox-count'), { pulses: 5, duration: 3 });
    } 
  },
  
  fadeOutNotices: function(){
    if (exists('.notice')) {
      setTimeout (function(){$$F('.notice').fade({duration: 3.0, afterfinish: function(){$$F('.notice').remove()}})}, 7000);
    } 
  },
  
  fixPosition: function(element, update){ 

    if(!update.style.position || update.style.position=='absolute') { 
      update.style.position = 'absolute';
      Position.clone(element, update, {
        setHeight: false,
        offsetTop: element.offsetHeight,
        setLeft: element.offsetLeft
      });
    }
    Effect.Appear(update,{duration:0.10});
    if (Prototype.Browser.IE && Meetpips.browserVersion() > 7) {
      $('trade_entry_currencies_autocompleter').style.left = $('trade_entry_currencies').offsetLeft + 'px';
      $('trade_entry_currencies_autocompleter').style.top =  '138px';
      setTimeout( function() {
        Element.clonePosition('trade_entry_currencies_autocompleter', 'trade_entry_currencies', {
        'setWidth': false,
        'setHeight': false,
        'offsetTop': $('trade_entry_currencies').offsetHeight
        } );
      }, 300);

      return update;
    }
  },

  browserVersion: function() {
    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer') {
        var ua = navigator.userAgent;
        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat(RegExp.$1);
    }
    return rv;
  }
  
}


document.on("dom:loaded", function() {
  Meetpips.pulsateInbox();
  Meetpips.initFormFields();
  //Meetpips.resizeImages();
  Meetpips.checkFormValues();
  Meetpips.disableSubmitButtons();
  Meetpips.initAutoFocus();
  Meetpips.fadeOutNotices();

  try { // blows in ie6
    setupZoom();
  } catch(e) {
  }

  Meetpips.initPips();

  new Tooltips(".tooltip-link", {backgroundColor: '#333', borderColor: '#333', opacity: .75});
    new Tooltips(".entry-mood label", {backgroundColor: '#333', borderColor: '#333', opacity: .75});
	
    if ($$('#user_login.show-warning-if-changed') && $('user_login')) {
      $('user_login').observe('click', function(){
        $('warning').removeClassName('hide');
      });
    }
	
	if ($('reveal-report-spam')) Meetpips.initReportSpam();
});


function $$F(selector){
  return $$(selector)[0];
}

function exists(selector){
  if ($(selector) != undefined || $$(selector).length > 0)
    return true;
  else
    return false;
}

