
var NewsBrowser = new Class({
	ClassName: 'NewsBrowser',

	initialize: function() {
		this.params = {}

		this.browser   = $('news-browser');
		this.form      = this.browser.getElement('form');
		this.submitBtn = this.form.getElement('#submit-btn');
		this.searchBox = this.form.getElement('#search');
		this.newsList  = this.browser.getElement('#news');

		this.defaultImg = this.newsList.getElement('li.news-item img.news-thumb').get('src');

		this.cat = this.browser.get('cat');
		this.params[this.cat] = true;
		switch (this.cat) {
			case 'athletes':     this.params.athleteId = this.browser.get('mid')||null; break;
			case 'monstergirls': this.params.girlId    = this.browser.get('mid')||null; break;
			case 'bands':        this.params.bandId    = this.browser.get('mid')||null; break;
		}
		this.params.sel = this.browser.get('sel');

		Register.addInstance(this);
		this.hookEvents();
	},

	hookEvents: function() {
		this.form.addEvent('submit', function(event) {
			event.stop();
			this.params.search = this.searchBox.get('value').trim();
			if (this.params.search == '') this.params.search = null;
			this.paginationSet = false;
			this.findEntries(1);
		}.bind(this));
	},

	processMessage: function(msg) {
		if (msg.msg == 'flashHeaderStatus' && msg.data.id == 'news-hero-flash' && msg.data.status == 'ready') {
			this.paginationSet = false;
			this.findEntries(1);
		}
		else if (msg.msg == 'pageChanged') {
			this.findEntries(msg.data.page);
		}
	},

	setPagination: function() {
		if (!this.paginationSet) {
			Monster.flashMovie('news-hero-flash').initPagination(this.pageCount);
			this.paginationSet = true;
		}
	},

	findEntries: function(page) {
		// console.log('Finding news entries... page: ', page);
		this.params.page = page;

		new JSONPRequest({
			url: MonsterUser.switchUrl + '/tools/jsonapi/news-entries.js',
			parameters: this.params,
			immediate: true,
			onComplete: function(data) {
				this.newsList.empty();
				this.pageCount = data.numPages;
				this.setPagination();

				data.items.each(function(row, index){

					var newRow = new Element('li', {'class': (index%2==0)? 'news-item even':'news-item odd'});
					if (row.url) {
						newRow.grab(new Element('a', {href: row.url}).adopt([
							new Element('img', {src: row.image, alt: row.title, 'class': 'news-thumb'}),
							new Element('div', {'class': 'frame'})
						]));
					} else {
						newRow.adopt([
							new Element('img', {src: row.image, alt: row.title, 'class': 'news-thumb'}),
							new Element('div', {'class': 'frame'})
						]);
					}
					newRow.grab(new Element('p', {'class': 'date', text: row.date}));
					var title = (row.title.length > 50)? (row.title.substr(0,50)+'...') : row.title;
					if (row.url) {
						newRow.grab(new Element('h4').grab(new Element('a', {href: row.url, text: title})));
					} else {
						newRow.grab(new Element('h4', {text: title}));
					}
					newRow.grab(new Element('div', {'class': 'description', html: '<div class="viewport"><div class="content"></div></div>'}));
					newRow.getElement('div.content').set('html', row.text);
					if (row.url) newRow.getElement('div.content').grab(new Element('a', {href: row.url, 'class': 'readmore-margin', text: 'Read more...'}));
					newRow.grab(new Element('div', {'class': 'expand-btn'}));
					if (index < data.items.length-1) newRow.grab(new Element('div', {'class':'separator'}));

					this.newsList.grab(newRow);
				}.bind(this));

				if (data.items.length == 0) {
					this.showNoItemsFound();
				} else {
					Register.broadcastMessage({msg:'newsElementsChanged', data:null});
				}
			}.bind(this)
		});
	},

	showNoItemsFound: function() {
		var newRow = new Element('li', {'class': 'news-item', html: '<img src="" alt="Monster Energy News" class="news-thumb" /><div class="frame"></div><p class="date"></p><h4></h4><div class="description"><div class="viewport"><div class="content">No entries found.</div></div></div><div class="expand-btn"></div>'});
		newRow.getElement('img.news-thumb').set('src', this.defaultImg);
		this.newsList.grab(newRow);
	}
});

new NewsBrowser();
