var FrameIDs =              new Array(10, 20,		     30,	      40,	       50,	       60,	           70,	         80,		       90,		         100,	      110,		           120,		         130,	     140,		150,		          160,      170,           180,           190,			200,		210)
var FrameNames =            new Array("", "IFrameView", "IPermFrame", "treearea", "thumbarea", "TopPermFrame", "PermFrame", "BottomPermFrame", "TopTreeToolbar", "treeframe", "BottomTreeToolbar", "TopDirsToolbar", "DirTitle", "basefrm", "BottomDirsToolbar", "IFrame1", "searchframe", "loadframe", "printframe", "albumarea", "albumpage")
var FrameParentIDs =        new Array(0,  10,           10,           20,         20,	       30,	           30,	         30,		       40,	  	         40, 	      40,		           50,	 	         50,         200,	     50,	    	     140,       40,             40,          40,			50,		200)


function binarySearch(array, fnd){
//if(!array || typeof(array)!="object" || typeof(fnd)=="undefined") {return null};

var low = 0;
var high = array.length-1;
var find = fnd //parseInt(fnd);



//run:
while(low<=high)
{
//  alert("low: " + low + " hight:" + high);
  var aTry=(low+high) >> 1;
  if(array[aTry]<find)
  {
    low=aTry+1;
    continue;
  }
  if(array[aTry]>find)
  {
    high=aTry-1;
    continue;
  }
  return aTry;/*success: returns index: Number*/
}

return low;
}

if(!String.prototype.splitInt) {
    function String_splitInt(del){
		var arr = this.split(del)
		for (var i=0; i<arr.length; i++)
		  arr[i] = parseInt(arr[i])    	
        return arr;
    }
    String.prototype.splitInt = String_splitInt;
}

if(!String.prototype.splitFloat) {
    function String_splitFloat(del){
		var arr = this.split(del)
		for (var i=0; i<arr.length; i++)
		  arr[i] = parseFloat(arr[i])    	
        return arr;
    }
    String.prototype.splitFloat = String_splitFloat;
}

function indexof(id, idx)
{
  for (i=0; i<idx.length; i++)
    if (idx[i] == id)
      return i;
  return -1;
}

function DecodeMetaActions( ssActions )
{
    ssActions = ssActions.replace('DF90', 'LE0,90,255,0,90,255,0,90,255');  
    ssActions = ssActions.replace('EC20', 'HS0,20,0');  
    return ssActions;
}

function GetQueryString(location)
{
	var str = location + '';
	var i = str.indexOf('?');
	if (i > 0)
		return str.substr(i+1);
	return '';		
}


function GetParent(Id)
{
  return FrameParentIDs[indexof(Id, FrameIDs)];
}

function GetName(Id)
{
  return FrameNames[indexof(Id, FrameIDs)];
}

function GetPathUp(id1, id2)
{
  var obj = parent;
  id1 = GetParent(id1);
  while(id1 != id2)
  {
    obj = obj.parent;
    id1 = GetParent(id1);
  }
  return obj;
}

function GetPathDown(win, id1, id2)
{
  var obj;
  if (id2 != id1)
  {
    var id = GetParent(id2);
    obj = GetPathDown(win, id1, id);
  }
  else
    return win;
  return obj.frames[GetName(id2)];
}

function GetFrame(dstFrameName)
{
  try
  {
    var srcFrameName = window.name;
    var dstFrameName = dstFrameName;
    
    if (srcFrameName == dstFrameName) 
        return window; // we are in the same frame
    var srcFrameID=0;
    var dstFrameID=0;
    for(var i=0; i<FrameNames.length; i++)
    {
      if (FrameNames[i] == srcFrameName)
        srcFrameID = FrameIDs[i];
      if (FrameNames[i] == dstFrameName)
        dstFrameID = FrameIDs[i];
      if (srcFrameID && dstFrameID)
        break;
    }

    var id1 = srcFrameID;
    var id2 = dstFrameID;
    if (id1 == 0)
    {
//      throw new Error("Invlid frame name: " + srcFrameName);
      id1 = 10;
      srcFrameID = 10;
    }
    if (id2 == 0)
      throw new Error("Invalid frame name: " + dstFrameName);

    var ids1 = new Array;
    var ids2 = new Array;

    ids1[0] = id1;
    ids2[0] = id2;
    var idx;

//    alert(srcFrameName + " " + dstFrameName + " " + id1);
    while (id1 != id2)
    {
      if (id1 != 10)
      {
        id1 = GetParent(id1);
        ids1[ids1.length] = id1;
      }
      if (id2 != 10)
      {
        id2 = GetParent(id2);
        ids2[ids2.length] = id2;
      }
      if (id1 != 10)
      {
        idx = indexof(id1, ids2);
        if (idx >= 0)
          id2 = ids2[idx];
      }
      if (id2 != 10)
      {
        idx = indexof(id2, ids1);
        if (idx >= 0)
          id1 = ids1[idx];
      }
    }
    if (id1 == dstFrameID)
      return GetPathUp(srcFrameID, id2);
    if (id2 == srcFrameID)
      return GetPathDown(window, id1, dstFrameID);
    return GetPathDown(GetPathUp(srcFrameID,id1),id2,dstFrameID);
  }
  catch(e)
  {
//    e.msg = "Frame " + dstFrameName + "cannot be found from frame " + srcFrameName;
    return null;
//    debug(e,"common","GetFrame");
  }
}

function GetFrameAsObj(dstFrameName)
{
  var frm = GetFrame(dstFrameName);
  if (frm && frm.parent && frm.parent.document)
  {
    return frm.parent.document.getElementById(dstFrameName);
  }
}


function setCookie(name, value, expires, path, domain, secure) {
  var oldValue = getCookie(name);
  if (oldValue != value)
  {
    var now = new Date();
    now.setTime(now.getTime() + 10 * 365 * 24 * 60 * 60 * 1000);
    var p = document.domain.toLowerCase().indexOf("serveo.com")
    if (p > 0)
        domain = "serveo.com"
    var p = document.domain.toLowerCase().indexOf("meremagic.com")
    if (p > 0)
        domain = "meremagic.com"
     
//    path="/viewer"
    var curCookie = name + "=" + escape(value) +
        "; expires=" + now.toGMTString() +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
    
		document.cookie = curCookie
//    setTimeout("document.cookie = '" + curCookie + "'",1);
  }
}

function deleteCookie(name)
{
    var now = new Date();
    now.setTime(now.getTime() - 11 * 365 * 24 * 60 * 60 * 1000);
    setCookie(name, "", now);    
}


function getCookie(name) {
  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return null;
  } else
    begin += 2;
  var end = document.cookie.indexOf(";", begin);
  if (end == -1)
    end = dc.length;
  return unescape(dc.substring(begin + prefix.length, end));
}

function getCookieDef(name, def)
{
	var cookie = getCookie(name);
	if (!cookie) cookie = def;
	return cookie;
}

function getValue( name, def )
{
	var cookie = getCookie("ServeoSite");
	if (cookie) {	    
		var values = cookie.split("|");
		for (var i=0; i<values.length; i++) {
		
			var pair = values[i].split("^");
			if (pair[0] == name) {
				return pair[1];
			}				
		}
	}		
    return def; // return default if cookie is not found
}

function setValue( name, val )
{
	var cookie = getCookie("ServeoSite"); // find if value exists in the cookie
	var newCookie = "";
	var found = false;
	if (cookie) {
		var values = cookie.split("|");
		for (var i=0; i<values.length; i++) {
			var pair = values[i].split("^");
			if (pair[0] == name) {
				newCookie = newCookie + pair[0] + "^" + val + "|";
				found = true;
			} else {
				if ((pair[0] != "") && (pair[1]))
					newCookie = newCookie + pair[0] + "^" + pair[1] + "|";
			}
		}
	}
	if (!found) newCookie = newCookie + name + "^" + val + "|";
	//alert(cookie + " " + newCookie);
	setCookie("ServeoSite", newCookie);
}

function debug(e,filename, funcname)
{
  e.description += " in " + filename + "." + funcname;
  e.message += " in " + filename + "." + funcname;
  throw e;
}

//
// QueryString
//

function QueryString(key)
{
	var value = null;
	for (var i=0;i<QueryString.keys.length;i++)
	{
		if (QueryString.keys[i]==key)
		{
			value = QueryString.values[i];
			break;
		}
	}
	return value;
}

QueryString.keys = new Array();
QueryString.values = new Array();

function QueryString_Parse()
{
	var query = window.location.search.substring(1);
	var pairs = query.split("&");
	
	for (var i=0;i<pairs.length;i++)
	{
		var pos = pairs[i].indexOf('=');
		if (pos >= 0)
		{
			var argname = pairs[i].substring(0,pos);
			var value = pairs[i].substring(pos+1);
			QueryString.keys[QueryString.keys.length] = argname;
			QueryString.values[QueryString.values.length] = value;		
		}
	}

}



function toCurrency(x)
{
    if (x.toFixed)
    {
        return x.toFixed(2)
    }
    else
    {
        var str = Math.round(x * 100) + ""
        return str.substr(0, str.length - 2) + '.' + str.substr(str.length - 3, 2) 
    }
}

function toCash(p, c, t, d) 
{
  /* Slightly modified from Michael Winter,
    <opsf4o6zuox13kvk@atlantis>, news:c.l.j, 2004-10-19
  * p - Number to format (in pence, below 1E21)
  * c - Currency symbol to use (defaults to none)
  * t - Thousands separator (defaults to none)
  * d - Decimal separator (defaults to dot)

  Outputs a number of the form  -cntnnntnnndnn
  For example, toCash(142635.7, '$', ',') produces $1,426.36
  */
  var s = (0 > p) ? '-' : ''
  var m = String(Math.round(Math.abs(p)))
  var j, k = '', f
  c = c || '' ; t = t || '' ; d = d || '.'

  while (m.length < 3) m = '0' + m
  f = m.substring((j = m.length - 2))
  while (j > 3) { k = t + m.substring(j - 3, j) + k ; j -= 3 }
  k = m.substring(0, j) + k
  return s + c + k + d + f 
 }


// Initializes a new instance of the StringBuilder class
// and appends the given value if supplied
function StringBuilder(value)
{
    this.strings = new Array("");
    this.append(value);
}

// Appends the given value to the end of this instance.
StringBuilder.prototype.append = function (value)
{
    if (value || value === 0)
    {
        this.strings.push(value);
    }
}

// Clears the string buffer
StringBuilder.prototype.clear = function ()
{
    this.strings.length = 1;
}

// Converts this instance to a String.
StringBuilder.prototype.toString = function (sep)
{
    return this.strings.join((sep)?(sep):(""));
}

function expandFrame( dir )
{
    if (dir == 0) 
    {         
        fset = GetFrame("IFrameView").document.getElementById("treeframeset");
        if (fset)
        {
            var frm = GetFrameAsObj("treearea");
            if (frm) 
            {
                if (frm.noResize) 
                {
                    frm.noResize = null;
                    var w = getValue("TreeWidth", 200);
                    document.getElementById('LeftBtn').src = 'images/shrinkleft.gif';
                    fset.cols= w + ",*";
                } 
                else 
                {
                    frm.noResize = "true";
                    document.getElementById('LeftBtn').src = 'images/shrinkright.gif';
                    fset.cols="0,*";
                }
            }                       
        }
    } 
    else 
    {    
        fset = GetFrame("albumarea").document.getElementById("descframeset");
        if (fset)
        {
            var frm = GetFrameAsObj("albumpage");
            if (frm) 
            {
                if (frm.noResize) 
                {
                    frm.noResize = null;
                    var w = getValue(getValue("CurrentTab", "Comments") + "DescWidth", 245);
                    fset.cols= "*," + w;
                    document.getElementById('RightBtn').src = 'images/shrinkright.gif';
                } 
                else 
                {
                    frm.noResize = "true";
                    document.getElementById('RightBtn').src = 'images/shrinkleft.gif';
                    fset.cols="*,0";
                }
            }                       
        }
    }
    var frm2 = GetFrameAsObj("basefrm");
    if (frm2 && frm2.Resize)
        Resize();                       
}

function NavigateToDir( dirID, serverID )
{
    //alert(dirID + ' ' + serverID);

    var tree = GetFrame("treeframe");
    if (tree)
    {                            
        tree.SelectAlbumInTree(serverID, dirID);
    } 
    else
    {
        var frm = GetFrame("albumarea");
        if (frm)
        {
            var l = frm.location.pathname + '?h=h';
            for (var i=0; i<frm.QueryString.keys.length; i++)
            {
                if (frm.QueryString.keys[i].toLowerCase() == "dirid")
                    l = l + '&dirid=' + dirID
                else    
                if (frm.QueryString.keys[i].toLowerCase() == "dir")
                    l = l + '&dir=' + dirID
                else    
                if (serverID && frm.QueryString.keys[i].toLowerCase() == "serverid")
                    l = l + '&serverid=' + serverID
                else    
                    l = l + '&' + frm.QueryString.keys[i] + '=' + frm.QueryString.values[i];
            }
            frm.location = l;
        }
        //document.write('<a href="' + parent.location.pathname + '?serverid=' + DirServerID + '&dir=' + ChildDirID[d] + '" target=_parent>');                           
    }
}



QueryString_Parse();

