YAHOO.namespace('ksv');

/*
 * Tip of the Day control set.
 */
YAHOO.ksv.totd = function() {
    var _private = {};  //"_private" variable collection
    var _public = {};   //"_public" variable collection, to be returned

	/*
	 * Tip Ticker Controls
	 */
	_public.ticker = function() {
		var _dt_private = {};
		var _dt_public = {};

		_dt_public.tipTotal = 0;
		_dt_public.tipDelay = 10000;

		_dt_private.rotationPaused =  false;
		_dt_private.tipWaiting = false;
		_dt_private.tipIndex = 0;

		_dt_public.init = function(el, tipNum) {
			var tipContainer = jQuery('#' + el);
			_dt_public.tipTotal = tipNum;

			YAHOO.util.Event.addListener(tipContainer, 'mouseover', _dt_public.toggleRotation);
			YAHOO.util.Event.addListener(tipContainer, 'mouseout', _dt_public.toggleRotation);
			_dt_private.tipAnimation();
		};

		_dt_private.tipAnimation = function() {
			if(_dt_private.tipIndex >= _dt_public.tipTotal) {
				_dt_private.tipIndex = 0;
			}

			var i = _dt_private.tipIndex;

			if(!_dt_private.rotationPaused) {
				if(i>0) {
					jQuery('#tod-tip-'+ (i-1)).slideUp(375);
				} else {
					jQuery('#tod-tip-'+ (_dt_public.tipTotal-1)).slideUp(375);
				}
				jQuery('#tod-tip-'+i).slideDown(750);

				_dt_private.tipIndex = i+1;
				setTimeout(_dt_private.tipAnimation, _dt_public.tipDelay);
			} else {
				_dt_private.tipWaiting = true;
			}
		};

		_dt_public.toggleRotation = function(evt) {
			_dt_private.rotationPaused = !_dt_private.rotationPaused;

			if(!_dt_private.rotationPaused && _dt_private.tipWaiting) {
				_dt_private.tipWaiting = false;
				_dt_private.tipAnimation();
			}
		};

		_dt_public._ = _dt_private;

		return _dt_public;
	}();


	/*
	 * Tip List Page Controls
	 */
	_public.listing = function() {
		var _dl_private = {};
		var _dl_public = {};

		_dl_private.today = new Date();
    	_dl_private.json = null;
    	_dl_private.fetched = [];

		_dl_public.init = function(current_month, month_url) {
			_dl_public.toggleMonth(current_month, month_url, true);
		};

		_dl_public.toggleMonth = function(month, ajax_url, scroll) {
			//Do Ajax call

			if(jQuery('#tip-expand-' + month).hasClass('collapse')) {
				_dl_private.doDisplayToggle(month);
			} else {
				if(ajax_url !== undefined && jQuery.inArray(month, _dl_private.fetched) == -1) {
					jQuery('#tip-expand-' + month).removeClass('expand');
					jQuery('#tip-expand-' + month).addClass('expander_ajax_wait');

					YAHOO.ksv.base.ajaxRequest(ajax_url, null, function(o) {
						_dl_private.json = YAHOO.ksv.base.getJSONFromXMLResponse(o.responseXML);
						_dl_private.populateTips(month);
						_dl_private.fetched.push(month);
						_dl_private.doDisplayToggle(month, scroll);
					});
				} else if(jQuery.inArray(month, _dl_private.fetched) == -1){
					_dl_private.populateTips(month);
					_dl_private.fetched.push(month);
					_dl_private.doDisplayToggle(month, scroll);
				} else {
					_dl_private.doDisplayToggle(month, scroll);
				}
			}
		};

		_dl_private.doDisplayToggle = function(month, scroll) {
			var curMonth = jQuery('#tod-items-' + month).first();
			var related  = curMonth.find('div.tod-list-related')
			if (YAHOO.env.ua.ie > 0 && YAHOO.env.ua.ie < 8) {
				related.hide();
			}
			curMonth.slideToggle(600, function() {
				if(jQuery(this).is(':visible')) { // the toggle has just oppened
					if(scroll) _dl_private.gotoTip(month);
					if (YAHOO.env.ua.ie > 0 && YAHOO.env.ua.ie < 8) {
						related.each(function() {
							jQuery(this)[0].className = jQuery(this)[0].className; // force redraw
						});
						related.fadeIn(300);
					}
				}
			});

			if(jQuery('#tip-expand-' + month).hasClass('expand') || jQuery('#tip-expand-' + month).hasClass('expander_ajax_wait')) {
				jQuery('#tip-expand-' + month).removeClass('expand');
				jQuery('#tip-expand-' + month).removeClass('expander_ajax_wait');
				jQuery('#tip-expand-' + month).addClass('collapse');
			} else {
				console.log('collapsed');
				jQuery('#tip-expand-' + month).removeClass('collapse');
				jQuery('#tip-expand-' + month).addClass('expand');
			}
		};

		_dl_private.populateTips = function(month) {
			var items = _dl_private.json.TipOfDayList.Items;
			for(i=0; i<items.length; i++) {
				var tipContainer = jQuery('<div/>');

				var html = '';
				html = html + '<p id="'+ items[i].guid +'"><strong>';
				html = html + items[i].pubDate + "</strong>";
				html = html + items[i].description + "</p><div class=tod-list-related>";
				if(items[i].ArticleUrl !== undefined && items[i].ArticleUrl != "") {
					//html = html + '<a href="' + items[i].ArticleUrl + '">';
					//html = html + '<span>';

					if(items[i].ArticleThumbnail !== undefined) {
						html = html + '<div class="article-image-wrapper"><a href="' + items[i].ArticleUrl + '">';
						if(items[i].ArticleNew == "true") {
							html = html + '<img src="/static/images/icons/icon_new.gif" class="banner new">';
						} else {
							html = html + '<img src="/static/images/icons/icon_new.gif" class="banner new" style="visibility:hidden;">';
						}
						html = html + '<img class="thumb" src="' + items[i].ArticleThumbnail + '">';
						html = html + '<img src="/static/images/backgrounds/bg_whiteCorners.gif" class="corners">';
						html = html + '</a></div>';
					}
					html = html + '<dl style="margin-left: 95px; position: relative; top: 0px; margin-top: 0px;"><dt><a href="' + items[i].ArticleUrl + '"><u>' + items[i].ArticleTitle + '</u></a></dt>';
					html = html + '<dd style="margin-left: 1px;">' + ((items[i].ArticleDesc !== undefined) ? YAHOO.ksv.base.truncate(items[i].ArticleDesc, 150) : '') + '</dd></dl>';
				}
				html = html + '</div>';

				jQuery(tipContainer).html(html);
				jQuery(tipContainer).addClass('tod-list-tip');
				//jQuery(tipContainer).css('display', 'none');
				jQuery('#tod-items-' + month + ' .tod-list-tips').append(tipContainer);
			}
		};

		_dl_private.gotoTip = function(month) {
			var options = YAHOO.ksv.base.getHashArgs(location.hash);

			var el = null;
			if(options.tip) {
				el = jQuery('#' + options.tip);
				var debug = window.debug || /debug=true/.test(document.location.href) || false;

				if(debug) {
					el.css('background-color', '#FFF6BF'); //This highlights the tip the user navigated to from the ticker.
				}

				var delayed = function delayed() {
					if(jQuery('#tod-items-' + month).is(':animated')) {
						setTimeout(delayed, 10);
						return;
					}

					var position = jQuery(el[0]).offset();
					window.scroll(position.left, position.top);
				};

				setTimeout(delayed, 10);
			}
		};

		_dl_public._ = _dl_private;

		return _dl_public;
	}();


	_public._ = _private;

	return _public;
}();
