var serializable = function(element, index){
	return element.get('id').replace("table_ckbox_","") + '=' + element.getElement('input[id^=ckbox_]').get('checked');
};

/// BRovito - 2010-03-29 : ajout du cas jeux-olympiques
var sports = ["hockey", "soccer", "auto", "ski", "football", "cyclisme", "baseball", "boxe", "golf", "patinage", "tennis", "basketball", "plongeon", "athletisme", "canoekayak", "jeux-olympiques","plussports"];
var names = new Hash({"hockey": "Hockey",
					  "soccer": "Soccer",
					  "auto": "Sports motorisés",
					  "ski": "Ski",
					  "football":"Football",
					  "cyclisme":"Cyclisme",
					  "baseball":"Baseball",
					  "boxe":"Boxe",
					  "golf":"Golf",
					  "patinage":"Patinage",
					  "tennis":"Tennis",
					  "basketball":"Basketball",
					  "plongeon":"Plongeon",
					  "athletisme":"Athl&eacute;tisme",
					  "canoekayak": "Cano&euml;-kayak",
					   "jeux-olympiques": "Jeux Olympiques",
                       "plussports":"Plus de sports"});

var checked = new Hash();
sports.each(function(item, index){
	checked.set(item,false);		
});

var daysOfWeek = new Hash({"1":"Lundi", "2":"Mardi", "3":"Mercredi", "4":"Jeudi", "5":"Vendredi", "6":"Samedi", "0":"Dimanche"});
var monthsOfYear = new Hash({"1":"janvier", "2":"février", "3":"mars", "4":"avril", "5":"mai", "6":"juin", "7":"juillet", "8":"août", "9":"septembre", "10":"octobre", "11":"novembre", "12":"décembre"});

var items;
var sdatetime = new Date().format("%x")+" 00:00:00";
var edatetime = new Date().format("%x")+" 23:59:59";

function getParameter (queryString, parameterName) {
   // Add "=" to the parameter name (i.e. parameterName=value)
   var parameterName = parameterName + "=";
   if (queryString.length > 0) {
	  // Find the beginning of the string
	  begin = queryString.indexOf (parameterName);
	  // If the parameter name is not found, skip it, otherwise return the value
	  if ( begin != -1 ) {
		 // Add the length (integer) to the beginning
		 begin += parameterName.length;
		 // Multiple parameters are separated by the "&" sign
		 end = queryString.indexOf ("&" , begin);
		 if ( end == -1 ) {
			end = queryString.length
		 }
		 // Return the string
		 return unescape(queryString.substring(begin, end));
	   }
	   // Return "null" if no parameter has been found
	   return null;
   }
}

function strpad(val){
	return (!isNaN(val) && val.toString().length==1)?"0"+val:val;
}

function loadSettings() {

	if (getParameter(window.location.href, 'webdiffusion') != null) {
		Cookie.write('sport_webdiffusion', true);	
	}
	
	if (getParameter(window.location.href, 'sdatetime') != null) {
		sdatetime = getParameter(window.location.href, 'sdatetime');	
	}
	
	if (getParameter(window.location.href, 'edatetime') != null) {
		edatetime = getParameter(window.location.href, 'edatetime');	
	}
	
	if (Cookie.read("sport_webdiffusion") == null) {
		Cookie.write('sport_webdiffusion', false);
	}

	if (Cookie.read("sport_webdiffusion")=="true") {
		$('ckbox_webdiffusion').set('checked', true);
	}
	
	if (Cookie.read("sport_calendar") == null) {
		var serializeString = "";
		sports.each(function(item, index){
			if (index==0) {
				serializeString = item+"=true";
			} else {			 
				serializeString += "&"+item+"=true";
			}
		});

		Cookie.write('sport_calendar', serializeString);
	}

	Cookie.read("sport_calendar").split("&").each(function(item, index){
		var sport = item.split("=");
		sports[index] = sport[0];
		checked.set(sport[0], sport[1]);
	});
}

function selectDate(year, month, day) {
	sdatetime = month+"/"+day+"/"+year+" 00:00:00";
	edatetime = month+"/"+day+"/"+year+" 23:59:59";

	displayDate(sdatetime, edatetime);
	window.document.sportCalendar.highlight(year+"-"+month+"-"+day);
}

function buildDates(sdatetime, edate) {

	var sdate = new Date(sdatetime);
	var edate = new Date(edatetime);

	while(sdate < edate) {
		var idDate = "div_" + sdate.get('Year') + strpad((sdate.get('Month')+1)) + strpad(sdate.get('Date'));
		if (!$chk($(idDate))){
			var div_date = new Element('div', {'id': idDate, 'class':'blocDate'});
			div_date.inject($('div_dates'));
			var p_header = new Element('p', {'class':'jour', 'html':daysOfWeek.get(sdate.get('Day')) + " " + sdate.get('Date') + " " + monthsOfYear.get(sdate.get('Month')+1) + " " + sdate.get('Year')});
			p_header.inject(div_date);
		}
		sdate.increment();
	}
}

function displayDate(sdate,edate) {
	$('div_dates').getChildren().each(function(chidren) {
		chidren.destroy();
	});
	
	buildDates(sdate, edate);
	
	var request = new Request.JSON({
		url: 'request/items.asp?sdatetime='+sdate+'&edatetime='+edate+'&sports='+sports,
		async:false,
		onComplete: function(jsonObj) {
			items = jsonObj.items;
			addItems(items, Cookie.read("sport_webdiffusion"), sdate, edate);
		}
	}).send();
}

var addItems = function(items, showOnlyWebDiffusion, sdate, edate) {
	var diffusions = new Array();
	var request = new Request.JSON({
		url: 'request/diffusions.asp?sdatetime='+sdate+'&edatetime='+(new Date(edate).increment()).format("%m/%d/%Y %H:%M:%S"),
		async:false,
		onComplete: function(jsonObj) {
			jsonObj.diffusions.each(function(diffusion, index) {
				diffusions[index] = diffusion;
			});
		}
	}).send();
	
	items.each(function(item, index) {
		var webDiffusion = null;
		var tvDiffusion = null;
		
		for (x in diffusions) {
			if (diffusions[x].item==item.id && diffusions[x].media==1 && diffusions[x].actif==true) {
				webDiffusion = diffusions[x];
			} else if (diffusions[x].item==item.id && diffusions[x].media==2) {
				tvDiffusion = diffusions[x];
			}
		}

		if (!showOnlyWebDiffusion || showOnlyWebDiffusion==$defined(webDiffusion).toString() || $defined(webDiffusion)) {
			var datetime = new Date(item.datetime);
			var idDate = "div_" + datetime.get('Year') + strpad((datetime.get('Month')+1)) + strpad(datetime.get('Date'));
			
			var idSport = idDate + "_" + item.sport;
	
			if (!$chk($(idDate).getElementById(idSport))) {
				var div_sport = new Element('div', {'id': idSport, 'class':'blocSport'});
				div_sport.inject(idDate);
				
				var div_logo = new Element('div', {'class':'logo LG' + item.sport});
				div_logo.inject(div_sport);
				
				var table = new Element('table', {'id':idSport+'_table', 'cellspacing':0});				
				table.inject(div_sport);
				var tbody = new Element('tbody');
				tbody.inject(table);
	
				if (checked.get(item.sport)=="false") {
					new Fx.Slide(div_sport).hide();
				}
			}
			
			var tr = new Element('tr', {'id':'item_'+item.id});
			if (item.type == 1) {
				if (index%2) {
					tr.addClass('altcolor');
				}
				
				var td = new Element('td', {'class':'heure','html':datetime.get('Hours')+" H "+strpad(datetime.get('Minutes'))});
				td.inject(tr);
				new Element('td', {'class':'visite'+' '+item.sportId.toUpperCase()+'_'+item.visitorId.toUpperCase()+'','html':item.visitor}).inject(tr);
				new Element('td', {'class':'recoit'+' '+item.sportId.toUpperCase()+'_'+item.homeId.toUpperCase()+'','html':item.home}).inject(tr);
			} else if (item.type == 2) {
				var td = new Element('td', {'class':'heure','html':datetime.get('Hours')+" h "+strpad(datetime.get('Minutes'))});
				td.inject(tr);
				var td = new Element('td', {'class':'texte','html':item.libelle + " - "+item.title});
				td.inject(tr);
			} else if (item.type == 3) {
				var td = new Element('td', {'class':'heure','html':''});
				td.inject(tr);
				var td = new Element('td', {'class':'texte','html':item.libelle + " - "+item.title});
				td.inject(tr);
			}
			tr.inject($(idSport+'_table').getElement('tbody'));
			
			if ($defined(webDiffusion)) {
				var webDiffusionStartTime = new Date(webDiffusion.start_time);
				$('item_'+item.id).getFirst().set('html', webDiffusionStartTime.get('Hours')+" H "+strpad(webDiffusionStartTime.get('Minutes')));
	
				if ((new Date(webDiffusion.start_time) < new Date() && new Date(webDiffusion.end_time) > new Date() || new Date(webDiffusion.end_time) < new Date())  && webDiffusion.url_asx.length>0) {
					// Live
					$('item_'+item.id).addClass('WDPlay');
					
					var tr = new Element('tr');
					var td = new Element('td', {'class':'WDPlay','colspan':3});
					var a = new Element('a',{'href': '#'});
					a.inject(td);
					a.addEvent('click', function() {
						callMediaPlayer(webDiffusion.url_asx);
						return false;
					});
					td.inject(tr);
					tr.inject($(idSport+'_table').getElement('tbody'),'bottom');
				} else {
					$('item_'+item.id).addClass('WD');
					
					var tr = new Element('tr');
					var td = new Element('td', {'class':'WD','colspan':3});
					td.inject(tr);
					tr.inject($(idSport+'_table').getElement('tbody'),'bottom');
				}
			} else if ($defined(tvDiffusion)) {
				$('item_'+item.id).addClass('RC');		
			}
		}
	});
	items=null;
};

function buildTopBlock() {

	sports.each(function(item, index){
		var table = new Element('table', {'id': 'table_ckbox_'+item, 'cellspacing': 0});
		table.inject($('div_checkbox_sport'));
		
		var tbody = new Element('tbody');
		tbody.inject(table);
		
		var tr = new Element('tr');
		tr.inject(tbody);
		
		var td_1 = new Element('td', {'html': names.get(item)});
		td_1.inject(tr);
		var td_2 = new Element('td', {'class':'checkbox'});
		td_2.inject(tr);
		
		var input = new Element('input', {'id': 'ckbox_'+item,'type':'checkbox'});
		if (checked.get(item)=="true") {
			if (Browser.Engine.trident) {
				input.set('defaultChecked',true);
			} else {
				input.set('checked',true);
			}
		}
		input.addEvent('click', function() {  
			var serializeString = sort.serialize(0,serializable).join('&');
			Cookie.write('sport_calendar', serializeString);
			
			if (this.get('checked')) {
				$('div_dates').getElements('div[id$='+this.get('id').split('_')[1]+']').each(function(element, index){
					new Fx.Slide(element).show();
				});
			} else {
				$('div_dates').getElements('div[id$='+this.get('id').split('_')[1]+']').each(function(element, index){
					new Fx.Slide(element).hide();
				});
			}
		});
		input.inject(td_2);
	});
	
	//This code initalizes the sortable list.
	var sort = new Sortables($('div_checkbox_sport'), {
		constrain: true,
		clone: true,
		revert: true,
		onStart: function(el) {
			sortable=true;
		},
		onSort: function(el) {},
		onComplete:  function(el) {
			if (sortable) {
				var serializeString = this.serialize(0,serializable).join('&');
				Cookie.write('sport_calendar', serializeString);
				loadSettings();
				displayDate(sdatetime,edatetime);
				sortable=false;
			}
		}
	}).attach();
}

var sortable=false;

window.addEvent('domready', function() {	
	$('ckbox_webdiffusion').addEvent('click', function() {  
		Cookie.write('sport_webdiffusion', this.get('checked'));
		displayDate(sdatetime,edatetime);
	});
	
	loadSettings();
	buildTopBlock();
	displayDate(sdatetime,edatetime);
});
