
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 	Revision	Date			Author		Change/Comment
//	v1.00		17/11/2007		SBH			Initial release
//	v1.03		30/11/2007 		SBH 		Added image optimise hunter thing.
//	v1.04		11/01/2008 		SBH 		Added browser detection and Firefox compliance code to image optimiser routine.
//	v1.05		16/01/2008 		SBH 		Image optimising is triggered by images > 70 height (prev 100) to better
//											accommodate user profile images.
//	v1.06		22/06/2008 		SBH 		Fallback path corrected to _nrrdocuments.
//	v1.07		14/05/2009 		SBH 		Improved the image load completion detection.
//	v1.08		27/11/2009 		SBH 		fnWrite moved in from event AJAX functions. Not ideal home, but better than it was...
////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////
function fnWrite(paramText, paramClear, paramDebugOrMessage) {
	var strOutput = paramText;
	var objTarget;
	strOutput += "<br>";

//alert(paramClear);
//alert(paramDebugOrMessage);	
//alert(strOutput);
	switch (paramDebugOrMessage) {
	case "message":
		objTarget = $("page_message_panel");
		break;
	default:
		objTarget = $("page_debug_panel");
	}
	if (paramClear) {
		objTarget.innerHTML = "";
	}
	objTarget.show();
	objTarget.innerHTML += strOutput;
}
///////////////////////////////////////////////////////////////////



//reveals or hides a specified div, using it's id label to identify the layer, and a visibility state of 1 (visible), 0 (hidden) or 2(toggle):
var flashTimeoutID;

function determineBrowser() {
	var agt=navigator.userAgent.toLowerCase();
	if (agt.indexOf("opera") != -1) return 'Opera';
	if (agt.indexOf("firefox") != -1) return 'Firefox';
	if (agt.indexOf("safari") != -1) return 'Safari';
	if (agt.indexOf("msie") != -1) return 'Internet Explorer';
	if (agt.indexOf("netscape") != -1) return 'Netscape';
	if (agt.indexOf("mozilla/5.0") != -1) return 'Mozilla';
	if (agt.indexOf('\/') != -1) {
		if (agt.substr(0,agt.indexOf('\/')) != 'mozilla') {
			return navigator.userAgent.substr(0,agt.indexOf('\/'));
		}
		else 
			return 'Netscape';
		}
	else if (agt.indexOf(' ') != -1)
		return navigator.userAgent.substr(0,agt.indexOf(' '));
	else return navigator.userAgent;
}

//this function assumes that the image it's looking at is in the thumbZone folder.
//if not, doesn't matter, it'll fallback to the fullsize image regardless in event of a failed image load.
function zfnOptimiseImages(paramMode){
	var strThisBrowser = determineBrowser();
	//alert(strThisBrowser);
	var strFallBackImagePath = "/_nrrdocuments/";
	var objThisImage, strImageName;

	//for each image on the page
	for (var iImageLoop = 0; iImageLoop < document.images.length; iImageLoop++) {
		objThisImage = document.images[iImageLoop];
		strImageName = objThisImage.src.substr(objThisImage.src.lastIndexOf("/")+1);

		if (objThisImage.src.indexOf("x.gif") < 0) {
			if (objThisImage.src.indexOf("_nrrdocuments") >= 0) {
				if (strThisBrowser == "Firefox") {
					//alert("to fix: " + objThisImage.src + " (name=" + strImageName + ")");
					objThisImage.src = "/" + objThisImage.src.substr(objThisImage.src.indexOf("_nrrdocuments"));
					//alert("fixed " + objThisImage.src);
				}
				
				if (objThisImage.src.indexOf("x.gif") < 0) {
					//alert(strImageName + "\n , src=" + objThisImage.src + ", height=" + objThisImage.height);
					//if (objThisImage.height > 70) {
					//alert("complete=" + objThisImage.complete + ", natural dimensions=" + objThisImage.naturalWidth + " x " + objThisImage.naturalHeight);
					
					if (objThisImage.naturalHeight == 0 || objThisImage.naturalWidth == 0 || objThisImage.complete == false) {
		    		  objThisImage.src = strFallBackImagePath + strImageName;
					}
					
					if (paramMode == "profile") {
						objThisImage.width = 54;
					}
		
					if (!isNaN(paramMode)) {
						objThisImage.width = paramMode;
					}
			
					//}
				}
			}
		}
		
		/*orig version:
		if (strThisBrowser == "Firefox") {
			if (objThisImage.src.indexOf("x.gif") < 0) {
				if (objThisImage.src.indexOf("_nrrdocuments") >= 0) {
					//alert("to fix: " + objThisImage.src + " (name=" + strImageName + ")");
					objThisImage.src = "/" + objThisImage.src.substr(objThisImage.src.indexOf("_nrrdocuments"));
					//alert("fixed " + objThisImage.src);
				}
			}
		}
		
		if (objThisImage.src.indexOf("x.gif") < 0) {
			//alert(strImageName + "\n , src=" + objThisImage.src + ", height=" + objThisImage.height);
			//if (objThisImage.height > 70) {
			//alert("complete=" + objThisImage.complete + ", natural dimensions=" + objThisImage.naturalWidth + " x " + objThisImage.naturalHeight);
			
			if (objThisImage.naturalHeight == 0 || objThisImage.naturalWidth == 0 || objThisImage.complete == false) {
    		  objThisImage.src = strFallBackImagePath + strImageName;
			}
			
			if (paramMode == "profile") {
				objThisImage.width = 54;
			}

			if (!isNaN(paramMode)) {
				objThisImage.width = paramMode;
			}
	
			//}
		}
		*/
	}	//next
}


function showHide(divID, visibilityState) {
	//get current state:
	var strDOM = divID + ".style.visibility";
	var currentState = eval(strDOM);
	//alert("current state=" + currentState);
	
	//set required visiblity state to the alternate of current state if action is 'toggle' (2):
	if (visibilityState == 2) {
		switch(currentState) {
		case "hidden":
			visibilityState = 1;
			break;
		case "visible":
			visibilityState = 0;
			break;
		}
	}
	//alert("proposed state=" + visibilityState);
	
	//perform visibility setting:
	switch(visibilityState) {
	case 0:
		eval(strDOM + ' = "hidden";');
		break;
	case 1:
		eval(strDOM + ' = "visible";');
		break;
	}
}

//same functionality as showHide, but using display attribute instead of visibility, to allow for compression of display:
function showHide2(divID, visibilityState) {
	var strDOM = divID + ".style.display";
	if (visibilityState == 1) {
		eval(strDOM + ' = "block";');
	}
	else {
		eval(strDOM + ' = "none";');
	}
}

//similar to showHide, but flash recursively calls itself on an x millisecond time delay with the alternate visibility state:
function flash(divID, visibilityState) {
	var strDOM = divID + ".style.visibility";
	var alternateState;
	var timeDelay = 1500; 

	//set visibility according to specified parameter:
	if (visibilityState == 1) {
		eval(strDOM + ' = "visible";');
		alternateState = 0;
	}
	else {
		eval(strDOM + ' = "hidden";');
		alternateState = 1;
	}
	
	//set up the recursive call to this function, using the alternate visibility state:
	var strExpression = "flash('" + divID + "', " + alternateState + ")";
	flashTimeoutID = setTimeout(strExpression, timeDelay);
}

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

function MM_findObj(n, d) { //v4.01
  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);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v6.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 delayedReload(delaySeconds, reloadURL) {
	//alert("function running");
	var strExpression;
	var timeDelay = delaySeconds*1000; 
	// 	check global variable
	//	alert(bExpandMessage);
	
	// call check on status of expanded div message
	strExpression = "reloadNow('" + reloadURL + "')";
	//	alert(strExpression);
	setTimeout(strExpression, timeDelay);
}

function reloadNow(reloadURL){
	// if expanded div message is open, reschedule reload
	if (bExpandMessage == true){
		// delay reload
		strExpression = "delayedReload(60,'" + reloadURL + "')";
	}
	else{
		// set reload now
		strExpression = "location.href = '" + reloadURL + "'";
	//alert("setTimeout(" + strExpression + ", " + timeDelay + ");");
	}
	// fire reload option
	eval(strExpression);
}

