var promoChangeManager = {
	CONFIG : {
		dataUrl : '/files/promo_users.json',
		bubblesContent : {
			'wlWinner' : '<a href="{href}"><img src="/static/i/promo-change/wlWinner.png" /></a>',
			'wlWannabe' : '<a href="{href}"><img src="/static/i/promo-change/wlWannabe.png" /></a>'
		}
	},
	
	data : {},
	usernames : [],
	
	init : function (opt) {
		this.usernames = opt.usernames || null;
		this.bigUser = opt.bigUser || null;
		this.loginUser = opt.loginUser || null;
		
		this.loadData();
		
		if (window.fanatUser && window.fanatTemplate) {
			this.fanatPopupTemplate = window.fanatTemplate;
			this.handleUserPopups();
		}
	},
	
	loadData : function () {
		var that = this,
			bigUser = this.bigUser,
			loginUser = this.loginUser,
			usernames = this.usernames;
			
		window.JSONP = function (data) {
			var	usernameContainer, username, promoData, promoClass,
				bigUsername, bigUserData, bigPromoClass, bigUserLink, bigUserHref,
				loginUsername, loginUserData, loginPromoClass;

			that.data = data;

			if (usernames) {
				for (var i = 0, l = usernames.length; i < l; i++) {
					usernameContainer = usernames[i];
					username = usernameContainer.innerHTML;
					promoData = data[username];
					
					promoClass = (promoData) ? promoData[0] : '';
					
					$(usernameContainer).addClass(promoClass);
				}
			}
			
			if (bigUser) {
				// "trim" - only for IE 
				bigUsername = $.trim($('div.body.vcard div.user-info dt').text());
				bigUserData = data[bigUsername];
				bigUserLink = bigUser.find('a');
				
				bigPromoClass = (bigUserData) ? bigUserData[0] : '';
				bigUserHref = (bigUserData) ? bigUserData[1] : '#';
				
				bigUser.addClass(bigPromoClass);
				bigUserLink.attr('href', bigUserHref);
			}
			
			if (loginUser) {
				loginUsername = loginUser.text();
				loginUserData = data[loginUsername];
				
				loginPromoClass = (loginUserData) ? loginUserData[0] : '';
				
				loginUser.addClass(loginPromoClass);
			}
		};
		
		$.ajax({
			url : this.CONFIG.dataUrl,
			dataType : 'jsonp',
			cache : false
		});
	},
	
	handleUserPopups : function () {
		var fanatTemplate = this.fanatPopupTemplate,
			that = this;
		
		// add necessary css classes and styles
		fanatTemplate.css += '\
			.promo-content {position: absolute; top: 0; right: 0;} \
			.popup-content {position: relative; padding: 10px 159px 10px 10px;} \
		';
		
		// add function to handle and paste promo content in popup block
		fanatTemplate.handlePromoContent = handlePromoContent;
		
		/**
		 * Paste in popup block promo content (depends on username and it's classname - comes from server
		 * through promoChangeManager - must be initialized before fanatUser)
		 * 
		 * @param {Object} parent <div class="fanat-user-popup" />
		 * @param {Object} username (to define wich promo content we need)
		 * 
		 * @return {Node}
		 */
	 	function handlePromoContent (parent, username) {
			var currentUsername = username,
				currentUserData = that.data[currentUsername],
				currentClassname, currentHref, currentBubbleContent, promoBlock,
				bubblesContent = that.CONFIG.bubblesContent;
				
			currentClassname = (currentUserData) ? currentUserData[0] : '';
			
			if (!currentClassname) {
				return parent[0];
			}
			
			currentHref = { 'href' : currentUserData[1] }
			currentBubbleContent = bubblesContent[currentClassname];
			
			promoBlock = parent.find('.promo-content');
				
			promoBlock.html(currentBubbleContent.supplant(currentHref));
			
			return parent[0];
		}
	}
}