﻿//Menu

var currentMenuContainer = new Array();
var currentMenuRow = null;
var currentMenuFlag = false;
var globalEvent;
var ie = document.all;

function loadMenu(parentMenu)
{
//alert("load");
   var menuContainer = document.getElementById("menuContainer" + parentMenu.id.substr(7));
   var InnerTable=document.getElementById("InnerTable"+ parentMenu.id.substr(7));
  
   
 	var l=0;
	if (parentMenu.getAttribute("bgcolorOver"))
		parentMenu.style.backgroundColor = parentMenu.getAttribute("bgcolorOver");
	if (parentMenu.getAttribute("colorOver"))
		parentMenu.style.color = parentMenu.getAttribute("colorOver");
		
 if((navigator.appName.lastIndexOf('Netscape')==-1))
	    if (currentMenuContainer.length)
		    menuContainerOut(currentMenuContainer[currentMenuContainer.length-1]);

	if (menuContainer)
	{
	    menuContainer.style.top = _offsetTop(parentMenu) -7-(menuContainer.getAttribute("level") == "0" ? 1 : 0) + "px";
	   
	    
	    if((navigator.appName.lastIndexOf('Netscape')!=-1))
	    {
	       var isLtr=window.getComputedStyle(document.getElementsByTagName("body")[0],null).getPropertyValue("direction")== "ltr";
	    }
	    else
	    {
	       // all other browsers
	       var isLtr = document.getElementsByTagName("body")[0].currentStyle.direction == "ltr";
	    }
	        
	    if(isLtr)// english
	    {
	        l = _offsetLeft(parentMenu) + parentMenu.offsetWidth +1;
	        //alert("1");
		}
		else    // hebrew
		{
   		    l = _offsetLeft(parentMenu) - getContentWidth(InnerTable) +25;
   		    if((navigator.appName.lastIndexOf('Netscape')!=-1))
   		    {
              l-=19;
             
            }
		}
		
		menuContainer.style.width=getContentWidth(InnerTable);
		
		menuContainer.style.left =  l + "px";						
		menuContainer.style.visibility = "visible";	
		
		 
		currentMenuContainer[currentMenuContainer.length] = menuContainer;
		menuContainer.style.display = "block";
		
		//alert("End "+menuContainer.offsetWidth);
	}
}

		
function getContentWidth(Table){

     var MAX=1;
   var t = document.createElement('table');
   var r = t.insertRow(0);
   t.style.width = "60px";
  document.body.appendChild(t);  


//absoluteElement.style.width = t.offsetWidth+"px";

     for(i=0; i<Table.rows.length  ;i++)
     {
      
         r.insertCell(0).innerHTML = Table.rows[i].innerHTML;
         
          if((navigator.appName.lastIndexOf('Netscape')!=-1))
          {
              if(MAX<t.style.width)
                    MAX=t.style.width;
          }
          else
          {
             if(MAX<t.offsetWidth)
                MAX=t.offsetWidth;
          }
     }
     
    document.body.removeChild(t);
     //alert(MAX);
   
    // return MAX<80?120:MAX;
      return 186;

}

// Return true if node a contains node b.
function containsToElement(a, b) 
{
	while (b.parentNode)
		if ((b = b.parentNode) == a)
			return true;
	return false;
}

function containsToElement(a)
{
	var b = globalEvent.toElement ? globalEvent.toElement : globalEvent.relatedTarget;
	if (b == null) return;
	while (b.parentNode)
		if ((b = b.parentNode) == a)
			return true;
	return false;
}

function menuContainerOut(menuContainer)
{
	var toHide = true;
	
	if (menuContainer)
	{
	   	
		if (menuContainer == currentMenuContainer[currentMenuContainer.length-1])
		{			
			if(ie)
			{
				if (event && contains(menuContainer, event.toElement))
				{
					toHide = false;
					
				}
				else if (event && contains(currentMenuContainer[currentMenuContainer.length-1] ,event.toElement))
				{
						toHide = false;
					
				}
				else if (event == null) return;
			}
			else // not is IE
			{
	
				if (globalEvent && contains(menuContainer,globalEvent.relatedTarget))
					toHide = false;
				else
					if (globalEvent && contains(currentMenuContainer[currentMenuContainer.length-1],globalEvent.relatedTarget))
						toHide = false;
					
				
			}			

			if (toHide)
			{
			 // alert("Going to hide");
		
				menuContainer.style.visibility = "hidden";
				currentMenuContainer.length--;
			
				if (currentMenuContainer.length)
					menuContainerOut(currentMenuContainer[currentMenuContainer.length-1]);
			}
		}
		else
		{
			menuContainerOut(currentMenuContainer[currentMenuContainer.length-1]);
			
		}
	}
}

function menuRowOver(menuRow)
{
   // alert("menuRowOver");		
   
	tohide=true;
	
	var menuContainer = document.getElementById("menuContainer" + menuRow.getAttribute("parentID"));

	if (!menuContainer)
		menuContainer = menuRow;
	//if (menuContainer.getAttribute("bgcolorOver"))
	//	menuRow.style.backgroundColor = menuContainer.getAttribute("bgcolorOver");
	//if (menuContainer.getAttribute("colorOver"))
	//	menuRow.style.color = menuContainer.getAttribute("colorOver");
	currentMenuRow = menuRow;
	
	if (menuRow != menuContainer)
		if (document.getElementById("menuContainer" + menuRow.getAttribute("id").substr(7)))
		{
			loadSubMenu(menuRow);
		}

	currentMenuFlag = false;
}

function checkMenuRowOut(menuRow)
{
   
	if(ie)
	{
		if (!menuRow.contains(event.toElement)) 
			menuRowOut(menuRow);
	}
	else
	{
		if (contains(menuRow, globalEvent.relatedTarget) == false) 
			menuRowOut(menuRow);	
	}	
}

function menuRowOut(menuRow, isTop)
{
   
	tohide=false;
	//hideSelect(tohide);
	var menuContainer = document.getElementById("menuContainer" + menuRow.parentID);

	if (!menuContainer)
		menuContainer = menuRow;
	if (menuContainer.getAttribute("bgcolorOver"))
		menuRow.style.backgroundColor = "";
	if (menuContainer.getAttribute("colorOver"))
		menuRow.style.color = "";
	if (isTop)
	{
		currentMenuFlag = true;
		setTimeout("clearMenu();", 100);
		//alert("hi");
	}
}

function clearMenu()
{
	if (currentMenuFlag == false)
	{
		return;
	}
	if (currentMenuContainer.length)
		menuContainerOut(currentMenuContainer[currentMenuContainer.length-1]);
}
function writeHTML(html)
{
	document.write(html);
}

/*
	Validate a form's elements according to varius attributes
*/
function validateForm(form, title, submit)
{
	var i, j, u, sum;
	var input;
	var valid;
	var sErrorMsg = "";

	for (i=0; i<form.elements.length; i++)
	{
		input = form.elements[i];
		// skip input when it's not rendered (ie. parent display:none)
		if (input.offsetHeight == 0) continue;
		valid = true;

		// Validate value according to element type and validation type
		switch (input.type.toLowerCase())
		{
		case "text":
		case "password":
		case "textarea":
		case "file":
			if (!input.getAttribute("validation"))
				input.setAttribute("validation", "string");
			if (input.getAttribute("mandatory"))
			{
				if (input.getAttribute("mandatory").toLowerCase() != "true" && input.value.length == 0)
					continue;
			}
			else
				if (input.value.length == 0)
					continue;
			switch (input.getAttribute("validation").toLowerCase())
			{
			case "string":
			case "password":
				if (input.value.length == 0)
					valid = false;
				break;
			case "integer":
				if (!/\d+/.test(input.value))
					valid = false;
				break;
			case "email":
				if (!/^[\w\.\-]+@[\w\-]+(\.\w+)+$/.test(input.value))
					valid = false;
				break;
			case "phone":
				if (!/^\+?\d+(-\d+)*$/.test(input.value))
					valid = false;
				break;
			case "id":
				j = input.value.toString();
				input.value = j.replace(/\D/g, "");
				if (/\d+/.test(input.value))
				{
					sum = 0;
					for (j=0; j<input.value.length; j++)
					{
						u = (j % 2 ? 2 : 1) * parseInt(input.value.charAt(input.value.length - j - 1));
						sum += u > 9 ? Math.floor(u / 10) + u % 10 : u;
					}
					if (sum % 10) valid = false;
				}
				else
					valid = false;
				break;
			case "compare":
				// Check the compareInput attribute
				if (input.getAttribute("compareInput"))
					if (input.value != form.elements[input.getAttribute("compareInput")].value)
						valid = false;
				break;
			default:
				var regExp = new RegExp(input.getAttribute("validation"), "im");
				valid = regExp.test(input.value);
			}

			// Validate max and min according to validation type
			if (valid == true)
			{
				switch (input.getAttribute("validation").toLowerCase())
				{
				case "integer":
					if (input.getAttribute("validmax"))
					{
						if (parseInt(input.value) > parseInt(input.getAttribute("validmax")))
							valid = false;
					}
					if (input.getAttribute("validmin"))
					{
						if (parseInt(input.value) < parseInt(input.getAttribute("validmin")))
							valid = false;
					}
					break;
				default:
					if (input.getAttribute("validmax"))
					{
						if (input.value.length > input.getAttribute("validmax")) valid = false;
					}
					if (input.getAttribute("validmin"))
					{
						if (input.value.length < input.getAttribute("validmin")) valid = false;
					}
					break;
				}
			}
			break;
		case "select-one":
			if (input.getAttribute("mandatory"))
				if (input.selectedIndex == 0)
					valid = false;
			break;
		case "select-multiple":
			if (input.getAttribute("mandatory"))
			{
				sum = 0;
				for (j=0; j<input.options.length; j++)
				{
					if (input.options[j].selected) sum++;
				}
				if ((!input.getAttribute("validmax")) && (!input.getAttribute("validmin")))
				{
					if (sum == 0) valid = false;
				}
				else
				{
					if (input.getAttribute("validmax"))
					{
						if (sum > input.getAttribute("validmax")) valid = false;
					}
					if (input.getAttribute("validmin"))
					{
						if (sum < input.getAttribute("validmin")) valid = false;
					}
				}
			}
			break;
		case "checkbox":
			if (input.getAttribute("mandatory"))
				valid = input.checked;
			break;
		}

		if (!valid)
		{
			if (input.getAttribute("validationError"))
				sErrorMsg += input.getAttribute("validationError") + "\n";
			else
				sErrorMsg += "Error in field " + input.name + "\n";
		}
	}
	if (sErrorMsg.length)
	{
		alert((title ? title + "\n" : "") + sErrorMsg);
		return false;
	}
	else
	{
		if (submit)
			form.submit();
		return true;
	}
}

function _offsetTop(obj)
{
    var top = 0;
	for (; obj; obj=obj.offsetParent)
		top += obj.offsetTop;
	return top;
}

function _offsetLeft(obj)
{
	var left = 0;
	
	//alert(obj.getAttribute("id"));
	//alert(obj.offsetParent
	for (; obj && obj != document.body; obj=obj.offsetParent)
		left += obj.offsetLeft;

 
	return left;
}

// Return true if node a contains node b.
function contains(a, b) 
{
//alert("a"+a.id);
//alert("b.parentNode "+b.parentNode.id);

	while (b.parentNode)
		if ((b = b.parentNode) == a)
		
			return true;
	return false;
}

function ChangeColor(flag, element)
{


    if(element == null) return;
    
    //element.style.backgroundColor = "444444";
        
    switch (flag)
    {
        case 1:
           
               
               // document.getElementById(element.id).style.backgroundColor = "#eeeeee";     
//alert(document.getElementById(element.id).style.backgroundColor);
   
            break;
        case 0:
           
              //  element.style.backgroundColor = "#ffffff";         
            break;    
    }
}


