AXSubtitleClass = function (div, path) {
	this.path = path;
	this.isVisible = false;
	this.ready = false;
	this.timer = null;
	this.currentSubtitleIndex = 0;
	this.currentBeginTime = null;
	this.currentEndTime = null;
	this.currentTime = 0;
	this.subtitlesPanel = $(div);
	this.subtitles_txt = $('subtitles-text');
	this.xmlDoc = null;
	this.firstOne = true;
	if(this.path != "" && this.subtitles_txt != null)
	{
		this.subtitles_txt.innerHTML = "";
		if(window.ActiveXObject)
		{
			this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			this.xmlDoc.onreadystatechange = this.readyStateChange.bindAsEventListener(this);
		}
		else if(document.implementation && document.implementation.createDocument)
		{
			this.xmlDoc = document.implementation.createDocument("", "doc", null);
			this.xmlDoc.onload = this.parse.bindAsEventListener(this);
		}
		//load
		try
		{
			this.xmlDoc.async = false;
			this.xmlDoc.load(this.path);
		}
		catch(e)
		{}
	}
};
AXSubtitleClass.prototype.readyStateChange = function() {
    if (this.xmlDoc.readyState == 4) 
    {
        this.parse();
    }
};
AXSubtitleClass.prototype.parse = function() {
    if(this.xmlDoc.documentElement != null)
	{
		this.subtitles = this.xmlDoc.documentElement.childNodes;
		//remove whitespace
		var t = new Array();
		for(var i=0; i<this.subtitles.length; i++)
		{
			if(this.subtitles[i].nodeType == 1)
			{
				t.push(this.subtitles[i]);
			}
		}
		this.subtitles = t;
		this.subtitle = new Object();
		this.currentText = "";
		this.lock = false;
		this.setVisible(true);
	}
};
AXSubtitleClass.prototype.setSubtitle = function(index) {
	this.subtitle.index = index;
	// 0 - beginTime
	// 1 - endTime
	this.subtitle.beginTime = Number(this.subtitles[index].attributes[0].value);
	this.subtitle.endTime = Number(this.subtitles[index].attributes[1].value);
	this.subtitle.text = this.subtitles[index].childNodes[0].nodeValue;
};
AXSubtitleClass.prototype.setPosition = function(value) {
	//alert(value);
	if (value != null && value >= 0 && !this.lock) 
	{
		this.lock = true;
		
		if(this.subtitle.index == null)
		{
			this.setSubtitle(0);
		}
		
		if (value>=this.subtitle.beginTime & value<=this.subtitle.endTime) 
		{
			//Show subtitle
			this.setText(this.subtitle.text);
		} 
		else 
		{
			this.setText("");
			//Find next subtitle
			if (value>this.subtitle.endTime) {
				//Search higher
				var j = this.subtitle.index+1;
				while (j<this.subtitles.length) {
					if (j == this.subtitles.length-1) {
						this.setSubtitle(j);
						break;
					}
					if (value>Number(this.subtitles[j-1].attributes[1].value) && value<Number(this.subtitles[j].attributes[0].value)) {
						//value in gap between subtitles
						this.setSubtitle(j);
						break;
					} else if (value>=Number(this.subtitles[j].attributes[0].value) && value<Number(this.subtitles[j].attributes[1].value)) {
						//value within subtitle j's interval
						this.setSubtitle(j);
						this.setText(this.subtitle.text);
						break;
					}
					j++;
				}
			} 
			else if (value<this.subtitle.beginTime && this.subtitle.index != 0) 
			{
				//Search lower
				var j = this.subtitle.index-1;
				while (j>-1) {
					if (j == 0) {
						this.setSubtitle(j);
						break;
					} else if (value<Number(this.subtitles[j].attributes[0].value) && value>Number(this.subtitles[j-1].attributes[1].value)) {
						//value in gap between subtitles
						this.setSubtitle(j);
						break;
					} else if (value>=Number(this.subtitles[j].attributes[0].value) && value<=Number(this.subtitles[j].attributes[1].value)) {
						//value within subtitle j's interval
						this.setSubtitle(j);
						this.setText(this.subtitle.text);
						break;
					}
					j--;
				}
			}
		}
		this.lock = false;
	}
};
AXSubtitleClass.prototype.setText = function(s)
{
	if(this.currentText != s)
	{
	    if(this.firstOne)
	    {
	        this.setVisible(true);
	        this.firstOne = false;
	    }
		this.currentText = s;
		this.subtitles_txt.innerHTML = "<strong>" + s + "</strong>";
	}
};
AXSubtitleClass.prototype.setVisible = function(show)
{
	this.isVisible = show;
	if(show)
	{
	    this.subtitlesPanel.style.display = "";
		this.subtitlesPanel.show();
		this.subtitles_txt.show();
	}
	else
	{
	    this.subtitlesPanel.hide();
		this.subtitles_txt.innerHTML = "";
	}
	this.firstOne = false;
};
