(function($) {
  
  var g_opts;
  var ga_titles;
  var ga_links;
  var g_link_count;
  var g_link_max=10;
  var g_nt_slider;
  //var g_2nd_item_left;
  var g_2nd_item;
  var g_interval;
  var g_content_idx;
  var g_nt_box;
  var g_move_lock=0;
  
  
  /////////////////////////////////////////////////////////////////////////////
  // Function: jQuery.fn.news_ticker
  //
  // Purpose:  The publicly available function to configure and create this
  //           component
  //
  // Notes:    background-color: 3DB7E4;
  /////////////////////////////////////////////////////////////////////////////   
  jQuery.fn.news_ticker = function(options) {
    
    var defaults = {
      
      mSourceFile: 'news_ticker/news_ticker.txt',
      mWidth: 800,
      mHeight: 26,
      mLeftCapWidth: 31,
      mRightCapWidth: 31,
      mClassPrefix:   'nt_home_'

    };
  
    ta = $("#ta_debug");

    // Extend our default options with those provided.
    g_opts = $.extend(defaults, options);  
    
    $this = $(this);
    
    g_nt_box = $('#nt_box');
    
    load_news_items();

    createHTML($this, defaults);
    
    createContent(0);
    
    go();
  }  
  
  /////////////////////////////////////////////////////////////////////////////
  // Function: go
  //
  // Purpose:  animate
  /////////////////////////////////////////////////////////////////////////////  
  function go()
  {
    //return;
    g_interval = setInterval ( function () {
      
      var left = parseInt(g_nt_slider.css('left'), 10);
      
     // $('#out').text(left + '  ' + g_2nd_item.offset().left + ' '+ $('#nt_box').offset().left);
      
      var boxleft = parseInt($('#nt_box').offset().left + 1,10);
      var itemleft = parseInt(g_2nd_item.offset().left - (parseInt(g_2nd_item.css('padding-left'),10)*2),10);

      if (boxleft ==  itemleft ) {
        createContent((g_content_idx + 1 ) % g_link_count);
        //clearInterval (g_interval);
      } else {
        g_nt_slider.css('left',(left-1)+'px');    
        
        //var newleft = g_nt_slider.offset().left -1;
        //g_nt_slider.offset({ left: newleft});
      }
    }, 20);
    
  }
  
  

  
  /////////////////////////////////////////////////////////////////////////////
  // Function: createContent
  //
  // Purpose:  create the HTML content
  /////////////////////////////////////////////////////////////////////////////
  function createContent (idx) {  

    g_content_idx=idx;
    
    var a0;
    var a1;
    
    var div1 = $('<div></div>')
              .attr('id','nt_slider')
              .attr('class',g_opts.mClassPrefix+'slider')
              .css('position','relative')
              .css('left','0px')
              //.css('padding-top','2px')
              .css('height',g_opts.mHeight+'px')
              .css('white-space','nowrap');    
    
    
    idx = (idx - 1) < 0 ? g_link_count -1 : (idx-1);
    
    for (var i=0; i<g_link_count+1; i++) {
                
      var a   = $('<a></a>')
                .attr('class',g_opts.mClassPrefix+'link')
                
                .attr('href',ga_links[idx])
                .html(ga_titles[idx]);
      
      div1.append(a);
      
      if (i==0) { a0=a; }
      if (i==1) { a1=a; }
      
      if (i==2) {
        g_2nd_item = a;
      }
      
      idx++;
      if (idx>= g_link_count) idx=0;
    }
  
    $('#nt_box').html("");
    
    
    $('#nt_box').append(div1);
  
    div1.css('left', ((a0.width() + parseInt(a0.css('margin-right'),10)) *-1) +'px');
  
    g_nt_slider=div1;
  }
  
  /////////////////////////////////////////////////////////////////////////////
  // Function: createHTML
  //
  // Purpose:  create the HTML template
  /////////////////////////////////////////////////////////////////////////////
  function createHTML (where, opts) {  
  

    var table= $('<table></table')
               .attr({ cellSpacing : 0, cellpadding : 0, border : 0 })
               .attr('class',g_opts.mClassPrefix+'table')
               .attr('id', 'nt_table');
  
    var row       = $('<tr></tr>');
    
    var col1      = $('<td></td>')
                    .css('width',opts.mLeftCapWidth+'px')
                    .css('height',opts.mHeight+'px')
                    .css('padding','0px');    
  
    var col2      = $('<td></td>')
                    .css('width', opts.mWidth - (opts.mLeftCapWidth+opts.mRightCapWidth)+'px')
                    .css('height',opts.mHeight+'px')
                    .css('padding','0px');

    var col3      = $('<td></td>')
                    .css('width',opts.mRightCapWidth+'px')
                    .css('height',opts.mHeight+'px')
                    .css('padding','0px');      

    var capLeft = $('<img>')
                  .attr('src','/news_ticker/left_cap.gif')
                  .css('margin','0px')
                  .css('padding','0px')
                  .css('display','block');
  
    var div1 = $('<div></div>')
               .attr('id','nt_box')
               .css('width',opts.mWidth - (opts.mLeftCapWidth+opts.mRightCapWidth)+'px')
               .css('height', g_opts.mHeight+'px')
               .css('overflow','hidden')
               .css('background',"url('news_ticker/bg_sliver.gif')")
               .css('margin','0 0')

               .css('background-color','white');
  
  
               
    var capRight = $('<img>')
               
               .attr('src','/news_ticker/right_cap.gif')
               .css('margin','0px')
               .css('padding','0px')
               .css('display','block');
               
    where.append(table);
      table.append(row);
        row.append(col1);
          col1.append(capLeft);
        row.append(col2);
          col2.append(div1);
        row.append(col3);
          col3.append(capRight);
      
    table.mouseenter(function() {

      clearInterval(g_interval);
    });

    table.mouseleave(function() {

      go();
    });  
    
    col3.click (function() { 
    
      if (g_move_lock) return
      g_move_lock=1;
      var padding = (parseInt(g_2nd_item.css('padding-left'),10)*2);
    
      g_nt_slider.animate (
        {  left: '-='+(g_2nd_item.offset().left - $('#nt_box').offset().left -padding) },
          500,
          function () {
             createContent((g_content_idx + 1 ) % g_link_count); 
             g_move_lock=0;
          });
      
    });      
      
    col1.click (function() { 
    
      if (g_move_lock) return
      g_move_lock=1;    
      var padding = (parseInt(g_2nd_item.css('padding-left'),10)*2);
      g_nt_slider.animate (
        {  left: '+='+((parseInt(g_nt_slider.css('left'), 10) -padding) * -1)},
          500,
          function () {
             createContent((g_content_idx - 1 ) < 0 ? g_link_count-1 : (g_content_idx - 1 ) ); 
             g_move_lock=0;
          });
      
    });        
      
  }
  
  /////////////////////////////////////////////////////////////////////////////
  // Function: load_news_items
  //
  // Purpose:  
  /////////////////////////////////////////////////////////////////////////////   
  function load_news_items(){

    var txt = $.ajax ({ async: false,
                        url: g_opts.mSourceFile }).responseText;
      
    //alert (txt);
                        
    //
    ga_titles = new Array(g_link_max);                
    ga_links  = new Array(g_link_max);   
    
    // remove extraneous \r's
    txt = txt.replace('\r','');
    
    var lines = txt.split('\n');
    
    var ctr=0;
    var toggle=0;
    
    for (var i in lines) {
    
      var el = lines[i];

      var test = new String(el);
      test = test.replace(/\s/g,'');
      if (test.length == 0)  { continue; }
      if (ctr >= g_link_max) { continue; }
      
      if (toggle == 0) {
        toggle = 1; 
        ga_titles[ctr] = el;
      } else {
        toggle = 0; 
        ga_links[ctr] = el;
        ctr++;
        g_link_count=ctr;
      }
    }
  }


  
})(jQuery);
