//------------------------------------------------------------------------------
//
// 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.
//
//------------------------------------------------------------------------------


function checkPositionForAnchorAndA(element, version)
{
	var parName = element.parent.tagName;
	switch (parName) {
	case "fieldset":
	case "p":
	case "strong":
	case "em":
	case "b":
	case "i":
	case "u":
	case "td":
	case "big":
	case "small":
		return 0;
	case "pre":
		if (version == "1.1")
			return c_parentWrong;
		else
			return 0;
	default:
		return c_parentWrong;
	}
}

function checkPositionForCard(element)
{
	var parName = element.parent.tagName;
	
	if (parName != "wml")
		return c_parentWrong;
	
	var prevElt = getPreviousElementName(element);

	if ((prevElt == "") || (prevElt == "card") || (prevElt == "template")) 
		return 0; // no errors
	else 
		return c_previousWrong;
}
	
function checkPositionForDo(element, version)
{
	var parName = element.parent.tagName;
	
	// do may occur anywhere in card, template,
	// fieldset, p, or pre
	switch (parName) {
	case "card":
	case "template":
	case "fieldset":
	case "p":
		return 0;
	case "pre":
		if (version == "1.1") 
			return c_parentWrong;
		else 
			return 0;
	default:
		return c_parentWrong;
	}
}

function checkPositionForFieldset(element)
{
	var parName = element.parent.tagName;
	if ((parName != "fieldset") && (parName != "p"))
		return c_positionWrong;
	return 0;
}

function checkPositionForImg(element)
{
	var parName = element.parent.tagName;
	switch (parName) {
	case "p":
	case "fieldset":
	case "anchor":
	case "a":
	case "td":
	case "em":
	case "strong":
	case "b":
	case "i":
	case "u":
	case "big":
	case "small":
		return 0;
	default:
		return c_parentWrong;
	}
}

function checkPositionForGoPrevAndRefresh(element) 
{
	var parName = element.parent.tagName;
	if ((parName != "do") && (parName != "onevent") &&
	    (parName != "anchor"))
		return c_parentWrong;
	
	if ((parName == "do") || (parName == "onevent")) {
		var prevElt = getPreviousElementName(element);
		if (prevElt != "") // must be first and only
			return c_previousWrong;
	}
	return 0;
}

function checkPositionForInputAndSelect(element, version) 
{
	var parName = element.parent.tagName;
	if ((version == "1.1") && (parName != "fieldset") && (parName != "p"))
		return c_parentWrong;
	else if ((parName != "fieldset") && (parName != "p") && (parName != "pre"))
		return c_parentWrong;		
	return 0;
}

function checkPositionForNoop(element) 
{
	var parName = element.parent.tagName;
	if ((parName != "do") && (parName != "onevent"))
		return c_parentWrong;
	
	var prevElt = getPreviousElementName(element);
	if (prevElt != "") // must be first and only
		return c_previousWrong;
		
	return 0;
}

function checkPositionForOnevent(element)
{
	var parName = element.parent.tagName;
	if ((parName != "card") && (parName != "template") &&
	    (parName != "option"))
	    	return c_parentWrong;
	    	
	if (parName == "card") {
		// check that it's first
		var prevElt = getPreviousElementName(element);
		if ((prevElt != "") && (prevElt != "onevent"))
			return c_previousWrong;
	}
	return 0;
}

function checkPositionForOption(element)
{
	var parName = element.parent.tagName;
	if ((parName != "select") && (parName != "optgroup"))
		return c_parentWrong;
	// can occur anywhere inside select or optgroup
	return 0;
}

function checkPositionForOptgroup(element)
{
	var parName = element.parent.tagName;
	if (parName != "select")
		return c_parentWrong;
	return 0;
}

function checkPositionForPostfield(element)
{
	var parName = element.parent.tagName;
	if (parName != "go")
		return c_parentWrong;
		
	return 0; // can occur anywhere inside go
}

function checkPositionForPre(element, version)
{
	if (version == "1.1")
		return c_versionWrong;
		
	var parName = element.parent.tagName;
	if (parName != "card")
		return c_parentWrong;
		
	// Onevent*, Timer?, (Do | P | Pre)*
	var prevElt = getPreviousElementName(element);
	switch (prevElt) {
	case "":
	case "do":
	case "p":
	case "pre":
	case "timer":
	case "onevent":
		return 0;
	default:
		return c_previousWrong;
	}
}

function checkPositionForSetvar(element)
{
	var parName = element.parent.tagName;
	if ((parName != "go") && (parName != "prev") &&
	    (parName != "refresh"))
		return c_parentWrong;
		
	// can go anywhere inside go, prev or refresh
	return 0;
}

function checkPositionForTemplate(element)
{
	var parName = element.parent.tagName;
	var i; // misc value
	
	//parents: wml					    
	if (parName != "wml") 
		return c_parentWrong;
		
	var prevElt = getPreviousElementName(element);
	if (prevElt == "") // first element
		return 0;
	else 
		return c_previousWrong;
				
}

function checkPositionForTimer(element)
{
	var parName = element.parent.tagName;
	if (parName != "card")
		return c_parentWrong;
	
	var prevElt = getPreviousElementName(element);
	if ((prevElt == "") || (prevElt == "onevent"))
		return 0;
	return c_previousWrong;
	
}


//----------------------------------------------------
// return empty string if element is first

function getPreviousElementName(theElt)
{
	var parEl = theElt.parent;
	for (var i = 0; i < parEl.subElements.length; i++) {
		if (parEl.subElements[i] == theElt) {
			if (i == 0) 
				return ""; // first element
		
			for (var j = i; j > 0; j--) {
				if (parEl.subElements[j-1].elementType != "comment")
					return parEl.subElements[j-1].tagName;
			}	
			return ""; // first element 
		}			
	}
	return; // error returns undefined
}