// $Id: AdvertLib.js,v 1.4.46.1 2011-10-06 14:07:35 jrixon Exp $

function AdvertLib() {

	var __pub = {};

	var _popupVisible = false;
	var _oneTimeAds = [];
	var _maxLineWidth = 40;
	var _tickerAdverts = [];


// For polling
function handleAdverts(adverts) {

	var i,
	newOneTimeAd = false,
	newTickerAd = false,
	tickerHtml = '',
	maxAdId = parseInt(get_cookie(document.max_ad_id_cookie));

	if (!_popupVisible) {
		_oneTimeAds = [];
	}

	for (i = 0; i < adverts.length; ++i) {

		if (adverts[i].sort == 'T') {
			// ticker
			if (tickerHtml != '') {
				tickerHtml += '&nbsp;|&nbsp;';
			}
			tickerHtml += adverts[i].content;

			// Save for later
			addTickerAdvert(adverts[i]);

		} else if (!_popupVisible && adverts[i].sort == 'O' && (isNaN(maxAdId) || adverts[i].id > maxAdId)) {
			// one-time
			adverts[i].content = _wrapText(adverts[i].content);
			_oneTimeAds.push(adverts[i]);
		}
	}

	if (!_popupVisible && _oneTimeAds.length) {
		_displayOneTime();
	}

	if (tickerHtml != '') {

		// is the ticker txt to display different from what we last remember it to be?
		var cookieText = get_cookie(document.ticker_ads_cookie);
		if(cookieText == null) {
			cookieText = '';
		}
		if(tickerHtml != cookieText) {
			set_cookie(document.ticker_ads_cookie, tickerHtml, '', '/', '', '');
			sky.overlay.ticker(tickerHtml);
		}

	} else {

		//expire the ticker ad cookie
		var expireDate = new Date(0);
		set_cookie(document.ticker_ads_cookie, '', expireDate, '/', '', '');

		// and hide the ticker pop-up
		_hideTicker();
	}
}

// Push: add this advert to global _tickerAdverts object.
//
function addTickerAdvert(ad) {

	var i, len;
	for (i = 0, len = _tickerAdverts.length; i < len; i++) {
		if (ad.id == _tickerAdverts[i].id) {
			_tickerAdverts[i] = ad;
			break;
		}
	}
	if (i == len) _tickerAdverts.push(ad);
	_updTicker();
}

// Push: remove this advert from global _tickerAdverts object
//   return - true if ad removed, otherwise false
//
function rmTickerAdvert(id) {

	var i, len;
	for (i = 0, len = _tickerAdverts.length; i < len; i++) {
		if (id == _tickerAdverts[i].id) {
			_tickerAdverts.splice(i, 1);
			_updTicker();
			return;
		}
	}
}

// Push: update/display ticker message, using global _tickerAdverts object
//
function _updTicker() {

	if (_tickerAdverts.length) {

		// Recreate ticker from _tickerAdverts
		var tickerArr = [], tickerHtml = '', i, len;
		for (i = 0, len = _tickerAdverts.length; i < len; i++) tickerArr.push(_tickerAdverts[i].content);
		tickerHtml = tickerArr.join('&nbsp;|&nbsp;');

		// is the ticker txt to display different from what we last remember it to be?
		var cookieText = get_cookie(document.ticker_ads_cookie);
		if(cookieText == null) cookieText = '';

		if(tickerHtml != cookieText) {
			set_cookie(document.ticker_ads_cookie, tickerHtml, '', '/', '', '');
			sky.overlay.ticker(tickerHtml);
		}

	} else {

		//expire the ticker ad cookie
		var expireDate = new Date(0);
		set_cookie(document.ticker_ads_cookie, '', expireDate, '/', '', '');

		// and hide the ticker pop-up
		_hideTicker();
	}
}

// Push: display a one-time advert
//
function displayOneTimeAdvert(content, id) {

	var ad = {content: content, id: id},
	maxAdId = parseInt(get_cookie(document.max_ad_id_cookie));

	if (isNaN(maxAdId) || id > maxAdId) {
		_oneTimeAds.push(ad);
	}

	if (!_popupVisible && _oneTimeAds.length) _displayOneTime();
}

function _displayOneTime() {

	sky.overlay.getChoice(
		'Message',
		_oneTimeAds[0].content,
		_oneTimeAds.length > 1
			? [sky.overlay.button('Next', _viewNext), sky.overlay.button('Done', _dismissOneTime)]
			: [sky.overlay.button('Done', _dismissOneTime)]
	);

	_popupVisible = true;
}

function _viewNext() {

	_removeOneTime();
	_displayOneTime();
}

function _dismissOneTime() {

	_removeOneTime();
	_popupVisible = false;
}

function _removeOneTime() {

	// remove the current message
	var ad = _oneTimeAds.shift();

	// we're done with this ad, never fetch it again
	set_cookie(
		document.max_ad_id_cookie,
		ad.id,
		oneYearFromNow(),
		'/',
		'',
		''
	);
}

function _hideTicker() {

	// if the ticker msg is the pop-up showing, hide it
	if (document.fixedMsgRemove && document.fixedMsgType && document.fixedMsgType == 'soft') {
		document.fixedMsgRemove();
	}
}

function _wrapText(text) {
	// IE handles pre-wrap properly, but firefox doesn't!

	if (is_ie) {
		return text;
	}

	var origLines = text.split(' ');
	var newLines = [], i, c;

	for (i = 0; i < origLines.length; i++) {
		c = 0;
		while (c <= origLines[i].length) {
			newLines.push(origLines[i].substring(c, c + _maxLineWidth));
			c += _maxLineWidth;
		}
	}

	return newLines.join(' ');
}

	return {
		pub : __pub,
		handleAdverts : handleAdverts,
		addTickerAdvert : addTickerAdvert,
		rmTickerAdvert : rmTickerAdvert,
		displayOneTimeAdvert : displayOneTimeAdvert
	};
}

