var cTooltipper = Class.create({
	initialize: function(cetli) {
		this.cetli = $(cetli);
		this.delta_x = 10;
		this.delta_y = 20;
		this.tartalmak = new Array(); // ebben cacheljuk az eddig letoltott tartalmakat
		this.images = new Array();
	},
	addImage: function(url, opj) {
		var a = new Object();
		a.url = url;
		a.opj = opj;
		this.images.push(a);
	},
	getImage: function(url) {
		for (gi=0; gi<this.images.length; gi++) {
			if (this.images[gi].url == url) {
				return this.images[gi].opj;
			}
		}
		return null;
	},
	getTartalom: function(url) {
		var moder = url.indexOf('&');
		var strp = url;
		if (moder != -1) {
			strp = url.substring(0, moder);
		}
		for (i=0; i<this.tartalmak.length; i++) {
			// ha mar benne van az url, es teljes az adat objektum, akkor visszaadjuk
			// ha csak url van benne, akkor azt preloadra raktak be, de meg nem jott meg
			if (this.tartalmak[i].url == strp && (!Object.isUndefined(this.tartalmak[i].template))) {
				return this.tartalmak[i];
			}
		}
		return null;
	},
	addTartalom: function(adat) {
		// ha mar benne van 1x, akkor azt irja felul
		for (ti=0; ti<this.tartalmak.length; ti++) {
			if (this.tartalmak[ti].url == adat.url) {
				this.tartalmak[ti] = adat;
				return;
			}
		}
		this.tartalmak.push(adat);
	},
	addTartalomJSON: function(tepp) {
		//tepp = tepp.replace(/\\"/g, '\\\"');
		tepp = tepp.replace(/\r\n/g, '');
		var adat = tepp.evalJSON();
		// ha mar benne van 1x, akkor azt irja felul
		for (ti=0; ti<this.tartalmak.length; ti++) {
			if (this.tartalmak[ti].url == adat.url) {
				this.tartalmak[ti] = adat;
				return;
			}
		}
		this.tartalmak.push(adat);
	},
	addUrl: function(url) {
		// ha mar benne van 1x, akkor azt irja felul
		for (ti=0; ti<this.tartalmak.length; ti++) {
			if (this.tartalmak[ti].url == url) {
				return;
			}
		}
		var tt = new Object();
		tt.url = url;
		this.tartalmak.push(tt);
	},
	preloadImages: function() {
		// TODO: rendezzuk elofordulas alapjan :)		
		for (i=0; i<this.tartalmak.length; i++) {
			if (!Object.isUndefined(this.tartalmak[i].preloadimages)) {
				var tomp = this.tartalmak[i].preloadimages;
				for (j=0; j<tomp.length; j++) {
					if (this.getImage(tomp[j]) == null) {
						var img = new Image();
						img.src = tomp[j];
						this.addImage(tomp[j], img);
					}
				}
			}
		}
	},
	preloadImagesFromTooltip: function(adat) {
		if (!Object.isUndefined(adat.preloadimages)) {
			var tomp = adat.preloadimages;
			for (j=0; j<tomp.length; j++) {
				if (this.getImage(tomp[j]) == null) {
					var img = new Image();
					img.src = tomp[j];
					this.addImage(tomp[j], img);
				}
			}
		}
	},
	preloadTartalmak: function() {
		// TODO: rendezzuk elofordulas alapjan :)		
		for (i=0; i<this.tartalmak.length; i++) {
			// ha nincs template attributuma, akkor azt preloadolni kell
			if (Object.isUndefined(this.tartalmak[i].template)) {
				this.preloadTartalom(this.tartalmak[i].url);
			} else {
				this.preloadImagesFromTooltip(this.tartalmak[i]);
			}
		}
	},
	preloadTartalom: function(url) {
		var keres = new Ajax.Request('/tooltip.php?'+url, {
		method:'get',
			onSuccess: function(transport){
				var ret = transport.responseText.evalJSON();
				tooltipper.parsePreTartalom(ret);
			}
		});
	},
	downloadTartalom: function(url, pos) {
		var sep = '/';
		if (location.host=='filmx.hu') {
			sep = '';
		}
		var keres = new Ajax.Request(sep + 'tooltip.php?'+url, {
			mousePos: pos,
			method:'get',
			onSuccess: function(transport){
				var ret = transport.responseText.evalJSON();
				tooltipper.parseTartalom(ret, transport.request.options.mousePos);
			}
		});
	},
	parseTartalom: function(adat, pos) {
		this.addTartalom(adat);
		this.drawTartalom(adat, pos);
	},
	parsePreTartalom: function(adat) {
		this.addTartalom(adat);
		this.preloadImagesFromTooltip(adat);
	},
	drawTartalom: function(adat, pos) {
		// ha az emtpy attrib true, akkor nincs tartalom, tehat ne mutassunk tooltippet
		templater.render(this.cetli, adat.template, adat, this.drawTartalomCallback.bind(this, pos));
	},
	drawTartalomCallback: function(pos) {
		if (this.cetli.innerHTML.length < 4) {
			this.cetli.innerHTML = 'Az adatbázis folyamatos feltöltés alatt.';
		}
		this.setStyle(pos.x, pos.y);
	},
	mouseOver: function(url, event) {
		// tartalmat kap
		// lekerjuk a tartalmat a szervertol
		this.cetli.innerHTML = '<img src="common/images/indicator.gif" style="height: 20px;" title="..." />';
		this.showTooltip();
		var pos = this.getCursorPosition(event);
		this.setStyle(pos.x, pos.y);
		var adat = this.getTartalom(url);
		if (adat == null) {
			this.downloadTartalom(url, pos);
		} else {
			// megjelenik
			this.drawTartalom(adat, pos);
		}
	},
	mouseOverText: function(text, event) {
		// megjelenik
		this.cetli.innerHTML = text;
		this.showTooltip();
		var pos = this.getCursorPosition(event);
		this.setStyle(pos.x, pos.y);
	},
	mouseOut: function() {
		this.hideTooltip();
	},
	hideTooltip: function() {
		new Element.hide(this.cetli);
		this.cetli.innerHTML = '';
	},
	setStyle: function(mouse_x, mouse_y) {
		// decide if wee need to switch sides for the tooltip
		var dimensions = Element.getDimensions( this.cetli );
		var element_width = dimensions.width;
		var element_height = dimensions.height;
		var offset = document.viewport.getScrollOffsets();
		
		var alignBottom = true;
		var alignRight = true; 
		if ((element_width + mouse_x -offset[0] - this.delta_x) >= this.getWindowWidth()){ // too big for X
			mouse_x -= (element_width - this.delta_x);
			alignRight = false;
		} else {
			mouse_x = mouse_x - this.delta_x;
		}
		
		if ( (mouse_y - offset[1] - element_height - this.delta_y) > 0 ){
			mouse_y -= (element_height + this.delta_y);
			alignBottom = false;
		} else {
			mouse_y += this.delta_y;
		}

		this.cetli.innerHTML += '<div style="position: absolute; ' + 
			(alignBottom ? 'top: -11px;' : 'bottom: -12px;') + ' ' + 
			(alignRight ? 'left: 8px;' : 'right: 8px;') + '"><img src="/common/grafika/tooltip-' + 
			(alignBottom ? 'top' : 'bottom') + '.png" title="" /></div>';
		
		Element.setStyle(this.cetli, { position:'absolute',
	 								  top:mouse_y + "px",
	 								  left:mouse_x + "px",
									  zIndex:110
	 								});
	},
	getCursorPosition: function(event) {
		if (!event) var event = window.event;
		Event.stop(event);
		// get Mouse position
		var mouse_x = Event.pointerX(event);
		var mouse_y = Event.pointerY(event);
		return {x: mouse_x, y: mouse_y};
	},
	showTooltip: function() {
		new Element.show(this.cetli);
	},
	getWindowHeight: function(){
		var innerHeight;
		if (navigator.appVersion.indexOf('MSIE')>0) {
			innerHeight = document.body.clientHeight;
		} else {
			innerHeight = window.innerHeight;
		}
		return innerHeight;	
	},
 
	getWindowWidth: function(){
		var innerWidth;
		if (navigator.appVersion.indexOf('MSIE')>0) {
			innerWidth = document.body.clientWidth;
		} else {
			innerWidth = window.innerWidth;
		}
		return innerWidth;	
	}

});

