Ext.onReady(function(){
  if (Ext.fly('headlines')){
    var x = new UpstateTax.NewsStories();
    x.storyLimit = document.headlineLimit;
    if (x.isDisplayReady()) x.displayStories();
  }
  if (Ext.fly('favorites')){
    var y = new UpstateTax.NewsStories();
    y.displayDiv = 'favorites';
    y.favoritesOnly = true;
    y.storyLimit = document.favoriteLimit;
    if (y.isDisplayReady()) y.displayStories();
  }
});

UpstateTax.NewsStories = function (){
}

UpstateTax.NewsStories.prototype = {
  favoritesOnly : false,
  displayDiv    : 'headlines',
  storyLimit    : 15,
  storyStart    : 0,
  loadingDiv    : null,
  btnNext       : null,
  btnPrev       : null,
  isDisplayReady : function(){
    return Ext.query('#'+this.displayDiv).length >0;
  },
  parseStories : function (r,query){
    var rAjax = Ext.util.JSON.decode(r.responseText)
    this.hideLoading();
    Ext.each(rAjax.data, function(story){ 
      this.addStory(story);
    },this);
    this.storyLimit = query.params.limit;
    this.storyStart = query.params.start;
    this.configureButtons(rAjax.total);
  },
  displayStories : function (){
    this.showLoading();
    Ext.Ajax.request({
       url     : '/ajax/index.php',
       success : this.parseStories,
       failure : this.ajaxfailure,
       scope   : this,
       params  : { 
         area     : 'news',
         action   : 'getstories',
         favsOnly : this.favoritesOnly ? 'y' : 'n',
         start    : this.storyStart,
         limit    : this.storyLimit }
    })
  },
  createElement : function (name, cls) {
    var e = document.createElement(name);
    e.className = cls;
    return e;
  },
  createWrapTop : function(){
    var wrap = this.createElement('div', 'story-entry whiteBox');
    var top = wrap.appendChild(this.createElement('b','xtop'));
    top.appendChild(this.createElement('b','xb1'));
    top.appendChild(this.createElement('b','xb2'));
    top.appendChild(this.createElement('b','xb3'));
    top.appendChild(this.createElement('b','xb4'));
    
    return wrap;
  },
  createWrapBottom : function (){
    var bottom = this.createElement('b','xbottom');
    bottom.appendChild(this.createElement('b','xb4'));
    bottom.appendChild(this.createElement('b','xb3'));
    bottom.appendChild(this.createElement('b','xb2'));
    bottom.appendChild(this.createElement('b','xb1'));

    return bottom;
  },
  configureButtons : function(total){
    var wrap = new Ext.Element(document.createElement('div'));
    wrap.dom.className = 'buttons';
    if (this.storyStart != 0){
      if (!this.btnPrev) {
        this.btnPrev = new Ext.Element(document.createElement('img'));
        this.btnPrev.dom.src = '/images/btn-back.gif';
        this.btnPrev.dom.className = 'prevButton';
        this.btnPrev.on('click', function(){
          this.storyStart = this.storyStart - this.storyLimit
          this.displayStories();
        }, this);
      }

      wrap.appendChild(this.btnPrev);
    }
    if (total > this.storyStart + this.storyLimit){
      if (!this.btnNext) {
        this.btnNext = new Ext.Element(document.createElement('img'));
        this.btnNext.dom.src = '/images/btn-next.gif';
        this.btnNext.dom.className = 'nextButton';
        this.btnNext.on('click', function(){
          this.storyStart = this.storyStart + this.storyLimit
          this.displayStories();
        }, this);
      }

      wrap.appendChild(this.btnNext);
    }
    Ext.fly(this.displayDiv).appendChild(wrap);
    
  },
  addStory : function (data) {
    
    var wrap = this.createWrapTop();
    
    var c = document.createElement('div');
    c.className = 'content';
    var l = c.appendChild(document.createElement('a'));
    l.href = data['link'];
    l.innerHTML = data['name'];
    c.appendChild(document.createElement('br'));
    c.appendChild(document.createElement('font'));
    c.lastChild.innerHTML = '<i>' + data['site'] + ' - ' + formatDate(data['newsday'])+ '</i>';
    c.lastChild.setAttribute('size','-1');
    c.appendChild(document.createElement('br'));
    c.appendChild(document.createElement('font'));
    c.lastChild.innerHTML = data['teaser']+'&nbsp;';
    c.lastChild.setAttribute('size','-1');
    l = c.appendChild(document.createElement('a'));
    l.href = data['link'];
    l.appendChild(document.createElement('img')).setAttribute('src','http://sandbox.upstatetax.com/images/external.png');
    wrap.appendChild(c);

    wrap.appendChild(this.createWrapBottom());

    if (data['favorite'] == 'y'){
      var fw = this.createElement('div','favwrap');
      fw.appendChild(wrap);
      fw.appendChild(this.createElement('div','favimg')).innerHTML = '&nbsp;';
      wrap = fw;
    }

    Ext.fly(this.displayDiv).dom.appendChild(wrap);
  },
  showLoading : function (){
    if (!this.loadingDiv) {
      var wrap = this.createWrapTop();
      wrap.id = 'loading'
    
      var d = document.createElement('div');
      d.className = 'content';
      d.style.padding = '10px 0 10px 150px';
      var sp = document.createElement('span');
      sp.className = 'loading';
      sp.innerHTML = 'Loading...';
      d.appendChild(sp);

      wrap.appendChild(d);
  
      wrap.appendChild(this.createWrapBottom());
      this.loadingDiv = Ext.fly(this.displayDiv).dom.appendChild(wrap);
    } else {
      // We might need to clear
      var myDom = Ext.fly(this.displayDiv).dom;
      var i = 0;
      while (myDom.childNodes[i]) {
        while (myDom.childNodes[i].id == 'loading') i++;
        myDom.removeChild(myDom.childNodes[i]);
      }
    }
    this.loadingDiv.style.display = 'block';
  },
  hideLoading : function (){
    if (this.loadingDiv) this.loadingDiv.style.display = 'none';
  },
  ajaxFailure : function (){
    
  }
}

function formatDate(input){
  var d = new Date()
  d = Date.parseDate(input, "Y-m-d");
  return d.format('M j, Y');

//	var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/;
//	var parts=input.replace(regex,"$1 $2 $3 $4 $5 $6").split(' ');
//	var d = new Date(parts[0],parts[1],parts[2],parts[3],parts[4],parts[5]);
///	var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9])$/;
///	var parts=input.replace(regex,"$1 $2 $3").split(' ');
///	var d = new Date(parts[0],parts[1],parts[2]);
//  var weekday=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday")
///  var monthname=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")
///  return monthname[d.getMonth()] + " " + d.getDate() + ", " + d.getFullYear();  
}
