/***** Global variables *****/
g_DEV_PORT = 8888;
if (window.location.port == g_DEV_PORT) {
	g_DEV = true;
} else {
	g_DEV = false;
}


if (g_DEV) {
	//g_ROOT_URL = "http://seamap.env.duke.edu:8888";
	g_ROOT_URL = "http://green.env.duke.edu:8888";
	BASE_PLONE_URL = '/plone_dev/';
	BASE_URL = '/dev/';
	g_WMS_URL = g_ROOT_URL + BASE_URL + "mapservice/wms/";
} else {
	g_ROOT_URL = "http://seamap.env.duke.edu";
	BASE_PLONE_URL = '/';
	BASE_URL = '/prod/';
	g_WMS_URL = g_ROOT_URL + "/wms/";
}

// The global variables should be modified based on production or development environment
g_STAT_CENTER_PLONE_URL = g_ROOT_URL + BASE_PLONE_URL + "statcenter/";
g_STAT_CENTER_URL = g_ROOT_URL + BASE_URL + "services/statcenter/";
g_SPECIES_PLONE_URL = g_ROOT_URL + BASE_PLONE_URL + "species/";
g_SPECIES_URL = g_ROOT_URL + BASE_URL + "services/species/";
g_DATASETS_PLONE_URL = g_ROOT_URL + BASE_PLONE_URL + "datasets/";
g_DATASETS_URL = g_ROOT_URL + BASE_URL + "services/datasets/";
g_EXTRACTION_PLONE_URL = g_ROOT_URL + BASE_PLONE_URL + "extraction/";
g_EXTRACTION_URL = g_ROOT_URL + BASE_URL + "services/extraction/";
g_ESAS_PLONE_URL = g_ROOT_URL + BASE_PLONE_URL + "esas/";
g_ESAS_URL = g_ROOT_URL + BASE_URL + "services/esas/";

g_MAPSERVICE_URL = g_ROOT_URL + BASE_URL + "mapservice/";


/***** Common Javascript Functions *****/
/***** Date/Time format *****/
// Obtained from http://www.codeproject.com/jscript/dateformat.asp
// a global month names array
var gsMonthNames = new Array(
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
);

// a global day names array
var gsDayNames = new Array(
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday'
);

// the date format prototype
Date.prototype.format = function(f)
{
    if (!this.valueOf())
        return '&nbsp;';

    var d = this;

    return f.replace(/(yyyy|mmmm|mmm|mm|dddd|ddd|dd|hh|nn|ss|a\/p)/gi,
        function($1)
        {
            switch ($1.toLowerCase())
            {
            case 'yyyy': return d.getFullYear();
            case 'mmmm': return gsMonthNames[d.getMonth()];
            case 'mmm':  return gsMonthNames[d.getMonth()].substr(0, 3);
            //case 'mm':   return (d.getMonth() + 1).zf(2);
            case 'mm':   return leading_zero(d.getMonth() + 1);
            case 'dddd': return gsDayNames[d.getDay()];
            case 'ddd':  return gsDayNames[d.getDay()].substr(0, 3);
            //case 'dd':   return d.getDate().zf(2);
            case 'dd':   return leading_zero(d.getDate());
            //case 'hh':   return ((h = d.getHours() % 12) ? h : 12).zf(2);
            case 'hh':   return leading_zero((h = d.getHours() % 12) ? h : 12);
            //case 'nn':   return d.getMinutes().zf(2);
            case 'nn':   return leading_zero(d.getMinutes());
            //case 'ss':   return d.getSeconds().zf(2);
            case 'ss':   return leading_zero(d.getSeconds());
            case 'a/p':  return d.getHours() < 12 ? 'a' : 'p';
            }
        }
    );
}

function leading_zero(value) {
	if (value.toString().length == 1) {
		value = '0' + value.toString();
	}

	return value;
}


/***** Get object for the element
divName: ID of the element
*****/
function getObject(divName) {
	var obj = document.all && document.all(divName) || document.getElementById && document.getElementById(divName);
	return obj;
}

function closeDiv(divName) {
	var obj = getObject(divName);
	obj.style.display = "none";
}

function Trim(str){
	// Eliminate spaces
    str = str.replace(/^[ ?]+/,"");
    str = str.replace(/[ ?]+$/,"");

    // Eliminate carridge return
    str = str.replace(/^[\n?]+/,"");
    str = str.replace(/[\n?]+$/,"");
    return(str);
}

/***** Show Terms of Use in a floating DIV
The calling page should have the following DIV tag
<div id="legalese_content"
	style="position:absolute; top:200px; left:300px; display:none;
			background:#dee7ec; width:600px; padding: 20px; border-color:#007700; border-width:1px; border-style:solid;">
</div>

The scripts use AJAX. Thus the calling page should include AJAX-related scripts.
http://seamap.env.duke.edu/mapservice/scripts/ajax_include.js
http://seamap.env.duke.edu/mapservice/scripts/identify_browser.js
*****/
var terms_of_use_status = false;
var terms_of_use_div = "legalese_content";

function legalese(download_url) {
	url = g_ROOT_URL + "/about/legalese_content_ajax?url=" + download_url;
	//alert(url);
	//sendRequest2(show_legalese, "", "GET", url, true);
	new Ajax.Request(url,
		{
			method: 'GET',
			onSuccess: show_legalese
		});

	return true;
}

function show_legalese(oj) {
	var div_top;
	var adjust = 10;

	res  = oj.responseText;
	$("legalese_content").update(res);
	$("legalese_content").show();

	place_floating_div_at_top(objName, 10);
	return true;
}

function place_floating_div_at_top(objName, adjust) {
	var div_top;
	var adjust;
	var objDiv = $(objName);

	if (is_ie) {
		if (document.documentElement && document.documentElement.scrollTop)	{
			div_top = document.documentElement.scrollTop + adjust;
		}
		else if (document.body)	{
			  div_top = document.body.scrollTop + adjust;
		}
		objDiv.style.top = div_top;
	} else {
		div_top = window.pageYOffset + adjust;
		objDiv.style.top = div_top + "px";
	}
	return true;
}


function load_terms_of_use(param) {
	url = g_ROOT_URL + "/about/legalese_content_ajax?" + param;
	//alert(url);
	//sendRequest2(terms_of_use_loaded, "", "GET", url, false);
	new Ajax.Request(url,
		{
			method: 'GET',
			onSuccess: terms_of_use_loaded,
			asynchronous: false
		});

	return true;
}

function terms_of_use_loaded(oj) {
	res  = oj.responseText;
	$(terms_of_use_div).update(res);
	return true;
}

function show_terms_of_use (divName) {
	var divObj = $(divName);
	var div_buffer = 20;		// 20 is arbitrary

	var div_top;
	if (is_ie) {
		div_top = document.documentElement.scrollTop + div_buffer;
		divObj.style.top = div_top;
	} else {
		div_top = window.pageYOffset + div_buffer;
		divObj.style.top = div_top + "px";
	}
	divObj.style.display = "block";
	return true;
}

function agreed_on_terms_of_use() {
	var url = g_ROOT_URL + "/termsCheck_ajax";
	var data = "action=agreed";
	//alert(url);
	//sendRequest2(set_terms_of_use_status, data, "POST", url, false);
	new Ajax.Request(url,
		{
			parameters: data,
			onSuccess: set_terms_of_use_status,
			asynchronous: false
		});

	return true;
}

function is_terms_of_use_agreed(param) {
	var url = g_ROOT_URL + "/termsCheck_ajax";
	var data = "action=check";
	new Ajax.Request(url,
		{
			parameters: data,
			onSuccess: set_terms_of_use_status,
			asynchronous: false
		});
	if (terms_of_use_status == false) {
		load_terms_of_use(param);
		show_terms_of_use(terms_of_use_div);
	}
	return terms_of_use_status;
}

function set_terms_of_use_status(oj) {
	res = oj.responseText;
	//alert(res);
	if (res == 'true') {
		terms_of_use_status = true;
	} else {
		terms_of_use_status = false;
	}
	return true;
}


function GetWindowSize(type){
    switch(type){
	case "width":
		if(document.all){
			if(document.documentElement && document.documentElement.clientWidth){ // IE
			   return document.documentElement.clientWidth;
			}
			else if(document.body && document.body.clientWidth){
			   return document.body.clientWidth;
			}
		}else if(document.layers){
			return(innerWidth);
		}else{
			return(innerWidth);
			//return(-1);
		}
	break;
	case "height":
		if(document.all){
			if(document.documentElement && document.documentElement.clientHeight){ // IE
				return (document.documentElement.clientHeight);
			}
			else if(document.body && document.body.clientHeight){
		 		return (document.body.clientHeight);
			}
		}else if(document.layers){
			return(innerHeight);
		}else{
			return(innerHeight);
			//return(-1);
		}
	break;
	default:
		return(-1);
	break;
    }
}


function isNumeric(x) {
	// I use this function like this: if (isNumeric(myVar)) { }
	// regular expression that validates a value is numeric
	var RegExp = /^[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?\b/; // Note: this WILL allow a number that ends in a decimal: -452.
	// compare the argument to the RegEx
	// the 'match' function returns 0 if the value didn't match
	var result = x.match(RegExp);
	return result;
}

function wait(miliseconds) {
	var date = new Date();
	var curDate = null;

	do {
		curDate = new Date();
	} while(curDate-date < miliseconds);
}