function CheckInputElement(node)
{
    var ret = true;
    if ( node.onchange != null)
    {
	if (node.fireEvent("onchange") == false)
	{
		ret = false;
//							alert("1");
	}
//							alert("val"+formulaire.Errors.value);
	if (formulaire.Errors.value == "false")
	{
		ret = false;
//							alert("2");
	}
	formulaire.Errors.value = "";
    }
    return ret;
}

function Rename( node, id)
{
    // TextNode
    if (node.nodeType == 3)
	return true;
    if (node.tagName == "INPUT")
    {
	//alert(node.name);
	var nm = node.outerHTML;
	nm = nm.replace("_0_","_" + id + "_");
	node.outerHTML = nm;
	alert(node.outerHTML);
	return true;
    }
    if (node.tagName == "SCRIPT")
    {
	//alert(node.innerText);
	return true;
    }
    // alert(node.tagName);
    var aNodeList = node.childNodes;
    if (aNodeList!=null) 
    {
	//alert(aNodeList.length);
	var i;
	for (i = 0; i < aNodeList.length; i++) 
	{
	    var sunb = aNodeList.item(i);
	    if (sunb.tagName == "INPUT")
	    {
		//alert(node.name);
		var nm = sunb.outerHTML;
		var newid = "_" + id + "_";
		nm = nm.replace("_0_",newid);
		sunb.outerHTML = nm;
// fait une erreur				aNodeList.item(i) = document.createElement(nm);
//				alert(aNodeList.item(i).outerHTML);
	    }
	    else			
		Rename( sunb, id);
	}
    }
    return true;
}

function CheckNode( node)
{
    // TextNode
    if (node.nodeType == 3)
	return true;
    if (node.tagName == "INPUT")
    {
	CheckInputElement( node);
	return true;
    }
    if (node.tagName == "SCRIPT")
    {
	//alert(node.innerText);
	return true;
    }
    // alert(node.tagName);
    var aNodeList = node.childNodes;
    if (aNodeList!=null) 
    {
	var i;
	for (i = 0; i < aNodeList.length; i++) 
	{
	    var sunb = aNodeList.item(i);
	    CheckNode( sunb);
	}
    }
    return true;
}

function AddBranch( node, header)
{
    var oCloneNode = node.rows( header).cloneNode(true);
    Rename( oCloneNode, node.rows.length - header);
    oCloneNode.style.display="inline";
    // after appendChild oCloneNode is duplicated
    node.tBodies(0).appendChild( oCloneNode);
//	CheckNode( node); already checked at design time
//    var str = node.rows( header).outerHTML;
//	str = str.replace("_0_","_" + (node.rows.length-1) + "_");
//	alert(str);
//    var oCloneNode = document.createElement(str);
    return true;
}

function DeleteBranch( header)
{
    if (header == 0)
    {
	var oNode = window.event.srcElement.parentElement.parentElement;
	var oCell = oNode.cells(1);
	var delCell = oNode.cells(0);
	if (oCell.style.display=="none")
	{
	    oCell.style.display="inline";
//			delCell.rowSpan = 1;
	}
	else
	{
	    oCell.style.display="none";
//			delCell.rowSpan = 2;
	}
    }
    else
    {
	var oNode = window.event.srcElement.parentElement.parentElement;
	var delCell = oNode.cells(0);
	var aNodeList = oNode.childNodes;
	if (aNodeList!=null) 
	{
	    //alert(aNodeList.length);
	    var i;
	    for (i = 1; i < aNodeList.length ; i++) {
		var oCell = aNodeList.item(i);
		if (oCell.style.display=="none")
		{
		    oCell.style.display="inline";
//					delCell.rowSpan = 1;
		}
		else
		{
		    oCell.style.display="none";
//					delCell.rowSpan = aNodeList.length;
		}
	    }
	}
    }
    return true;
}

function CollectData(form1)
{
    var XMLStr;
    XMLStr = "<Basket";
    var elements = new Array();
    var CurElement = "Basket";
    var CurPath = "";
    var CurIsOpen = true;
    var eltid = 0;
    var sp= String.fromCharCode(32);
    var cr= String.fromCharCode(13,10);
    for (i = 0; i < form1.elements.length; i++)
    {
	var node = form1.elements( i);
	if (node.tagName == "INPUT")
	{
	    var radix = node.name;

	    if (radix.indexOf("_") == 0)
		    radix = radix.substring( 1, radix.length);
		    
	    if (radix != "XMLBuffer")
	    {
		var Pos = radix.search( CurPath);
		while (Pos != 0 )
		{
		    // we are in an upper or neigbor or child of a neigboor
		    // we sould return to upper
		    // current is completed, pop
		    if (CurIsOpen)
		    {
			XMLStr = XMLStr + "/>";
			CurIsOpen = false;
		    }
		    else
		    {
			XMLStr = XMLStr + cr;
			for (j = 0; j < elements.length; j++)
			    XMLStr = XMLStr + sp;
			XMLStr = XMLStr + "</" + CurElement + ">";
		    }
		    CurElement = elements.pop();
		    if (CurElement == undefined)
			alert("error 1");
		    var Pos2 = CurPath.lastIndexOf("_");
		    if (Pos2 > - 1)
			CurPath = CurPath.substring(0, Pos2);
		    else
			CurPath = "";
		    Pos = radix.search( CurPath);
		}
		
		if (CurPath != "")
			radix = radix.substring( CurPath.length+1, radix.length);
		var Hide = false;
		
		var Pos2 = radix.indexOf("_");
		while ( Pos2 > 0)
		{
		    var elementName = radix.substring( 0, Pos2);
		    radix = radix.substring( Pos2+1, radix.length);
		    Pos2 = radix.lastIndexOf("_");
		    if ( (Pos2 <= 0) && (elementName.length = 1 ) && (elementName.charCodeAt(0) >= 48) && (elementName.charCodeAt(0) <= 58))
		    {
			// We close the current and open a new element
			var newid = elementName.charCodeAt(0) - 48;
			if ( newid == 0)
			{
			    Hide = true;
			}
			else
			if ( newid == eltid)
			{
			}
			else
			{	
			    eltid = newid;
			    if (CurIsOpen)
				XMLStr = XMLStr + "/>";
			    
			    XMLStr = XMLStr + cr;
			    for (j = 0; j < elements.length; j++)
				    XMLStr = XMLStr + sp;
			    XMLStr = XMLStr + "<" + CurElement;
			    CurIsOpen = true;
			};
		    }
		    else
		    {
			// We are in a sub element of current
			if (CurIsOpen)
				XMLStr = XMLStr + ">";
			elements.push( CurElement);
					
			XMLStr = XMLStr + cr;
			for (j = 0; j < elements.length; j++)
				XMLStr = XMLStr + sp;
			XMLStr = XMLStr + "<" + elementName;
			if (CurPath != "")
				CurPath = CurPath + "_";
			CurPath = CurPath + elementName;
			CurElement = elementName;
			CurIsOpen = true;
			eltid = 1;
		    }
		}
		
		if (CurIsOpen && !Hide)
		{
		    // BW 2004.07.22 Add some alignement on attribute so that MailForm do not distort it too much
		    XMLStr = XMLStr + cr;
		    for (j = 0; j < elements.length; j++)
			XMLStr = XMLStr + sp;
		    // End
		    var value = node.value;
		    if (node.type == "checkbox")
			if (node.checked)
			    value = "True";
			else
			    value = "False";
		    XMLStr = XMLStr + " " + radix + "=\"" + value + "\"" ;
		}
	    }
	}
    }
    if (CurIsOpen)
	XMLStr = XMLStr + "/>";
    else
    {
	XMLStr = XMLStr + cr;
	for (j = 0; j < elements.length; j++)
	    XMLStr = XMLStr + sp;
	XMLStr = XMLStr + "</" + CurElement + ">";
    }
    do 
    {
	CurElement = elements.pop();
	if (CurElement != undefined)
	{
	    XMLStr = XMLStr + cr;
	    for (j = 0; j < elements.length; j++)
		XMLStr = XMLStr + sp;
	    XMLStr = XMLStr + "</" + CurElement + ">";
	}
    }
    while (CurElement != undefined);
    return XMLStr;
}

function CheckForm(form1)
{
    var ret = true;
    var ErrorFields = "";
    var DeleteMask = "none";
    for (i = 0; i < form1.elements.length; i++)
    {
	var node = form1.elements( i);
	if (node.tagName == "INPUT")
	{
	    var radix = node.name;
	    if (radix != "XMLBuffer")
	    {
		Pos2 = radix.search("_0_");
		if (Pos2 > -1)
		{
		    // Ignore element
		}
		else
		{	
		    Pos2 = radix.search("_Delete");
		    if (Pos2 > -1)
		    {
			if (node.checked == true)
			{
			    DeleteMask = radix.substring(0,Pos2);
			}
		    }
		    else
		    {
			var Ignore = false;
			if (DeleteMask != "none")
			{
			    Pos2 = radix.search(DeleteMask);
			    if (Pos2 == 0)
			    {
				Ignore = true;
			    }
			    else
				DeleteMask = "none";
			}
			if (!Ignore)
			    if (!CheckInputElement(node))
			    {
				ret = false;
				ErrorFields = ErrorFields + ";" + node.name;
			    }
		    }
		}
	    }
	}
    }
//	if (!ret)
//		alert(ErrorFields);
    return ret;
}

function CheckAllFields1(form1)
{
    var ret = CheckForm( form1);
    if (!ret)
	alert("Errors in form, see zones colored in red");
    return ret;
}

function CheckAllFields()
{
    return CheckAllFields1( formulaire);
}

