var DEBUG = false;


var HelpOptionsVar = "width=480,height=420,scrollbars,toolbar,resizable,dependent=yes";
var GlossOptionsVar = "width=420,height=180,scrollbars,toolbar,resizable,dependent=yes";
var bigsub   = "width=560,height=440,scrollbars,menubar,resizable,status,dependent=yes";
var smallsub = "width=500,height=360,scrollbars,resizable,dependent=yes";
var hugesub   = "width=630,height=460,scrollbars,menubar,resizable,status,dependent=yes";
var prosub   = "width=700,height=360,scrollbars,menubar,resizable,status,dependent=yes";
var logsub   = "width=620,height=440,scrollbars,menubar,resizable,status,dependent=yes";
var uamtimewin = "left=100,top=100,height=200,width=200,status=no,toolbar=no,menubar=no,location=no,resizable";
var helpWinVar = null;
var glossWinVar = null;
var datSubWinVar = null;
var ValidStr = 'abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
var hex_str = "ABCDEFabcdef0123456789";
var num_str = "0123456789";
var name_str = 'abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_ '
var invalidMSNameStr = "\"/\\[<]>.:;,|=+*?";
var invalidDNSStr = "\"/\\[<]>:;,|=+*?";


function showHelp(helpfile) 
{
	if(top.frames.length == 0)
		return;
	top.helpframe.location.href = helpfile;
}



function showMsg()
{
	if(top.showmsg == true)
		top.frames[0].location.href = "head_msg.htm";
	var msgVar=document.forms[0].message.value;
	if (msgVar.length > 1)
		alert(msgVar);
}

function closeWin(win_var)
{
	if   ((win_var != null) && (win_var.closed == false))
			win_var.close();
}

function openHelpWin(file_name)
{
   helpWinVar = window.open(file_name,'help_win',HelpOptionsVar);
   if (helpWinVar.focus)
		setTimeout('helpWinVar.focus()',200);
}

function openGlossWin()
{
	glossWinVar = window.open('','gloss_win',GlossOptionsVar);
	if (glossWinVar.focus)
		setTimeout('glossWinVar.focus()',200);
}

function openDataSubWin(filename,win_type)
{
	closeWin(datSubWinVar);
	datSubWinVar = window.open(filename,'datasub_win',win_type);
	if (datSubWinVar.focus)
		setTimeout('datSubWinVar.focus()',200);
}

function closeSubWins()
{
	closeWin(helpWinVar);
	closeWin(glossWinVar);
	closeWin(datSubWinVar);
}

function checkBlank(fieldObj, fname)
{
	var msg = "";
	if (fieldObj.value.length < 1)
		msg = addstr(msg_blank,fname);
	return msg;
}

function checkNoBlanks(fObj, fname)
{
	var space = " ";
 	if (fObj.value.indexOf(space) >= 0 )
			return addstr(msg_space,fname);
	else return "";
}

function checkValid(text_input_field, field_name, Valid_Str, max_size, mustFill)
{
	var error_msg= "";
	var size = text_input_field.value.length;
	var str = text_input_field.value;

	if ((mustFill) && (size == 0) )
	{
		error_msg = addstr(msg_blank_in,field_name);
		return error_msg;
	}	
	if ((mustFill) && (size != max_size) )
	{
		error_msg = addstr(msg_mis_len,field_name,max_size);
		return error_msg;
	}
 	for (var i=0; i < size; i++)
  	{
    	if (!(Valid_Str.indexOf(str.charAt(i)) >= 0))
    	{
			error_msg = addstr(msg_invalid,field_name,Valid_Str);
			break;
    	}
  	}
  	return error_msg;
}

function checkInvalidChars(inStr, InvalidStr) // check no chars of "InvalidStr" in "inStr"
{
 for (var i=0; i < InvalidStr.length; i++)
    if (inStr.indexOf(InvalidStr.charAt(i)) >= 0)
			return false;
  return true;
}


function checkInt(text_input_field, field_name, min_value, max_value, required)
// NOTE: Doesn't allow negative numbers, required is true/false
{
	var str = text_input_field.value;
	var error_msg= "";

	if (text_input_field.value.length==0) // blank
	{
		if (required)
			error_msg = addstr(msg_blank,field_name);
	}
	else // not blank, check contents
	{
		for (var i=0; i < str.length; i++)
		{
			if ((str.charAt(i) < '0') || (str.charAt(i) > '9'))
				error_msg = addstr(msg_check_invalid,field_name);
		}
		if (error_msg.length < 2) // don't parse if invalid
		{
			var int_value = parseInt(str,10);
			if (int_value < min_value)
				error_msg = addstr(msg_greater,field_name,(min_value - 1));
			if (int_value > max_value)
				error_msg = addstr(msg_less,field_name,(max_value + 1));
		}
	}
	return(error_msg);
}

function blankIP(fn) // true if 0 or blank
{
	return ( (fn.value == "") || (fn.value == "0") )
}

function checkIp(ip1,ip2,ip3,ip4,msg,rq_flag)
{
	if( (rq_flag == false) && blankIP(ip1) && blankIP(ip2) && blankIP(ip3) && blankIP(ip4) )
		return "";
	var errmsg =  checkInt(ip1,msg,1,254,true);
	errmsg =  (errmsg.length > 1) ? errmsg : checkInt(ip2,msg,0,255,true);
	errmsg =  (errmsg.length > 1) ? errmsg : checkInt(ip3,msg,0,255,true);
	errmsg =  (errmsg.length > 1) ? errmsg : checkInt(ip4,msg,1,254,true);
	errmsg =  (errmsg.length > 1) ? addstr(msg_validIP,msg) : "";
	return errmsg;
}

function checkNetMask(ip1,ip2,ip3,ip4,msg)
{
	var errmsg =  checkInt(ip1,msg,0,255,true);
	errmsg =  (errmsg.length > 1) ? errmsg : checkInt(ip2,msg,0,255,true);
	errmsg =  (errmsg.length > 1) ? errmsg : checkInt(ip3,msg,0,255,true);
	errmsg =  (errmsg.length > 1) ? errmsg : checkInt(ip4,msg,0,255,true);
	errmsg =  (errmsg.length > 1) ? addstr(msg_validMask,msg) : "";
	return errmsg;
}

function checkMAC(fieldObj,fmsg)
{
	var address = fieldObj.value;
	var myRE = /[0-9a-fA-F]{12}/;
	var newMAC = "";
	if(address.length > 11)
	{
	   newMAC = address.replace(/[:-]/g,"");
	   fieldObj.value = newMAC;	
	}
	if ((newMAC.length != 12) || (newMAC=="000000000000")||(myRE.test(newMAC)!=true))	
		return addstr(msg_invalidMAC,fmsg);	
	else
		return "";
} 

function checkOUI(fieldObj,fmsg)
{
	var address = fieldObj.value;
	var myRE = /[0-9a-fA-F]{6}/;
	var newOUI = "";
	if(address.length > 5)
	{
	   newOUI = address.replace(/[:-]/g,"");
	   fieldObj.value = newOUI;	
	}
	if ((newOUI.length != 6) || (newOUI=="000000")||(myRE.test(newOUI)!=true))	
		return addstr(msg_invalidOUI,fmsg);	
	else
		return "";
} 

function isBigger(str_a, str_b)
//  true if a bigger than b
{
	var int_value_a = parseInt(str_a);
	var int_value_b = parseInt(str_b);
	return (int_value_a > int_value_b);
}

function getSelIndex(sel_object, sel_text)
{
	if (sel_text.length == 0)
		return -1;   //  Nothing may be valid. e.g. New SAP contain errors & returned.
	var size = sel_object.options.length;
	for (var i = 0; i < size; i++)
	{
		if (sel_object.options[i].text == sel_text)
			return(i);
	}
	if (DEBUG)
 		alert("Selected value " + sel_text + " not found in " + sel_object.name);
	return -1;  // if no match
}


var showit = "block";
var hideit = "none";

function show_hide(el,shownow)  // IE & NS6; shownow = true, false
{
//	alert("el = " + el);
	if (document.all)
		document.all(el).style.display = (shownow) ? showit : hideit ;
	else if (document.getElementById)
		document.getElementById(el).style.display = (shownow) ? showit : hideit ;
}

function returnAC(avar)
{
	var str = "";
	for (var i =0; i < avar.length; i++)
		str +=  avar[i] + "," ;
	return str;
}

function chkSelected(selObj, err_msg)
{
    if(!(selObj.selectedIndex >= 0 ))
	{
	    alert(err_msg);
	    return false;
	}
	return true;
}

function swapSel(selObj,updown_str)
{
	var cf = document.forms[0];
	var imin = (updown_str == "up") ? 1 : 0;
	var imax = (updown_str == "up") ? selObj.options.length -1 :selObj.options.length -2;
	var index = selObj.selectedIndex;
	var swap_index;

	if ((index >= imin ) && (index <= imax))
	{
		swap_index = (updown_str == "up") ? index -1 : index + 1 ;
		var temp_text = selObj.options[index].text;
		var temp_v = selObj.options[index].value;
		selObj.options[index].text = selObj.options[swap_index].text ;
		selObj.options[index].value = selObj.options[swap_index].value ;
		selObj.options[swap_index].text = temp_text ;
		selObj.options[swap_index].value = temp_v ;
		selObj.selectedIndex = swap_index;
		return true;
	}
	else return false;
}  // no msg if can't move

function getRadioCheckedValue(radio_object)
{
	var size = radio_object.length;
	for (var i = 0; i < size; i++)
	{
		if (radio_object[i].checked == true)
			return(radio_object[i].value)
	}
	return (radio_object[0].value); // first value if nothing checked
}

function getRadioIndex(radio_object, checked_value)  
{
	var size = radio_object.length;
	for (var i = 0; i < size; i++)
	{
		if (radio_object[i].value == checked_value)
			return  i;
	}

	return  0;   // if no match
}


function addstr(input_msg)
{
	var last_msg = "";
	var str_location;
	var temp_str_1 = "";
	var temp_str_2 = "";
	var str_num = 0;
	temp_str_1 = addstr.arguments[0];
	while(1)
	{
		str_location = temp_str_1.indexOf("%s");
		if(str_location >= 0)
		{
			str_num++;
			temp_str_2 = temp_str_1.substring(0,str_location);
			last_msg += temp_str_2 + addstr.arguments[str_num];
			temp_str_1 = temp_str_1.substring(str_location+2,temp_str_1.length);
			continue;
		}
		if(str_location < 0)
		{
			last_msg += temp_str_1;
			break;
		}
	}
	return last_msg;
}

function isIPaddr(addr) {
    var i;     var a; 
    a = addr.split(".");
    if(a.length != 4) {
        return false;
    }
    for(i = 0; i < a.length; i++) 
		if (!(isInt(a[i], (i==0||i==3)?1:0, (i==0||i==3)?254:255)))
			return false;
    return true;
}

function isInt(str, min_value, max_value)
{
	if (str.length==0) // blank
			return false
	for (var i=0; i < str.length; i++)
		if ((str.charAt(i) < '0') || (str.charAt(i) > '9'))
			return false;
	var int_value = parseInt(str,10);
	if ((int_value < min_value) || (int_value > max_value))
		return false;
	return true;
}

function chkIP_MSname_dns(fobj,msg)
{
	var a = fobj.value.split(".");
	if  (fobj.value.length == 0)
		return msg;
	if ((a.length == 4) && isIPaddr(fobj.value))
		return "";
	if ((a.length >= 3) && (checkInvalidChars(fobj.value,invalidDNSStr)))
		return "";
	if (fobj.value.length <16  && checkInvalidChars(fobj.value,invalidMSNameStr))
		return "";
	else return msg;
}

function chkIP_MSname(fobj,msg) // input could be ip or name
{
	var a = fobj.value.split(".");
	if  (fobj.value.length == 0)
		return msg;
	if ((a.length == 4) && (!(isIPaddr(fobj.value))))
		return msg;
	if (isIPaddr(fobj.value))
		return "";
	if (checkInvalidChars(fobj.value,invalidMSNameStr))
		return "";
	else return msg;
}

function chkMSname(fobj,msg) // input could be name
{
	if ((fobj.value.length > 1) && (checkInvalidChars(fobj.value,invalidMSNameStr)))
		return "";
	else return msg;
}

function isHex(str)
{
   for(i=0; i < str.length; i++)
  {
 	 if (isNaN(parseInt(str.charAt(i), 16)))
	 	return false;
  }
  return true;
}

function setDisable(dflag,objects)  // objects can be individual, or an array of objects
{
	for (var i=1; i < setDisable.arguments.length; i++)
	{
		if(setDisable.arguments[i].type == undefined && setDisable.arguments[i].length) // array
			for(var j = 0; j < setDisable.arguments[i].length; j++)
				setDisable.arguments[i][j].disabled = dflag;
		else
			setDisable.arguments[i].disabled = dflag;
	}
}

var cOFF="gray"
var cON=document.fgColor;

function be_gray(v) {

  if(typeof v.disabled != 'undefined') {
    // NS6 and IE
    v.style.color = cOFF;
    v.disabled = 1;
  }
  else {
    // NS4
    v.oldonfocus = v.onfocus;
    v.onfocus = function () { this.blur(); };
  }
}
function be_normal(v) {
  if(typeof v.disabled != 'undefined') {
    // NS6 and IE
    v.style.color = cON;
    v.disabled = 0;
  }
  else {
    // NS4
    v.onfocus = v.oldonfocus;
  }
}

function getIndex(e)
{
    var f = e.form.elements;
    for(var i = 0; i < f.length; i++)
        if(e == f[i])
            return i;
    return -1;        
}
function checkMaxLength(e, l, j)
{
    if(!l)
        l = e.maxLength;
    if(!j)
        j = 1;
    if(e.value.length==l){
        e.form.elements[getIndex(e)+j].focus();
        return true;      
    } else return true;      
}