
var ngBanners = function() {
	var adList  = {};
	var adSets  = {};
	var bnList  = {};
	var tplList = {};
	function tplParse(tpl, vars, options) {
		var q;
		if (typeof options['zone'] != 'undefined') {
			options['zone'] = options['zone'].replace(new RegExp(':', 'g'), '_');
			options['url'] = options['redirect_url'];
			if (typeof bnList[options['zone']] != 'undefined') {
				vars['redirect_url'] += '&BN=' + bnList[options['zone']];
			}
		}
		if (typeof options['overwrite'] != 'undefined') {
			for (q in options['overwrite']) {
				vars[q] = options['overwrite'][q];
			}
		}
		for (q in vars) {
			tpl = tpl.replace(new RegExp('\{' + q + '\}', 'g'), vars[q]);
		}
		return tpl;
	}
	return {
		attachSet : function(setId_, ids_, options_) {
			adSets[setId_] = {
				setId: setId_,
				adIds: ids_,
				shift: 0,
				total: 0,
				options: typeof options_ == 'undefined'
					? {}
					: options_
			};
		},
		setAds : function(list) {
			if (typeof list != 'object') {return;}
			adList = list;
		},
		setZoneBNs : function(list) {
			if (typeof list != 'object') {return;}
			bnList = list;
		},
		setTemplates : function(list) {
			if (typeof list != 'object') {return;}
			tplList = list;
		},
		deploy : function() {
			var i, q, q2;
			for (q in adSets) {
				var ads = new Array;
				for (q2 in adSets[q].adIds) {
					i = adSets[q].adIds[q2];
					if (typeof adList[i] != 'undefined') {
						adList[i].id = i;
						ads.push(adList[i]);
					}
				}
				adSets[q].total = ads.length;
				//jQuery('#' + adSets[q].setId).html('');
				for (q2 in ads) {
					jQuery('#' + adSets[q].setId).append(
						tplParse(tplList[ads[q2].type], ads[q2], adSets[q].options)
					);
				}
				if (ads.length == 0) { continue; }
				jQuery('#' + adSets[q].setId + ' .js-adset-el:first').removeClass('hide');
				jQuery('#' + adSets[q].setId).show();
				if (ads.length == 1) { continue; }
				setInterval('ngBanners.iterateSet("' + q + '")', typeof adSets[q].options.interval == 'undefined'
					? 30000
					: adSets[q].options.interval);
			}
			jQuery('.js-adset').mouseover(function(){
				ngBanners.stopSet(this);
			});
			jQuery('.js-adset').mouseout(function(){
				ngBanners.startSet(this);
			});
		},
		iterateSet : function(setId) {
			var ngSet = document.getElementById(setId);
			if (!ngSet) {return;}
			if (ngSet.is_ngb_mouseover && true == ngSet.is_ngb_mouseover) {return;}
			var ngA = ngSet.getElementsByTagName('div');
			var ngOffset = 0;
			if (ngA.length<1) {return;}
			var ngB = new Array;
			for (i = 0; i < ngA.length; i++) {
				if (ngA[i].className.match(/js-adset-el/)) {
					ngB[ngB.length] = ngA[i];
				}
			}
			ngA = ngB;
			if (ngA.length<1) {return;}
			var i;
			for (i = 0; i < ngA.length; i++) {
				var cn = ' ' + ngA[i].className + ' ';
				if (!cn.match(/ hide /)) {
					ngOffset = i;
				}
			}
			if (typeof (ngA[ngOffset]) == 'undefined') {
				return ;
			}
			ngA[ngOffset].className = ngA[ngOffset].className + ' hide';
			ngOffset++;
			ngOffset %= ngA.length;
			var cn = ' ' + ngA[ngOffset].className + ' ';
			cn = cn.replace(/ hide /,'');
			cn = cn.replace(new RegExp('^\s+|\s+$', 'g'),'');
			ngA[ngOffset].className = cn;
		},
		stopSet  : function(o) {
			o.is_ngb_mouseover = true;
		},
		startSet : function(o) {
			o.is_ngb_mouseover = false;
		}
	};
}();
