/**
 * @fileoverview Pozwala na wyswietlenie wypozycjonowanej i
 * przesuwanej warstwy (zastepuje pop-upa)
 *
 * @used IE, FF, Opera
 *
 * @example
 *		var dl = new DisplayLayer('warstwa1');
 *		dl.setStyle('top', 225);
 *		dl.setStyle('width', 412);
 *		dl.setStyle('height', 500);
 *		dl.setStyle('filter', 'progid:DXImageTransform.Microsoft.Alpha(style=0, opacity=90)');
 *
 *		//dl.align = 'left';
 *		//dl.width = 780;
 *		dl.offset = 17;
 *		dl.layerMoving(1000);
 *		dl.layerPosition(1000);
 *		dl.show('<table width="412" height="377" cellspcing="0" cellpadding="5"><tr>' +
 *		'<td align="right" valign="top" class="okno" style="background-image: ' +
 *		'url(http://www.uw.lodz.pl/img/winieta/banery/kartka.gif);">' +
 *		'<a href="{$event}" title="{$description}"><img src="img/winieta/close.gif"' +
 *		' border="0"></a></td></tr></table>');
 *
 * @version 1.1 2005/11/30
 */

Import('myLib/util/Browser.js');
Import('myLib/events/CreatorEvents.js');
Import('myLib/native/Array.js');
//Import('other/MovingLayer.js');

/**
 * @constructor
 * @param	String	Id elementu strony.
 * @param	Boolean	Optional, default: true. Okresla czy warstwa ma sie wyswietlac.
 */
function DisplayLayer(id, isDisplay){ //System.subClass();
	this.id = System.getValue(id, DisplayLayer.defaultName);
	this.isDisplay = System.getValue(isDisplay, true);
	//this.element = document.getElementById(id);

	this.style = new Array();
	this.style['visibility'] = 'visible';
	this.style['left'] = 50;
	this.style['top'] = 50;
	this.style['z-index'] = 1000;
	this.style['cursor'] = 'arrow';

	this.align = 'left';
	this.width = 0;
	this.offset = 0;

	this.isMoving = false;
	this.eventDelay = 0;
	this.closeDescription = 'Zamknij okno';
};

DisplayLayer.defaultName = 'warstwa1';

/**
 * @public
 * @param	String
 * @return	void
 */
DisplayLayer.close = function(id){
	var id = System.getValue(id, DisplayLayer.defaultName);
	var layer = document.getElementById(id);
	DisplayLayer.hidden(layer);
};

/**
 * @public
 * @param	String
 * @param	String
 * @return	void
 */
DisplayLayer.prototype.setStyle = function(key, value){
	this.style[key] = value;
};

/**
 * @public
 * @param	String
 * @return	String
 */
DisplayLayer.prototype.getStyle = function(key){
	return System.getValue(this.style[key]);
};

/**
 * @public
 * @param	String
 * @return	void
 */
DisplayLayer.prototype.show = function(content){
	if(!this.isDisplay){
		return;
	}

	var style = Array.getString(this.style, ' {key}: {value};');

	content = content.replace('{event}', 'javascript:DisplayLayer.hidden(' + this.id + ');');
	content = content.replace('{description}', this.closeDescription);

	if(this.isMoving){
		content = '<div onselectstart="return false;" onmousedown="setMovingLayer(\'' + this.id + '\');">' + content + '</div>';
	}

	document.write('<div id="' + this.id + '" style="position: absolute;' + style + '">' + content + '</div>');
};

/**
 * @public
 * @param	Number	Opcjonalny.
 * @return	void
 */
DisplayLayer.prototype.layerMoving = function(delay){
	if(!this.isDisplay){
		return;
	}

	var delay = System.getValue(delay, this.eventDelay);

	//if(Browser.id == 'msie' || Browser.id == 'opera'){
	if(Browser.type & 6){
		this.isMoving = true;
	}

	setTimeout('new CreatorEvents(window.document.body).append(\'mouseup\', \'clearMovingLayer();\')', delay);
	setTimeout('new CreatorEvents(window.document.body).append(\'mousemove\', \'mouseMoving(null);\')', delay);
};

/**
 * @public
 * @param	Number	Opcjonalny.
 * @return	void
 */
DisplayLayer.prototype.layerPosition = function(delay){
	if(!this.isDisplay){
		return;
	}

	var delay = System.getValue(delay, this.eventDelay);
	this.style['visibility'] = 'hidden';

	if(Browser.type & 2)
		var w = 'window.document.body';
	else
		var w = 'window';

	setTimeout('new CreatorEvents(' + w + ').append(\'load\', \'DisplayLayer.setPosition(' + this.id + ', \\\'' + this.align + '\\\', ' + this.width + ', ' + this.offset + ');\')', 0);
	setTimeout('new CreatorEvents(window).append(\'resize\', \'DisplayLayer.setPosition(' + this.id + ', \\\'' + this.align + '\\\', ' + this.width + ', ' + this.offset + ');\')', delay);
};

/**
 * @public
 * @param	Object
 * @return	void
 */
DisplayLayer.hidden = function(layer){
	layer.style.visibility = 'hidden';
};

/**
 * @public
 * @param	Object
 * @return	void
 */
DisplayLayer.visible = function(layer){
	layer.style.visibility = 'visible';
};

/*
//--- public static
DisplayLayer.hidden = function(id){
	DisplayLayer.changeLayer(id, 'hidden');
}

//--- public static
DisplayLayer.visible = function(id){
	DisplayLayer.changeVisibility(id, 'visible');
}

//--- public static
DisplayLayer.changeVisibility = function(id, condition){
	var layer = document.getElementById(id);
	layer.style.visibility = condition;
}
*/

/**
 * @public
 * @return	void
 */
DisplayLayer.setPosition = function(layer, align, width, offset){
	var layer = System.getElement(layer);
	var w = parseInt(layer.style.width);
	var left = 0;

	if(width < w){
		width = w;
	}

	if(document.body.clientWidth > width){
		if(align == 'left'){
			left = (document.body.clientWidth / 2) - (width / 2) + offset;
		}
		if(align == 'center'){
			left = (document.body.clientWidth / 2) - (w / 2) + offset;
		}
		if(align == 'right'){
			left = (document.body.clientWidth / 2) + (width / 2) - (w) + offset;
		}
	}

	layer.style.left = left;
	layer.style.visibility = 'visible';
};

/**
 * @public
 * @return	void
 */
DisplayLayer.setPositionX = function(layer, align, width, offset){
	var clientWidth = document.body.clientWidth;
	var widthLayer = parseInt(layer.style.width);
	var left = DisplayLayer.getPosition(clientWidth, widthLayer, align, width, offset);
	layer.style.left = Math.floor(left);
};

/**
 * @public
 * @return	void
 */
DisplayLayer.setPositionY = function(layer, align, height, offset){
	var clientHeight = document.body.clientHeight;
	var heightLayer = parseInt(layer.style.height);
	var top = DisplayLayer.getPosition(clientHeight, heightLayer, align, height, offset);
	layer.style.top = Math.floor(top);
};

/**
 * @public
 * @return	Number
 */
DisplayLayer.getPosition = function(windowSize, layerSize, align, size, offset){
	var position = 0;

	if(size < layerSize){
		size = layerSize;
	}

	if(windowSize > size){
		if(align == 'left' || align == 'top'){
			position = (windowSize / 2) - (size / 2) + offset;
		}
		if(align == 'center'){
			position = (windowSize / 2) - (layerSize / 2) + offset;
		}
		if(align == 'right' || align == 'bottom'){
			position = (windowSize / 2) + (size / 2) - (layerSize) + offset;
		}
	}
	else{
		position = offset;
	}

	return position;
};