// hide any DOM element by ID name
function hide(element) {
	document.getElementById(element).style.display='none';
}

// show (un-hide) any DOM element by ID name
function show(element) {
	document.getElementById(element).style.display='';
}

function show_layover(l_type, calling_object, expand_to_side, l_title, l_image, l_sub_title, l_text, l_extras) {
	// hide miles dropdown box on event calendar (compensating for IE's ignoring z-index on form elements)
	if (document.getElementById("ctl00_ContentBlock_ctlEventCalNearBy1_drpDistance")) {
		document.getElementById("ctl00_ContentBlock_ctlEventCalNearBy1_drpDistance").style.visibility='hidden';
	}

	// add an 'onmouseout' event to the calling object (usually an anchor tag)
	// onmouseout, hide the layover
	// this will overwrite any existing onmouseout functionality for the calling object (possibly a problem with .net)
	calling_object.onmouseout = function () { hide('layover'); 
		if (document.getElementById("ctl00_ContentBlock_ctlEventCalNearBy1_drpDistance")) {
			document.getElementById("ctl00_ContentBlock_ctlEventCalNearBy1_drpDistance").style.visibility='visible';
		}
	} 
	
	// l_ represents layover - should help prevent name collision
	
	// make sure that the layover is hidden
	hide('layover');
	
	//reset layers
    show('layover_title');
	show('layover_sub_title');
	show('layover_image_container');
	show('layover_extras');
	
	//console.log('Window: '+wrapperHeight+'; layover: '+layoverHeight+'; layoverTop: '+layoverTop+'; total: '+layoverTotal+'; scrolltop: '+scrollTop);
		
	// what type of layover is this?
	/*
		1 - directory => title, address, image on right w border, copy, optional extras in footer
		2 - destination => title, empty, image on left no border, copy, empty
		3 - maps and guides => title, empty, image on right w border, copy, empty
		4 - welcome center => title, address, image on left no border, copy, empty
		5 - simple (subscriptions) => title, empty, empty, copy, empty
		6 - snow report => title, location, image with border on right, copy, icons
		7 - super simple (TGW rollover) => empty, empty, empty, copy, empty 
		999 - page preview ==> page url, large image
	*/
	
	switch(l_type) {
		case 1:
			document.getElementById('layover_image_container').className = 'dir'
			if (l_image == "") { 
				hide('layover_image');
			} else {
				document.getElementById('layover_image').className = 'dir'; // border and positioning
			}
			document.getElementById('layover_sub_title').className = 'bold'; // address is bold
			
			break;
		case 2:
			document.getElementById('layover_image').className = 'dest'; // border and positioning
			//document.getElementById('layover_text').className = 'first_line'; // first line is bold
			//document.getElementById('layover_text').style.marginLeft = '65px';
			
			document.getElementById('layover_image_container').className = 'float_left';
			document.getElementById('layover_text').className = 'first_line float_right';
			document.getElementById('layover_text').style.width = '215px';			
			
			//hide('layover_sub_title');
			show('layover_image_container');
			hide('layover_extras');
			break;
		case 3:
			document.getElementById('layover_image_container').className = 'mg float_right';
			document.getElementById('layover_image').className = 'mg'; // border and positioning
			document.getElementById('layover_image').style.border = '4px solid #999999'; // ie6 is great!
			show('layover_image');
			hide('layover_sub_title');
			hide('layover_extras');
			break;
		case 4:
			document.getElementById('layover_image').className = 'dest'; // border and positioning
			document.getElementById('layover_image_container').className = 'dest float_left';
			document.getElementById('layover_sub_title').className = 'float_right first_line'; // first line of address is bold
			document.getElementById('layover_sub_title').style.height = '40px'; // clear the image - make room for the description
			document.getElementById('layover_sub_title').style.width = '210px';
			document.getElementById('layover_text').style.clear = 'both';
			//hide('layover_extras');
			//document.getElementById('layover_text').style.clear = 'left';
			document.getElementById('layover_text').innerHTML = '<strong>Description</strong><br /> ' + l_text; // prepend
			break;
		case 5:
			hide('layover_sub_title');
			hide('layover_image');
			hide('layover_extras');
			document.getElementById('layover_body').style.paddingBottom = '1px'; // tighten up the bottom
			break;
		case 6:
			document.getElementById('layover_image_container').className = 'dir' // image on the right
			if (l_image == "" || l_image == "/upload/images/") { 
				hide('layover_image');
			} else {
				show('layover_image');
				document.getElementById('layover_image').className = 'dir'; // border
				document.getElementById('layover_image').style.width = '66px';
				document.getElementById('layover_image').style.height = '66px';
			}
			
			document.getElementById('layover_sub_title').className = 'bold inline ie6'; // address is bold
			
			if (l_extras == "") {
				hide('layover_extras');
			}
			break;
		case 7:
		    hide('layover_title');
			hide('layover_sub_title');
			hide('layover_image_container');
			hide('layover_extras');
			document.getElementById('layover_text').style.marginBottom = '5px'; // tighten up the bottom
			document.getElementById('layover_body').style.paddingBottom = '1px'; // tighten up the bottom
			break;
		case 999:		
			// strip off the http:// ....com/ portion of the name
			l_position = l_title.indexOf('.com');
			document.getElementById('layover_title_text').innerHTML = l_title.substring(l_position + 4);
			hide('layover_sub_title');
			hide('layover_text');
			hide('layover_extras');

			// brief time delay
			//time_delay(500);
			break;
	}

	// get the position of the calling object (the anchor tag)
	object_position = find_position(calling_object);	
	
	//are we displaying a title?
	var topAdjustment = 0;
	if (document.getElementById('layover_title').style.display == 'none') {
	    topAdjustment = 17;
	}
	
	// reposition the layover
	if (expand_to_side == "right") {
		// left -- left edge of calling_object, plus the width of the calling object
		// top -- top of calling_object, minus a number to roughly position the 'point' in the correct position
		document.getElementById('layover').style.left = object_position[0] + calling_object.offsetWidth + 5 + 'px';
		document.getElementById('layover').style.top = (object_position[1] - 65 + topAdjustment) + 'px';	

		// hide the right pointer, show the left
		//IE7 doesn't properly hide the DIV. remove the BG image to get the same effect.
		document.getElementById('layover_pointer_right').style.backgroundImage = 'none';
		hide('layover_pointer_right');
		document.getElementById('layover_pointer_left').style.backgroundImage = '';
		show('layover_pointer_left');
	} else {
		document.getElementById('layover').style.left = object_position[0] - 330 + 'px';
		document.getElementById('layover').style.top = (object_position[1] - 65 + topAdjustment) + 'px';	

		// hide the left pointer, show the right
		//IE7 doesn't properly hide the DIV. remove the BG image to get the same effect.
		document.getElementById('layover_pointer_left').style.backgroundImage = 'none';
		hide('layover_pointer_left');
		document.getElementById('layover_pointer_right').style.backgroundImage = '';
		show('layover_pointer_right');
	}
		
	// update the content of the window
	document.getElementById('layover_title_text').innerHTML = l_title;
	//make sure there's an image, otherwise will request the page itself again
	if (l_image != undefined && l_image != '') {
	    document.getElementById('layover_image').src = l_image;
	}
	document.getElementById('layover_sub_title').innerHTML=l_sub_title;
	document.getElementById('layover_text').innerHTML=l_text;
	if (l_extras != undefined) document.getElementById('layover_extras').innerHTML=l_extras;
	
	//determine window offset, requires jQuery and dimensions plugin
	var layover = JQ('#layover');
	var scrollTop = JQ(layover).scrollTop();
	var wrapperHeight = JQ('#outer').height();
	var layoverHeight = JQ(layover).height();
	var layoverTop = parseInt(JQ(layover).css('top'));
	var layoverTotal = layoverHeight + layoverTop;
	if(layoverTotal > wrapperHeight){	
		var layoverDiff = layoverTotal-wrapperHeight;
		JQ(layover).css({top: layoverTop-(layoverDiff)+'px'});
		var pointerPos = parseInt(JQ('#layover_pointer_left').css('top'));
	} else {
		var layoverDiff = 0;
	}
	JQ('#layover_pointer_right').add('#layover_pointer_left').css({top: (layoverDiff+57-topAdjustment)+'px'});
		
	// display the layover
	show('layover');
	
}

// from http://www.quirksmode.org/js/findpos.html#
function find_position(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

// this is used on pages with search filtering that can expand/collapse
function toggle_filter_display(element, calling_item) {
	if (document.getElementById(element).style.display == 'none') {
		document.getElementById(element).style.display = '';
		calling_item.className = 'form_label_open'
	} else {
		document.getElementById(element).style.display = 'none';
		calling_item.className = 'form_label_closed'
	}
}

// makes text search fields nice to use
function smart_clear(element) {
	if (element.defaultValue == element.value) {
		element.value = '';
	}
}

function smart_restore(element) {
	if (element.value == '') {
		element.value = element.defaultValue;
	}
}

// popup window function 
function popUp(URL,width,height) {
    if (width == undefined) width = 480;
    if (height == undefined) height = 460;
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width="+width+",height="+height+"');");
	return false;
}
// popup window function 
function popUp_withRef(URL,width,height,refURI) {
    if(this.wind == null || this.wind.closed) {
        if (width == undefined) width = 480;
        if (height == undefined) height = 460;
	    day = new Date();
	    id = day.getTime();
	    URL = URL+"?refURI="+refURI;
	    this.wind = window.open(URL, id, "'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width="+width+",height="+height+"'");
	}
	else {
	    this.wind.focus();
	}
}

// close popup and refresh parent
function WindowClose()
{
	var openerForm = opener.document.forms[0];
	//alert(openerForm.name);
	openerForm.method ="post";
	openerForm.submit();
	self.close(); 
}


// time delay borrowed from www.sean.co.uk
function time_delay(millis) {

	var the_date = new Date();
	var current_date = null;

	do { 
		current_date = new Date(); 
	}
	
	while(current_date-the_date < millis);
}

// find the height of the current browser window
// modified version - original from www.howtocreate.co.uk
function find_window_height() {
  var myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myHeight = document.body.clientHeight;
  }
  return myHeight;
}
  // Flash Player Version Detection - Rev 1.5
        // Detect Client Browser type
        // Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
        var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
        var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
        var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

        function ControlVersion()
        {
	        var version;
	        var axo;
	        var e;

	        // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	        try {
		        // version will be set for 7.X or greater players
		        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		        version = axo.GetVariable("$version");
	        } catch (e) {
	        }

	        if (!version)
	        {
		        try {
			        // version will be set for 6.X players only
			        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
        			
			        // installed player is some revision of 6.0
			        // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			        // so we have to be careful. 
        			
			        // default to the first public version
			        version = "WIN 6,0,21,0";

			        // throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			        axo.AllowScriptAccess = "always";

			        // safe to call for 6.0r47 or greater
			        version = axo.GetVariable("$version");

		        } catch (e) {
		        }
	        }

	        if (!version)
	        {
		        try {
			        // version will be set for 4.X or 5.X player
			        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			        version = axo.GetVariable("$version");
		        } catch (e) {
		        }
	        }

	        if (!version)
	        {
		        try {
			        // version will be set for 3.X player
			        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			        version = "WIN 3,0,18,0";
		        } catch (e) {
		        }
	        }

	        if (!version)
	        {
		        try {
			        // version will be set for 2.X player
			        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			        version = "WIN 2,0,0,11";
		        } catch (e) {
			        version = -1;
		        }
	        }
        	
	        return version;
        }

        // JavaScript helper required to detect Flash Player PlugIn version information
        function GetSwfVer(){
	        // NS/Opera version >= 3 check for Flash plugin in plugin array
	        var flashVer = -1;
        	if (navigator.plugins != null && navigator.plugins.length > 0) {
		        if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			        var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			        var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;			
			        var descArray = flashDescription.split(" ");
			        var tempArrayMajor = descArray[2].split(".");
			        var versionMajor = tempArrayMajor[0];
			        var versionMinor = tempArrayMajor[1];
			        if ( descArray[3] != "" ) {
				        tempArrayMinor = descArray[3].split("r");
			        } else {
				        tempArrayMinor = descArray[4].split("r");
			        }
			        var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
			        var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		        }
	        }
	        // MSN/WebTV 2.6 supports Flash 4
	        else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	        // WebTV 2.5 supports Flash 3
	        else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	        // older WebTV supports Flash 2
	        else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	        else if ( isIE && isWin && !isOpera ) {
		        flashVer = ControlVersion();
	        }	
	        return flashVer;
        }
        function cookieCheck()
        {
         /* check for a cookie */
          if (document.cookie == "") 
          {
                return false;
          } else {
           /* this sets the value to true and nothing else will happen,
               the user will be able to log on*/
                return true;
          }
        }



/* Begin functions for cookie management */
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for (var i=0; i < ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null
}

function eraseCookie(name) {
	createCookie(name, "", -1);
}

/* End cookies for cookie management */

// make sure that all site users are given a one-time warning about the use of large maps
function large_map_warning() {
	// check to see if cookie already exists - return value if it does
	// if cookie doesn't exist, ask the user if they'd like to continue
	if (readCookie("large_map_warning_issued") == "true") {
		return true; // done
	} 
	else 
	{
		// cookie has not been set yet - prompt user
		// set cookie based on response
		alert('The large map feature is a processor-intensive application. Please be warned that this map may not run properly on older computers due to slower processor speeds.');
		createCookie("large_map_warning_issued", "true", 3650);
		return true;
	}
}

// Automatically scroll a select(listbox) to the first selected item
function autoscroll(clientId)
{
    var lst = document.getElementById(clientId);
    if (lst == null) {
        alert(clientId + ' not found.');
    }
    else if ((lst.multiple==true) && (lst.length>0)) {
        if (lst[lst.length-1].selected==true) {
            lst[lst.length-1].selected=true;
            return;
        }
        else {
            lst[lst.length-1].selected=true;
            lst[lst.length-1].selected=false;
        }
        for (var i=0; i< lst.length;++i)
            if (lst[i].selected==true) {
                lst[i].selected=true;
                return;
            }
    }
};