/**
 * Copyright (c) 2009 Stephan Jorek / @rtplan21 GmbH.
 *
 * You are free to copy and use this sample.
 * License can be found here: http://code.google.com/apis/ajaxsearch/faq/#license
*/

function GFiconicFeedControl (feedUrls, container, options) {
  // node elements.
  this.nodes = {};
  this.collapseElements = [];
  
  // the feeds.
  this.feeds = [];
  this.results = [];
  this.currentFeedItemClass = false;

  if (typeof feedUrls == 'string') {
    this.feeds.push({url:feedUrls});
  } else if (typeof feedUrls == 'object') {
    for (var i=0; i<feedUrls.length; i++) {
      var entry = feedUrls[i];
      var o = {};
      var feedUrl;
      if (typeof entry == 'string') {
        o.url = feedUrls[i];
      } else if (typeof entry == 'object') {
        o = feedUrls[i];
	if (o && o.title) {
	  var s = o.title;
	  o.title = s.replace(/</g,'&lt;').replace(/>/g, '&gt;');
	}
      }
      this.feeds.push(o);
    }
  }

  if (typeof container == "string") {
    container = document.getElementById(container);
  }
  this.parseOptions_(options);
  this.setup_(container);
}

GFiconicFeedControl.prototype = GFstaticFeedControl.prototype;

/*
 * Default time in milliseconds for the feed to be reloaded.
 * @type Number
 */
GFiconicFeedControl.DEFAULT_CSS_CLASSES = {
	'gpd-site'   : /^https?:\/\/(www|service)\.greenpeace\.de\//,
	'gpd-blog'   : /^https?:\/\/(feeds\.feedburner\.com\/greenpeace_blog|blog\.greenpeace\.de)\/?/,
	'twitter'    : /^https?:\/\/([^\/]+\.)*twitter\.com\//,
	'youtube'    : /^https?:\/\/([^\/]+\.)*youtube\.com\//,
	'flickr'     : /^https?:\/\/([^\/]+\.)*flickr\.com\//,
	'feedburner' : /^https?:\/\/([^\/]+\.)*feedburner\.com\//
};
/*
 * Default time in milliseconds for the feed to be reloaded.
 * @type Number
 */
GFiconicFeedControl.DEFAULT_NUM_RESULTS = GFstaticFeedControl.DEFAULT_NUM_RESULTS;
/*
 * Default time in milliseconds for the feed to be reloaded.
 * @type Number
 */
GFiconicFeedControl.DEFAULT_FEED_CYCLE_TIME = GFstaticFeedControl.DEFAULT_FEED_CYCLE_TIME;
/*
 * Default display time in milliseconds for each entry.
 * @type Number
 */
GFiconicFeedControl.DEFAULT_DISPLAY_TIME = GFstaticFeedControl.DEFAULT_DISPLAY_TIME;
/*
 * Default fadeout transition time in milliseconds for each entry.
 * @type Number
 */
GFiconicFeedControl.DEFAULT_FADEOUT_TIME = GFstaticFeedControl.DEFAULT_FADEOUT_TIME;
/*
 * Default time between transition steps in milliseconds
 * @type Number
 */
GFiconicFeedControl.DEFAULT_TRANSISTION_STEP = GFstaticFeedControl.DEFAULT_TRANSISTION_STEP;
/*
 * Default hover time in milliseconds for each entry.
 * @type Number
 */
GFiconicFeedControl.DEFAULT_HOVER_TIME = GFstaticFeedControl.DEFAULT_HOVER_TIME;

/**
 * Create the list Entries
 * @private
 */
GFiconicFeedControl.prototype.createListEntries_ = function(resultIndex, node) {
// console.log('TEST: ' + resultIndex + ' => ' + this.feeds[resultIndex].url);
// console.dir(this.feeds);
// console.dir(this.results[resultIndex].feed);

  var feedUrl = this.feeds[resultIndex].url;
  var cssClassName = false;
  for(var cssClassKey in GFiconicFeedControl.DEFAULT_CSS_CLASSES) {
//    console.log('TEST: ' + cssClassKey + ' => ' + GFiconicFeedControl.DEFAULT_CSS_CLASSES[cssClassKey]);
  	if (GFiconicFeedControl.DEFAULT_CSS_CLASSES[cssClassKey]===false) {
		cssClassName = cssClassKey;
		break;
	} else if(
		GFiconicFeedControl.DEFAULT_CSS_CLASSES[cssClassKey]!==false &&
		String(feedUrl).match(GFiconicFeedControl.DEFAULT_CSS_CLASSES[cssClassKey])
	) {
		cssClassName = cssClassKey;
		break;
	}
  }
  this.currentFeedItemClass = cssClassName;
// console.log('TEST: ' + cssClassName + ' @ ' + feedUrl);

  var entries = this.results[resultIndex].feed.entries;
  this.clearNode_(node);
  for (var i = 0; i < entries.length; i++) {

    this.feedControl.createHtml(entries[i]);
    var className = 'gfg-listentry ';
    className += (cssClassName)?('gfg-listentry-feeditem gfg-listentry-feeditem-' + cssClassName + ' '):'';
    className += (i%2)?'gfg-listentry-even':'gfg-listentry-odd';
//	console.log('item class: ' + className);
    var listEntry = this.createDiv_(className);

	var entryDate = new Date();
	if (entries[i].publishedDate) {
		// Mon, 29 Jun 2009 18:40:00 -0700
		matches = String(entries[i].publishedDate).match(/^[A-Za-z]{3,3}, (\d{1,2}) ([A-Za-z]{3,3}) (\d{4})/);
		if (matches.length==4) {
			var entryMonths = {'jan':0,'feb':1,'mar':2,'mär':2,'apr':3,'may':4,'mai':4,'jun':5,'jul':6,'aug':7,'sep':8,'oct':9,'okt':9,'nov':10,'dec':11,'dez':11};
			entryDate.setDate(matches[1]);
			entryDate.setMonth(entryMonths[String(matches[2]).toLowerCase()]);
			entryDate.setFullYear(matches[3]);
		}
	}

	var entryDateDay = entryDate.getDate();
	if (String(entryDateDay).length<2) {
		entryDateDay='0'+entryDateDay;
	}
	var entryDateMonth = (entryDate.getMonth()+1);
	if (String(entryDateMonth).length<2) {
		entryDateMonth='0'+entryDateMonth;
	}

	var dateEntry = document.createElement('span');
	dateEntry.className = 'date';
	dateEntry.innerHTML = entryDateDay + '.' + entryDateMonth + '.' + entryDate.getFullYear();

    listEntry.appendChild(dateEntry);

	hiddenEntry = document.createElement('span');
	hiddenEntry.className = 'hidden';
	hiddenEntry.innerHTML = ', ';

    listEntry.appendChild(hiddenEntry);

    var entryLink = this.createLink_(entries[i].link,
                                entries[i].title,
                                this.options.linkTarget);
    listEntry.appendChild(entryLink);

    if (this.options.pauseOnHover) {
      listEntry.onmouseover = this.bind_(this.listMouseOver_, resultIndex, i);
      listEntry.onmouseout = this.bind_(this.listMouseOut_, resultIndex, i);
    }
    entries[i].listEntry = listEntry;
    node.appendChild(listEntry);
  }
//  console.log('item html: ' + node.innerHTML);
  if (node == this.nodes.list) {
    this.entries = entries;
  }
}
/**
 * Display current entry.
 * @private
 */
GFiconicFeedControl.prototype.displayCurrentEntry_ = function() {
  this.clearNode_(this.nodes.entry);
  this.current = this.entries[this.entryIndex].html;
  this.current.style.top = '0px';
  // this.nodes.entry.appendChild(this.current);
  this.createOverlay_();
  
  // Expand the blog who's post is being displayed
  if(this.options.collapseable) {
    var feedTitle = null;
    
    for (var i=0; i < this.results.length; i++) {
      if(this.results[i].feed.entries == this.entries) {
        feedTitle = this.results[i].feed.title;
      }
    }

    var els = this.collapseElements;

    for (var i=0; i < els.length; i++) {
      var el = els[i];
      var divfeedTitle = el.collapse.previousSibling.innerHTML;
      var expandClicker = el.collapse;
      if(feedTitle == divfeedTitle) {
        if(this.ie) {
          expandClicker.click();
        } else {
          expandClicker.onclick();
        }

      }
    }
  }
  
  if (this.currentList) {
    var className = 'gfg-listentry ';
    className += (this.currentFeedItemClass)?('gfg-listentry-feeditem gfg-listentry-feeditem-' + this.currentFeedItemClass + ' '):'';
    className += (this.currentListIndex%2)?
        'gfg-listentry-even':'gfg-listentry-odd';
//	console.log('item class2: ' + className);
    this.currentList.className = className;
  }
  this.currentList = this.entries[this.entryIndex].listEntry;
  this.currentListIndex = this.entryIndex;
  var className = 'gfg-listentry gfg-listentry-highlight ';
  className += (this.currentFeedItemClass)?('gfg-listentry-feeditem gfg-listentry-feeditem-' + this.currentFeedItemClass + ' '):'';
  className += (this.currentListIndex%2)?
       'gfg-listentry-even':'gfg-listentry-odd';
//  console.log('item class3: ' + className);
  this.currentList.className = className;
}
GFgadget = GFiconicFeedControl;
