/*
 * Utility Functions for KubiPhotos.com
 */


/*
 * Extract directory portion of a URL.
 */
function computerootpath(inputlink) {
	var lastslash = inputlink.lastIndexOf('/');
	if (lastslash==-1)
		return "./";
	else
		return inputlink.substr(0,lastslash); /* Ignore trailing slash */
}

/*
 * Extract file portion of a URL.
 */
function computefile(inputlink) {
	var lastslash = inputlink.lastIndexOf('/');
	if (lastslash==-1)
		return inputlink;
	else
		return inputlink.substr(lastslash+1);
}

/*
 * Clean up a path by removing "/./" and /../ and // except at head."
 *
 * The assumption here is that we don't have to worry about the
 * argument aspect of the path.
 */

function CleanUpPath(inpath) {
	/* Assume everything is relative.  Remove path/.. */
	var head;
	var path;
	var temp;
	if (inpath.indexOf("http://")!=-1) {
		var headpos=inpath.indexOf('/',7);
		head = inpath.substring(0,headpos+1);
		path =inpath.substring(headpos+2);
	} else if (inpath.indexOf('/')==0) {
		head = '/';
		path =inpath.substring(1);
	} else {
		head="";
		path = inpath; 
	}
    /*
     * We do this as a loop instead of a global replace, since one
     * change may impact the next.
     */
    while (true) {
	if (temp=path.match(/^\.?\/(\S*)/))
	    // Kill leading './' or '/'
	    path=temp[1];
	else if (temp=path.match(/(\S*)\/\.?\/(\S*)/))
	    // Turn '//' => '/' or '/./' => '/'
	    path=temp[1]+'/'+temp[2];
	else if (temp=path.match(/^((\S*\/)?)((\.[^.\/\s][^\/\s]*)|([^\.\/\s][^\/\s]+)[^\/\s]+\/\.\.)(\S*)/)) {
	    // Delete : path/.. but ignore ../..
	    path=temp[1]+temp[6];
	} else
	    break;
    }
    return head+path;
}

/* Compute link for 'newlink' relative to root. Assume both are relative links!  */
var upwardstring = "../../../../../../../../../../../../../../../../../../../";
function ComputeRelative(root,newlink) {
	var cleanroot=CleanUpPath(root);
	var cleanlink=CleanUpPath(newlink);
	if (!cleanroot)
		return cleanlink;

	var rootparts=cleanroot.split('/');
	var newlinkparts=cleanlink.split('/');
	/* Max number of directory components that could be in common -- ignore file portion of newlink */
	var maxcommon=Math.min(rootparts.length,newlinkparts.length-1);
	/* Bypass any elements in common */
	for (var i =0; i<maxcommon; i++) 
		if (rootparts[i] != newlinkparts[i])
			break;
	/* Turn remaining components of rootparts into '../' and prepend to remaining linkparts */
	return(upwardstring.substring(0,(rootparts.length-i)*3)+(newlinkparts.slice(i)).join('/'));
}

/* Assume that input path is relative path from root directory to current .html file. 
 * Construct path back from current directory to root directory.
 */
function InvertPath(inputpath) {
	var cleaned=CleanUpPath(inputpath);
	if (cleaned)
		return upwardstring.substring(0,((cleaned.split('/')).length)*3);
	else
		return "./";
}

/* varargs proceedure -- return first of its arguments that isn't null or null if nothing non-null */
function FirstNonNull() {
	for (var i=0; i<arguments.length; i++) {
		if (arguments[i]!=null)
			return arguments[i];
	}
	return "";
}

/************************************************
 * Functions for select bar 			*
 ************************************************/
var SelectArray = new Array();
function InitSelect(myid) {
    var selectObj = new Object();
    SelectArray[myid] = selectObj;

    /* Set up default selection (if it exists) */
    var selector = document.getElementById(myid);
    if (selector) {
	/* Initiate this as a Spry menubar */
	selectObj.menubarObj = new Spry.Widget.Select(myid, {imgDown:"SpryAssets/SpryMenuBarDownHover.gif", imgRight:"SpryAssets/SpryMenuBarRightHover.gif"});
	Spry.Utils.SelectionManager.clearSelection("menubar:"+myid);
    
	var selectlink = null;
	var items = selector.getElementsByTagName("a");
	for (var i = 0; i < items.length; i++) 
	    if (items[i].className=="MenuBarItemSubmenu") {
		selectlink = items[i];
		break;
	    }
	selectObj.link=selectlink;
	selectObj.options = new Array();
	var count=0;
	for (var i = 0; i < items.length; i++)
	    if (items[i].className!="MenuBarItemSubmeu" && items[i].name) {
		selectObj.options[count++]=items[i];
		var values = (new String(items[i].name)).split(":");
		
		/* Last item: default => default */
		if (values.length > 0 && values[values.length-1]=="default") {
		    /* Found default! Select it! */
		    Spry.Utils.SelectionManager.select("menubar:"+myid, items[i], "MenuBarSelected");
		    /* Set selector text */
		    if (selectlink) {
			selectlink.innerHTML = items[i].title;
			selectlink.title = items[i].title;
			selectObj.title = items[i].title;
			selectObj.value = values;
		    }
		}
		items[i].values=values; /* Set values property to array of values */
	    }
    }
}

function SelectElement(self,myfunct) {
    var parentID=self.parentNode;
    var myid="";
    while (parentID=parentID.parentNode) {
	if ((parentID.className).indexOf("MenuBarHorizontal")!=-1) {
	    myid = parentID.id;
	    break;
	}
    }
    if (!myid)
	return;
    Spry.Utils.SelectionManager.clearSelection("menubar:"+myid);
    var selectObj=SelectArray[myid];
    if (selectObj) {
	selectObj.link.innerHTML = self.title;
	selectObj.title=self.title;
	selectObj.value=(new String(self.name)).split(":");
	Spry.Utils.SelectionManager.select("menubar:"+myid, self, "MenuBarSelected");
	    myfunct(self.values);
    }	
}
	    
function SetSelection(selectid,mylabel,myfunct) {
    var selectObj = SelectArray[selectid];
    if (selectObj) {
	for (var i = 0; i < selectObj.options.length; i++)
	    if ((selectObj.options[i]).title == mylabel) {
		SelectElement(selectObj.options[i],myfunct);
		break;
	    }
    }
}


/************************************************
 * Functions from DreamWeaver for roll-over	*
 ************************************************/

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

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_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}


