var gn_curr_layer = 0;
var gn_out_layer = 0;
var gn_timer_id;
var gn_timer_len = 500; // milleseconds


function openFrom(file, id, type, params) {
	var myurl = "http://" + document.location.hostname + "/" + file + "?id=" + id + "&type=" + type;
	//js_dump(document.location);
	//alert(myurl);
	
	myurl = (myurl.indexOf("?") >= 0) ? myurl + "&" : myurl + "?";
	myurl = myurl + "null=" + createUUID();
	document.location.replace(myurl);
}

function openFromOpener(file, id, type, params) {
	var myurl = "http://" + document.location.hostname + "/" + file + "?id=" + id + "&type=" + type;
	//js_dump(document.location);
	//alert(myurl);
	
	myurl = (myurl.indexOf("?") >= 0) ? myurl + "&" : myurl + "?";
	myurl = myurl + "null=" + createUUID();
	opener.location.replace(myurl);
	window.close();
}

/* Creates a Unique number per call on one client browser.
	DOES NOT CREATE A SERVER-SCOPED UNIQUE KEY! */
function createUUID() {
	var l_dDate = new Date();
	var l_nUUID = l_dDate.getTime().toString();
	return l_nUUID;
}

function verifyLink(message,myurl) {
	if (confirm(message)) {
		myurl += (myurl.indexOf('?') >= 0) ? "&null="+createUUID() : "?null="+createUUID();
		document.location.href=myurl;
	}
}

/* (reloads) the current page in window (win) without the query string (adds a UUID to make browser refresh) */
function cleanReload(win) {
	var myurl = getUrl(win, 1) + "?null=" + createUUID();
	win.document.location.replace(myurl);
}
/* (reloads) the current page in window (win) with the query string (adds a UUID to make browser refresh) */
function urlReload(win) {
	var myurl = win.document.location.href;
	myurl = (myurl.indexOf("?") >= 0) ? myurl + "&" : myurl + "?";
	myurl = myurl + "null=" + createUUID();
	win.document.location.replace(myurl);
}

/* gets the document url (minus query string if (clean)) */
function getUrl(win, clean) {
  var myurl = win.document.location.href;
  if (clean) {
    var loc = myurl.indexOf("?");
    if (loc > 0) {
      myurl = myurl.substring(0,loc);
    }
  }
  return myurl;
}

function menu_in(div_id) {
	gn_curr_layer = div_id;
	show_layer(div_id);
	stop_timer();
	if (gn_curr_layer != gn_out_layer && gn_out_layer != 0) {
		hide_layer(gn_out_layer);
		// insert image swapping code here if necessary (used for div_id's menu trigger image)
	}
}
function menu_out(div_id) {
	gn_out_layer = div_id;
	start_timer();
}
function start_timer() {
	gn_timer_id = window.setTimeout("timeout()",gn_timer_len);
}
function stop_timer() {
	window.clearTimeout(gn_timer_id);
}
function timeout() {
	hide_layer(gn_out_layer);
	gn_out_layer = 0;
	// insert image swapping code here if necessary (used for div_id's menu trigger image)
}

ns = (document.layers)? true:false
is = (document.all)? true:false

function hide_layer(item) {
	hidden = (ns)? "hide" : "hidden"
	if (ns){
		document.layers[item].visibility = hidden
	} else {
		eval(item + '.style.visibility = hidden')
	}
}

function show_layer(item) {
	visibility = (ns)? "show" : "visible"
	if (ns){
		document.layers[item].visibility = visibility
	} else {
		eval(item + '.style.visibility = visibility')
	}
}


function checkphone(object_value)
    {

    if (object_value.length == 0)
        return true;
    if (object_value.length != 12)
        return false;
	// check if first 3 characters represent a valid area code
    if (!_CF_checknumber(object_value.substring(0,3)))
		return false;
    else
	if (!_CF_numberrange((eval(object_value.substring(0,3))), 100, 1000))
		return false;

	// check if area code/exchange separator is either a'-' or ' '
	if (object_value.charAt(3) != "-" && object_value.charAt(3) != " ")
        return false;
	// check if  characters 5 - 7 represent a valid exchange
    if (!_CF_checknumber(object_value.substring(4,7)))
		return false;
    else
	if (!_CF_numberrange((eval(object_value.substring(4,7))), 100, 1000))
		return false;
	// check if exchange/number separator is either a'-' or ' '
	if (object_value.charAt(7) != "-" && object_value.charAt(7) != " ")
        return false;
	// make sure last for digits are a valid integer
	if (object_value.charAt(8) == "-" || object_value.charAt(8) == "+")
        return false;
	else
	{
		return (_CF_checkinteger(object_value.substring(8,12)));
	}
    }
	
function _CF_numberrange(object_value, min_value, max_value)
    {
    // check minimum
    if (min_value != null)
	{
        if (object_value < min_value)
		return false;
	}

    // check maximum
    if (max_value != null)
	{
	if (object_value > max_value)
		return false;
	}
	
    //All tests passed, so...
    return true;
    }
	
function _CF_checknumber(object_value)
    {
    //Returns true if value is a number or is NULL
    //otherwise returns false	

    if (object_value.length == 0)
        return true;

    //Returns true if value is a number defined as
    //   having an optional leading + or -.
    //   having at most 1 decimal point.
    //   otherwise containing only the characters 0-9.
	var start_format = " .+-0123456789";
	var number_format = " .0123456789";
	var check_char;
	var decimal = false;
	var trailing_blank = false;
	var digits = false;

    //The first character can be + - .  blank or a digit.
	check_char = start_format.indexOf(object_value.charAt(0))
    //Was it a decimal?
	if (check_char == 1)
	    decimal = true;
	else if (check_char < 1)
		return false;
        
	//Remaining characters can be only . or a digit, but only one decimal.
	for (var i = 1; i < object_value.length; i++)
	{
		check_char = number_format.indexOf(object_value.charAt(i))
		if (check_char < 0)
			return false;
		else if (check_char == 1)
		{
			if (decimal)		// Second decimal.
				return false;
			else
				decimal = true;
		}
		else if (check_char == 0)
		{
			if (decimal || digits)	
				trailing_blank = true;
        // ignore leading blanks

		}
	        else if (trailing_blank)
			return false;
		else
			digits = true;
	}	
    //All tests passed, so...
    return true
    }



function _CF_checkrange(object_value, min_value, max_value)
    {
    //if value is in range then return true else return false

    if (object_value.length == 0)
        return true;


    if (!_CF_checknumber(object_value))
	{
	return false;
	}
    else
	{
	return (_CF_numberrange((eval(object_value)), min_value, max_value));
	}
	
    //All tests passed, so...
    return true;
    }
	
function _CF_checkinteger(object_value)
    {
    //Returns true if value is a number or is NULL
    //otherwise returns false	

    if (object_value.length == 0)
        return true;

    //Returns true if value is an integer defined as
    //   having an optional leading + or -.
    //   otherwise containing only the characters 0-9.
	var decimal_format = ".";
	var check_char;

    //The first character can be + -  blank or a digit.
	check_char = object_value.indexOf(decimal_format)
    //Was it a decimal?
    if (check_char < 1)
	return _CF_checknumber(object_value);
    else
	return false;
    }

	
function js_dump(obj) {
	var parms = '';
	parms += js_dump_loop(obj, 0);
	//parms=parms.replace(/\[object\]/g,"OBJECT");
	parms=parms.replace(/\&/g,"&amp;");
	parms=parms.replace(/\</g,"&lt;");
	parms=parms.replace(/\>/g,"&gt;");
	parms=parms.replace(/-=-=-=/g,"<table border=1 cellpadding=2 cellspacing=0 bgcolor=aaaaff bordercolor=Blue>");
	parms=parms.replace(/=-=-=-/g,"</table>");
	parms=parms.replace(/::::::/g,"<tr>");
	parms=parms.replace(/;;;;;;/g,"</tr>");
	parms=parms.replace(/\/\/\/\/\/\//g,"<td valign=top>");
	parms=parms.replace(/\\\\\\\\\\\\/g,"</td>");
	
	ashdkflnerlknfsekjngldfg=window.open();
	ashdkflnerlknfsekjngldfg.document.write(parms);
}

function js_dump_loop(obj, tnum) {
	var parms = '-=-=-=';
	var myObj = obj;
	for (a in myObj) {
	  parms += ":::::://////"+a+"\\\\\\\\\\\\//////";
	  
//	  if (myObj[a] == "[object]") {
//		parms += js_dump_loop(myObj[a], tnum+1);
//	  } else {
	    parms += myObj[a];
//	  }
	  parms += "\\\\\\\\\\\\;;;;;;";
	}
	parms += "=-=-=-";
	return parms;
}


function popNew(loc,name,width,height) {
	pop = window.open(loc,name,'scrollbars,status,resizable,width=' + width + ',height=' + height);
	pop.focus();
}

function popMenu(loc,name,width,height) {
	pop = window.open(loc,name,'scrollbars,menubar,status,resizable,width=' + width + ',height=' + height);
	pop.focus();
}

function popNewResize(loc,name,width,height) {
	pop = window.open(loc,name,'status,resizable,width=' + width + ',height=' + height);
	pop.focus();
}

function popRestricted(loc,name,width,height) {
	pop = window.open(loc,name,'status,width=' + width + ',height=' + height);
	pop.focus();
}

function popNewNoChrome(loc,name,width,height) {
	pop = window.open(loc,name,'width=' + width + ',height=' + height);
	pop.focus();
}

function popReal(loc,name,width,height) {
	pop = window.open(loc,name,'scrollbars,status,toolbar,menubar,directories,location,resizable,width=' + width + ',height=' + height);
	pop.focus();
}


	
/* Function to swap a font tag's font class */
function NC_swapClass(textID,myClass) {
	obj=MM_findObj(textID);
	if (obj) obj.className=myClass;
}

/* Function to find a document object */
function MM_findObj(n, d) { //v3.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}

/* Functions that swap layers - used only in product nav menu */
function MM_showHideLayers() { //v3.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
    obj.visibility=v; }
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

/* Function that handle preload. */
function MM_preloadImages() { //v3.0
 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
   var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
   if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_checkPlugin(plgIn, theURL, altURL, autoGo) { //v3.0
  var ok=false; document.MM_returnValue = false;
  with (navigator) if (appName.indexOf('Microsoft')==-1) ok=(plugins && plugins[plgIn]);
  else if (appVersion.indexOf('3.1')==-1) { //not Netscape or Win3.1
    if (plgIn.indexOf("Flash")!=-1 && window.MM_flash!=null) ok=window.MM_flash;
    else if (plgIn.indexOf("Director")!=-1 && window.MM_dir!=null) ok=window.MM_dir;
    else ok=autoGo; }
  if (!ok) theURL=altURL; if (theURL) window.location=theURL;
}

/* used to submit forms easily within divs, or from within other forms */
function submitForm(frm) { //v3.0
	var obj = MM_findObj(frm);
	obj.submit();
}

function submitFormCheck(form) {
	var obj = MM_findObj(form);
	var frmname = "_CF_check" + form + "(obj)";
	var success = eval(frmname);
	if (success) {
		obj.submit();
	}
	//return success;
}


