/*
	Copyright James Matteson 2011. All rights reserved.
*/
var myUI = new ui();

function ui(){
   var oThis = this;
   //var containers = null;
   var defaultPopularSort = 'promote_date-desc';
   var defaultUpcomingSort = 'digg_count-desc'
   var blankPage = 'blank.html';
   
   // filters
   var diggParams = {
      'count': 10,
      'domain': '',
      'section': 'popular',
      'type': 'all',
      'container': '',
      'topic': '',
      'sort': defaultPopularSort,
      'time': ''
   };
   
   // frame
   var view = 'digg';
      
   /* init */
   jQuery(document).ready(function(){
      scrollTop();
      myStoryCreator = new storyCreator($('stories'));
      
      // init
      dataLayer.init();
      document.fire('site:init');
      
      // reset the sort
      jQuery('#ddlSort').val(diggParams.sort);
      
      // load containers
      //myDigg.fetchContainers('cbContainers');
		
		// load topics
		fillTopics();
      
      // no select
      utils.noSelect($(document.body));
            
      // nav
      $('header').select('.home-tab')[0].observe('click', function(){
         showTab(true);
      });
      $('header').select('.story-tab')[0].observe('click', function(){
         showTab(false);
      });
      
      // section
      $('header').select('ul.section a').each(function(a){
         a.observe('click', function(){
            setSection(a.parentNode);
         });
      });
      $('header').select('ul.view a').each(function(a){
         a.observe('click', function(){
            setView(a.parentNode);
         });
      });
      
      // story nav
      $('btnPrevStory').observe('click', myStories.prevStory);
      $('btnNextStory').observe('click', myStories.nextStory);
      $('btnRemoveStory').observe('click', myStories.removeStory);
      
      // filters
      $('storyType').select('li').each(function(li){
         li.observe('click', setStoryType);
      });
      //$('ddlContainer').observe('change', containerChange);
      $('ddlTopic').observe('change', topicChange);      
      $('ddlSort').observe('change', sortChange);
      $('ddlTime').observe('change', timeChange);
      
      // events
      $('main').observe('scroll', function(){
         slideSide();
         checkForMore();
      });
      $('frmDomainFilter').observe('submit', setDomain);
      $('btnDomainFilter').observe('click', setDomain);
            
      // resize
      resize();
            
      // do an initial search
      search();
   });
   document.observe('stories:empty', function(){
      showTab(true);
   });
   document.observe('update:count', function(e){
      $('header').select('.story-tab span')[0].innerHTML = e.memo.count;
   });
   document.observe('show:story', function(e){
      showStory(e.memo.story);
   });
   document.observe('stories:checkForMore', checkForMore);
   Event.observe(window, 'resize', resize);
   window.onbeforeunload = function(){
      if (!onHomeTab() && view != 'digg') return "Click 'CANCEL' or 'Stay on this Page' to stay on UserRule.";
   };
   
   /* document */
   function scrollTop(){
      Element.scrollTo($('main'), 0, 0);
   }
   function slideSide(){
      jQuery('#side').stop().animate({top: $('main').scrollTop}, 'slow');
   }
   function resize(){
      var diggFrame = $('diggFrame');
      var storyFrame = $('storyFrame');
      
      if (diggFrame != null){
         var headerHeight = $('header').getHeight();
         diggFrame.style.height = document.viewport.getHeight() - headerHeight + 'px';
         diggFrame.style.top = headerHeight + 'px';
      }
      
      if (storyFrame != null){
         var headerHeight = $('header').getHeight();
         storyFrame.style.height = document.viewport.getHeight() - headerHeight + 'px';
         storyFrame.style.top = headerHeight + 'px';
      }
      
      $('main').style.height = document.viewport.getHeight() - $('header').getHeight() + 'px';
      checkForMore();
   }
   
   /* tabs */
   function onHomeTab(){
      return $('header').select('.home-nav')[0].visible();
   }
   function showTab(isHome){
      var homeNav = $('header').select('.home-nav')[0];
      var storyNav = $('header').select('.story-nav')[0];
      var main = $('main');
      
      if (isHome || myStories.getStoryCount() == 0){
         killFrame();
         homeNav.show();
         storyNav.hide();
         main.show();
         slideSide();
      }else{
         homeNav.hide();
         storyNav.show();
         main.hide();
         showStory(myStories.getStory());
         oThis.loading(false);
      }
   }
   
   /* nav */
   function setSection(li){
      // unselect
      $('header').select('ul.section li').each(function(item){
         item.removeClassName('active');
      });
      
      // select
      li.addClassName('active');
      
      // set section
      diggParams.domain = '';
      $('domainFilter').hide();
      $('domainFilter').style.top = '-50px';
      $('side').show();
      $('timeContainer').hide();
      $('stories').show();
      $('stories').removeClassName('domain');
      $('settings').hide();
      $('about').hide();
      
      if (li.hasClassName('popular')){
         diggParams.section = 'popular';
         jQuery('#ddlSort').val(defaultPopularSort);
         sortChange();
      }else if (li.hasClassName('upcoming')){
         diggParams.section = 'upcoming';
         jQuery('#ddlSort').val(defaultUpcomingSort);
         sortChange();
      }else if (li.hasClassName('domain')){
         diggParams.section = '';
         $('domainFilter').show();
         jQuery('#domainFilter').stop().animate({top: 0}, 'slow');
         $('txtDomainFilter').value = '';
         $('txtDomainFilter').focus();
         $('timeContainer').show();
         $('frmDomainFilter').select('.error')[0].hide();
         $('stories').addClassName('domain');
         jQuery('#ddlSort').val(defaultUpcomingSort);
         sortChange();
      }else if (li.hasClassName('read')){
         diggParams.section = 'read';
         $('side').hide();
         search();
      }else if (li.hasClassName('dismissed')){
         diggParams.section = 'dismissed';
         $('side').hide();
         search();
      }else if (li.hasClassName('settings')){
         diggParams.section = 'settings';
         oThis.loading(false);
         $('stories').hide();
         $('side').hide();
         $('settings').show();
         settings.load();
      }else if (li.hasClassName('about')){
         diggParams.section = 'about';
         oThis.loading(false);
         $('stories').hide();
         $('side').hide();
         $('about').show();
      }
      
      scrollTop(); // scroll to the top
   }
   function setView(li){
      // unselect
      $('header').select('ul.view li').each(function(item){
         item.removeClassName('active');
      });
      
      // select
      li.addClassName('active')
      
      // show view
      if (li.hasClassName('digg')){
         view = 'digg';
      }else{
         view = 'story';
      }
      
      setStoryView(myStories.getStory());
   }
   
   /* search */
   function search(){
      scrollTop();
      storyFetcher.search(diggParams);
   }
         
   /* filter */
   /*function containerChange(){
      diggParams.container = jQuery('#ddlContainer').val();
      fillTopics();
      search();
   }*/
   function topicChange(){
      diggParams.topic = jQuery('#ddlTopic').val();
      search();
   }
   function sortChange(){
      diggParams.sort = jQuery('#ddlSort').val();
      search();
   } 
   function timeChange(){
      diggParams.time = jQuery('#ddlTime').val();
      search();
   }
   function setDomain(){
      var domain = $('txtDomainFilter').value.strip();
      var error = $('frmDomainFilter').select('.error')[0];
      
      if (dataLayer.isDomainBlacklisted(domain)){
         error.show();
      }else{
         error.hide();
         diggParams.domain = domain;
         search();
      }
   }
   function fillTopics(){
      /*var container = jQuery('#ddlContainer').val();
      
      // clear the topics
      $('ddlTopic').options.length = 0;
      utils.addDDL($('ddlTopic'), 'All', '');
      
      // fill the topics matching the selected container
      for (var i = 0, len = containers.length; i <len; i++){
         if (containers[i].short_name == container){
            containers[i].topics.each(function(topic){
               utils.addDDL($('ddlTopic'), topic.name, topic.short_name);
            });
         }
      }
		
		diggParams.topic = '';
		*/
		
		utils.addDDL($('ddlTopic'), 'Business', 'business');
		utils.addDDL($('ddlTopic'), 'Entertainment', 'entertainment');
		utils.addDDL($('ddlTopic'), 'Gaming', 'gaming');
		utils.addDDL($('ddlTopic'), 'Lifestyle', 'lifestyle');
		utils.addDDL($('ddlTopic'), 'Offbeat', 'offbeat');
		utils.addDDL($('ddlTopic'), 'Politics', 'politics');
		utils.addDDL($('ddlTopic'), 'Science', 'science');
		utils.addDDL($('ddlTopic'), 'Sports', 'sports');
		utils.addDDL($('ddlTopic'), 'Technology', 'technology');
		utils.addDDL($('ddlTopic'), 'World News', 'world_news');	
   }
   function setStoryType(e){
      var li = Event.element(e);
      
      // unselect
      $('storyType').select('.active').each(function(item){
         item.removeClassName('active');
      });
      
      // select
      li.addClassName('active')
      
      // set story type
      if (li.hasClassName('news'))
         diggParams.type = 'news';   
      else if (li.hasClassName('videos'))
         diggParams.type = 'videos';
      else if (li.hasClassName('images'))
         diggParams.type = 'images';
      else
         diggParams.type = 'all';
         
      // re-search
      search();
   }
   
   /* stories */
   function checkForMore(){
      if (onHomeTab() && diggParams.section != 'settings' && diggParams.section != 'about') {
         // search for more stories if we've scrolled far enough
         if ($('more').viewportOffset().top - 500 <= $('main').getHeight()) {
            storyFetcher.searchMore(diggParams);
         }
      }
   }
   function showStory(story){
      var diggFrame = new Element('iframe', {
         'id': 'diggFrame',
         'src': story.href,
         'class': 'active'
      });
      var storyFrame = new Element('iframe', {
         'id': 'storyFrame',
         'src': blankPage
      });
      
      $('hlStory').innerHTML = story.title;
      $('hlStory').href = story.href;
      $('lblDiggs').innerHTML = story.diggs + ' diggs';
      $('lblDomain').innerHTML = myStories.getStoryIndex() + 1 + ' / ' + myStories.getStoryCount(); //story.link;
      
      killFrame();
      $('frameContainer').show();
      $('frameContainer').insert(diggFrame);
      $('frameContainer').insert(storyFrame);
      setStoryView(story);
   }
   function setStoryView(story){
      $(document.body).select('iframe').each(function(frame){
         frame.removeClassName('active');
      });
      
      if (view == 'digg'){
         // the digg src is set right away for quick loading, so we don't set it again.
         $('diggFrame').addClassName('active');
         $('storyFrame').src = blankPage;
         $('diggFrame').contentWindow.focus();
      }else{
         $('storyFrame').addClassName('active');
         $('storyFrame').src = story.link;
         $('storyFrame').contentWindow.focus();
      }
      
      resize();
   }
   function killFrame(){
      $('frameContainer').innerHTML = '';
      $('frameContainer').hide();
   }
   
   /* ui */
   this.clearStories = function(){
      $('stories').innerHTML = '';
   }
   this.loading = function(show){
      if (show && onHomeTab())
         $('loading').show();
      else
         $('loading').hide();
   }
   
   /* callbacks */
   /*this.cbContainers = function(root){
      containers = root.containers;
      containers.each(function(c){
         utils.addDDL($('ddlContainer'), c.name, c.short_name);
      });
   }*/
}

/* callbacks */
/*function cbContainers(root){
   myUI.cbContainers(root);
}*/
