/**
* Package DHTML 0.1 - 22/05/2006
* ------------------------------------
* Contient les classes suivantes :
*	- clItem
*	- clLayer
*	- clInput
* 	- clButton
*/

/**
* Class Button
* ------------------------------------
* @author Fabien Daniel
* @date 02/05/2006
*/

function clButton(idButton, aValue) {
	this.parent = clInput;
	this.parent(idButton);

	this.setType("button");
	this.setValue(aValue);
}

/**
* Class Input
* ------------------------------------
* @author Fabien Daniel
* @date 02/05/2006
*/
function clInput(idInput) {
	this.parent = clItem;
	this.parent(idInput);

	// Methodes
	this.setValue = mSetValue;
	this.setType = mSetType;

	// Création d'un élément input
	this.anItem = document.createElement("input");
}

/**
* Définition de la valeur de l'input
* @param aValue valeur à parametrer
*/
function mSetValue(aValue) {
	this.anItem.setAttribute("value", aValue, true);
}

/**
* Définition du type
* @param aType type d'input
*/
function mSetType(aType) {
	this.anItem.setAttribute("type", aType, true);
}

/**
* Classe de gestion des items
*------------------------------------------
* @author Fabien Daniel
* @date 28/04/2006
*/

function clItem(id) {

	// Attributs
	this.anItem;
	this.id = id;

	// Methodes
	this.getId = mGetId;
	this.setId = mSetId;
	this.setClassName = mSetClassName;
	this.setStyle = mSetStyle;
	this.setBorder = mSetBorder;
	this.setVisible = mSetVisible;
	this.getBackgroundColor = mGetBackgroundColor;
	this.setBackgroundColor = mSetBackgroundColor;
	this.setFontColor = mSetFontColor;
	this.setDisplay = mSetDisplay;

}


/**
* Obtenir l'identifiant de l'objet
* @return identifiant
*/
function mGetId() {
	return this.anItem.getAttribute("id");
}


/**
* Parametrage de l'identifiant d'un calque
* @param id identifiant du calque
*/
function mSetId(id) {
	this.anItem.setAttribute("id", id, true);
}


/**
* Parametrage du nom de la classe
* @className classe à appliquer
*/
function mSetClassName(className) {
	if(document.all && document.getElementById) {
		// Internet Explorer
		this.anItem.setAttribute("className", className, true);
	} else {
		// DOM
		this.anItem.setAttribute("class", className, true);
	}
}


/**
* Parametrage de la visibilité de l'item sur la page
* @param isVisible booleen de rendu de visibilité
*/
function mSetVisible(isVisible) {
	if(isVisible) {
		this.anItem.style["visibility"] = "visible";
	 } else {
		 this.anItem.style["visibility"] = "hidden";
	 }
}

/**
* Parametrage de l'affichage de l'item sur la page
* @param isDisplay booleen de rendu d'affichage
*/
function mSetDisplay(isDisplay) {
	if(isDisplay) {
		this.anItem.style["display"] = "block";
	 } else {
		 this.anItem.style["display"] = "none";
	 }
}


/**
* Parametrage du style du calque
* @param style bloc de style css appliqué à l'item
*/
function mSetStyle(style) {
	if(document.all && document.getElementById) {
		// Internet Explorer
		this.anItem.style.cssText = style;
	} else {
		// DOM
		this.anItem.setAttribute("style", style, true);
	}
}

/**
* Parametrage de la bordure de l'item
* @param aBorder bloc de style css definissant la bordure
*/
function mSetBorder(aBorder) {
	this.anItem.style.border = aBorder;
}


/**
*
*/
function mSetBackgroundColor(color) {
	this.anItem.style.backgroundColor = color;
}

/**
*
*/
function mGetBackgroundColor() {
	return this.anItem.style.backgroundColor;
}

/**
*
*/
function mSetFontColor(color) {
	this.anItem.style.color = color;
}


/**
* Class Layer
* ------------------------------------
* @author Fabien Daniel
* @date 21/04/2006
*/

function clLayer(idLayer, isNew) {

	this.parent = clItem;
	this.parent(idLayer);

	// Attribut
	this.dom = (document.getElementById && !document.all)? true:false;
	this.ie = (document.all)? true:false;

	// Méthodes
	this.initialize = mInitialisation;
	this.moveTo = mMoveTo;

	// Accesseurs en lecture
	this.getTop = mGetTop;
	this.getOffsetTop = mGetOffsetTop;
	this.getLeft = mGetLeft;
	this.getOffsetLeft = mGetOffsetLeft;
	this.getWidth = mGetWidth;
	this.getOffsetWidth = mGetOffsetWidth;
	this.getHeight = mGetHeight;
	this.getOffsetHeight = mGetOffsetHeight;
	this.getCenter = mGetCenter;

	// Accesseurs en ecriture
	this.setWidth = mSetWidth;
	this.setHeight = mSetHeight;
	this.setTop = mSetTop;
	this.setLeft = mSetLeft;

	// Constructeur de l'objet
	if(isNew) {
		// Création
		this.anItem = document.createElement("div");
		this.setId(idLayer);
	} else {
		if(this.ie) {
			this.anItem = document.all[idLayer];
		} else if(this.dom) {
			this.anItem = document.getElementById(idLayer);
		}
	}

}

/**
* Initialisation du Layer en utilisation DOM
* @param className nom de la class css utilisé pour ce calque
* @param iWidth largeur du calque en pixel
* @param iHeight hauteur du calque en pixel
* @param iTop marge du haut en pixel
* @param iLeft marge de gauche en pixel
*/
function mInitialisation(className, iWidth, iHeight, iTop, iLeft) {
	this.setClassName(className);
	sStyle = (iWidth != -1) ? "width:"+iWidth+"px; " : "";
	sStyle+= (iHeight != -1)? "height:"+iHeight+"px; " : "";
	sStyle+= (iLeft != -1)  ? "left:"+iLeft+"px; " : "";
	sStyle+= (iTop != -1)   ? "top:"+iTop+"px; " : "";

	this.setStyle(sStyle);
}

/**
* On positionne le coin haut gauche du calque en (x,y)
* @param x position du calque en abscisse
* @param y position du calque en ordonnée
*/
function mMoveTo(x, y) {
	this.setLeft(x);
	this.setTop(y);
}


/**
* Obtenir la largeur du calque
* @return width largeur du calque en pixel
*/
function mGetWidth(){
	if(this.anItem.style["width"]){
		return parseInt(this.anItem.style["width"]);
	} else {
		return 0;
	}
}

/**
* Parametrage de la largeur
* @param largeur largeur du calque en pixel
*/
function mSetWidth(largeur) {
	this.anItem.style["width"] = parseInt(largeur)+"px";
}

/**
* Obtenir la hauteur du calque
* @return height hauteur du calque
*/
function mGetHeight(){
	if(this.anItem.style["height"]){
		return parseInt(this.anItem.style["height"]);
	} else {
		return 0;
	}
}

/**
* Retourne la largeur effective du calque
* @return offsetWidth largeur effective du calque
*/
function mGetOffsetWidth() {
	return this.anItem.offsetWidth;
}

/**
* Parametrage de la hauteur
* @param hauteur hauteur du calque en pixel
*/
function mSetHeight(hauteur) {
	this.anItem.style["height"] = parseInt(hauteur)+"px";
}

/**
* Retourne la hauteur effective du calque
* @return offsetHeight hauteur effective du calque
*/
function mGetOffsetHeight() {
	return this.anItem.offsetHeight;
}

/**
* Retourne la marge haute du calque
* @return top marge haute du calque en pixel
*/
function mGetTop() {
	if(this.anItem.style["top"]){
		return parseInt(this.anItem.style["top"]);
	} else {
		return 0;
	}
}

/**
* Retourne la marge haute effective du calque
* @return top marge haute effective du calque en pixel
*/
function mGetOffsetTop() {
	return parseInt(this.anItem.offsetTop);
}

/**
* Parametrage de la marge du haut
* @param margeHaut marge du haut du calque en pixel
*/
function mSetTop(margeHaut) {
	this.anItem.style["top"] = parseInt(margeHaut)+"px";
}

/**
* Obtenir la marge gauche du calque
* @return left taille en pixel de la marge gauche du calque
*/
function mGetLeft() {
	if(this.anItem.style["left"]) {
		return parseInt(this.anItem.style["left"]);
	} else {
		return 0;
	}
}

/**
* Obtenir la marge gauche effective du calque
* @return offsetHeight taille effective en pixel de la marge gauche
*/
function mGetOffsetLeft() {
	return parseInt(this.anItem.offsetLeft);
}

/**
* Parametrage de la marge gauche
* @param margeGauche marge gauche du calque en pixel
*/
function mSetLeft(margeGauche) {
	this.anItem.style["left"] = margeGauche+"px";
}


/**
* Retourne les coordonnées du centre du calque
* @return coord retourne les coordonnees du centre du calque
*/
function mGetCenter() {
	var aCenter = new clCoord();
	aCenter.x = parseInt(this.getLeft()) + parseInt(parseInt(this.getWidth()) / 2);
	aCenter.y = parseInt(this.getTop()) + parseInt(parseInt(this.getHeight()) / 2);
	return aCenter;
}