
var bindBehaviors = null;
/* Sisällön lataaminen erillisestä tiedostosta */
var createContent = null;
/* RSS-syötteiden näyttäminen uutisboksissa */
var showRSS = null;
/* Lataa RSS otsikot halutuun elementtiin */
var loadRSSItems = null;
var loadRSSFeed = null;

var toggleElements = null;

/* Seuraavaa funktiota käytetään tv- ja radiotietojen näyttämiseen, Margus */
var getSchedule = null;

function init(path, areaId, areaName, rssItems, newsboxFullMode) {
	
	/* Mediasalin klikkauslaskuri */
	$("a[@id^=delta-counter-]").click(function() {
	    var delta_id = parseInt($(this).attr("id").substring(16, 17));
	    var id = parseInt($(this).attr("id").substring(18, $(this).attr("id").length));
	                    
	    var i = new Image(); 
	    i.src = 'http://yle.fi/javar/deltalc/store?server=delta'+delta_id+'&id=' + id;
	    var params = 'status=1,toolbar=1,location=1,directories=0,menubar=1,resizable=1,scrollbars=1';
	    var newWindow = window.open($(this).attr("href"), '_blank', params);
	    if (newWindow) {
	        newWindow.focus();
	        return false;
	    }
	    return true;
	});

	/* Radio- ja tv-lähetykset sivun tietojen hakeminen */
	getSchedule = function(date) {
		$("#tvguidecontent").load('/urheilu/php/ohjelmaopas-data.php?pvm=' + date);
	}
	
	$("#tvguide #schedule").show();
	
	/* Kaikki uutiset -listan sivuttaminen */
	var pageSize = 50; 		// kaikki uutiset -listan sivukoko
	var pagerOn = true; 	// sivutuksen kytkeminen päälle / pois
	
	if (pagerOn) {
	
		var pagerPrettyDate = "";
		
		$('#pager').ready(function() {
			
			var listLength = $('#pager').find('li').length;
			var pages = listLength / pageSize;
			
			// Wrap list items with "page" divs (are needed for pager)
			for (var i=0; i < pages; i++) {
				var startIndex = (i+1) * pageSize - pageSize;
				var endIndex = startIndex + pageSize;
				$('#pager li').slice(startIndex,endIndex).wrapAll('<div class="pager-page"></div>');
			}
			
			// Create pretty date titles
			$('#pager').find('li').each(function() {
			
				var myDate = $(this).find('span.date').text();
				var myTime = $(this).find('span.time').text();
				
				myDate = myDate.split(".");
				myTime = myTime.split(".");
				var myHours = 0;
			
				var dateObj = new Date();
				dateObj.setFullYear(Number(myDate[2]), Number(myDate[1].replace(/0/, ''))-1, Number(myDate[0]));
				dateObj.setHours(Number(myTime[0]));
				//myHours = Number(myTime[0])-1;
				dateObj.setMinutes(Number(myTime[1]));
				
				if (YLEUrheilu.getPrettyDate(dateObj) != pagerPrettyDate) {
					pagerPrettyDate = YLEUrheilu.getPrettyDate(dateObj);
					var $pagerPrettyDate = $('<h4></h4>')
						.text(YLEUrheilu.getPrettyDate(dateObj));
					$(this).before($pagerPrettyDate);
				}
			});

			// Start paging
			$('#pager').pager('div.pager-page', {
				navAttach: 'append',
				navClass: 'pagernav clearfix',
				prevText: 'Edellinen',
				nextText: 'Seuraava'
			});
		});
	}
	
	/* Uutisboksin funktiot */
	
	var myRssInfo = new RssInfoObj();
	myRssInfo.setPath(path);
	myRssInfo.setAreaId(areaId);
	
	/* 
	 * Set default behaviors for defined elements
	 */
	bindBehaviors = function(scope) {
	
		//$.countdown.regional['fi'] = {labels: ['vuotta kisoihin', 'kuukautta kisoihin', 'viikkoa kisoihin', 'p&auml;iv&auml;&auml; kisoihin', 'tuntia kisoihin', 'minuuttia kisoihin', 'sekuntia kisoihin'], compactLabels: ['v', 'kk', 'vko', 'h'], timeSeparator: '.'};
		$.countdown.regional['fi'] = {labels: ['vuotta kisoihin', 'kuukautta kisoihin', 'viikkoa kisoihin', '', 'tuntia kisoihin', 'minuuttia kisoihin', 'sekuntia kisoihin'], compactLabels: ['v', 'kk', 'vko', 'h'], timeSeparator: '.'};
		$.countdown.setDefaults($.countdown.regional['fi']);
		//$('div#countdown-peking2008').countdown({until: new Date(2008, 7, 9, 0, 0, 0), format: 'D'});
		//$('div#countdown-paralympialaiset2008').countdown({until: new Date(2008, 8, 9, 0, 0, 0), format: 'D'});
		$('div#countdown-jaakiekonmm2009').countdown({until: new Date(2009, 3, 25, 0, 0, 0), format: 'D'});
		
		$('#newsboxtabs > li', scope).click(function() { 
				
			// Merkitään valittu välilehti ei-aktiivikseksi ja klikattu valituksi
			$('#newsboxtabs > li').removeClass('ui-tabs-selected');
			$(this).addClass('ui-tabs-selected');

			myRssInfo.setMedia($(this).attr('title'));
			
			// Haetaan sisältö ja näytetään se käyttäjälle uutislootassa
			showRSS('#newsboxcontent', myRssInfo, rssItems);
		});
		
		$('#newsboxselector a', scope).click(function() {
		
			$('#newsboxselector li').removeClass('selected');
			$(this).parent().addClass('selected');
			
			myRssInfo.setSort($(this).parent().attr('title'));
			
			showRSS('#newsboxcontent', myRssInfo, rssItems);
		});
		
		$('a.radiolink', scope).click(function() {
			$('a.radiolink').removeClass('selected');
			$(this).addClass('selected');
		});
		
		$('#newsboxtoggle > a', scope).click(function() {
			myRssInfo.setFullMode(!myRssInfo.getFullMode());
			showRSS('#newsboxcontent', myRssInfo, rssItems);
		});
		
		// Get default content to news box
		$('#newsboxcontent', scope).ready(function() {
			if ($(scope).attr('id') == 'newsbox') {
				showRSS('#newsboxcontent', myRssInfo, rssItems);
				$('#newsboxtabs > li:first()', scope).addClass('ui-tabs-selected');
				$('a.radiolink:lt(1)').text(myRssInfo.getAreaId());
			}
		});
		
		// Get RSS liftup content
		$('div[@id^=liftup-rssreader]', scope).ready(function() {
		
			var elemIdStr = $(scope).attr('id');
		
			if (elemIdStr.substring(0,16) == 'liftup-rssreader') {

				// Haetaan syötteen osoite omasta kentästään
				var feedUrl = $('p.rssitems > span#rssurl', scope).text();
				
				// Elementti, johon haetut/luodut artikkelilinkit kirjoitetaan
				var idStr = '#'+elemIdStr+' p.rssitems'; 
				
				loadRSSFeed(idStr, feedUrl, 5);
			}
		});
		
	}
  
  // Haetaan lajivalikoiden keksit
	var suomalaislajit = $.cookie("suomalaislajit");
  var kaikkilajit = $.cookie("kaikkilajit");
  //alert(kaikkilajit);
  // Keksit vaikuttavat valikkojen näkymiseen: 
  //    - suomlaislajit näkyvät avattuina kun ei ole keksejä, suljettuina kun on
  //    - kaikki lajit näkyvät avattuina kun on keksi, muuten kiinni
  if (suomalaislajit == null) {
    $('#navigation-suomalaislajit .expandable').css('display','block');
    $('#navigation-suomalaislajit .collapsed-suomalaislajit').addClass('expanded-suomalaislajit').removeClass('collapsed-suomalaislajit');
  } else {
    $(suomalaislajit + ' .expandable').css('display','none');
    $(suomalaislajit + ' .expanded-suomalaislajit').addClass('collapsed-suomalaislajit').removeClass('expanded-suomalaislajit');
  }
  if (kaikkilajit != null) {
    $(kaikkilajit + ' .expandable').css('display','block');
    $(kaikkilajit + ' .collapsed-kaikki_lajit').addClass('expanded-kaikki_lajit').removeClass('collapsed-kaikki_lajit');
  } else {
    $('#navigation-kaikki_lajit .expandable').css('display','none');
    $('#navigation-kaikki_lajit .expanded-kaikki_lajit').addClass('collapsed-kaikki_lajit').removeClass('expanded-kaikki_lajit');
  }
  
	toggleElements = function(elementId) {
    var suomalaislajit = $.cookie("suomalaislajit");
    var kaikkilajit = $.cookie("kaikkilajit");
    var suomalaislajitclass = $('#navigation-suomalaislajit ul li a').attr('class');
    var kaikkilajitclass = $('#navigation-kaikki_lajit ul li a').attr('class');

    // Valikkoa klikattaessa keksit joko poistetaan tai asetetaan
    // Valikkoa klikattaessa valitse valikon kuvake (plus/miinus)
    if (elementId == '#navigation-suomalaislajit') {
      if (suomalaislajit == null) {
        $.cookie("suomalaislajit",elementId);
      } else {
        $.cookie("suomalaislajit",null);
      }
      if (suomalaislajitclass == 'collapsed-suomalaislajit') {
        $(elementId + ' .collapsed-suomalaislajit').addClass('expanded-suomalaislajit').removeClass('collapsed-suomalaislajit');
      } else {
        $(elementId + ' .expanded-suomalaislajit').addClass('collapsed-suomalaislajit').removeClass('expanded-suomalaislajit');
      }
    } else if (elementId == '#navigation-kaikki_lajit') {
      if (kaikkilajit == null) {
        $.cookie("kaikkilajit",elementId);
      } else {
        $.cookie("kaikkilajit",null);
      }
      if (kaikkilajitclass == 'collapsed-kaikki_lajit') {
        $(elementId + ' .collapsed-kaikki_lajit').addClass('expanded-kaikki_lajit').removeClass('collapsed-kaikki_lajit');
      } else {
        $(elementId + ' .expanded-kaikki_lajit').addClass('collapsed-kaikki_lajit').removeClass('expanded-kaikki_lajit');
      }
    }
    
		$(elementId + ' .expandable').toggle();
	}
	
	/*
	 * createContent (id, contentId, contentUrl)
	 * id				: root element's id
	 * contentId		: external content will be loaded into this element
	 * contentUrl		: external content's URL
	 */
	createContent = function(id, contentId, contentClass, contentUrl) {
	
		// Create new element for external content load
		// ...and append it to given root element
		$('<div></div>').attr({id: contentId}).addClass(contentClass).appendTo(id);

		// Load external content to created element
		$('#'+contentId).hide();
		
		$.ajax({
			type: "GET",
			url: contentUrl,
			cache: false,
			success: function (data) {
			
				// Tuodaan ladattu sisältö esiin
				$('#'+contentId).html(data);
				$('#'+contentId).show();
				
				bindBehaviors($('#'+contentId));
			}
		});
	}
	
	
	
	/* Lukee RSS:t käyttäen ajax-komentoa vrt toinen funktio alla... */
	loadRSSItems = function(elementId, feedUrl, itemCount) {
		
		// Load external rss feed
		$.ajax({
			type: "GET",
			url: feedUrl,
			cache: false,
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				$(elementId+' '+'elementClass').empty();
			},
			success: function(data, status) {
				
				$(elementId).html('');
				
				/* Get items from rss */
				var $items = $(data).find('item:lt('+itemCount+')').each(function() {
					
					// Create title and link
					var title = $('title', this).text();
					var linkUrl = $('link', this).text();
					
					var $item = $('<a></a>');
					$item.addClass('arrow');
					$item.attr('href', linkUrl);
					$item.html(title);
					
					$item.appendTo(elementId);
				});
			}
		});
	}
	
	/* Lukee RSS:t käyttäen JQueryn omaa JFeed-pluginia... */
	loadRSSFeed = function(elementId, feedUrl, itemCount) {
		
		// Load external rss feed using JQuery plugin JFeed
		$.getFeed({
			url: feedUrl, 
			error: function() {
				$(elementId).html('Valitettavasti tietoja ei saatu haettua');
			},
			success: function(feed) {
				
				$(elementId).empty();
				
				/* Get items from rss */
				for(var i = 0; i < feed.items.length && i < itemCount; i++) {
					
					var item = feed.items[i];
					
					var $item = $('<a></a>');
					$item.addClass('arrow');
					$item.attr('href', item.link);
					$item.html(item.title);
					
					$item.appendTo(elementId);
				}
			}
		});
	}
	
	/*
	 * showRSS (elementId, feedURL)
	 * elementId	: root element's id, where rss content will be appended
	 * feedURL	: feed's local URL (ext/dirname/feedname.xml)
	 */
	showRSS = function(elementId, feedObj, amount) {
	
		$('#newsbox-alt').hide();

		var $rssListContainer = $('<div></div>');
	
		// Items shown when full mode is on or not
		var fixedAmount = (feedObj.getFullMode())?amount:amount*3;
		
		// Create empty list error message
		var rssListEmptyText = "Yht&auml;&auml;n artikkelia ei l&ouml;ytynyt.";
		if (feedObj.getMedia() == 'videot')	
			rssListEmptyText = "Yht&auml;&auml;n videota ei l&ouml;ytynyt.";
		var $rssListEmpty = $('<div><p>'+rssListEmptyText+'</p></div>');
		
		var $toggleLink = $('#newsboxtoggle > a');
			
		var setToggleText = (feedObj.getFullMode())?
			'Näytä vain otsikot':
			'Näytä kaikki tiedot';
		$toggleLink.text(setToggleText);

		// Load external rss feed
		$.ajax({
			type: "GET",
			url: feedObj.getUrl(),
			cache: false,
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				// Jos feediä ei löydy, niin näytetään virheilmoitus...
				$toggleLink.hide();
				$(elementId).html($rssListEmpty);
			},
			success: function(data, status) {
				
				$toggleLink.show();
				
				var prettyDateTitle = "";
				
				// Show news box navi buttons
				$('#newsboxhelpers').show();
				
				/* Get items from rss */
				var $items = $(data).find('item:lt('+fixedAmount+')').each(function() {
					
					// Create title and link
					var title = $('title', this).text();
					
					var linkUrl = $('link', this).text();
					var linkaddrs = linkUrl;
					if (linkaddrs.search(/akastreaming/) == -1)
						linkaddrs = '/' + YLEUrheilu.getLocalUrl(linkUrl);
					
					var $title = $('<a></a>')
						.attr('href', linkaddrs)
						.text(title);
					$title = $('<h3></h3>')
						.html($title);
					
					// Create category info
					var category = $('category', this).text();
					var categoryText = category.replace(/\//, ': ');
					/* 
					var categories = category.split('/');
					var categoryText = "";
					for (i=0; i<categories.length; i++) {
						categoryText += categories[i];
						if (i != categories.length-1) 
							categoryText += ", ";
					}
					*/
					
					var $metaData = $('<p></p>')
						.addClass('meta')
						.text('['+categoryText+']');
					
					// Create publish date
					var pubDate = new Date($('pubDate', this).text());
					var pubMonth = pubDate.getMonth() + 1;
					var pubDay = pubDate.getDate();
					var pubYear = pubDate.getFullYear();
					var pubHours = pubDate.getHours();
					pubHours = YLEUrheilu.checkTime(pubHours);
					var pubMinutes = pubDate.getMinutes();
					pubMinutes = YLEUrheilu.checkTime(pubMinutes);
					$metaData.append(' (p&auml;ivitetty '+pubDay+'.'+pubMonth+'.'+pubYear+' klo '+pubHours+':'+pubMinutes+')');
								
					// Create media element: image, video ... (only ímage is supported in this version)
					var $media = '';
					$(this).find('enclosure').each(function() {
						var mediaurl = $(this).attr('url');
						$media = $('<img></img>');
						$media.attr('src', '/' + YLEUrheilu.getLocalUrl(mediaurl));
						$media.attr('alt', title);
						$media.attr('width', 150);
						$media.attr('title', title);
						
						$media = $('<a></a>').html($media);
						//$media.attr('href', $('link', this).text());
						$media.attr('href', linkaddrs);
					});
				
					// Create description
					var description = $('description', this).text();
					var $description = $('<a></a>')
						.attr('href', linkaddrs)
						.text(description)
					
					$description = $('<p></p>').html($description);
						
					// Create whole content and append it to root element
					// Full mode with media and description elements
					var $item = $('<div class="item"></div>')
						.addClass('newsboxitem clearfix');
					
					if (YLEUrheilu.getPrettyDate(pubDate) != prettyDateTitle && feedObj.getSort() == 'tuoreimmat') {
						prettyDateTitle = YLEUrheilu.getPrettyDate(pubDate);
						var $prettyDateTitle = $('<h4></h4>')
							.text(prettyDateTitle);
						$item.append($prettyDateTitle);
					}
					
					$item.append($title);
					
					if (feedObj.getFullMode()) {
						$item.append($media);
					}
					
					$item.append($metaData);
					
					if (feedObj.getFullMode()) {
						$item.append($description)
					}

					$item.appendTo($rssListContainer);
					
				}); // find rss feed item elements
				
				
				// Get general information and create links
				$(data).find('rss').each(function() {
					
					var allNewsUrl = feedObj.getPath();
					
					if (feedObj.getMedia() == 'uutiset')
						allNewsUrl = feedObj.getPath() + 'kaikki.html';
					
					// Write news box title (category if defined in rss feed)
					var rsscategory = $('channel > category:first()', this).text();
					var rssCategoryText = "";
					rssCategoryText = rsscategory.replace(/\//, ': ');
					var $newsboxTitle = $('#newsbox > h2');
					$newsboxTitle.html(rssCategoryText);
					$newsboxTitle.removeClass('hide');
					
					if (rssCategoryText != "")
						rssCategoryText = " alueelta " + rssCategoryText;
					
					// Create kaikki uutiset -linkki (näytetään jos tuoreimmat valittuna)
					if (feedObj.getSort() == 'tuoreimmat') {
						var $allNewsLink = $('<a></a>')
							.addClass('arrow')
							.attr('href', allNewsUrl);
						if (feedObj.getMedia() == 'videot')	
							$allNewsLink.html('Kaikki Mediasalin videot' + rssCategoryText);
						else 
							$allNewsLink.html('Kaikki tuoreimmat uutiset' + rssCategoryText);
						$allNewsLink = $('<p><strong></strong></p>').html($allNewsLink);
						$allNewsLink.appendTo($rssListContainer);
					}
					
					// Feedin otsikko linkkiin
					var rsstitle = $('channel > title:first()', this).text();
					
					if (rsstitle == '')
						rsstitle = "Lataa t&auml;m&auml; ";
					
					// Create rss link
					var $rsslink = $('<a></a>')
						.addClass('rsslink')
						.attr('href', feedObj.getUrl())
						.html(rsstitle + ' RSS');
					$rsslink = $('<p></p>').html($rsslink);
					
					// Append rss link to the end of list
					$('<div></div>')
						.addClass('rsslinkcontainer clearfix')
						.append($rsslink)
						.appendTo($rssListContainer);
				
				}); // find rss feed channel element	

				// Check if list is empty or not (any items found...?)
				if (Number($items.length) < 1) {
					$toggleLink.hide();
					$(elementId).html($rssListEmpty);
				} else {
					$(elementId).html($rssListContainer);
				}
				
			} // success
		
		}); // ajax
	
	} // showRSS
	
}

/* ---- Define Rss info object ---- */

function RssInfoObj() {

	this.path = '/urheilu/rss/'	
	this.areaId = 'urheilu';
	this.media = 'uutiset';
	this.sort = 'tuoreimmat';
	this.fullMode = true;
	
	this.ext = 'xml';
	
	this.setPath = function(path) {
		this.path = path?'/'+path+'/':'/urheilu/';
	}
	
	this.setAreaId = function(areaId) {
		this.areaId = areaId?areaId:'urheilu';
	}
	
	this.setMedia = function(media) {
		this.media = media?media:'uutiset';
	}
	
	this.setSort = function(sort) {
		this.sort = sort?sort:'tuoreimmat';
	}
	
	this.setFullMode = function(mode) {
		this.fullMode = mode;
	}
	
	this.switchFullMode = function() {
		this.fullMode = !this.fullMode;
	}

	this.getPath = function() {
		var tmpPath = this.path;
		
		if (this.media == 'videot') {
			if (tmpPath.search(/lajit/) != -1) {
				tmpPath = tmpPath.replace(/lajit/, 'mediasali');
			} else if (tmpPath.search(/tapahtumat/) != -1) {
				
				// Lisätään mediasali-teksti URL:iin mukaan heti tapahtuman nimen jälkeen
				var tempStrArray = tmpPath.split("/");
				
				// Tapahtuman nimi ensin talteen...
				var tapahtumaNameIndex = jQuery.inArray("tapahtumat", tempStrArray) + 1; // tempStrArray.indexOf("tapahtumat") + 1;
				/* Bug fix above: indexOf is not working with IE 6/7 !!! */
				var tapahtumaName = "";
				if (tempStrArray.length > tapahtumaNameIndex)
					tapahtumaName = tempStrArray[tapahtumaNameIndex];
				
				tmpPath = tmpPath.replace(/tapahtumat\/.*?\//, 'tapahtumat/' + tapahtumaName + '/mediasali/');
				
			} else {
				tmpPath = tmpPath + 'mediasali/';
			}
		}
		
		return tmpPath;
	}
	
	this.getRssPath = function() {
		return this.getPath() + 'rss/';
	}
	
	this.getAreaId = function() {
		return this.areaId;
	}
	
	this.getMedia = function() {
		return this.media;
	}
	
	this.getSort = function() {
		return this.sort;
	}
	
	this.getFullMode = function() {
		return this.fullMode;
	}

	/* Generates and returns whole url to rss object */
	this.getUrl = function() {
		return this.getRssPath() + this.areaId + '_' + this.media + '_' + this.sort + '.' + this.ext;
	}
}

/**
 * YLE Urheilun sivustoa varten niputettuja toiminnallisuuksia
 */
function YLEUrheiluUtil() {

	this.getPrettyDate = function(dateObj) {
	
		/* Lasketaan annetun päiväyksen erotus tähän hetkeen... */ 
		this.diff = (((new Date()).getTime() - dateObj.getTime()) / 1000),	
		this.day_diff = Math.floor(this.diff / (60*60*24));

		if (isNaN(this.day_diff) || this.day_diff < 0 || this.day_diff >= 31)
			return;

		/* Palautetaan erotuksen mukainen teksti */
		return this.day_diff == 0 && (
				(this.diff < 5*60) && "< 5 min" ||
				(this.diff < 10*60) && "< 10 min" ||
				(this.diff < 15*60) && "< 15 min" ||
				(this.diff < 30*60) && "< 30 min" ||
				(this.diff < 60*60) && "< 1 tunti" ||
				(this.diff < 2*60*60) && "< 2 tuntia" ||
				(this.diff < 4*60*60) && "< 4 tuntia" ||
				(this.diff < 8*60*60) && "< 8 tuntia" ||
				(this.diff < 12*60*60) && "< 12 tuntia" ||
				(this.diff < 24*60*60) && "< 1 vrk"
			) ||
			this.day_diff < 2 && "< 2 vrk" ||
			this.day_diff < 7 && "< 1 viikko" || 
			this.day_diff < 14 && "< 2 viikko" ||
			this.day_diff < 31 && "< 1 kk" ||
			this.day_diff > 31 && "> 1 kk";
	}
  
	this.getLocalUrl = function(url) {
		// Parsii url:sta koneen nimen pois
		url = url.replace(/http:\/\/www.yle.fi\//, '');
		url = url.replace(/http:\/\/yle.fi\//, '');
		url = url.replace(/http:\/\/delta3.yle.fi\//, '');
		url = url.replace(/http:\/\/delta3\//, '');
		return url;
	}

	this.checkTime = function(i) {
		if (i < 10) {
			i = "0" + i;
		}
		return i;
	}

	this.delta3Counter = function(id) {
		var i = new Image(); 
		i.src = 'http://yle.fi/javar/deltalc/store?server=delta3&id=' + id;
		return true;
	}
}

var YLEUrheilu = new YLEUrheiluUtil();



