//------------------------------------------------------------------------------
//
// ADOBE SYSTEMS INCORPORATED
// Copyright 2000-2002 Adobe Systems Incorporated 
// All Rights Reserved
//
// NOTICE: Adobe permits you to use, modify, and distribute 
// this file in accordance with the terms of the Adobe license 
// agreement accompanying it. If you have received this file 
// from a source other than Adobe, then your use, modification, 
// or distribution of it requires the prior written permission 
// of Adobe.
//
//------------------------------------------------------------------------------


//----------------------------------------------------
// colorize
//
// Description:
//   add color to a custom box.

function colorize(box, draw, color)
{
	var width = box.width;	//  width of box
	draw.setColor(color);
	draw.fillRect (0, 0, width, box.topMargin);
	var y = box.height - box.bottomMargin		// move up from the bottom edge
	draw.fillRect (0, y , width, box.bottomMargin);
	draw.fillRect (0, 0 , box.leftMargin, y);
	draw.fillRect (width - box.rightMargin, 0 , box.rightMargin, box.height);
}	

//----------------------------------------------------
// draw functions:
//
// Description:
//   Called by drawBox().
//   Draw the custom box.
//   Draw red border if element in incorrect
//   position.

function drawA(box, draw)
{
	if (!document) {
		// there should always be a document
		// since the custom box is drawn in a document
		return;
	}
	var version = getWMLVersion(document);
	
	colorize(box, draw, "#FAF0E6");
	var borderColor = (checkPositionForAnchorAndA(box.element, version) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor);
	drawContentModel(box, draw, "(TEXT | Img)*");
	drawTitle(box, draw);
	aIcon.draw(1,1);
}

function drawAnchor(box, draw)
{
	if (!document) {
		// there should always be a document
		// since the custom box is drawn in a document
		return;
	}
	var version = getWMLVersion(document);
	
	colorize(box, draw, "#FAF0E6");
	var borderColor = (checkPositionForAnchorAndA(box.element, version) < 0) ? "red" : "black";
	drawBorder(box,draw, borderColor);
	drawTitle(box, draw);
	drawContentModel(box, draw, "(TEXT | Img | Go | Prev | Refresh)*");
	anchorIcon.draw(1,1);
}

function drawBorder(box,draw,color)
{
	w = box.width;
	h = box.height;				
	draw.setColor(color);
	draw.textFace(1);
	draw.penSize(1);
	draw.frameRect(1,1,w-2,h-2);				
}
			
function drawCard(box,draw){			 
	if (!document) {
		// need a document for getWMLVersion()
		// and there should always be a document
		// when drawing a custom box
		return;
	}   
	colorize(box, draw, "#CCFFFF");
	var borderColor = (checkPositionForCard(box.element) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor);	
	var version = getWMLVersion(document);
	if (version == "1.1")			
		drawContentModel(box, draw, "OnEvent*, Timer?, (Do | P)*");		
	else	
		drawContentModel(box, draw, "OnEvent*, Timer?, (Do | P | Pre)*");
	drawTitle(box, draw);
	cardIcon.draw(1,1)					
}	

// draw element name followed by content model
// model contains content model string
function drawContentModel(box, draw, model) 
{
	// get tag name
	tagName = box.element.tagName;

	// draw tag name
	w = box.width;
	h = box.height;				
	draw.textFace(0);
	draw.penSize(1);
	draw.textSize(11);
	xPos = 14;
	yPos = 1;
	draw.moveTo(xPos, yPos);
	draw.drawString(tagName);	

	// draw content model
	xPos = xPos + draw.stringWidth(tagName + " ");
	yPos += 3;
	draw.setColor("BlueViolet");
	draw.textFace(2);
	draw.textSize(8);
	draw.moveTo(xPos, yPos);
	draw.drawString(model);
}

function drawDeck(box,draw)
{
	if (box == null || draw == null)
		return;
	else
		colorize(box, draw, "#FFFFCC");
		drawBorder(box, draw, "black");	
		drawContentModel(box, draw, "Template?, Card+");							
		deckIcon.draw(1,1);
}	


function drawDo(box,draw)
{
	if (!document) {
		// there should always be a document
		// since the custom box is drawn in a document
		return;
	}
	var version = getWMLVersion(document);
	
	colorize(box, draw, "#FAF0E6");
	var borderColor = (checkPositionForDo(box.element, version) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor)
	drawContentModel(box, draw, "Go | Prev | Noop | Refresh")
	doIcon.draw(1,1)
}

function drawFieldset(box, draw)
{
	colorize(box, draw, "#FAF0E6");
	var borderColor = (checkPositionForFieldset(box.element) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor);
	drawTitle(box, draw);
	drawContentModel(box, draw, "(TEXT | a | Anchor | Do | Fieldset | Img | Input | Select)*");
	fieldsetIcon.draw(1,1);
}

function drawGo(box,draw){
	colorize(box, draw, "#FAF0E6");
	var borderColor = (checkPositionForGoPrevAndRefresh(box.element) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor)
	drawContentModel(box, draw, "(Postfield | Setvar)*")
	goIcon.draw(1,1)
}

function drawImg(box, draw)
{
	var borderColor = (checkPositionForImg(box.element) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor);
	imageIcon.draw(1,1);
}

function drawInput(box,draw)
{
	if (!document) {
		// there should always be a document
		// since the custom box is drawn in a document
		return;
	}
	var version = getWMLVersion(document);
	
	var borderColor = (checkPositionForInputAndSelect(box.element, version) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor)	
	if (box.element.title) {
		draw.moveTo(14,2);
		draw.drawString(box.element.title)
	}		
	if (box.element.size) {	
		var titleWidth = (box.element.title) ? draw.stringWidth(box.element.title) : 0;
		draw.frameRect(titleWidth + 18, 3, box.element.size * 7, 13);
	}
	inputIcon.draw(1,1);
}
	
function drawNoop(box,draw)
{
	var borderColor = (checkPositionForNoop(box.element) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor);
	noopIcon.draw(1,1);
}

function drawOnevent(box,draw)
{
	colorize(box, draw, "#FAF0E6");
	var borderColor = (checkPositionForOnevent(box.element) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor);
	drawContentModel(box, draw, "Go | Prev | Noop | Refresh");
	oneventIcon.draw(1,1);				
}

function drawOption(box,draw)
{
	colorize(box, draw, "#FAF0E6");
	var borderColor = (checkPositionForOption(box.element) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor);
	drawTitle(box, draw);
	drawContentModel(box, draw, "(TEXT | OnEvent)*");
	optionIcon.draw(1,1);
}
	
function drawOptiongroup(box, draw)
{
	colorize(box, draw, "#FAF0E6");
	var borderColor = (checkPositionForOptgroup(box.element) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor);
	drawTitle(box, draw);
	drawContentModel(box, draw, "(Option Group | Option)+");
	optgroupIcon.draw(1,1);
}

function drawPostfield(box,draw)
{
	var borderColor = (checkPositionForPostfield(box.element) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor);
	postfieldIcon.draw(1,1);
}

function drawPre(box,draw)
{
	if (!document) {
		// there should always be a document
		// since the custom box is drawn in a document
		return;
	}
	var version = getWMLVersion(document);
	
	colorize(box, draw, "#FAF0E6");
	var borderColor = (checkPositionForPre(box.element, version) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor);
	drawContentModel(box, draw, "(TEXT | A | Anchor | Do | Input | Select)*");
	preIcon.draw(1,1);
}


function drawPrev(box,draw)
{
	colorize(box, draw, "#FAF0E6");
	var borderColor = (checkPositionForGoPrevAndRefresh(box.element) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor);
	drawContentModel(box, draw, "(Setvar)*");
	prevIcon.draw(1,1);
}

			
function drawRefresh(box,draw){
	colorize(box, draw, "#FAF0E6");
	var borderColor = (checkPositionForGoPrevAndRefresh(box.element) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor);
	drawContentModel(box, draw, "(Setvar)*");
	refreshIcon.draw(1,1);
}

function drawSelect(box,draw)
{
	if (!document) {
		// there should always be a document
		// since the custom box is drawn in a document
		return;
	}
	var version = getWMLVersion(document);
	
	colorize(box, draw, "#FAF0E6");
	var borderColor = (checkPositionForInputAndSelect(box.element, version) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor);
	drawTitle(box, draw);
	drawContentModel(box, draw, "(Option Group | Option)+");
	selectIcon.draw(1,1);
}

function drawSetvar(box,draw)
{
	var borderColor = (checkPositionForSetvar(box.element) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor)
	setvarIcon.draw(1,1)
}

function drawTemplate(box,draw)
{
	colorize(box, draw, "#CCFFCC");
	var displayBlack = true;
	var borderColor = (checkPositionForTemplate(box.element) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor)	
	drawContentModel(box, draw, "(Do | Onevent)*")									
	templateIcon.draw(1,1)				
}

function drawTimer(box, draw)
{
	var borderColor = (checkPositionForTimer(box.element) < 0) ? "red" : "black";
	drawBorder(box, draw, borderColor);
	timerIcon.draw(1,1);
}


// draw title centered horizontally in box
function drawTitle(box, draw) 
{
	var x, y;
	if (box.element.title) {
		draw.setColor("black");
		draw.textFace(1); // bold
		draw.penSize(1);
		if (box.element.tagName == "card")
			draw.textSize(11);
		else 
			draw.textSize(9);
		x = (box.width - draw.stringWidth(box.element.title)) / 2;
		y = 20;
		draw.moveTo(x, y);
		if (box.element.title)
		draw.drawString(box.element.title);
	}
}