var slider;
var news_types = ['news', 'finance', 'social media', 'science', 'government', 'gossip', 'sports', 'opinion', 'culture', 'all']
var positions = [-210, -163, -116, -67, -18, 30, 79, 127, 175, 220];

var getHash = function () {
  var object = {};
  var filters = [];
  var languages = $$('#languages a.active');
  var regions = $$('#regions a.active');
  var rss_types = $$('#rss_types a.active');
  var categories = $$('#categories a.active');
  object['l'] = (languages.length) ? languages[0].up().readAttribute('class') : 'all';
  object['r'] = (regions.length) ? regions[0].up().readAttribute('class') : 'all';
  object['rt'] = (rss_types.length) ? rss_types[0].up().readAttribute('class') : 'all';
  object['c'] = (categories.length) ? categories[0].up().readAttribute('class') : 'all';
  object['nt'] = news_types[positions.indexOf(slider.value)];

  for (var key in object) {
    if (object[key] != 'all') {
      filters.push(key + '=' + object[key]);
    }
  }

  return filters.join('&');
};

var popup = function (url, height, width) {
  var newwindow = window.open(url,'name','height=' + height + ',width=' + width + ',screenX=350,screenY=200');
  if (window.focus)
    {newwindow.focus();
  }
};

// getJSON for Prototype
(function(){
  var id = 0, head = $$('head')[0], global = this;
  global.getJSON = function(url, callback) {
    var script = document.createElement('script'), token = '__jsonp' + id;
    
    // callback should be a global function
    global[token] = callback;
    
    // url should have "?" parameter which is to be replaced with a global callback name
    script.src = url.replace(/\?(&|$)/, '__jsonp' + id + '$1');
    
    // clean up on load: remove script tag, null script variable and delete global callback function
    script.onload = function() {
      script.remove();
      script = null;
      delete global[token];
    };
    head.appendChild(script);
    
    // callback name should be unique
    id++;
  }
})();

var shortenUrl = function (element, callback) {
  var url = "http://api.bit.ly/v3/shorten?login=dntest&apiKey=R_fc213d4141c60e8cab79566ac9b3d132" +
    "&format=json&callback=?&longUrl=" + encodeURIComponent(element.title);

  getJSON(url, function (json) {
    callback(element, json.data.url);
  });
};

var eventsObserver = function() {
  var controller = this;

  // facebook share link open in popup
  $$('.fb').invoke('observe', 'click', function(event){
    Event.stop(event);
    var element = event.element();
    if (element.readAttribute('class') !== "fb") {
      element = element.up('.fb');
    }
    popup(element.readAttribute("href"), 252, 400);
  });

  var tws = $$('.tw');
  for (var i = 0; i < tws.length; i++) {
    var element = tws[i];
    shortenUrl(element, function (element, shortUrl) {
      element.href = element.href.replace(element.title, shortUrl);
    });
  }

  slider = new Control.Slider('tuner', 'tuner_bg', {
    range: $R(-200, 200),
    values: positions,
    sliderValue: 220,
    onChange: function(v){
      controller.load();
    }
  });

  $$('#languages a').invoke('observe', 'click', function(event){
    Event.stop(event);
    var element = event.element();
    $$('#languages a').collect(function(element) {element.removeClassName('active')});
    element.setAttribute('class', 'active');
    controller.load();
  });
  $$('#regions a').invoke('observe', 'click', function(event){
    Event.stop(event);
    var element = event.element();
    $$('#regions a').collect(function(element) {element.removeClassName('active')});
    element.setAttribute('class', 'active');
    controller.load();
  });
  $$('#rss_types a').invoke('observe', 'click', function(event){
    Event.stop(event);
    var element = event.element();
    $$('#rss_types a').collect(function(element) {element.removeClassName('active')});
    element.setAttribute('class', 'active');
    controller.load();
  });
}

var newsController = {
  run: eventsObserver,
  load: function () {
    var news_containers = $$(".news_container");

    $$(".screen_name").each(function (screen_name, index) {
      news_containers[index].update();
      var url = '/news/feeds?' + getHash() + '&term=' + screen_name.innerHTML;
      new Ajax.Request(url, {
        method: 'get',
        onSuccess: function(transport) {
          var feed_posts = JSON.parse(transport.responseText);
          news_containers[index].replace(feed_posts)
          //var feeds = JSON.parse(transport.responseText);
          //$$('.news_container').each(function (element, index) {
          //  element.replace(feeds[index]);
          //})
        }
      });
    })
  }
};

termsController = {
  run: eventsObserver,
  load: function () {
    var news_containers = $$('.news_container');
      news_containers[0].update();
      var url = '/news/feeds?' + getHash() + '&term=' + _term;
      new Ajax.Request(url, {
        method: 'get',
        onSuccess: function(transport) {
          var feed_posts = JSON.parse(transport.responseText);
          news_containers[0].replace(feed_posts)
          //var feeds = JSON.parse(transport.responseText);
          //$$('.news_container').each(function (element, index) {
          //  element.replace(feeds[index]);
          //})
        }
      });
  }
}

document.observe("dom:loaded", function() {
  var controllerName = '';
  if ($$('body')[0].id) {
    controllerName = eval($$('body')[0].id + 'Controller');
    if (typeof controllerName !== 'undefined') {
      controllerName['run']();
    }
  }
});

