// -*- mode: javascript; coding: cp1251; -*-

var server_url = "/mtv/Scripts/now_play/NowPlayingProxy.php";
var server_timeout = 10000; // in milliseconds (1 second = 1000 milliseconds)
var error_refresh = 10000;

var req = CreateRequestObject();
var timeout_id;

document.write("<span class='track_info'>Трэк в эфире: </span>");
document.write("<span class='track_name' id='track_name'></span> ");
document.write("<span class='track_time' id='track_time'></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>");

RequestNowPlaying();


function RequestNowPlaying()
{
	if (req)
	{
		req.open("GET", server_url, true);
		// In IE always call open() first and only then set onreadystatechange
		req.onreadystatechange = ProcessReqChange;
		req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
		timeout_id = setTimeout( function(){ req.abort(); HandleError("Timeout error") },
								 server_timeout );
		req.send(null);
	}
}

function ProcessReqChange()
{
	try {
		if (4 == req.readyState) { // COMPLETE
			clearTimeout(timeout_id);
			if (200 == req.status) {
				SetNowPlaying();
			} else {
				HandleError("Couldn't obtain data: "
							 + req.statusText + " ("
							 + req.status + ")");
			}
		}
	}
	catch (e) {
		HandleError("Exception: " + e.description);
	}
}

function SetNowPlaying()
{
	var track_name, track_time, sec_total, sec_elapsed;
	var lines = req.responseText.split(/\n/);

	for (var i=0; i<lines.length; i++)
	{
		var r = lines[i].match(/^PLAYLIST FILENAME:.*[\\\/](.+)/);
		if (null != r) {
			track_name = decodeURIComponent(r[1]);
		}

		r = lines[i].match(/^SECONDS TOTAL:(\d+)/);
		if (null != r) {
			sec_total = r[1];
			track_time = GetTrackTime(sec_total);
		}

		r = lines[i].match(/^SECONDS ELAPSED:(\d+)/);
		if (null != r) {
			sec_elapsed = r[1];
		}
	}

	if (null != track_name && null != track_time)
	{
		document.getElementById('track_name').innerHTML = track_name;
		document.getElementById('track_time').innerHTML = track_time;
	}

	if (null != sec_elapsed && null != sec_total)
	{
		var sec_remained = sec_total - sec_elapsed;
		setTimeout( RequestNowPlaying, sec_remained*1000 );
	}
}

function GetTrackTime(sec)
{
	var hour = Math.floor(sec/3600);
	var min = Math.floor((sec%3600)/60);
	sec = sec%60;

	if (min < 10)
		min = '0'+min;
	if (sec < 10)
		sec = '0'+sec;

	return '(' + (hour>0 ? hour+':' : '') + min + ':' + sec + ')';
}

function HandleError(msg)
{
	document.getElementById('track_name').innerHTML = msg;
	document.getElementById('track_time').innerHTML = '';
	setTimeout( RequestNowPlaying, error_refresh );
}

function CreateRequestObject()
{
	var req;

	/*@cc_on
	@if (@_jscript_version >= 5)
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				req = false;
			}
		}
	@else
		req = false;
	@end
	@*/

	if (!req && typeof XMLHttpRequest != 'undefined') {
		try {
			req = new XMLHttpRequest();
		} catch (e) {
			req = false;
		}
	}

	return req;
}
 

