/**
 * Copyright (c) 2006-2014, JGraph Holdings Ltd
 */

//**********************************************************************************************************************************************************
//Cabinet
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxCabinetsCabinet(bounds, fill, stroke, strokewidth)
{
	mxShape.call(this);
	this.bounds = bounds;
	this.fill = fill;
	this.stroke = stroke;
	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};

/**
* Extends mxShape.
*/
mxUtils.extend(mxCabinetsCabinet, mxShape);

mxCabinetsCabinet.prototype.cst = {
		HAS_STAND : 'hasStand',
		CABINET : 'mxgraph.cabinets.cabinet'
};

mxCabinetsCabinet.prototype.customProperties = [
	{name: 'hasStand', dispName:'Has Stand', type:'bool', defVal:true}
];

/**
* Function: paintVertexShape
* 
* Paints the vertex shape.
*/
mxCabinetsCabinet.prototype.paintVertexShape = function(c, x, y, w, h)
{
	c.translate(x, y);
	this.background(c, 0, 0, w, h);
	c.setShadow(false);
	this.foreground(c, 0, 0, w, h);
};

mxCabinetsCabinet.prototype.background = function(c, x, y, w, h)
{
	c.rect(0, 0, w, h);
	c.fillAndStroke();
};

mxCabinetsCabinet.prototype.foreground = function(c, x, y, w, h)
{
	var wallTh = 15;
	c.rect(0, 0, w, wallTh);
	c.stroke();
	
	c.begin();
	c.moveTo(wallTh, wallTh);
	c.lineTo(wallTh, h);
	c.moveTo(w - wallTh, wallTh);
	c.lineTo(w - wallTh, h);
	c.stroke();
	
	var hasStand = mxUtils.getValue(this.style, mxCabinetsCabinet.prototype.cst.HAS_STAND, '1');
	
	if (hasStand === 1)
	{
		c.rect(0, h - 40, w, 40);
		c.fillAndStroke();
	}
	else
	{
		c.rect(0, h - wallTh, w, wallTh);
		c.fillAndStroke();
	};
};

mxCellRenderer.registerShape(mxCabinetsCabinet.prototype.cst.CABINET, mxCabinetsCabinet);

//**********************************************************************************************************************************************************
//Cover Plate
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxCabinetsCoverPlate(bounds, fill, stroke, strokewidth)
{
	mxShape.call(this);
	this.bounds = bounds;
	this.fill = fill;
	this.stroke = stroke;
	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};

/**
* Extends mxShape.
*/
mxUtils.extend(mxCabinetsCoverPlate, mxShape);

mxCabinetsCoverPlate.prototype.cst = {
		COVER_PLATE : 'mxgraph.cabinets.coverPlate'
};



/**
* Function: paintVertexShape
* 
* Paints the vertex shape.
*/
mxCabinetsCoverPlate.prototype.paintVertexShape = function(c, x, y, w, h)
{
	c.translate(x, y);
	this.background(c, 0, 0, w, h);
	c.setShadow(false);
	this.foreground(c, 0, 0, w, h);
};

mxCabinetsCoverPlate.prototype.background = function(c, x, y, w, h)
{
	c.begin();
	c.moveTo(0, 0);
	c.lineTo(w, 0);
	c.lineTo(w, h);
	c.lineTo(0, h);
	c.close();
	c.moveTo(10, h * 0.5 - 12.5);
	c.lineTo(10, h * 0.5 + 12.5);
	c.lineTo(w - 10, h * 0.5 + 12.5);
	c.lineTo(w - 10, h * 0.5 - 12.5);
	c.close();
	c.fillAndStroke();
};

mxCabinetsCoverPlate.prototype.foreground = function(c, x, y, w, h)
{
};

mxCellRenderer.registerShape(mxCabinetsCoverPlate.prototype.cst.COVER_PLATE, mxCabinetsCoverPlate);

//**********************************************************************************************************************************************************
//Dimension
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxCabinetsDimension(bounds, fill, stroke, strokewidth)
{
	mxShape.call(this);
	this.bounds = bounds;
	this.fill = fill;
	this.stroke = stroke;
	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};

/**
* Extends mxShape.
*/
mxUtils.extend(mxCabinetsDimension, mxShape);

mxCabinetsDimension.prototype.cst = {
		DIMENSION : 'mxgraph.cabinets.dimension'
};



/**
* Function: paintVertexShape
* 
* Paints the vertex shape.
*/
mxCabinetsDimension.prototype.paintVertexShape = function(c, x, y, w, h)
{
	c.translate(x, y);
	this.background(c, x, y, w, h);
};

mxCabinetsDimension.prototype.background = function(c, x, y, w, h)
{
	c.begin();
	c.moveTo(0, 20);
	c.lineTo(w, 20);
	c.moveTo(10, 15);
	c.lineTo(0, 20);
	c.lineTo(10, 25);
	c.moveTo(w - 10, 15);
	c.lineTo(w, 20);
	c.lineTo(w - 10, 25);
	c.moveTo(0, 15);
	c.lineTo(0, h);
	c.moveTo(w, 15);
	c.lineTo(w, h);
	c.stroke();
};

mxCellRenderer.registerShape(mxCabinetsDimension.prototype.cst.DIMENSION, mxCabinetsDimension);

//**********************************************************************************************************************************************************
//Dimension Bottom
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxCabinetsDimensionBottom(bounds, fill, stroke, strokewidth)
{
	mxShape.call(this);
	this.bounds = bounds;
	this.fill = fill;
	this.stroke = stroke;
	this.strokewidth = (strokewidth != null) ? strokewidth : 1;
};

/**
* Extends mxShape.
*/
mxUtils.extend(mxCabinetsDimensionBottom, mxShape);

mxCabinetsDimensionBottom.prototype.cst = {
		DIMENSION : 'mxgraph.cabinets.dimensionBottom'
};



/**
* Function: paintVertexShape
* 
* Paints the vertex shape.
*/
mxCabinetsDimensionBottom.prototype.paintVertexShape = function(c, x, y, w, h)
{
	c.translate(x, y);
	this.background(c, x, y, w, h);
};

mxCabinetsDimensionBottom.prototype.background = function(c, x, y, w, h)
{
	c.begin();
	c.moveTo(0, h - 20);
	c.lineTo(w, h - 20);
	c.moveTo(10, h - 15);
	c.lineTo(0, h - 20);
	c.lineTo(10, h - 25);
	c.moveTo(w - 10, h - 15);
	c.lineTo(w, h - 20);
	c.lineTo(w - 10, h - 25);
	c.moveTo(0, h - 15);
	c.lineTo(0, 0);
	c.moveTo(w, h - 15);
	c.lineTo(w, 0);
	c.stroke();
};

mxCellRenderer.registerShape(mxCabinetsDimensionBottom.prototype.cst.DIMENSION, mxCabinetsDimensionBottom);

