function defined(x) {
	return 'undefined' !== typeof x;
}

function ge(id) {
	return document.getElementById(id);
}

__storage = [];
urlpr = '/gallery/view/';
urlpo = '.json';

function loadGallery(id) {

	if (__storage[id]) {
/*		var player = new SlideShow(__storage[id]);
		player.init();
*/
		player.loadImages(__storage[id]);
	}
	else {
		var rdata = [];
		$.getJSON(urlpr + id + urlpo, function(data){
			if (data.Images) {
				for (var i = 0; i < data.Images.length; i++) {
					var img = data.Images[i];
					rdata[i] = {
						'url' : img.image,
						'text' : '<h1>' + img.title + '</h1>' + '<p>' + img.description + '</p>',
						'img' : img.image,
						'ico' : img.tiny
					};			
				}
				__storage[id] = rdata;
/*				var player = new SlideShow(rdata);
				player.init();
*/
				player.loadImages(__storage[id]);
			}
        });
		
	}
}

__storageRounds = [];
__pf = '/m.html';

function loadRound(eventid, id) {
	if (__storageRounds[id]) {
		ge('ajax-loader').style.display = '';		
		ge('tournament-data').innerHTML = __storageRounds[id];
		ge('ajax-loader').style.display = 'none';
		changeRound(Math.pow(2, (__roundCount - id)) );
	}
	else {
		var scriptURL = __pr + eventid + '/' + id + __pf;		
		var roundHTML = "";
		
		ge('ajax-loader').style.display = '';
		
		$.get(scriptURL, function(data) {			
			ge('tournament-data').innerHTML = data;
			__storageRounds[id] = data;
			ge('ajax-loader').style.display = 'none';
			changeRound(Math.pow(2, (__roundCount - id)) );			
		}); 
		
	}
	replaceLis(id, eventid);
}

function changeRound(round) {
	if (round != 1) {
		ge('current-round').innerHTML = '1/' + round + ' ' + ((__finalWord == 'final') ? __finalWord : __finalWord + 'a');
	}
	else {
		ge('current-round').innerHTML = __finalWord;
	}
}
 
function replaceLis(id, eventid) {
	
	var lis = ge('ranks').getElementsByTagName('li');
	
	for (var i = 1; i <= lis.length; i++) {
		if (lis[i-1].id != ('li_' + id)) {
			lis[i-1].innerHTML = '<a href="#" onclick="loadRound(' + eventid + ',' + i + '); return false"/>';
		}
		else {
			lis[i-1].innerHTML = '';
		}
	}
} 


var timetableListener = function(eventsData, lang) {
	this.elements = null;
	this.data = eventsData;
	this.numbersPathL = '/img/numbers-l/';
	this.numbersPathS = '/img/numbers-s/';
	this.profilesUrl = profilesUrl ? profilesUrl : '/img/profiles';
	this.current = defined(this.data[0]) ? 0 : null;
	
	this.init = function() {

		if (this.current !== null) {		
			this.elements = {
				prev : ge('prev-date'),
				numbers : ge('numbers'),
				next : ge('next-date'),
				month : ge('month'),
				timetable : ge('timetable'),
				score : ge('res-div'),
				restable : ge('results-table')
			}
	
			this.elements.prev.onclick = this.prevClick;
			this.elements.next.onclick = this.nextClick;
		}
		
		var curTime = new Date();
		for (var i = 0; i < this.data.length; i++) {
			var c = this.data[i];
			//alert(c.name);
			if (c.date && c.month && (c.date == curTime.getDate()) && (c.month == (curTime.getMonth() + 1))) {
				this.applyChanges(c);
				this.changeCurrent(i);
				return;
			}		
		}
		if (this.data.length) {
			this.applyChanges(this.data[this.data.length - 1]);
			this.changeCurrent(this.data.length - 1);			
		}
	}	
	
	this.prevClick = function() {
		if (defined(self.data[self.current - 1])) {
			self.applyChanges(self.data[self.current - 1]);
			self.changeCurrent(-1);
		}
					
		return false;
	}
	
	this.nextClick = function() {
		if (defined(self.data[self.current + 1])) {
			self.applyChanges(self.data[self.current + 1]);
			self.changeCurrent(1);
		}

		return false;
	}
	
	this.applyChanges = function(changes) {
		//alert(changes.ev[0].name);
		this.elements.month.innerHTML = monthsNames[changes.month];
		this.elements.numbers.innerHTML = this.insertImage(new String(changes.date), true);
		if (changes.ev.length) {
			var ih = '';
			var scoreh = '';
			var scoresInserted = 0;			
			for (var i = 0; i < changes.ev.length; i++) {
				
				// timetable inner html 
				ih += (i == (changes.ev.length - 1)) ? '<tr class="last">' : '<tr>';
				ih += '<td class="times">';
				if (changes.ev[i].time) {
					if (changes.ev[i].time.charAt(changes.ev[i].time.length -1) == '0') {
						ih += this.insertImage(new String(changes.ev[i].time), false);	
					} else {
						//alert(changes.ev[i].players[0].name.charAt(0));
						//alert(changes.ev[i].name);
						if (lang == 'rus') {
							ih += '<p align="left"><strong>Далее</strong></p>';
						} else {
							ih += '<p align="left"><strong>Followed</strong></p><p align="center"><strong>by</strong></p>';
						}
						
					}
					//alert(changes.ev[i].time); 
					
					
				}				 		
				ih += '</td>';
				ih += '<td class="tt-players">';
				if (changes.ev[i].name) {
					ih += changes.ev[i].name;
				}
				if (changes.ev[i].players && changes.ev[i].players.length == 2) {
					var p1html = changes.ev[i].players[0].name + '<img src="' + this.profilesUrl + '/' +  changes.ev[i].players[0].country + '" width="12" height="12"/>';
					var p2html = changes.ev[i].players[1].name + '<img src="' + this.profilesUrl + '/' +  changes.ev[i].players[1].country + '" width="12" height="12"/>';
					  
					ih += p1html;
					ih += " - <br/>";
					ih += p2html;
					
					// score inner html 
					var sc = null;
					if ((sc = changes.ev[i].score) && (sc.indexOf(';') != -1)) {
						var sets = sc.split(';');
						var out = {
							p1 : [],
							p2 : []
						};
						for (var j = 0; j < sets.length; j++) {
							if (sets[j].indexOf(':') != -1) {
								var cur = sets[j].split(':');
								out.p1.push(cur[0]);
								out.p2.push(cur[1]);								
							}
						}
						if (out.p1.length && out.p2.length) {
							scoresInserted++;
							scoreh += '<tr class="first';
							if (scoresInserted % 2 == 0) {
								scoreh += " dark";
							}
							scoreh += '">'
							scoreh += '<td class="player-name">';
							scoreh += p1html;
							scoreh += '</td><td>';
							for (var k = 0; k < out.p1.length; k++) {
								scoreh +='<span class="score-set">' + this.insertImage(new String(out.p1[k]), false) + '</span>';
							}
							scoreh += '</td></tr>';
							scoreh += '<tr class="last';
							if (scoresInserted % 2 == 0) {
								scoreh += " dark";
							}
							scoreh += '">'
							scoreh += '<td class="player-name">';
							scoreh += p2html;
							scoreh += '</td><td>';
							for (var k = 0; k < out.p2.length; k++) {
								scoreh += '<span class="score-set">' + this.insertImage(new String(out.p2[k]), false) + '</span>';
							}
							scoreh += '</td></tr>';
						}
					}					
					// end of score inner html
				}
				if (changes.ev[i].place) {
					ih += '<span>' + changes.ev[i].place + '</span>';
				}
				ih += '</td>';
				ih += '</tr>';
				

			}
			this.elements.timetable.innerHTML = '<table>' + ih + '</table>';
			if (this.elements.score) {
				if (scoreh) {
					this.elements.score.style.display = '';
					this.elements.restable.innerHTML = '<table>' + scoreh + '</table>';			
				}
				else {
					this.elements.score.style.display = 'none';
				}
			}
		}
	}
	
	this.changeCurrent = function(inc) {
		this.current += inc;
		if (this.current == 0) {
			this.elements.prev.style.visibility = 'hidden';
			this.elements.next.style.visibility  = 'visible';				
		}
		else if (this.current == (this.data.length - 1)) {			
			this.elements.next.style.visibility = 'hidden';	
			this.elements.prev.style.visibility  = 'visible';		
		}
		else {
			this.elements.next.style.visibility  = 'visible';
			this.elements.prev.style.visibility  = 'visible';
		}
	}

	this.insertImage = function(text, islarge) {
		var insText = '';
		for (var i = 0; i < text.length; i++) {
			var id = text.charAt(i);
			insText += '<img src="' + (islarge ? this.numbersPathL : this.numbersPathS) + ((id != ':') ? id : 'dots') + '.gif" alt="' + id + '"/>';
		}
		return insText;   	
	}	
	
	var self = this;
}
