/**
 * Functions for event calendar on startpage
 */
 
 
/**
* Load calendar xml when loading page
*/
function init() { 
	YAHOO.util.Connect.asyncRequest("GET","http://www.ifboat.com/assets/site/php/calendar-xml.php", { success:responseSuccess_getCalendar, failure:responseFailure_getCalendar  });
} 
YAHOO.util.Event.onDOMReady(init); 
var responseSuccess_getCalendar = function(o) {
	try {
		var maxFirstEvents = 4; // Nr of events in first UL list
		var i = 0; // Event counter
		
		// Process ajax response
		var doc = o.responseXML;
		// Get event entries
		var nodes =  getElementsByTagName2(doc, 'http://www.w3.org/2005/Atom', 'atom:entry');
		// Get eventcalendar UL list
		var objUL = document.getElementById("calendarfirst");
		// Get LI template
		var objLI = document.getElementById("eventtemplate");
			
		for( i=0; i < nodes.length; i++ ) {
		
			// Get data from xml entry node
			node = getElementsByTagName2(nodes[i], 'http://www.w3.org/2005/Atom', 'atom:title')[0].firstChild;
			var subject = node === null ? "" : node.nodeValue;
			// Check if first word is ssif, oif, bif, or vif in subject
			var club = "";
			var clubSearch = /^\b(ssif|bif|vif|oif)\b/i
			var m = clubSearch.exec(subject);
			if(m != null) {
				// first match is club
				club = "<span>" + m[0].toUpperCase() + "</span>";
				subject = subject.substring(subject.indexOf(" "));
			}
		
			node = getElementsByTagName2(nodes[i], 'http://www.w3.org/2005/Atom', 'atom:content')[0].firstChild;
			var description = node === null ? "" : node.nodeValue;
			// Add link to urls in description
			description = replaceURLWithHTMLLinks( replacewww(description) );
			node = getElementsByTagName2(nodes[i], 'http://schemas.google.com/g/2005', 'gd:when')[0];
			var startTime = convertAtomDateString( node.getAttribute("startTime") , true);
			var endTime = convertAtomDateString( node.getAttribute("endTime") , true);
			//alert(startTime);
			node = getElementsByTagName2(nodes[i], 'http://schemas.google.com/g/2005', 'gd:where')[0];
			var where = node.getAttribute("valueString") === null ? "" : node.getAttribute("valueString")
			var shortSubject = subject.length > 30 ? trim( subject.substring(0,27) ) + "..." : subject;
			var shortWhere = where;
			if( !(startTime.getHours() == "00" && startTime.getMinutes() == "00") ) {
				// Time is specified display start time
				shortWhere = checkTime(startTime.getHours()) +':'+ checkTime(startTime.getMinutes()) +' ' + shortWhere;
			}
			shortWhere = shortWhere.length > 23 ? trim( shortWhere.substring(0,21) ) + "..." : shortWhere;
				// Create LI node in Html DOM
			if(i==maxFirstEvents)
				objUL = document.getElementById("calendarmore"); // if more then 4 events, add them to calendarmore UL
			var html;
			var newLI = objLI.cloneNode(true);
			newLI.id = '';
			newLI.getElementsByTagName('DIV')[0].innerHTML =	"<h3>"+ startTime.getDate() +"</h3><p>"+ getAbbreviatedMonth(startTime.getMonth()) +"</p>";
			if( startTime.getDate() != endTime.getDate() || startTime.getMonth() != endTime.getMonth() ) {
				// Not same date use class for several days
				newLI.getElementsByTagName('DIV')[0].className = "date grayN";
			}
			newLI.getElementsByTagName('DIV')[1].innerHTML =	'<h3><a href="#" onclick="return openEvent(this)">'+ shortSubject +'</a></h3>';
			newLI.getElementsByTagName('DIV')[1].innerHTML +=	'<p>'+ club + shortWhere +'</p>';
			html = '<div>'+ startTime.getDate() +'<br/>'+ getAbbreviatedMonth(startTime.getMonth()) +'</div>';
			html +=	'<div>' + subject + '</div>';
			html +=	'<div>';
			if( startTime.getDate() != endTime.getDate() || startTime.getMonth() != endTime.getMonth() ) {
				// Not same date show start and end date
				if( startTime.getMonth() != endTime.getMonth() ) {
					html += startTime.getDate() +' '+ getAbbreviatedMonth(startTime.getMonth()) +'-';
					html +=	(endTime.getDate()-1) +' '+ getAbbreviatedMonth(endTime.getMonth()) + ',&nbsp;';
				} else {
					html += startTime.getDate() +'-' + (endTime.getDate()-1) + " " + getAbbreviatedMonth(startTime.getMonth()) +',&nbsp;';
				}
			} else if(startTime.getHours() != "00") {
				// Only one day and time is specified show time
				html += checkTime(startTime.getHours()) +':'+ checkTime(startTime.getMinutes()) +' - ';
				html +=	checkTime(endTime.getHours()) +':'+ checkTime(endTime.getMinutes()) + ',&nbsp;';
			}
			html +=	'<a href="http://maps.google.com/maps?hl=sv&q=' + encodeURI(where) + '">' + where + '</a>';
			html +=	'</div>';
			html +=	'<div>' + description + '</div>';
			if( startTime.getDate() != endTime.getDate() || startTime.getMonth() != endTime.getMonth() ) {
				// Not same date use class for several days
				html +=	'<div>blueN</div>';
			} else {
				html +=	'<div></div>';
			}
			newLI.getElementsByTagName('DIV')[2].innerHTML = html;
			objUL.appendChild(newLI);
		}
	 
		// Show and hide event list and buttons
		var objEvents = document.getElementById("events");
		var objLoader = document.getElementById("eventloader");
		var objUL = document.getElementById("calendarfirst");
		objLoader.style.display="none";
		if(i>0) {
			// Events found display event list
			objUL.style.display="block";
		}
		else {
			// No events found hide events DIV
			objEvents.style.display="none";
		}
		if(i>maxFirstEvents) {
			// Show more events button
			var objButton = document.getElementById("eventsmore");
			objButton.style.display="block";
		}
	} catch(err) {
		responseFailure_getCalendar();
	}
}
var responseFailure_getCalendar = function(o) {
	var objEvents = document.getElementById("events");
	objEvents.style.display="none";
}
 
 
 
 
 
/**
* Show hidden events
*/
function showMoreEvents() {
	var objButton = document.getElementById("eventsmore");
	var objUL = document.getElementById("calendarmore");
	objButton.style.display="none";
	objUL.style.display="block";
}
 
/**
* Close calendar event popup
*/
function closeCalendarpopup() {
	var objDIV = document.getElementById("calendarpopup");
	objDIV.style.display="none";
}
 
/**
* Open calendar event popup
*/
function openEvent(objLink) {
	// Get info
	var objInfo = objLink.parentNode.parentNode.parentNode.getElementsByTagName("DIV")[2];
	var objDIV = document.getElementById("calendarpopup");
	// Set text from info to popup
	document.getElementById("calendarpopup-date").innerHTML = objInfo.getElementsByTagName("DIV")[0].innerHTML;
	document.getElementById("calendarpopup-date").className = objInfo.getElementsByTagName("DIV")[4].innerHTML;
	document.getElementById("calendarpopup-subject").innerHTML = objInfo.getElementsByTagName("DIV")[1].innerHTML;
	document.getElementById("calendarpopup-info").innerHTML = objInfo.getElementsByTagName("DIV")[2].innerHTML;
	document.getElementById("calendarpopup-desc").innerHTML = objInfo.getElementsByTagName("DIV")[3].innerHTML;
	// Show popup
	objDIV.style.display="block";
	
	// Add click to google analytics
	pageTracker._trackEvent('Startsida', 'Aktiviteter', objInfo.getElementsByTagName("DIV")[1].innerHTML );
	return false;
}
 
//convert an Atom-formatted date string to a javascript-compatible date string
function convertAtomDateString(str, returnDateObject)
{
	var months = new Array("","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");	
	var year, month, date, hour, minute, second, offset;
	
	// YYYY-MM-DD Format
	var ymdFormat = /^\d{4}-\d{2}-\d{2}$/i;
	if(ymdFormat.test(str)){
		year = str.slice(0,4);
		month = months[1*str.slice(5,7)];		//Jan-Dec
		date = str.slice(8,10);		//01-31
		offset = "GMT";
		if(returnDateObject == true)
			return new Date( date+" "+month+" "+year );
		else
			return date+" "+month+" "+year;
	}
 
	
	//2009-03-24T11:30:00.000+01:00
	//YYYY-MM-DDThh:mm:ss[.f*](Z|-hh:mm|+hh:mm)
	var atomFormat = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d*)?(Z|[+-]\d{2}:\d{2})$/i;
	if(!atomFormat.test(str)) return "";	//invalid format
	
	
	year = str.slice(0,4);
	month = months[1*str.slice(5,7)];		//Jan-Dec
	date = str.slice(8,10);		//01-31
	hour = str.slice(11,13);	//00-23
	minute = str.slice(14,16);	//00-59
	second = str.slice(17,19);	//00-59
	offset = "GMT";
	if(str.indexOf("Z") == -1)	//time zone offset specified
	{
		var x = str.lastIndexOf(":");
		offset += str.slice(x-3,x) + str.slice(x+1);
	}
	
	//DD MMM YYYY hh:mm:ss GMT[(+|-)hhmm]
	if(returnDateObject == true)
		return new Date( date+" "+month+" "+year+" "+hour+":"+minute+":"+second+" "+offset );
	else
		return date+" "+month+" "+year+" "+hour+":"+minute+":"+second+" "+offset;
}
// Get abbreviated month
function getAbbreviatedMonth(monthNr)
{
	var month=new Array(12);
	month[0]="jan";
	month[1]="feb";
	month[2]="mar";
	month[3]="apr";
	month[4]="maj";
	month[5]="jun";
	month[6]="jul";
	month[7]="aug";
	month[8]="sep";
	month[9]="okt";
	month[10]="nov";
	month[11]="dec";
	return month[monthNr];
}
// Add leading zero if mising to hour and minutes
function checkTime(i)
{
	if (i<10) 
  	{
  		i="0" + i;
  	}
	return i;
}
 
// Remove whitespaces
function trim( str )
{
	return str.replace(/(^[\s\xA0]+|[\s\xA0]+$)/g, '');
}
 
 
// Insert http for links
function replacewww(text) {
	var start = (text.indexOf("www"))-7;
	var match = text.substr(start,7);
	if(match != "http://" || match != "ttps://")
	{
		text = text.replace("www", "http://www");
	}
	return text;
}
 
// Make links of urls in text
function replaceURLWithHTMLLinks(text) {
	var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
	return text.replace(exp,"<a href='$1'>$1</a>");
}
 
// Use diffrent functions for safari when using getElementsByTagName
function getElementsByTagName2(node, ns, localName) {
	if(BrowserDetect.browser == "Safari" || BrowserDetect.browser == "Chrome" || BrowserDetect.browser == "Opera")
		return node.getElementsByTagNameNS(ns, localName.substring(localName.indexOf(":")+1) );
	else
		return node.getElementsByTagName(localName);
}
 
// Browser detection
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]
 
};
BrowserDetect.init();
 
 