/* Defines */
var ROOT_TYPE		=0;
var PROJECT_TYPE	=1;
var REQUIREMENT_TYPE=2;
var TESTCASE_TYPE	=3;
var COMPONENT_TYPE	=4;


/* Data types*/
var NUMBER_TYPE	    =1;
var DATE_TYPE	    =2;
var STRING_TYPE	    =3;

/*
	Type Conversion routines
*/
function GetObjType(vType)
{
	if(isNaN(parseInt(vType)))
	{
		if(vType == 'project')
			return PROJECT_TYPE;
		else	
		if(vType == 'component')
			return COMPONENT_TYPE;
		else			
		if(vType == 'requirement')
			return REQUIREMENT_TYPE;
		else	
		if(vType == 'testcase')
			return TESTCASE_TYPE;
		else				
			return ROOT_TYPE;	
	}else
	return vType;
}
/*
	Return Object from the XML tree
*/
function getObjNodeById(objType,objId)
{
	var objNodeList  = xmltree.documentElement.getElementsByTagName(objType);
	for (var i=0; i<objNodeList.length; i++)
	{
		var objNode = objNodeList.nextNode();
		if(objId == objNode.getAttribute("id"))
			return objNode;
	}
	return null;
}

/*
	Return XML node from the XML tree by Type
*/
function getParentNodeAttribByType(objNode,objType,sAttribNm)
{
	var xmlNode = objNode;
	while(true)
	{
			var xmlNode = xmlNode.parentNode;
			if(xmlNode==null)
				return null;
			if(xmlNode.tagName==objType)
			{
					return xmlNode.getAttribute(sAttribNm);
			}
	}
	return null;
}

/*
	string parsing object
*/
function DeWebString(strQuery)
{
	//initialize  object with quiery string a=2&b=3&b=4&c=5
	function init(strQuery)
    {
   	  this.m_query = strQuery;
	  this.tags = new ActiveXObject("Scripting.Dictionary");
  	  var parArr = 	new String(strQuery).split('&');	   
	  for(i=0;i<parArr.length;i++)
	  {
	  	var arrKeyVal = parArr[i].split('=');
	  	if(this.tags.Exists(arrKeyVal[0]))
			this.tags.Item(arrKeyVal[0]) += "," + arrKeyVal[1];
		else	
			this.tags.Item(arrKeyVal[0]) = arrKeyVal[1];	  
	  }
    }
	//return single value or comma-separated string if collection passed in
	function getValue(strVar)
	{
		if(this.tags.Exists(strVar))
			return unescape(this.tags.Item(strVar));
		else return "";	
	}
	
	function getAllVals()
	{
		return this.m_query;
	}
	
	this.init = init;
	this.getValue = getValue;	
	if(strQuery.length)
		this.init(strQuery);
}

/*
	user input verification routines
*/
function ValidateTextBox(strName,strElem,strForm,strType)
{
	var f = document.forms[strForm];
	if (f.elements[strElem].value == "")
		return "\n Please type '" + strName + "'";
	else
	if((parseInt(strType) == NUMBER_TYPE) && (isNaN(f.elements[strElem].value)))	
		return "\n '" + strName + "' must be a number";	
	else return "";	
}
function ValidateDropDown(strName,strElem,strForm)
{
	var f = document.forms[strForm];
	if(
		(f.elements[strElem].value == "")||
		(f.elements[strElem].value == "-1")
		)
		return "\n Please select '" + strName + "'";
	else return "";	
}
function ValidateTextArea(strName,strElem,strForm)
{
	var f = document.forms[strForm];
	if (f.elements[strElem].value == "")
		return "\n Please type '" + strName + "'";
	else return "";	
}

function ValidateDate(strName,strElem,strForm)
{
	var f = document.forms[strForm];
	if(isNaN(parseInt(Date.parse(f.elements[strElem].value))))
		return "\n Please correct '" + strName + "'\n";
	else return "";		
}

/*********************************************************
	Toggle Buttons Management

GroupToggleButtons()
	combine group of fld1,fld2 element values into one element
********************************/
function GroupTglButtons(strMask)
{	
	var f = document.biform;
	var res=new String("");
	sMask="hd"+strMask;	
	var re = new RegExp(sMask,"i");
	for(var i=0;i< f.elements.length;i++)
	{
		var elm = f.elements[i];
		var elmName = new String(elm.name);		
		if(re.test(elmName))
		{		
			if(!isNaN(parseInt(elm.value)))
				res+=elm.value+",";
		}		
	}		
	f.elements[strMask].value=res.length?res.slice(0,res.length-1):"";			
}

/********************************
ToggleBtn()
	toggle buttons
********************************/
function ToggleBtn(destNm,hdNm,Val)
{
	var f = document.biform;
	var srcElm   = event.srcElement;
	var destElm  = document.all(destNm);
	var hdElm    = f.elements[hdNm];
	if(hdElm.value == "")
	{
		hdElm.value = Val;
		makeTogglePressed(srcElm);
		makeToggleRaised(destElm);		
	}else
	if(hdElm.value != Val)
	{
		hdElm.value = Val;
		makeTogglePressed(srcElm);
		makeToggleRaised(destElm);		
	}else	
	{
		hdElm.value = "";
		destElm.fireEvent("onclick");
	}
}
/********************************
SwitchToggleButton()
	switch state of the toggle button
********************************/
function SwitchTglButton(elmnm)
{	
	var spElm, ElmVal, hdElm;
	
	if((elmnm=="")||(elmnm=="undefined")||(elmnm==undefined))
	{
		spElm = event.srcElement;
		elmnm = spElm.id;
	}
	else	
		spElm = document.all(elmnm);
		
	ElmVal =  new String(elmnm).split("_")[2];		
	hdElm  = document.all("hd_"+new String(elmnm).split("_")[1] + "_" + ElmVal);	
	
	if(hdElm.value==ElmVal)
	{
		hdElm.value="";
		makeToggleRaised(spElm);			
	}
	else
	{
		hdElm.value=ElmVal;
		makeTogglePressed(spElm);				
	}
}

/********************************
SwitchToggleButton()
	switch state of the toggle button
	if button is turning On - turn off all other buttons
********************************/
function SwitchTglButtonUnq(strName)
{
	var f = document.biform;
	var spElm = document.all(strName);
	var strId = new String(spElm.id);
	var hdElm = document.all("hd"+strId.slice(2));
	if(hdElm.value=="1")
	{
		hdElm.value="";
		makeToggleRaised(event.srcElement);			
	}
	else
	{
		hdElm.value="1";
		makeTogglePressed(event.srcElement);				
	}
	// Turn off all other buttons in this group
	if(hdElm.value=="1")	
	{
		var strMask = "hd"+strId.substring(2,strId.indexOf('_'));
		var re = new RegExp(strMask,"i");
		for(var i=0;i< f.elements.length;i++)
		{
			var elm = f.elements[i];
			var elmName = new String(elm.name);		
			if(re.test(elmName))
			{
				if((elm.value=="1")&&(elm.name!=hdElm.name))
				{
					elm.value="";
					makeToggleRaised(document.all("sp"+elmName.slice(2)));					
				}
			}
		}	
	}
	
}

/********************************
SetUpToggleButons()
	set state of the toggle buttons according to the hidden field value
********************************/

function SetUpTglButtons(strMask)
{
	var f 	   = document.biform;
	// setup statuses
	var re = new RegExp(strMask,"i");
	for(var i=0;i< f.elements.length;i++)
	{
		var elm = f.elements[i];
		var elmName = new String(elm.name);		
		if(re.test(elmName))
		{
			if(!isNaN(parseInt(elm.value)))
				makeTogglePressed(document.all("sp"+elmName.slice(2)));
			else
				makeToggleRaised(document.all("sp"+elmName.slice(2)));								
		}		
	}
}	


function ManageTglButtons(strSrcElmNm)
{
	var f    = document.biform;	
	var vals = f.elements[strSrcElmNm].value;	
	var arr  = new String(vals).split(',');
	
	if(vals!="")
	for(var i=0;i<arr.length;i++)
	{
		var hdElmNm = "hd"+strSrcElmNm+"_"+arr[i];
		var spElmNm = "sp"+strSrcElmNm+"_"+arr[i];					
		f.elements[hdElmNm].value=arr[i];				
		if(!isNaN(parseInt(arr[i])))
			makeTogglePressed(document.all("sp"+strSrcElmNm+"_"+arr[i]));
		else
			makeToggleRaised(document.all("sp"+strSrcElmNm+"_"+arr[i]));											
	}
	
}

function ClearTglButtons(strMask,strExceptId)
{
	var f 	   = document.biform;
	// clear toggle buttons
	var re = new RegExp("hd"+strMask,"i");
	for(var i=0;i< f.elements.length;i++)
	{
		var hdElm   = f.elements[i];
		var hdElmNm = new String(hdElm.name);		
		if(re.test(hdElmNm))
		{
		  var doUp= false;
			var spElm = document.all("sp"+hdElmNm.slice(2));
			if((strExceptId=="")||(strExceptId=="undefined")||(strExceptId==undefined))
				doUp=true;
			else										
			if(spElm.id!=strExceptId)
				doUp=true;

			if(doUp)
			{
				hdElm.value="";
				makeToggleRaised(spElm);			
			}
		}
	}
}

// clear if any toggle buttons pressed
function NoTglPressed(strMask)
{
	var f 	   = document.biform;
	var bRes = true;
	
	var re = new RegExp("hd"+strMask,"i");
	for(var i=0;i< f.elements.length;i++)
	{
		var hdElm   = f.elements[i];
		var hdElmNm = new String(hdElm.name);		
		if(re.test(hdElmNm))
		{
			if(!isNaN(parseInt(hdElm.value)))
				bRes = false;
		}
	}
	return bRes;
}






