$(document).addEvent('domready', function() {
	
	if($('news')) new News($('news'), 5);
	
});

var News = new Class({
	
	items: new Array(),

	container: null,
	
	currentPage: 1,
	pages: 1,
	entriesPerPage: 5,
	paginators: null,
	
	initialize: function(container, entriesPerPage) {
		this.container = container;
		
		var newsID = null; 
		var scrollTo = null;
		var url = window.location.href.split("#");
		if(url[1]) newsID = url[1];
		
		this.entriesPerPage = entriesPerPage;
		newsObj = this;
		this.container.getElements('.newsitem').each(function(item, key) {
			var show = false;
			if(item.get('id').split('_')[1] == newsID) {
				scrollTo = item;
				show = true;
				newsObj.currentPage = Math.ceil((key+1)/newsObj.entriesPerPage);
				
			}
			newsObj.items.push(new NewsItem(item, show));
		});
		this.pages = Math.ceil(this.items.length/this.entriesPerPage);
		
		this.displayPage();
		//this.itemDiv.get('ID').split('_')[1]
		
		var scroll = new Fx.Scroll($$('body')[0], {
			wait: false,
			duration: 0
		});			
		if(scrollTo != null) {
			scroll.toElement(scrollTo);
		}
	},
	
	displayPage: function() {
		var firstIdx = (this.currentPage-1)*this.entriesPerPage;
		var lastIdx = (this.currentPage-1)*this.entriesPerPage+this.entriesPerPage-1;
		this.items.each(function(item, key) {
			if(key >= firstIdx && key <= lastIdx) {
				item.show();
			} else {
				item.hide();
			}
		});
		this.updatePageSelector();
		
	},
	
	nextPage: function() {
		this.setPage(this.currentPage+1);
	},
	
	prevPage: function() {
		this.setPage(this.currentPage-1);
	},
	
	setPage: function(page) {
		this.currentPage = page;
		if(this.currentPage < 1) this.currentPage=1;
		if(this.currentPage > this.pages) this.currentPage=this.pages;
		this.displayPage();
		var scroll = new Fx.Scroll($$('body')[0], {
			wait: false,
			duration: 0
		});			
		scroll.toTop();
	},
	
	updatePageSelector: function() {
		if(this.pages <= 1) return false;
		if(this.paginators == null) {
			this.paginators = new Array();
			this.paginators.push(new Element('div').addClass('newspaginator').inject(this.container, 'top'));
			this.paginators.push(new Element('div').addClass('newspaginator').inject(this.container));
		}
		
		var newsObj = this;
		
		this.paginators.each(function(paginator) {
			
			paginator.set('html', '');
			
			new Element('a').set('id', 'newspage_prev').set('href', '#').set('html', $('news_prevtext').get('html')).addEvent('click', function() {
				newsObj.prevPage();
				return false;
			}).inject(paginator);
			
			var startPage = newsObj.currentPage-4;
			var endPage = newsObj.currentPage+4;

			startPage = 1;
			endPage = newsObj.pages;
			
			for(var i=startPage; i<= endPage; i++) {
				new Element('span').addClass('newslinksspacer').set('text', ' | ').inject(paginator);
				if(newsObj.currentPage == i) new Element('span').set('id', 'newspage_'+i).set('text', i).inject(paginator);
				else new Element('a').set('id', 'newspage_'+i).set('href', '#').set('text', i).addEvent('click', function() {
					newsObj.setPage(this.get('text').toInt());
					return false;
				}).inject(paginator);
			}
			
			new Element('span').addClass('newslinksspacer').set('text', ' | ').inject(paginator);
			new Element('a').set('id', 'newspage_next').set('href', '#').set('html', $('news_nexttext').get('html')).addEvent('click', function() {
				newsObj.nextPage();
				return false;
			}).inject(paginator);
		});

	}
});

var NewsItem = new Class({
	
	showState: false,	
	tweenFx: null,
	shortHtml: '',
	fullHtml: '',
	shortHeight: 0,
	fullHeight: 0,
	itemDiv: null,
	textArea: null,
	toggleLink: null,
	maxLines: 7,
	
	initialize: function(itemDiv, show) {
		
		if($('news_lines')) this.maxLines = $('news_lines').get('text').toInt();
		this.itemDiv = itemDiv;
		this.textArea = itemDiv.getElement('.newstext');
		
		this.fullHtml = this.textArea.get('html');
		this.fullHeight = this.textArea.getSize().y;
		
		this.textArea.setStyle("overflow", "hidden");
		var p = this.textArea.getElement('p');
		if(!p) {
			p = new Element('p').set('html', this.textArea.get('html'));
			this.textArea.set('html', '');
			p.inject(this.textArea);
		}
		while(p.get('html').trim() == "" && p.getNext('p') != undefined) p = p.getNext('p');
		this.shortHtml = p.get('html');		
		this.textArea.set('html', '<p>'+this.shortHtml+'</p>');
		var p = this.textArea.getElement('p');
		while(p.get('text').trim() == 0 && p.getNext('p')) p = p.getNext('p');
		//this.shortHeight = Math.floor(p.getSize().y + p.getStyle('margin-top').toFloat() + p.getStyle('margin-bottom').toFloat());
				
		
		/*var lineHeight = p.getStyle('line-height');
		if(lineHeight.search(/em/) > -1) {
			var tdiv = new Element('div').setStyles({
				height: '1em',
				position: 'absolute',
				margin: '0px',
				padding: '0px'
			}).inject(p);
			var emSize = tdiv.getSize().y;
			tdiv.destroy();
			lineHeight = lineHeight.toFloat()*emSize;
		}*/
		
		//var maxHeight = Math.floor((lineHeight.toFloat()*this.maxLines)+parseInt(document.defaultView.getComputedStyle(p, '').getPropertyValue('margin-top')).toInt() + parseInt(document.defaultView.getComputedStyle(p, '').getPropertyValue('margin-bottom')).toInt());
		var maxHeight = 0;
		if(document.defaultView) {
			this.shortHeight = p.getSize().y + parseInt(document.defaultView.getComputedStyle(p, '').getPropertyValue('margin-top')).toInt() + parseInt(document.defaultView.getComputedStyle(p, '').getPropertyValue('margin-bottom')).toInt();
			maxHeight = Math.floor(((document.defaultView.getComputedStyle(p, '').getPropertyValue('line-height')).toFloat()*this.maxLines));
		} else {
			this.shortHeight = Math.floor(p.getSize().y + p.getStyle('margin-top').toFloat() + p.getStyle('margin-bottom').toFloat());
			maxHeight = Math.floor((p.getStyle('line-height').toFloat()*this.maxLines));
		}
		
		if(this.shortHeight > maxHeight && maxHeight > 0 && p.get('text').trim().length > 0) {
			this.shortHeight = maxHeight;
		}
		
		if(this.fullHeight > this.shortHeight) {
			var newsItem = this;
			var links = this.itemDiv.getElement('.newslinks');
			this.toggleLink = new Element('a').set('href', '#').set('html', $('news_opentext').get('html')).addEvent('click', function() {
				newsItem.toggle();
				return false;
			}).inject(links, 'top');
			
			new Element('span').set('text', ' | ').addClass('newslinksspacer').inject(this.toggleLink, 'after');
			
			links.inject(this.textArea, 'after');
		}
		
		this.textArea.set('html', this.fullHtml);	
		
			
		this.tweenFx = new Fx.Tween(this.textArea);
		if(!show) {
			this.tweenFx.set('height', this.shortHeight);
			this.showState = false;
		} else {
			this.tweenFx.set('height', this.fullHeight);
			this.showState = true;
			if(this.toggleLink) this.toggleLink.set('html', $('news_closetext').get('html'));
		}
		
	},
	
	toggle: function() {
		if(this.showState) {
			this.tweenFx.start('height', this.shortHeight);
			this.showState = false;
			this.toggleLink.set('html', $('news_opentext').get('html'));
		} else {
			this.tweenFx.start('height', this.fullHeight);
			this.showState = true;
			this.toggleLink.set('html', $('news_closetext').get('html'));
		}
	},
	
	hide: function() {
		this.itemDiv.hide();
		if(this.toggleLink) {
			this.tweenFx.start('height', this.shortHeight);
			this.showState = false;
			this.toggleLink.set('html', $('news_opentext').get('html'));
		}
	},
	
	show: function() {
		this.itemDiv.show();
	}
});
