// function library - EXPAGATED
// (c) Naz Rajan 2006-2008
// naz@nazrajan.com
// Version 2008.0103

// Changes since 2007.0613:
// Removed images path from Gallery functions to allow separation of content from site
// Added extra [14], [15], [16] parameters and functionality to Gallery gConfig array
//

// -----------------------------
// MENU
function NR_menu(iMenu,iActive) {
var i;
var menuheight=(BrowserDetect("browser")=="Safari"?"20":mHeight[iMenu]);

	document.write("<table><tr><td bgcolor=\""+mBGColor[iMenu][0]+"\"><table border=\"0\"><tr>");
	for (i=1;i<=mItem[iMenu][0];i++) {
		document.write("<td height=\""+menuheight+"\" align=\""+mAlign[iMenu]+"\""+(null==mClass[iMenu][i]?"":(null==mBGColor[iMenu][i]?"":" bgcolor=\""+mBGColor[iMenu][i]+"\" ")));
		if (iActive==i) {
			document.write("class=\""+(null==mClass[iMenu][i]?"menuon":mClass[iMenu][i]+"on")+"\">"+mItem[iMenu][i]+" ");
		}
		else {
			if (mHref[iMenu][i]=="#") {
				document.write("><span class=\""+(null==mClass[iMenu][i]?"menu":mClass[iMenu][i])+"\">"+mItem[iMenu][i]+"</span>");
			}
			else {
				document.write("><a href=\""+(null==mHref[iMenu][i]?"":mHref[iMenu][i])+"\" class=\""+(null==mClass[iMenu][i]?"menu":mClass[iMenu][i])+"\" ");
				document.write((null==mMouseclick[iMenu][i]?"":(mMouseclick[iMenu][i]==""?"":" onClick=\""+mMouseclick[iMenu][i]+"\"")+" "));
				document.write((null==mMouseover[iMenu][i]?"":(mMouseover[iMenu][i]==""?"":" onMouseOver=\""+mMouseover[iMenu][i]+"\"")+" "));
				document.write((null==mMouseout[iMenu][i]?"":(mMouseout[iMenu][i]==""?"":" onMouseOut=\""+mMouseout[iMenu][i]+"\"")));
				document.write(">"+mItem[iMenu][i]+"</a>");
			}
		}
		document.write((null==mBelowText[iMenu][i]?"":(mBelowText[iMenu][i]==""?"":"<br><span class=\"menutext\">"+mBelowText[iMenu][i]+"</span>")));
		if (mDirection[iMenu]==0) {
			document.write((i==mItem[iMenu][0]?"":mSeparator[iMenu])+"</td>");
		}
		else {
			document.write("</td>"+(i==mItem[iMenu][0]?"":"</tr><tr>"));
		}
	}
	document.write("</tr></table></td></tr></table>");

}

// -----------------------------
// IMAGE MANAGEMENT
function NR_swapImage(flder,imgid,ovr) {
	document.getElementById(imgid).src = (ovr ? flder+"/"+imgid+"_over.jpg" : flder+"/"+imgid+".jpg");
}


// -----------------------------
// USER INTERACTION
function disableRightClick(e)
{
  var message = "Right click has been disabled";
  
  if(!document.rightClickDisabled) // initialize
  {
    if(document.layers) 
    {
      document.captureEvents(Event.MOUSEDOWN);
      document.onmousedown = disableRightClick;
    }
    else document.oncontextmenu = disableRightClick;
    return document.rightClickDisabled = true;
  }
  if(document.layers || (document.getElementById && !document.all))
  {
    if (e.which==2||e.which==3)
    {
      alert(message);
      return false;
    }
  }
  else
  {
    alert(message);
    return false;
  }
}
disableRightClick();

// -----------------------------
// SITE PRESENTATION
function NR_movetocenter(bglayer,maxw) {
var	sw=screen.width, sh=screen.height;
	if (sw>sh) {  
		document.getElementById(bglayer).style.left=((sw-maxw)/2);
		if (document.getElementById(bglayer).style.left<0) {document.getElementById(bglayer).style.left=0;};
		if (sh>768) {
			document.getElementById(bglayer).style.top=((sh-750)/2);
			if (document.getElementById(bglayer).style.top<0) {document.getElementById(bglayer).style.top=0;};
		}
	}
	else {
		document.getElementById(bglayer).style.left=0;
		document.getElementById(bglayer).style.top=0;
	}
}

// -----------------------------
// STRING
function NR_FormatTitle(strText) {
	var strHTML, i=0;
	i = strText.indexOf('/');
	strHTML = strText.substr(0,i) + '<br><div class=\'body\'>';
	strText = strText.substr(i+1, strText.length-i);
	i = strText.indexOf('/');
	strHTML = strHTML + strText.substr(0,i) + '<br>' + strText.substr(i+1, strText.length-i) + '</div>';
	return strHTML;
}

function NR_replaceString(str,strfind,strrepl) {
	while(1 == 1) {
		if(str.indexOf(strfind)==-1) return str;
			str = str.replace(strfind,strrepl);
	}
}

function StringLeft(str, n) {
    if (n <= 0)
        return "";
    else if (n > String(str).length)
        return str;
    else
        return String(str).substring(0,n);
}

function StringRight(str, n) {
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

// -----------------------------
// SLIDESHOW
function NR_RunSlideShow(divid,imageid,imageFiles,displaySecs) { 
	var imagesfolder;
	if (imageFiles.indexOf('/')>0) {
		imagesfolder = "";    // folder is part of filename so leave blank
	}
	else {
		imagesfolder = "images/";
	}
	var imageSeparator = imageFiles.indexOf(";"); 
	var nextImage = imageFiles.substring(0,imageSeparator); 
	
	if (BrowserDetect("browser")=="Firefox") {
		document.getElementById(imageid).style.visibility="hidden";
	}
	changeOpac(imageid, 0);
	blendimage(divid,imageid,imagesfolder+nextImage,100); 
	
	var futureImages = imageFiles.substring(imageSeparator+1,imageFiles.length)+ ';' + nextImage; 
	setTimeout("NR_RunSlideShow('"+divid+"','"+imageid+"','"+futureImages+"',"+displaySecs+")",displaySecs*1000); 
	
	// Cache the next image to improve performance. 
	imageSeparator = futureImages.indexOf(";"); 
	nextImage = futureImages.substring(0,imageSeparator);
 	if (dSlideCache[nextImage] == null) { 
		dSlideCache[nextImage] = new Image;
		dSlideCache[nextImage].style.visibility="hidden";
		dSlideCache[nextImage].src = imagesfolder+nextImage;
		//dSlideCache[nextImage].style.visibility="visible";
	} 
//	document.getElementById(imageid).style.visibility="visible";
}

function changeOpac(id, opacity) { 
	var object = document.getElementById(id).style;
	
	object.opacity = (opacity==0?0:opacity/101); 
	object.MozOpacity = (opacity==0?0:opacity/101); 
	object.KhtmlOpacity = (opacity==0?0:opacity/101); 
	object.filter = "alpha(opacity=" + opacity + ")";
} 

function blendimage(divid, imageid, imagefile, millisec) {
	var speed = Math.round(millisec/10); 
	var timer = 0; 
	//set the current image as background 
	document.getElementById(divid).style.backgroundImage = "url(" + document.getElementById(imageid).src + ")"; 
	changeOpac(imageid, 0); //make image transparent 
	document.getElementById(imageid).src = imagefile; //make new image
	//fade in image 
	for(i=0; i<100; i++) { 
		setTimeout("changeOpac('" + imageid + "'," + i + ")",(timer * speed)); 
		timer++; 
	} 
}

/*
function opacity(id, opacStart, opacEnd, millisec) { 
    //speed for each frame 
    var speed = Math.round(millisec / 100); 
    var timer = 0; 

    //determine the direction for the blending, if start and end are the same nothing happens 
    if(opacStart > opacEnd) { 
        for(i=opacStart; i>=opacEnd; i--) { 
            setTimeout("changeOpac('' + id + '',' + i + ')",(timer * speed)); 
            timer++; 
        } 
    } else if(opacStart<opacEnd) { 
        for(i=opacStart; i<=opacEnd; i++) 
            { 
            setTimeout("changeOpac('" + id + "'," + i + ")",(timer * speed)); 
            timer++; 
        } 
    } 
}

function blendimage(divid, imageid, imagefile, millisec) { 
    var speed = Math.round(millisec / 100); 
    var timer = 0; 
     
    //set the current image as background 
    document.getElementById(divid).style.backgroundImage = "url(" + document.getElementById(imageid).src + ")"; 
     
    //make image transparent 
    changeOpac(imageid, 0); 
     
    //make new image 
    document.getElementById(imageid).src = imagefile; 

    //fade in image 
    for(i = 0; i <= 100; i++) { 
        setTimeout("changeOpac('" + imageid + "'," + i + ")",(timer * speed)); 
        timer++; 
    } 
} 

*/


// -----------------------------
// BROWSER
// Detect Browser type and version
function BrowserDetect(nOption) {		// nOption = browser | version | os

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();

	if (nOption=="browser") {return BrowserDetect.browser;}
	else if (nOption=="version") {return BrowserDetect.version;}
	else if (nOption=="os") {return BrowserDetect.OS;}
	else return "";
}

// -----------------------------
