// Load the latest stable google javascript api
google.load("gdata", "1.s");

var googleCalendar = new Class({
	calendarFeedUrl: "",
	Implements: [Options, Events],
	options: {
	},
	initialize: function(newFeed){
		this.calendarFeedUrl = newFeed;
		this.getCalendarFeed();
	},
	googleService: "ieps",
	entries: [],
	getCalendarFeed: function(){
		google.gdata.client.init(this.handleInitError);
		this.googleService = new google.gdata.calendar.CalendarService('exodub-exodub_calendar-1.0');

		var futureEventsQuery = new google.gdata.calendar.CalendarEventQuery(this.calendarFeedUrl);
		futureEventsQuery.setFutureEvents(true);

		this.googleService.getEventsFeed(futureEventsQuery, (this.handleFeed).bind(this), this.handleError);
	},
	handleFeed: function(calendarFeed){
		this.entries = calendarFeed.feed.getEntries();
		this.createEventTable(new Element('table',{'class':'gigs_table'}).inject($('gigs_go_here')));
	},
	handleError: function(e){
		alert("An error occured!");
		alert(e.cause ? e.cause.statusText : e.message);
	},
	createEventTable: function(table){
		if (this.entries.length == 0){
			new Element('td',{'text':'There are currently no gigs planned. Please check again later, or book us by emailing exodubmusic [at] gmail [dot] com'}).inject(table);
			return;
		}
		for (var i = 0; i < this.entries.length; i++){
			var eventEntry = this.entries[i];
			var newHTMLRow = document.createElement('tr');
			
			HTMLContent = (eventEntry.getTimes())[0].getStartTime().getDate().toDateString();
			this.addTableElement(newHTMLRow, HTMLContent);

			HTMLContent = eventEntry.getTitle().getText();
			this.addTableElement(newHTMLRow, HTMLContent);

			HTMLContent = HTMLcontent = (eventEntry.getLocations())[0].getValueString();
			this.addTableElement(newHTMLRow, HTMLContent);

			table.appendChild(newHTMLRow);
		}
	},
	addTableElement: function(row,content){
		new Element('td',{text:content,'visibility':'hidden'}).inject(row,'bottom');
	},
	handleInitError: function(e){
		//Do nothing
	}
});

var googleBlogger = new Class({
	bloggerFeedUrl: "",
	Implements: [Options, Events],
	options: {
	},
	initialize: function(newFeed){
		this.bloggerFeedUrl = newFeed;
		this.getFeed();
	},
	googleService: "ieps",
	entries: [],
	startIndex: 0,
	getFeed: function(){
		google.gdata.client.init(this.handleInitError);
		this.googleService = new google.gdata.blogger.BloggerService('exodub-exodub_blogger-1.0');

		this.googleService.getBlogFeed(this.bloggerFeedUrl, (this.handleFeed).bind(this), this.handleError);
	},
	handleFeed: function(bloggerFeed){
		this.entries = bloggerFeed.feed.getEntries();
		this.createLeftBar($('v_news_slide'));
		this.createRightBar($('sidebar_news'));
	},
	createLeftBar: function(contentDiv){
		if(this.entries.length !=0) contentDiv.empty();
		var endIndex = this.entries.length<4+this.startIndex?this.entries.length:4+this.startIndex;
		for(var i=this.startIndex;i<endIndex;i++){
			this.addPost(contentDiv,this.entries[i]);
		}
		
		var getNextLink = new Element('a',{'href':'#'});
		var getPreviousLink = getNextLink.clone();

		var getNext = new Element('p',{'class':'news_navigation'});
		var getPrevious = getNext.clone();

		getNext.setStyle('text-align','right');
		getNextLink.innerHTML = "Older Items";
		getPreviousLink.innerHTML = "Newer Items";

		if(this.startIndex==0) getPreviousLink.setStyle('display','none');
		if(endIndex==this.entries.length) getNextLink.setStyle('display','none');

		getNextLink.addEvent('click', function(){
			this.setStartIndex(this.startIndex+4);
			this.createLeftBar(contentDiv);
		}.bind(this));
		getPreviousLink.addEvent('click',function(){
			this.setStartIndex(this.startIndex-4);
			this.createLeftBar(contentDiv);
		}.bind(this));

		getPreviousLink.inject(getPrevious);
		getNextLink.inject(getNext);
		getPrevious.inject(contentDiv);
		getNext.inject(contentDiv);
		new Element('br').inject(contentDiv);

		setHeight($('main'));
	},
	setStartIndex: function(newIndex){
		this.startIndex = newIndex;
	},
	addPost: function(contentDiv,post){
		new Element('h2',{text:post.getTitle().getText()}).inject(contentDiv);
		new Element('h3',{text:post.getPublished().getValue().getDate().toDateString()}).inject(contentDiv);
		new Element('br').inject(contentDiv);
		new Element('div',{'html':post.getContent().getText()}).inject(contentDiv);
		new Element('br').inject(contentDiv);
	},
	createRightBar: function(contentDiv){
		var endIndex = this.entries.length<5?this.entries.length:5;
		for(var i=endIndex-1;i>=0;i--){
			this.addSidePost(contentDiv,this.entries[i]);
		}
		Mediabox.scanPage();
	},
	addSidePost: function(contentDiv,post){
		var postTitle = new Element('p');

		var postLink = new Element('a');
		postLink.set('href',post.getHtmlLink().getHref());
		postLink.set('rel','lightbox[news 800 600]');
		postLink.set('title',post.getTitle().getText());
		postLink.innerHTML = post.getTitle().getText();
		
		postLink.inject(postTitle);	

		postTitle.inject(contentDiv,'after');
	},
	handleError: function(e){
		alert("An error occured!");
		alert(e.cause ? e.cause.statusText : e.message);
	},
	handleInitError: function(e){
		//Do nothing
	}
});

function setHeight(el){
	el.setStyle('height',Math.max(el.getScrollHeight(),500)+'px');
}

// Add the events for the logomenu at the top
window.addEvent('domready', function() {
	var googleCalendarInstance = new googleCalendar("http://www.google.com/calendar/feeds/exodubmusic@gmail.com/public/full");
	//(function(){googleCalendarInstance.createEventTable($('gigs_go_here'));}).delay(1000);

	var googleBloggerInstance = new googleBlogger("http://exodub.blogspot.com/feeds/posts/default");
	//(function(){googleBloggerInstance.createLeftBar($('v_news_slide'));}).delay(1000);
	//(function(){googleBloggerInstance.createRightBar($('sidebar_news'));}).delay(1000);

    var newsSlide = new Fx.Slide($('v_news_slide'),{transition:Fx.Transitions.Bounce.easeOut});
    var musicSlide = new Fx.Slide($('v_music_slide'),{transition:Fx.Transitions.Bounce.easeOut});
    var gigsSlide = new Fx.Slide($('v_gigs_slide'),{transition:Fx.Transitions.Bounce.easeOut});
    var linksSlide = new Fx.Slide($('v_links_slide'),{transition:Fx.Transitions.Bounce.easeOut});
    var audioPlayer = $$('#v_music_slide div');

	var mainMenu = new ImageMenu($$('#mainMenuTop a'),{
		openWidth:60,
		OnClickOpen: function(el, i){
			switch(i){
			case 0:
				musicSlide.hide();
        			gigsSlide.hide();
        			linksSlide.hide();
				audioPlayer.each(function(ap,k){ap.setStyle('visibility','hidden')});
        			newsSlide.slideIn();
				break;
			case 1:
				newsSlide.hide();
        			gigsSlide.hide();
        			linksSlide.hide();
        			musicSlide.slideIn();
				(function(){audioPlayer.each(function(ap,k){ap.setStyle('visibility','visible');});}).delay(400);
				break;
			case 2:
				newsSlide.hide();
        			musicSlide.hide();
        			linksSlide.hide();
				audioPlayer.each(function(ap,k){ap.setStyle('visibility','hidden')});
        			gigsSlide.slideIn();
				$$('td').each(function(ap,k){ap.setStyle('visibility','visible')});
				break;
			case 3:
				newsSlide.hide();
        			musicSlide.hide();
        			gigsSlide.hide();
				audioPlayer.each(function(ap,k){ap.setStyle('visibility','hidden')});
        			linksSlide.slideIn();
				break;
			default:
				break;
			}
		}
	});

/* All this happens when the page loads */
    /* Slide out all the other foldouts */

    musicSlide.hide();
    gigsSlide.hide();
    linksSlide.hide();

    /* Once hidden, make them visible again */
    (function (){
        $('v_music_slide').setStyle('visibility', 'visible');
    }).delay(1000);

    (function (){
        $('v_gigs_slide').setStyle('visibility', 'visible');
    }).delay(1000);

    (function (){
        $('v_links_slide').setStyle('visibility', 'visible');
    }).delay(1000);
});