var skipPngFix = false;

// code yanked from the Yahoo media player. Thanks, Yahoo.
if (! ("console" in window) || !("firebug" in console)) {
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group"
                 , "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
    window.console = {};
    for (var i = 0; i <names.length; ++i) window.console[names[i]] = function() {};
}


String.prototype.stripHTML = function(){

        // What a tag looks like

        var matchTag = /<(?:.|\s)*?>/g;

        // Replace the tag

        return this.replace(matchTag, "");

};

function getCurrentStyle(elem, prop)
{
   if( elem.currentStyle )
   {  
      var ar = prop.match(/\w[^-]*/g);
      var s = ar[0];
      
      for(var i = 1; i < ar.length; ++i)		   
      {
         s += ar[i].replace(/\w/, ar[i].charAt(0).toUpperCase());
      }
           
      return elem.currentStyle[s]
   }
   else if( document.defaultView.getComputedStyle )
   {
      return document.defaultView.getComputedStyle(elem, null).getPropertyValue(prop);
   }
}

function setCurrentTab(tabName) {
	//var tabNav = $('tabNav');
	//alert("Setting tab");
	var tabNavs = $$('#tabNav li');
	var tabs = $$('.tab');
	console.log("Setting tab, count = " + tabNavs.length);
	for (var i = 0; i < tabNavs.length;i++) {
		var tabNav = tabNavs[i];
		tabNav.removeClassName('tabSelected');
		console.log("Checking nav = " + tabNav.id);
		if (tabNav.id == "tabNav" + tabName) {
			console.log("Setting nav = " + tabNav.id);
			tabNav.addClassName('tabSelected');
		}
		
		var tab = tabs[i];
		if (tab.id == "tab" + tabName) {
			tab.style.display="inline";
		} else {
			tab.style.display="none";
		}
	}
	
	var currentTab = $('currentTab');
	if (currentTab != null)
		currentTab.value = tabName;
	
}

function setFlashMessage(msg) {
	var iframe = window.frames["contentPanelContainerFrame"];
	var flashMessageContainer;
	var flashMessage;
	if (iframe == null) {
		flashMessageContainer = document.getElementById("flashMessageContainer");
		flashMessage = document.getElementById("flashMessage");
	} else {
		flashMessageContainer = iframe.getElementById("flashMessageContainer");
		flashMessage = iframe.getElementById("flashMessage");
	}
	flashMessageContainer.style.display = "inline";
	flashMessage.innerHTML = msg;
}

function setFlashMessageError(msg) {
	
	var iframe = window.frames["contentPanelContainerFrame"];
	var flashMessageContainer;
	var flashMessage;
	if (iframe == null) {
		flashMessageContainer = document.getElementById("flashMessageErrorContainer");
		flashMessage = document.getElementById("flashMessageError");
	} else {
		flashMessageContainer = iframe.getElementById("flashMessageErrorContainer");
		flashMessage = iframe.getElementById("flashMessageError");
	}
	flashMessageContainer.style.display = "inline";
	flashMessage.innerHTML = msg;
}

function getCurrentStyleNumeric(elem,prop) {
	var valueStr = getCurrentStyle(elem,prop);
   	var pxIndex = valueStr.toLowerCase().indexOf("px"); 
   	if (pxIndex != -1) {
   		valueStr = valueStr.substring(0, pxIndex);
   		//console.log("Margin Str: " + marginStr);
   	}
   	return parseInt(valueStr);
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

function hoverWillFit(width, height, x, y, mapSize) {
	return ( x + width < mapSize.width) && (y + height < mapSize.height); 
}

var placeHolderVisibility = new Object();

function isPlaceHolderVisible(elemId) {
	return placeHolderVisibility[elemId];
}

function setPlaceHolder(elemId, text) {
	var e = document.getElementById(elemId);
	//console.log("Setting place holder");	
	e.placeHolder = text;
	placeHolderVisibility[elemId] = false;
}

function showPlaceHolder(elemId) {
	var e = document.getElementById(elemId);
	//console.log("Trying to show placeholder", elemId, placeHolderVisibility[elemId], e.value);
	if (e.value == null || e.value == "") {
		//console.log("Showing placeholder", elemId, placeHolderVisibility[elemId]);
		placeHolderVisibility[elemId] = true;
		e.value = e.placeHolder;
		//console.log("Showed placeholder", elemId, placeHolderVisibility[elemId]);
	}
}

function hidePlaceHolder(elemId) {
	var e = document.getElementById(elemId);
	console.log("Trying to hide placeholder", elemId, placeHolderVisibility[elemId]);
	if (placeHolderVisibility[elemId] == true) {
		e.value = "";
		placeHolderVisibility[elemId] = false;
	}
}

function getElementPosition(elemID) {
	return getElementPositionObj(document.getElementById(elemID));
}

function getElementPositionObj(elem) {
    var offsetTrail = elem;
    var offsetLeft = 0;
    var offsetTop = 0;
    while (offsetTrail) {
        offsetLeft += offsetTrail.offsetLeft;
        offsetTop += offsetTrail.offsetTop;
        offsetTrail = offsetTrail.offsetParent;
    }
    if (BrowserDetect.browser == "Safari") {
        //offsetLeft += document.body.leftMargin;
        offsetTop -= 4;//document.body.topMargin;
    }
    return {left:offsetLeft,top:offsetTop};
}


var Cookie = {
  set: function(name, value, daysToExpire) {
    var expire = '';
    if (daysToExpire != null) {
      var d = new Date();
      d.setTime(d.getTime() + (86400000 * parseFloat(daysToExpire)));
      expire = '; expires=' + d.toGMTString();
    }
    return (document.cookie = escape(name) + '=' + escape(value || '') + expire);
  },
  get: function(name) {
    var cookie = document.cookie.match(new RegExp('(^|;)\s*' + escape(name) + '=([^;\s]*)'));
    return (cookie ? unescape(cookie[2]) : null);
  },
  erase: function(name) {
    var cookie = Cookie.get(name) || true;
    Cookie.set(name,'', -1);
    return cookie;
  },
  accept: function() {
    if (typeof navigator.cookieEnabled == 'boolean') {
      return navigator.cookieEnabled;
    }
    Cookie.set('_test', '1');
    return (Cookie.erase('_test') === '1');
  }
};

var isIE6 = BrowserDetect.browser == "Explorer" && BrowserDetect.version < 7; 

function updatePngs(element) {
	if (BrowserDetect.browser == "Explorer" && BrowserDetect.version < 7 && skipPngFix == false) {
		if (element)
			supersleight.runKids(element);
		else
			supersleight.run();
	}
}

function getPageSizeWithScroll(){
	if (window.innerHeight && window.scrollMaxY) {// Firefox
		yWithScroll = window.innerHeight + window.scrollMaxY;
		xWithScroll = window.innerWidth + window.scrollMaxX;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		yWithScroll = document.body.scrollHeight;
		xWithScroll = document.body.scrollWidth;
	} else { // works in Explorer 6 Strict, Mozilla (not FF) and Safari
		yWithScroll = document.body.offsetHeight;
		xWithScroll = document.body.offsetWidth;
  	}
	var arrayPageSizeWithScroll = new Array(xWithScroll,yWithScroll);
	//alert( 'The height is ' + yWithScroll + ' and the width is ' + xWithScroll );
	return arrayPageSizeWithScroll;
}

function getViewport() {
	 var viewportwidth;
	 var viewportheight;
	 var viewportoffset = 0;
	 
	 // the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
	 
	 if (typeof window.innerWidth != 'undefined')
	 {
	      viewportwidth = window.innerWidth,
	      viewportheight = window.innerHeight
	      
	 }
	 
	// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
	
	 else if (typeof document.documentElement != 'undefined'
	     && typeof document.documentElement.clientWidth !=
	     'undefined' && document.documentElement.clientWidth != 0)
	 {
	       viewportwidth = document.documentElement.clientWidth,
	       viewportheight = document.documentElement.clientHeight,
	       viewportoffset = document.documentElement.scrollTop
	 }
	 
	 // older versions of IE
	 
	 else
	 {
	       viewportwidth = document.getElementsByTagName('body')[0].clientWidth,
	       viewportheight = document.getElementsByTagName('body')[0].clientHeight,
	       viewportoffset = document.getElementsByTagName('body')[0].scrollTop
	 }
	
	var viewportSize = new Array(viewportwidth,viewportheight, viewportoffset);
	//alert( 'The height is ' + yWithScroll + ' and the width is ' + xWithScroll );
	return viewportSize;
}

