/* Captcha image refresh */
var renewCaptchaImage = function(){
	dojo.byId('captchaImg').src = "captcha.image?" + Math.random() + (100* Math.random());
}

/* UI Controls */
/* Helper function for hiding divs */
var doFadeHide = function(id,ms,eims){
	if(dojo.byId(id)){
		dojo.lfx.html.fadeHide(dojo.byId(id),ms,dojo.lfx.easeOut(.45),function(){}).play();
	}
}
/* Helper function for showing divs */
var doFadeShow = function(id,ms,eims){
	if(dojo.byId(id)){
		dojo.lfx.html.fadeShow(dojo.byId(id),ms,dojo.lfx.easeIn(.45),function(){}).play();
	}
}
/* Helper function for swapping divs divs */
var doFadeSwap = function(oldId,newId,ms,eims){
	doRegFadeHide(oldId,ms,eims);
	doRegFadeShow(newId,ms,eims);
}
/**
* Util to toggle 'display' from 'none' to 'block'.
*/
var toggle = function(id){
	var result = dojo.html.isDisplayed(id);
	if(result == false){
		dofadeShow(id,450,450);
	}else{
		dofadeHide(id,450,450);
	}
}

var switchBlocks = function(old,blah,fadeOut/*millis for old div to fade*/,fadeIn/*millis for new div to show*/){
	if(old==blah){
		//don't bother
		return;
	}
	if(old != null){
		dojo.lfx.html.fadeHide(dojo.byId(old),fadeOut,dojo.lfx.easeIn(fadeOut),function(){}).play();
	}
	setTimeout(function(){
		dojo.lfx.html.fadeShow(dojo.byId(blah),fadeIn,dojo.lfx.easeIn(fadeIn),function(){}).play();
		currentBlock = blah;
	},fadeOut);
}
var switchBlocksHO = function(old,blah,fadeOut/*millis for old div to fade*/,fadeIn/*millis for new div to show*/
	,holdOpenBlock /* This should be a parent block that can stop the thing from collapsing when switched  */){
	if(old==blah){
		//don't bother
		return;
	}
	var currentHeight = dojo.byId(holdOpenBlock).style.height;
	dojo.byId(holdOpenBlock).style.height = dojo.byId(old).offsetHeight + "px";
	switchBlocks(old,blah,fadeOut,fadeIn);
	setTimeout(function(){
		dojo.byId(holdOpenBlock).style.height = currentHeight;
	},fadeOut + 10);
}

var doNavLoginState = function(){
	var loginDiv = dojo.byId('navLoginBtnSpan');
	loginDiv.innerHTML = "<a id=\"my_profile\" href=\"profile.do\" class=\"leftNavBtn\">My Profile</a>"

	var registerDiv = dojo.byId('navRegBtnSpan');
	registerDiv.innerHTML = "<a id=\"logout\" href=\"logout.do\" class=\"leftNavBtn\">Logout</a>"
}

var doNavLogoutState = function(){
	var loginDiv = dojo.byId('navLoginBtnSpan');
	loginDiv.innerHTML = "<a id=\"register\" href=\"registerUserForm.do\" class=\"leftNavBtn\">Register</a>"

	var registerDiv = dojo.byId('navRegBtnSpan');
	registerDiv.innerHTML = "<a id=\"login\" href=\"loginForm.do\" class=\"leftNavBtn\">Login</a>"
}


 /**
 * The INFLUX global namespace object
 * @class INFLUX
 * @static
 */
if (typeof INFLUX == "undefined") {
    INFLUX = {};
}
INFLUX.namespace = function(ns) {
    if (!ns || !ns.length) {
        return null;
    }

    var levels = ns.split(".");
    var nsobj = INFLUX;

    // INFLUX is implied, so it is ignored if it is included
    for (var i=(levels[0] == "INFLUX") ? 1 : 0; i<levels.length; ++i) {
        nsobj[levels[i]] = nsobj[levels[i]] || {};
        nsobj = nsobj[levels[i]];
    }

    return nsobj;
};
INFLUX.namespace("widgets");

/* This makes sure outside links popup new window */
var doPopupFix = function(){
	var excludedomains=["influxinsights.com"];
	var auto=1;
	var excludedomains=excludedomains.join("|");
	rexcludedomains=new RegExp(excludedomains, "i");
	function dynamiclink(){
	    if (auto||(!auto&&document.targetmain.targetnew.checked)){
	        for (i=0; i<=(document.links.length-1); i++) {
	            if (document.links[i].hostname.search(rexcludedomains)==-1&&document.links[i].href.indexOf("http:")!=-1);
	                document.links[i].target="_blank";
	        }
	    }
	    else
	        for (i=0; i<=(document.links.length-1); i++) {
	            if (document.links[i].hostname.indexOf(mydomain)==-1)
	                document.links[i].target="";
	        }
	}
	if (auto)
	    window.onload=dynamiclink;
}
/* dojo.addOnLoad( doPopupFix );//turned off for dev */

/***********************************************
* Cool DHTML tooltip script II- ? Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
***********************************************/

var offsetfromcursorX=15 //Customize x offset of tooltip
var offsetfromcursorY=15 //Customize y offset of tooltip

var offsetdivfrompointerX=10 //Customize x offset of tooltip DIV relative to pointer image
var offsetdivfrompointerY=14 //Customize y offset of tooltip DIV relative to pointer image. Tip: Set it to (height_of_pointer_image-1).

document.write('<div id="dhtmltooltip"></div>') //Write out tooltip DIV
document.write('<img id="dhtmlpointer" src="img/tooltip_arrow.gif">') //Write out pointer image

var ie=document.all
var ns6=document.getElementById && !document.all
var enabletip=false
if (ie||ns6)
var tipobj=document.all? document.all["dhtmltooltip"] : document.getElementById? document.getElementById("dhtmltooltip") : ""

var pointerobj=document.all? document.all["dhtmlpointer"] : document.getElementById? document.getElementById("dhtmlpointer") : ""

function ietruebody(){
return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function ddrivetip(thetext, thewidth, thecolor){
if (ns6||ie){
if (typeof thewidth!="undefined") tipobj.style.width=thewidth+"px"
if (typeof thecolor!="undefined" && thecolor!="") tipobj.style.backgroundColor=thecolor
tipobj.innerHTML=thetext
enabletip=true
return false
}
}

function positiontip(e){
if (enabletip){
var nondefaultpos=false
var curX=(ns6)?e.pageX : event.clientX+ietruebody().scrollLeft;
var curY=(ns6)?e.pageY : event.clientY+ietruebody().scrollTop;
//Find out how close the mouse is to the corner of the window
var winwidth=ie&&!window.opera? ietruebody().clientWidth : window.innerWidth-20
var winheight=ie&&!window.opera? ietruebody().clientHeight : window.innerHeight-20

var rightedge=ie&&!window.opera? winwidth-event.clientX-offsetfromcursorX : winwidth-e.clientX-offsetfromcursorX
var bottomedge=ie&&!window.opera? winheight-event.clientY-offsetfromcursorY : winheight-e.clientY-offsetfromcursorY

var leftedge=(offsetfromcursorX<0)? offsetfromcursorX*(-1) : -1000

//if the horizontal distance isn't enough to accomodate the width of the context menu
if (rightedge<tipobj.offsetWidth){
//move the horizontal position of the menu to the left by it's width
tipobj.style.left=curX-tipobj.offsetWidth+"px"
nondefaultpos=true
}
else if (curX<leftedge)
tipobj.style.left="5px"
else{
//position the horizontal position of the menu where the mouse is positioned
tipobj.style.left=curX+offsetfromcursorX-offsetdivfrompointerX+"px"
pointerobj.style.left=curX+offsetfromcursorX+"px"
}

//same concept with the vertical position
if (bottomedge<tipobj.offsetHeight){
tipobj.style.top=curY-tipobj.offsetHeight-offsetfromcursorY+"px"
nondefaultpos=true
}
else{
tipobj.style.top=curY+offsetfromcursorY+offsetdivfrompointerY+"px"
pointerobj.style.top=curY+offsetfromcursorY+"px"
}
tipobj.style.visibility="visible"
if (!nondefaultpos)
pointerobj.style.visibility="visible"
else
pointerobj.style.visibility="hidden"
}
}

function hideddrivetip(){
if (ns6||ie){
enabletip=false
tipobj.style.visibility="hidden"
pointerobj.style.visibility="hidden"
tipobj.style.left="-1000px"
tipobj.style.backgroundColor=''
tipobj.style.width=''
}
}

document.onmousemove=positiontip

// DETECT BROWSER
function BrowserDetect() {
  var ua = navigator.userAgent.toLowerCase();

  // browser engine name
  this.isGecko       = (ua.indexOf('gecko') != -1 && ua.indexOf('safari') == -1);
  this.isAppleWebKit = (ua.indexOf('applewebkit') != -1);

  // browser name
  this.isKonqueror   = (ua.indexOf('konqueror') != -1);
  this.isSafari      = (ua.indexOf('safari') != - 1);
  this.isOmniweb     = (ua.indexOf('omniweb') != - 1);
  this.isOpera       = (ua.indexOf('opera') != -1);
  this.isIcab        = (ua.indexOf('icab') != -1);
  this.isAol         = (ua.indexOf('aol') != -1);
  this.isIE          = (ua.indexOf('msie') != -1 && !this.isOpera && (ua.indexOf('webtv') == -1) );
  this.isMozilla     = (this.isGecko && ua.indexOf('gecko/') + 14 == ua.length);
  this.isFirebird    = (ua.indexOf('firebird/') != -1);
  this.isNS          = ( (this.isGecko) ? (ua.indexOf('netscape') != -1) : ( (ua.indexOf('mozilla') != -1) && !this.isOpera && !this.isSafari && (ua.indexOf('spoofer') == -1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('webtv') == -1) && (ua.indexOf('hotjava') == -1) ) );
 
  // spoofing and compatible browsers
  this.isIECompatible = ( (ua.indexOf('msie') != -1) && !this.isIE);
  this.isNSCompatible = ( (ua.indexOf('mozilla') != -1) && !this.isNS && !this.isMozilla);
 
  // rendering engine versions
  this.geckoVersion = ( (this.isGecko) ? ua.substring( (ua.lastIndexOf('gecko/') + 6), (ua.lastIndexOf('gecko/') + 14) ) : -1 );
  this.equivalentMozilla = ( (this.isGecko) ? parseFloat( ua.substring( ua.indexOf('rv:') + 3 ) ) : -1 );
  this.appleWebKitVersion = ( (this.isAppleWebKit) ? parseFloat( ua.substring( ua.indexOf('applewebkit/') + 12) ) : -1 );
 
  // browser version
  this.versionMinor = parseFloat(navigator.appVersion);
 
  // correct version number
  if (this.isGecko && !this.isMozilla) {
     this.versionMinor = parseFloat( ua.substring( ua.indexOf('/', ua.indexOf('gecko/') + 6) + 1 ) );
  }
  else if (this.isMozilla) {
     this.versionMinor = parseFloat( ua.substring( ua.indexOf('rv:') + 3 ) );
  }
  else if (this.isIE && this.versionMinor >= 4) {
     this.versionMinor = parseFloat( ua.substring( ua.indexOf('msie ') + 5 ) );
  }
  else if (this.isKonqueror) {
     this.versionMinor = parseFloat( ua.substring( ua.indexOf('konqueror/') + 10 ) );
  }
  else if (this.isSafari) {
     this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('safari/') + 7 ) );
  }
  else if (this.isOmniweb) {
     this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('omniweb/') + 8 ) );
  }
  else if (this.isOpera) {
     this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera') + 6 ) );
  }
  else if (this.isIcab) {
     this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab') + 5 ) );
  }
 
  this.versionMajor = parseInt(this.versionMinor);
 
  // dom support
  this.isDOM1 = (document.getElementById);
  this.isDOM2Event = (document.addEventListener && document.removeEventListener);
 
  // css compatibility mode
  this.mode = document.compatMode ? document.compatMode : 'BackCompat';

  // platform
  this.isWin    = (ua.indexOf('win') != -1);
  this.isWin32  = (this.isWin && ( ua.indexOf('95') != -1 || ua.indexOf('98') != -1 || ua.indexOf('nt') != -1 || ua.indexOf('win32') != -1 || ua.indexOf('32bit') != -1 || ua.indexOf('xp') != -1) );
  this.isMac    = (ua.indexOf('mac') != -1);
  this.isUnix   = (ua.indexOf('unix') != -1 || ua.indexOf('sunos') != -1 || ua.indexOf('bsd') != -1 || ua.indexOf('x11') != -1)
  this.isLinux  = (ua.indexOf('linux') != -1);
 
  // specific browser shortcuts
  this.isNS4x = (this.isNS && this.versionMajor == 4);
  this.isNS40x = (this.isNS4x && this.versionMinor < 4.5);
  this.isNS47x = (this.isNS4x && this.versionMinor >= 4.7);
  this.isNS4up = (this.isNS && this.versionMinor >= 4);
  this.isNS6x = (this.isNS && this.versionMajor == 6);
  this.isNS6up = (this.isNS && this.versionMajor >= 6);
  this.isNS7x = (this.isNS && this.versionMajor == 7);
  this.isNS7up = (this.isNS && this.versionMajor >= 7);
  this.isIE4x = (this.isIE && this.versionMajor == 4);
  this.isIE4up = (this.isIE && this.versionMajor >= 4);
  this.isIE5x = (this.isIE && this.versionMajor == 5);
  this.isIE55 = (this.isIE && this.versionMinor == 5.5);
  this.isIE5up = (this.isIE && this.versionMajor >= 5);
  this.isIE6x = (this.isIE && this.versionMajor == 6);
  this.isIE6up = (this.isIE && this.versionMajor >= 6);
  this.isIE4xMac = (this.isIE4x && this.isMac);
}
var browser = new BrowserDetect();

// SET A VARIABLE TO SPECIFY WHICH PNG STYLE TO USE
if ((browser.isIE55 || browser.isIE6up) && browser.isWin32) {
   // if IE5.5+ on Win32, then display PNG with AlphaImageLoader
   var pngAlpha = true;
} else if ((browser.isGecko) || (browser.isIE5up && browser.isMac) || (browser.isOpera && browser.isWin && browser.versionMajor >= 6) || (browser.isOpera && browser.isUnix && browser.versionMajor >= 6) || (browser.isSafari) || (browser.isOpera && browser.isMac && browser.versionMajor >= 5) || (browser.isOmniweb && browser.versionMinor >= 3.1) || (browser.isIcab && browser.versionMinor >= 1.9) || (browser.isWebtv) || (browser.isDreamcast)) {
   // else, if the browser can display PNGs normally, then do that
   var pngNormal = true;
} 

dojo.require("dojo.dom");
dojo.require("dojo.io.*");
dojo.require("dojo.io.IframeIO");
dojo.require("dojo.event.*");
dojo.require("dojo.json");
dojo.require("dojo.widget.*");
dojo.require("dojo.lfx.html");


function clearSendToFriendError(){
	dojo.byId('sendToFriendErrorBlock').innerHTML =  "";
}

function submitSendToFriend(){
	dojo.byId('sendToFriendErrorBlock').innerHTML = "";
	dojo.io.bind({
		url: 'sendToFriend.do',
		handler: submitSendToFriendCallback,
		formNode: dojo.byId('sendToFriendForm')
	});
	return false;
}

function submitSendToFriendCallback(type,data,evt){
	//console.log("type:[" + type + "]data:[" + data + "]");
	if(type != 'error'){
		dojo.byId('sendToFriendErrorBlock').className = "commentSubmitSuccess";
		dojo.byId('sendToFriendErrorBlock').innerHTML =  data + "<br />";
	}else{
		dojo.byId('sendToFriendErrorBlock').innerHTML = "Sorry, there was an error while submitting the form: " + data;		
	}
	return false;
}
