var flash = false;
var player = null;
var channel_off = false;
var m2 = document.location.toString().search(/mode=2/i) == -1 ? false : true;
var VOD = false;
var sch_current = true;
var timerAdv = null;
var sc_date = new Date();
schedule_time_separator = "&nbsp;-&nbsp;";

function getAbsolutePos(el) {
	var r={ x: el.offsetLeft, y: el.offsetTop };
	if (el.offsetParent) {
		var tmp=getAbsolutePos(el.offsetParent);
		r.x+=tmp.x;
		r.y+=tmp.y;
	}
	return r;
}

function setVOD(title, bndw, fid, startup) {
	if(!VOD) {
		window.__oops = player.onPlayerStop;
		player.onPlayerStop = function(p) {
			setBndw(); // let's play broadcast (it automatically clears startup state)
			refreshProgTitle();
		}
	}
	player.forceLoop = false;
	VOD = true;

	if(timerAdv) { window.clearTimeout(timerAdv); timerAdv = null; }
	var e = document.getElementById('bndw');
	e.onchange = function () {}
	e.options.length = 0;

	var i;
	var el = document.getElementById("tv_mode");
	if(el) el.innerHTML = __lang['vod_playing'];
	el = document.getElementById("tv_current");
	if(el) el.innerHTML = title;
	for(i=0;i < bndw.length;i++)
		e.options[e.options.length] = new Option(bndw[i].title, bndw[i].src);
	player.play(e.value);
	e.onchange = function () { player.play(e.value); }
	
	$.post(_DOC_ROOT+"/play_data/", { channel: _CHANNEL_, "fid":fid, "advert":"true" }, function(d, s) {
//debugger;
		displayAdvert({"time":"__:__","title":"_____","start":"0","dur":"0","fstart":"0","fdur":"0"}, d.advert);
	}, 'json');
}

function setBndw() {
	if(VOD) { // clear VOD state if it is
		player.onPlayerStop = window.__oops;
		window.__oops = null;
	}
	player.forceLoop = true;
	VOD = false;
	
	var e = document.getElementById('bndw');
	e.onchange = function () {}
	e.options.length = 0;

	if(window.customSetBndw) { customSetBndw(e); return; }
	$.post(_DOC_ROOT+"/play_data/", { channel: _CHANNEL_, "channels": "true" }, function(d, s) {
//debugger;
		var i;
		for(i=0;i < d.channels.length;i++)
			e.options[e.options.length] = new Option(d.channels[i].title, 'mms://'+d.channels[i].ip+':'+d.channels[i].port);
		player.play(e.value);
		e.onchange = function () { player.play(e.value); }
	}, 'json');
}

function refillSchedule(d, just_schedule) {
	var args = { channel: _CHANNEL_, "schedule":"true", "current":"true", "advert":"true" };
	var cd = new Date();
	sc_date = d ? d : cd;
	if(cd.getMonth() == sc_date.getMonth() && cd.getDate() == sc_date.getDate() && cd.getFullYear() == sc_date.getFullYear()) window.sc_current = true;
	else {
		var mon = sc_date.getMonth() + 1;
		if(mon < 10) mon = '0'+mon;
		var day = sc_date.getDate();
		if(day < 10) day = '0'+day;
		args.date = sc_date.getFullYear()+'-'+mon+'-'+day;
		window.sc_current = false;
	}
	$("#schedule").html(__lang.loading);
	$.post(_DOC_ROOT+"/play_data/", args, function(data, s) {
		if(displaySchedule) displaySchedule(data.schedule ? data.schedule : null, sc_date.valueOf(), data.current ? data.current.start : null);
//		if(!VOD) {// && !just_schedule) {
			if(data.current)
				window.setTimeout(function() { displayProgTitle(data.current, data.advert) }, 10);
			else
				window.setTimeout(function() { displayProgTitle(null, null) }, 10);
//		}
	}, 'json');
}

function scrollSchedule() {
	var i;	
	var d = new Date();
	if(sc_date.getFullYear() != d.getFullYear() || 
		sc_date.getMonth() != d.getMonth() || 
		sc_date.getDate() != d.getDate()) return;

	var e = document.getElementById('schedule');
	var found = false;
	for(i=0;i < e.childNodes.length;i++) {
		if(e.childNodes[i].id == window.sc_playing) {
			e.childNodes[i].className = e.childNodes[i].className.search(/tv_item_vod/) == -1 ? 'tv_item_current' : 'tv_item_current tv_item_vod';
			e.scrollTop = e.childNodes[i].offsetTop - e.childNodes[0].offsetTop;
			found = true;
		} else if (e.childNodes[i].tagName && e.childNodes[i].className.search(/tv_item_current/) != -1) {
			e.childNodes[i].className = e.childNodes[i].className.search(/tv_item_vod/) == -1 ? 'tv_item' : 'tv_item tv_item_vod';
		}
	}
	return found;
}

function displayProgTitle(c, a) {
//debugger;
	if(!VOD) {
		if(!c || !c.start) {
			$("#tv_mode").html(__lang['now_playing']);
			$("#tv_current").html(__lang['timebreak']);
		}  else {
			var d = new Date(parseInt(c.start));
			var h = d.getHours(); if(h < 10) h = "0"+h;
			var m = d.getMinutes(); if(m < 10) m = "0"+m;
			$("#tv_mode").html(__lang['now_playing']);
			$("#tv_current").html(h+':'+m+' - '+c.title);
		}
	}

	var found = false;
	var s = document.getElementById('schedule');
	var i;
//	while(label.search(/:/) != -1) label = label.replace(/:/, '_');
	var d = new Date();
	var scheduleValid = false;
	if(c && sc_current) {
		var label = 'sch_'+c.start;
		window.sc_playing = label;
		found = scrollSchedule();
	} else window.sc_playing = '';
	if(!VOD) displayAdvert(c, a);

	var d = new Date();
	var next = c ? parseInt(c.start)+parseInt(c.dur) : d.valueOf()+10000;
	if(c && c.start && !found && sc_current) {
		refillSchedule();
	} else if(next) {
		window.setTimeout(function() { refreshProgTitle(); }, next - d.valueOf());
	}
}

function refreshProgTitle() {
	$.post(_DOC_ROOT+"/play_data/", { channel: _CHANNEL_, "current":"true","advert":"true" }, function(d, s) {
		if(d.current)
			displayProgTitle(d.current, d.advert);
		else
			displayProgTitle({"time":"__:__","title":"_____","start":"0","dur":"0","fstart":"0","fdur":"0"}, null);
	}, 'json');
}

function displayAdvert(cur, adv) {
//debugger;
	$("#advert").empty();
	if(adv) {
		if(adv.banner) $('#advert').html(adv.banner);
		else if(adv.length) $('#advert').html(make_banner_block(adv));
	}
	if(VOD) return;
	if(cur && parseInt(cur.start)+parseInt(cur.dur) != parseInt(cur.fstart)+parseInt(cur.fdur)) {
		var next = parseInt(cur.fstart)+parseInt(cur.fdur);
		var d = new Date();
		timerAdv = window.setTimeout(function() { refreshAdvert(); }, parseInt(cur.fstart)+parseInt(cur.fdur) - d.valueOf());
	}
}

function refreshAdvert() {
	timerAdv = null;
	if(VOD) return;
	$.post(_DOC_ROOT+"/play_data/", { channel: _CHANNEL_, "current":"true", "advert":"true" }, function(d, s) {
//debugger;
		if(d.current)
			displayAdvert(d.current, d.advert);
		else
			displayAdvert({"time":"__:__","title":"_____","start":"0","dur":"0","fstart":"0","fdur":"0"}, null);
	}, 'json');
}

function initTV() {
	$("body").ajaxError(function(event, request, settings) {
		alert("Error requesting page " + settings.url);
	});
	var box = document.getElementById('tv_set');
	var stub = document.getElementById('tv_stub');
	if(document.getElementById('status_box'))
	window.bs = new BlinkingStatus({
		box: 'status_box',
		msg: __lang.loading2,
		interval: 300,
		hide_boxes: [ 'tv_mode', 'tv_current' ]
	});
	var pp = $("#player_plugin");
	var options = {
		plugin: pp.length ? pp[0] : null,
		forceLoop: true,
		onConnectingBuffering: function(o) {
			if(window.bs) window.bs.run();
			if(stub) {
				var p = getAbsolutePos(box);
				box.style.display = 'none';
				stub.style.display = 'block';
			}
		},
		onPlayerStop:function() {
			var b = document.getElementById('btn_play_stop');
			if(b) {
				b.onclick = function() { player.playCurrent(); }
				b.title = strings['play'];
				b.src = _DOC_ROOT+"/img/btn-play.gif";
			}
		},
		onPlayerStart:function() {
			if(window.bs) window.bs.stop();
			var b = document.getElementById('btn_play_stop');
			if(b) {
				b.onclick = function() { player.stop(); }
				b.title = strings['stop'];
				b.src = _DOC_ROOT+"/img/btn-stop.gif";
			}
			if(stub) { // && box.style.display == 'none') {
				stub.style.display = 'none';
				box.style.display = 'block';
			}			
		},
		onPluginLoaded:function(p) {
			player = p;
			var vol = p.getVolume();
			vol = parseInt(snd_vol[Math.ceil(snd_vol.length / 2)-1]);
			p.setVolume(vol);
			setBndw(); // setting up BNDW list and play default bandwidth
		},
		onVolumeChanged:onVolumeChanged
	};

	if(window.plugin_wd && window.plugin_ht) { options.wd = window.plugin_wd; options.ht = window.plugin_ht; }

	if(window.STARTUP_VIDEO) { // startup video is set up. let's play it on start
		options.onPluginLoaded = function(p) {
			player = p;
			var vol = p.getVolume();
			vol = parseInt(snd_vol[Math.ceil(snd_vol.length / 2)-1]);
			p.setVolume(vol);
			setVOD(STARTUP_VIDEO.title, STARTUP_VIDEO.bndw, STARTUP_VIDEO.fid, true); // calling setVOD with additional option, that causes to no clear startup state
		}
	}

	if(channel_off) {
		box.innerHTML = "<div style=\"font-size:15px; color: red; font-weight: bold; height: 348px\">Вещание на канале временно приостановлено</div>";
		return;
	}

	refillSchedule();
	options.onPluginLoadFailed = function() {
		options.plugin = null;
		options.onPluginLoadFailed = function() {
			$.ajax({
				url: '/html/no-plugin-'+(navigator.userAgent.search(/windows/i) == -1 ? 'other' : 'win')+'-'+($.browser.msie ? 'msie' : 'other')+'.html',
				context: box,
				success: function(data, status, rq) {
					var box = $("#tv_set");
					box.html(data);
				},
				type: 'GET',
				dataType: 'html'
			});
		};
		new VLCControl(box, options);
	};
	new WMPControl(box, options);

}

function BlinkingStatus(options) {
	this.running = false;
	this.status_box = document.getElementById(options.box);
	this.status_message = options.msg;
	this.timer = null;
	this.step = 0;
	this.interval = options.interval ? options.interval : 500;
	this.hide_boxes = options.hide_boxes ? options.hide_boxes : [];
}

BlinkingStatus.prototype.run = function () {
	var i;
	this.stop();
	for(i in this.hide_boxes) $('#'+this.hide_boxes[i]).hide();
	$(this.status_box).show();
	this.running = true;
	this.do_loop();
}

BlinkingStatus.prototype.stop = function () {
	this.running = false;
	if(this.timer) clearTimeout(this.timer);
	this.step = 0;
	this.timer = null;
	$(this.status_box).hide();// style.display = 'none';
	for(i in this.hide_boxes) $('#'+this.hide_boxes[i]).show();
}

BlinkingStatus.prototype.do_loop = function () {
	if(!this.running) return;
	this.status_box.innerHTML = this.status_message;
	var i;
	for(i = 0;i < this.step;i++) this.status_box.innerHTML += '.';
	this.step++;
	if(this.step >= 4) this.step = 0;
	var o = this;
	this.timer = setTimeout(function() { o.do_loop(o); }, this.interval);
}

function displaySchedule(schedule, dt) {
	var i;
	var t = "";
	$('#schedule').empty();
	if(!schedule) return;
	for(i=0;i < schedule.length;i++) {
		var d = new Date(parseInt(schedule[i].abstime));
		var h = d.getHours(); //if(h < 10) h = "0"+h;
		var m = d.getMinutes(); //if(m < 10) m = "0"+m;
		if(h < 10) h = "0"+h;
		if(m < 10) m = "0"+m;
		var ev = '', ds = '';
		t += make_schedule_item(schedule[i].abstime, schedule[i].title, schedule[i].descr, h, m, schedule[i].vod ? true : false, schedule[i].bid, schedule[i].fid);
	}
	$('#schedule').html(t);
}

function closeDatePicker() {
	$('#datepicker').hide();
}

function showNow() {
	$('#datepicker').hide();
	var d = new Date();
	$('#schedule_list').children(':first').html(d.getDate()+'&nbsp;'+__lang.monthNames2[d.getMonth()]);
	refillSchedule(d);
}

function showDatePicker(s) {
	var p = getAbsolutePos(s);
	$("#datepicker")[0].style.left = p.x;
	$("#datepicker")[0].style.top = p.y;
	$('#dp').datepicker('setDate', sc_date);
	$("#datepicker").show();
}

function play_vod(id) {
	$('#vod_'+id).children(':first').click();
}

/***************************************************************
user-changeable functions
***************************************************************/

$(function() {
// show datepicker reference
	var m = __lang.monthNames2[sc_date.getMonth()];
	if($('#schedule_list').length) {
//		$("body").append("<div id='datepicker' style='display: none'></div>");
		$("body").append("<div id='datepicker' style='display: none; position: absolute; background: white; border: 1px solid gray'>"+
		"<table cellpadding='0' cellspacing='0' border='0'><tr><td colspan='2'>"+
		"<div id='dp'></div>"+
		"</td></tr><td align=left style='padding: 5px'><input type='button' value='"+__lang.sch_now+"' onclick='showNow()' /></td>"+
		"<td align=right style='padding: 5px'><input type='button' value='"+__lang.sch_close+"' onclick='closeDatePicker()'/></td></tr></table>"+
		"</div>");
		$("#datepicker").draggable();
		$('#schedule_list').html("<span class='link' onmouseover='$(this).addClass(\"hover\")' onmouseout='$(this).removeClass(\"hover\")' id='cd' onclick='showDatePicker(this)'>"+sc_date.getDate()+'&nbsp;'+m+'</span>');

		$("#dp").datepicker({
			onSelect: function(t, dp) {
				$("#datepicker").hide();
				sc_date = $('#dp').datepicker('getDate');
				$($('#schedule_list')[0].firstChild).html(sc_date.getDate()+'&nbsp;'+__lang.monthNames2[sc_date.getMonth()]);
				var d = new Date();
				refillSchedule((d.getMonth() == sc_date.getMonth() && d.getDate() == sc_date.getDate() && d.getFullYear() == sc_date.getFullYear() ? 'current' : sc_date), true);
			},
//			showButtonPanel: true,
			defaultDate: sc_date,
			maxDate: '+1m',
			minDate: new Date(),
//			currentText: __lang.sch_now,
//			closeText: __lang.sch_close,
			monthNames: __lang.monthNames,
			monthNamesShort: __lang.monthNamesShort,
			dayNames: __lang.dayNames,
			dayNamesShort: __lang.dayNamesShort,
			dayNamesMin: __lang.dayNamesMin,
			prevText: __lang.sch_prev,
			nextText: __lang.sch_next,
			firstDay: 1
		});
	}
// a fake link behaviour
	$('span.link').mouseover(function() {
		$(this).addClass('hover');
	}).mouseout(function(){
		$(this).removeClass('hover');
	});
});

function switch_descr(id, s) {
	if(s) { // s = true; show description box
		$('.tv_descr').hide(); // hide allboxes
		$('.tv_descr_short').show(); // show all short desrc
		$('#descr_short_'+id).hide(); // hide this box short descr
		$('#descr_'+id).show(); // show this box full descr
		var e = $('#sch_'+id)[0];
		e.parentNode.scrollTop = e.offsetTop - e.parentNode.childNodes[0].offsetTop;
	} else { // s = false; hide full description
		$('#descr_'+id).hide();
		$('#descr_short_'+id).show();
	}
}

function make_banner_block(banners) {
	var i, t = '';
	for(i=0; i < banners.length;i++) t += '<div class="banner">'+banners[i]+"</div>";
	return t;
}

function make_schedule_item(abstime, title, descr, h, m, vod, bid, fid) {
	var html = "<div class=\"tv_item\" id=\"sch_"+abstime+"\">"+
		'<span class="tv_item_time">'+h+':'+m+"</span>"+(window.schedule_time_separator ? window.schedule_time_separator : '')+"<span class=\"tv_item_title\">";
	if(vod && window._vod_img) {
		html += "<img class='link' onclick='play_vod("+fid+")' src='"+_vod_img.src+
		"' hspace='3' width='"+_vod_img.wd+"' height='"+_vod_img.ht+"' title='"+_vod_img.title+"'/>";
	}
	html += title+"</span>";
	if(descr) {
		var sd = descr.replace(/<\/?[a-z]+[^>]*\/?>/i, '');
		if(sd.length > 64) {
			sd = sd.substr(0, 64)+"...";
			html += "<div class=\"tv_descr_short\" style=\"cursor: pointer;\" id=\"descr_short_"+abstime+"\" onclick=\"switch_descr("+abstime+", true)\">"+sd+"</div>";
			html += "<div class=\"tv_descr\" id=\"descr_"+abstime+"\" style=\"display: none; cursor: pointer;\" onclick=\"switch_descr("+abstime+", false)\">"+descr+"</div>";
		} else {
			html += "<div class=\"tv_descr_short\" >"+descr+"</div>";
		}
	}
	html += "</div>";
	return html;
}

$(function () { initTV(); });
