timetable = function() {
	var options = ({
		url: null,
		tableid: null,
		typestr: null,
		rows: 6,
		lang: 'eng',
		timeinterval: 5000,
		updateinterval: 500
	}, arguments[0] || { });
	
	$.extend(this, options);
	
	if(this.lang == 'eng') {
		if(this.typestr == 'o') {
			this.lang = {
				flight: "Flight",
				destination: "Destination",
				airline: "Airline",
				plane: "Plane"
			}
		} else {
			this.lang = {
				flight: "Flight",
				destination: "Origin",
				airline: "Airline",
				plane: "Plane"
			}
		}
	} else if(this.lang == 'rus') {
		if(this.typestr == 'o') {
			this.lang = {
				flight: "Рейс",
				destination: "Пункт назначения",
				airline: "Авиакомпания",
				plane: "Тип ВС"
			}
		} else {
			this.lang = {
				flight: "Рейс",
				destination: "Пункт отправления",
				airline: "Авиакомпания",
				plane: "Тип ВС"
			}
		}
	} else if(this.lang == 'kaz') {
		if(this.typestr == 'o') {
			this.lang = {
				flight: "Рейстің №",
				destination: "Ұшып  шығатын әуежай",
				airline: "Авиакомпания",
				plane: "Әуе кемесінің түрі"
			}
		} else {
			this.lang = {
				flight: "Рейстің №",
				destination: "Ұшып  шығатын әуежай",
				airline: "Авиакомпания",
				plane: "Әуе кемесінің түрі"
			}
		}
	}
	
	this.shift = 1;
	
	this.timer = null;
	this.active = true;
	this.length = 0;
	this.ajax = null;
	
	this.setup();
};

timetable.prototype = {
	setup: function() {
		this.setTimer();
	},
	
	checkState: function() {
		if($($("#"+this.tableid)[0].parentNode).css('display') == 'none') {
			this.active = false;
		} else {
			this.active = true;
		}
	},
	
	setTimer: function() {
		var parent = this;
		this.timer = setInterval(function() {
			parent.checkState();
			if(parent.active) {
				parent.getData();
			}
		}, this.timeinterval);
	},
	
	getData: function() {
		var parent = this;
		var dummy = [];
		try {
			this.ajax.abort();
		} catch(e) {  }
		this.ajax = $.getJSON(this.url, function(request) {
			parent.length = 0;
			for(var j=0;j<request.length;j++) {
				if(request[j].type == parent.typestr) {
					dummy.push(request[j]);
					parent.length++;
				}
			}
			parent.updateTable(dummy);
		});
	},
	
	updateTable: function(request) {
		var parent = this;
		var count = 0;
		var i = 0;
		var els = $("#"+this.tableid+" > tbody > tr > td");
		var popups = $("#"+this.tableid+" > tbody > tr > td > div");
		
		var timer = setInterval(function() {
			for(var j=0;j<parent.rows;j++) {
				if(count < parent.length) {
					$(els[i]).data('color', $(els[i]).css('color')).css('color', $(els[i].parentNode.parentNode.parentNode.parentNode).css('background-color'));
				}
				i++;
			}
			$(popups[count]).css({'top': '-10000px', 'position': 'absolute'});
			
			if(count > parent.shift-1) {
				if(count < parent.length+parent.shift) {
					parent.setData(request, els, popups, count-parent.shift, i-parent.rows*parent.shift-parent.rows);
				} else {
					clearInterval(timer);
				}
			}
			count++;
		}, this.updateinterval);
	},
	
	setData: function(request, els, popups, count, i) {
		if(count < this.length) {
			var popupdata = [];
			
			/*if(els[i].childNodes[1]) {
				$(els[i].childNodes[1].childNodes[1].childNodes).each(function() {
					if(this.tagName == "P") {
						popupdata.push(this.childNodes[1].innerHTML);
					}
				});
			}
			if(els[i].innerHTML.split("<")[0] != request[count].number || popupdata[0] != request[count].number || popupdata[1] != request[count].point || popupdata[2] != request[count].company || popupdata[3] != request[count].plane) {
				$(els[i]).html(request[count].number).append($('<div class="popup-info-container" style="display: none;">'+
					'<div class="popup-info">'+
						'<div/>'+
						'<p>'+this.lang.flight+': <span>'+request[count].number+'</span></p>'+
						'<p>'+this.lang.destination+': <span>'+request[count].point+'</span></p>'+
						'<p>'+this.lang.airline+': <span>'+request[count].company+'</span></p>'+
						'<p>'+this.lang.plane+': <span>'+request[count].plane+'</span></p>'+
						'<div class="clear"/>'+
					'</div>'+
				'</div>'));
			} else {
				$(popups[count]).css({'top': '0px', 'position': 'relative'});
			}*/
			$(els[i]).html(request[count].number).append($('<div class="popup-info-container" style="display: none;">'+
				'<div class="popup-info">'+
					'<div/>'+
					'<p>'+this.lang.flight+': <span>'+request[count].number+'</span></p>'+
					'<p>'+this.lang.destination+': <span>'+request[count].point+'</span></p>'+
					'<p>'+this.lang.airline+': <span>'+request[count].company+'</span></p>'+
					'<p>'+this.lang.plane+': <span>'+request[count].plane+'</span></p>'+
					'<div class="clear"/>'+
				'</div>'+
			'</div>'));
			$(els[i]).css({'color': $(els[i]).data('color')});				
			i++;
			
			if(els[i].innerHTML != request[count].point) {
				$(els[i]).html(request[count].point);
			}
			$(els[i]).css({'color': $(els[i]).data('color')});
			i++;
			
			if(els[i].innerHTML != request[count].date) {
				$(els[i]).html(request[count].date);
			}
			$(els[i]).css({'color': $(els[i]).data('color')});
			i++;
			
			if(els[i].innerHTML != request[count].plan) {
				$(els[i]).html(request[count].plan);
			}
			$(els[i]).css({'color': $(els[i]).data('color')});
			i++;
			
			if(els[i].innerHTML != request[count].fact) {
				$(els[i]).html(request[count].fact);
			}
			$(els[i]).css({'color': $(els[i]).data('color')});
			i++;
			
			if(els[i].innerHTML != request[count].statustext) {
				$(els[i]).html(request[count].statustext);
			}
			$(els[i]).css({'color': $(els[i]).data('color')});
			$(els[i]).removeClass().addClass(request[count].statuscss);
		}
	},
	
	start: function() {
		this.active = true;
	},
	
	stop: function() {
		this.active = false;
	}
};