/*******************************************************************************

BuzaMoto application.js, version 1.0 (05/21/2008)
(c) 2008 BuzaMoto. All rights reserved.
Author: mud(tm) - Takashi Okamoto.

ImageShiftGallery is a JavaScript image viewer. It is freely distributable,
but this header must be included, and should not be modified. Donations are 
appreciated. For details, see the BuzaMoto website: http://buzamoto.com/

*******************************************************************************/

// ---------------------- TagLine
var BM_DEFAULT_MAD_VALUE = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
var BM_MAX_INPUT_LENGTH  = 9;
var currentString;

function bm_constructMadForm(string) {
  string = string.strip().stripTags().stripScripts();
  currentString = string; //save current string to compare for change later
  var form = new Element('form', {'class': 'bm_mad-form', onsubmit: 'return bm_submitMadForm(this.firstChild)'});
  var input = new Element('input', {
    'class': 'bm_mad-field-input', 
    onblur: 'return this.parentNode.onsubmit();',
    onkeypress: "if(event.keyCode == Event.KEY_RETURN) this.onblur = function() {return};",
    size: (string.length < BM_MAX_INPUT_LENGTH) ? string.length : BM_MAX_INPUT_LENGTH,
    value: string
  });
  form.appendChild(input);
  return form;
}

function bm_becomeMadEditable(event) {
  var obj = event.target;
  obj.className = '';
  obj.onclick = function() {return false};
  var formElement = bm_constructMadForm(obj.innerHTML);
  obj.update(formElement);
  // set focus on field
  obj.getElementsByClassName('bm_mad-field-input')[0].focus();
}

function bm_submitMadForm(inputField) {
  var span = inputField.parentNode.parentNode;
  var inputValue = inputField.value.strip().stripTags().stripScripts();
  
  // update input
  inputValue = (inputValue != '') ? inputValue : BM_DEFAULT_MAD_VALUE;
  
  //<span class="mad-field" onclick="bm_becomeMadEditable(event)"></span>
  span.className = 'mad-field';
  span.onclick = function(e) { bm_becomeMadEditable(e); };
  
  if (inputValue != currentString) {
    span.update('Saving...');
    // send ajax request
    bm_postMadForm(inputValue, span);
  } else {
    bm_updateMadForm(inputValue, span);
  }
  return false;
}

function bm_postMadForm(string, span) {
  new Ajax.Request('/tag_lines/create', {
    asynchronous: true,
    evalScripts: false,
    method: 'post',
    parameters: {content: string, authenticity_token: window._token},
    onSuccess: function(transport) {
      var result = transport.responseText.evalJSON();
      bm_updateMadForm(result.content, span);
      $('status-time').update(result.status);
    },
    onFailure: function() {
      bm_updateMadForm('Error occurred...', span);
    }
  });
}

function bm_updateMadForm(string, span) {
  span.update(string);
}


// ---------------------- TWITTER

var TWITTER_URL = '/site/twitter';
var TWEMPLATE = new Template('\
  <div id="tweet-#{counter}" class="tweet clearfix clear" style="display: none;">\
    <div class="image"><a href="#{url}"><img src="#{image}" alt="#{user_name}" /></a></div>\
    <!--<span class="who">#{user_name} says:</span>-->\
    <span class="text">#{text}</span>\
    <span class="when">#{created_at}</span>\
  </div>');

var TWITTER_COUNTER = 0; // relying on global variables are so bad...but it's so quick!
var TWITTER_COUNT = 0;
var TWITTER_TIMER = null;
var TWITTER_TIMEOUT = 10000;
function loadTwitterFeed() {
  var container = $('tweet-container');
  container.update('Loading Twitter feed...');

  new Ajax.Request(TWITTER_URL, {
    method: 'post',
    parameters: {authenticity_token: window._token},
    onSuccess: function(transport) {
      var response = transport.responseText.evalJSON();
      var snippet = "";
      TWITTER_COUNT = response.length;
      for (var i = 0; i < TWITTER_COUNT; i++) {
        response[i].counter = i;
        snippet += TWEMPLATE.evaluate(response[i]);
      }
      container.update(snippet);
      container.down('.tweet').show();
      TWITTER_TIMER = window.setTimeout( function() { showTweet() }, TWITTER_TIMEOUT);
    },
    onFailure: function(transport) {
      container.update('Could not load Twitter feed.');
    }
  });
}

function showTweet() {
  new Effect.Fade('tweet-'+TWITTER_COUNTER, {
    duration: 0.4,
    afterFinish: function() {
      TWITTER_COUNTER++;
      if (TWITTER_COUNTER >= TWITTER_COUNT) TWITTER_COUNTER = 0;
      new Effect.Appear('tweet-'+TWITTER_COUNTER, {
        duration: 0.4,
        afterFinish: function() {
          if (TWITTER_TIMER) {
            window.clearTimeout(TWITTER_TIMER);
            TWITTER_TIMER = null;
          }
          TWITTER_TIMER = window.setTimeout( function() { showTweet() }, TWITTER_TIMEOUT);
        }
      })
    }
  });
}