/*
 * textOver v1.1
 *
 * nad zadanym elementem vytvori mouseover stejene velikosti
 * vzhled se ridi pres zadanou classu
 * velikost se zdedi od prekryveneho elementu
 * odkaz od nejblizsiho ktery je nadrizeny prekryvenemu elementu
 * text bere bud z paremetru nebo titlu prekryveneho elementu, oboji lze i s html
 *
 * pouziti:
 * new textOver('idPrekryvanehoElementu', 'classaPrekryvu', '<strong>Text pro vlozeni do prekryvu</strong><br />(s HTML)');
 *
 * v1.1
 * - maxOpacity
 * - odstraneni nastaveni velikosti child divu
 * - pavlovi sem delal jeste verzi s onclickem - najit a zakomponovat
 *
*/

var textOver = Class.create();

textOver.prototype = {
	//id - obrazku nad kterym se ma popisek obevit
	//oclass - classa textoveru
	initialize: function(id, oclass, maxOpacity, otext) {
		//v prototypu pocitej instance
		try {++instanceCount;}
		catch(e) {instanceCount = 1;}

		this.oElement = $(id);
		this.overClass = oclass;
		this.insertText = otext;
		this.instanceCount = instanceCount;
		this.maxOpacity = maxOpacity;
		this.createOver();
	},

	createOver: function() {
		//nacti pozici prekryvaneho elementu
		pos = Position.cumulativeOffset(this.oElement);

		//vytvor prekryv a vloz do nej text
		divOver = document.createElement('div');
		divOver.className = this.overClass;
		divOver.id = 'textover'+this.instanceCount;

		divText = document.createElement('div');
		itext = this.insertText;
		if(itext == '')itext = this.oElement.title;
		divText.innerHTML = itext;

		divOver.appendChild(divText);

		document.body.appendChild(divOver);

		//nacti instanci vlozeneho prekryvu v dokumentu
		insertedDiv = $('textover'+this.instanceCount);

		//pridej mu instanci elementu pro ktery byl vytvaren
		insertedDiv.covering = this.oElement;

		//napozicuj ho
		oPaddingTop = parseInt(Element.getStyle(this.oElement, 'padding-top'));
		oBorderTop = parseInt(Element.getStyle(this.oElement, 'border-top-width'));

		oPaddingLeft = parseInt(Element.getStyle(this.oElement, 'padding-left'));
		oBorderLeft = parseInt(Element.getStyle(this.oElement, 'border-left-width'));

		corT = oPaddingTop + oBorderTop;
		corL = oPaddingLeft + oBorderLeft;
		
		corT = 0;
		corL = 0;
		
		Element.setStyle(insertedDiv, {
			position: 'absolute',
			top: pos[1]+corT+'px',
			left: pos[0]+corL+'px',
			overflow: 'hidden',
			zIndex: 99
		});

		Element.setOpacity(insertedDiv, 0.0);

		//rezise na velikost prekryvaneho elementu
		oWidth = parseInt(Element.getStyle(this.oElement, 'width')) + 0;
		oHeight = parseInt(Element.getStyle(this.oElement, 'height')) + 0;

		Element.setStyle(insertedDiv, {width: oWidth+'px'});
		Element.setStyle(insertedDiv, {height: oHeight+'px'});

		//nastav childu stejnou vysku a sirku
		/*
		innerDiv = insertedDiv.down();

		Element.setStyle(innerDiv, {width: oWidth+'px'});
		Element.setStyle(innerDiv, {height: oHeight+'px'});
		*/

		//vytvor hitareu
		hitDiv = document.createElement('div');
		hitDiv.id = 'texthit'+this.instanceCount;

		document.body.appendChild(hitDiv);

		hitDiv = $('texthit'+this.instanceCount);

		Element.setStyle(hitDiv, {
			position: 'absolute',
			top: pos[1]+corT+'px',
			left: pos[0]+corL+'px',
			width: oWidth+'px',
			height: oHeight+'px',
			cursor: 'pointer',
			backgroundImage: 'url("blank.gif")',
			opacity: 0.5,
			zIndex: 100
		});

		//pridej ji instanci elementu pro ktery byl vytvaren
		hitDiv.covering = this.oElement;

		//pridej ji instanci elementu pro ktery byl vytvaren
		hitDiv.fader = insertedDiv;

		//pridej maximalni opacitu do ktery se ma fadovate
		hitDiv.maxOpacity = this.maxOpacity;

		//pokud prekryvany element uzavreny v odkazu, pridej ho hitaree na click
		Event.observe(hitDiv, 'click', function(event) {
			clickEle = Event.element(event);
			parents = Element.ancestors(clickEle.covering);

			while(ele = parents.shift()) {
				if(ele.tagName == 'A'){
					document.location.href = ele.href;
					break;
				}
			}
		});

		//zaregistruj skryvani a obevovani
		Event.observe(hitDiv, 'mouseover', function(event) {
			ele = Event.element(event);
			new Effect.Opacity(ele.fader, {
				duration: 0.3,
				from: 0.0,
				to: ele.maxOpacity
			});
		});

		Event.observe(hitDiv, 'mouseout', function(event) {
			ele = Event.element(event);
			new Effect.Opacity(ele.fader, {
				duration: 0.3,
				from: ele.maxOpacity,
				to: 0.0
			});
		});
	}
}