/*
 * textOver v1.3
 *
 * 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
 * - pridany volani onclick a elementu uzavirajiciho prekryvany element
 *
 * v1.2
 * - respektuje u linku target="_blank"
 *
 * v1.3
 * - odstranenej bug s NaN v ie
 *
 *
*/

var textOver = Class.create();

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

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

	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'));

		if(isNaN(oPaddingTop))oPaddingTop = 0;
		if(isNaN(oBorderTop))oBorderTop = 0;

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

		if(isNaN(oPaddingLeft))oPaddingLeft = 0;
		if(isNaN(oBorderLeft))oBorderLeft = 0;

		corT = oPaddingTop + oBorderTop;
		corL = oPaddingLeft + oBorderLeft;

		if(isNaN(corT))corT = 0;
		if(isNaN(corL))corL = 0;

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

		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: 51
		});

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

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

		//instance ovladace
		hitDiv.relatedTextOver = this;

		//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);

			parents.unshift(clickEle.covering);

			while(ele = parents.shift()) {
				if(ele.tagName == 'A'){
					//clickEle.relatedTextOver.simulateClick(ele);
					if(ele.onclick) {
						ele.onclick();
					} else {
						if(ele.target == '_blank') {
							window.open(ele.href);
						} else {
							document.location.href = ele.href;
						}
					}
					break;
				}
			}

			//clickEle.relatedTextOver.simulateClick(clickEle.covering);
		});

		//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: 1.0
			});
		});

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

/*
Event.observe(window, 'load', function() {
	a = new textOver('overpic1', 'overtest', '<strong>aaa</strong>');
	b = new textOver('overpic2', 'overtest', '<strong>bbb</strong>');
});
*/
