﻿//  Filename:    AstecFunctions.js
//  Owner:       Astec Computing
//  Author:      BioMedical Computing Ltd
//  Description: Javascript code-behind file for the Astec website

// Draws main menu.
function drawMainMenu() {
    var menustr = '<div id="headerspacer">&nbsp;</div><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr>';
    for (var i=0;i<mainMenu[0].length;i++) {
        menustr += '<td align="center" id="menuposition'+i+'"';
        if (i > 0) { menustr += ' class="menuph"'; }
        eval("var menuitems = subMenu"+i);
        if (menuitems.length == 2) {
            menustr += ' onmouseover="showMenu('+i+')" onmouseout="hideMenu()" onfocus="showMenu('+i+')" onblur="hideMenu()"><a href="'+mainMenu[1][i]+'" id="menu'+i+'" class="menuitems">'+mainMenu[0][i]+'</a></td>';
        } else {
            menustr += '><a href="'+mainMenu[1][i]+'" id="menu'+i+'" class="menuitems">'+mainMenu[0][i]+'</a></td>';
        }        
    }
    menustr += '</tr></table>';
    setContents('header',menustr);
}

// Displays drop down menu.
function showMenu(menuin) {
    if (window.innerWidth) {							
        frameWidth = window.innerWidth;
    } else {
        frameWidth = document.body.clientWidth;
    }
    var menustr = '<table width="100%" cellpadding="2" cellspacing="0" class="popupmenu">';
    var offsetx = 10;
    var offsety = 105;
    eval("var menuitems = subMenu"+menuin);
    if (menuitems.length == 2) {
        cancelTimer();
        for (var i=0;i<menuitems[0].length;i++) {
            menustr += '<tr><td width="100%" class="popupmenu"><a href="'+menuitems[1][i]+'" class="popupmenuitem">'+menuitems[0][i]+'</a></td></tr>';
        }
        menustr += '</table>';
        setContents('menudiv',menustr);
        setX('menudiv',findX("menuposition" + menuin) + offsetx);
        setY('menudiv',60 + offsety);
        if (layerobject) 
        {
	        getElement('menudiv').visibility = 'show';
        }
        else 
        {
	        getElement('menudiv').style.visibility = 'visible';
        }
    }
}

// Cancels timer because user has moved mouse back over menu.
function cancelTimer() {
    if (timerid) {clearTimeout(timerid)}
}

// Hides menu after a delay after mouse has moved off menu.
function hideMenu(afterDelay) {
    if (afterDelay)
    {
	    if (layerobject) 
	    {
		    getElement('menudiv').visibility = 'hide';
	    }
	    else 
	    {
	        getElement('menudiv').style.visibility = 'hidden';
	    }
    }
    else
    {
        timerid = setTimeout('hideMenu(true)', hideDelay * 1000);
  	}
}

// Checks form has been filled in correctly
function checkform(form, requiredFields) {
	var pattern = /(\w|-)+@(\w|-)+\.\w{1,3}/;
	for (var i=0;i<requiredFields.length;i++)
	{
		if (eval("form."+requiredFields[i]+".value") == null || eval("form."+requiredFields[i]+".value") == '')
		{
			alert("Could not submit form - " + requiredFields[i] + " is missing");
			eval("form."+requiredFields[i]+".focus()");
			return false;
		}
		if (requiredFields[i] == "email")
		{
			if (!pattern.test(eval("form."+requiredFields[i]+".value"))) {
				alert("You have not entered a valid email address")
				eval("form."+requiredFields[i]+".focus()");
				return false;
			}
		}
	}
	return true;
}

// Returns the object of a screen element, given it's ID.
function getElement(layerName) {	
	if (dom) { return document.getElementById(layerName); }
	if (allobject) { return document.all[layerName]; }
	if (layerobject) {
		layerCollection = self.document.layers;
		if (layerCollection[layerName]) 
		{
			return layerCollection[layerName];
			for(i=0; i < layerCollection.length;) 
			{
				return (getElement(layerName, layerCollection[i++]));
			}
		}
	}
}

// Sets the horizontal position of the layer with given id and pixels from left of frame.
function setX(layerName, x) {	
	var theLayer = getElement(layerName);
	if (layerobject) {
		theLayer.left=x;
	} else if (opera) {
		theLayer.style.pixelLeft=x;
	} else {
		theLayer.style.left=x+"px";
	}
}

// Sets the vertical position of the layer with given id and pixels from top of frame.
function setY(layerName, y) {	
	var theLayer = getElement(layerName);
	if (layerobject) {
		theLayer.top=y;
	} else if (opera) {
		theLayer.style.pixelTop=y;
	} else {
		theLayer.style.top=y+"px";
	}
}

// Sets the width of the layer with given id and width in pixels.
function setWidth(layerName, width) {	
	var theLayer = getElement(layerName);
	if (layerobject) {
		theLayer.clip.width = width;
	} else if (opera) {
		theLayer.style.pixelWidth = width;
	} else {
		theLayer.style.width = width+"px";
	}
}

// Sets the contents of the layer with given id and string to insert.
function setContents(layerName, content) {	
	var theLayer = getElement(layerName);
	if (layerobject) {
		theLayer.document.write(content);
		theLayer.document.close();
		return;
	}
	if (theLayer.innerHTML) {
		theLayer.innerHTML = content;
	}
}

// Returns the width of the layer with given id, in pixels
function findX(layerName) {
    var obj = getElement(layerName);
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
}

// Detect browser capabilities
(document.layers) ? layerobject=true : layerobject=false;		// Old Netscape Browsers
(document.all) ? allobject=true: allobject=false;				// Old IE Browsers
opera=navigator.userAgent.toLowerCase().indexOf('opera')!=-1;	// Opera Browsers
(document.getElementById) ? dom=true : dom=false;				// All Modern Browsers (using proper DOM)

// Create variables
var frameWidth = 1000;
var timerid = null;
document.write('<div id="menudiv" style="position:absolute; top:1px; left:1px; width:200px; z-index:100; visibility:hidden;" onmouseover="cancelTimer()" onmouseout="hideMenu()">&nbsp;</div>');
