// only track one gallery globally (e.g., main image but not sidebar?)
var globalgallery;
var gallerytext = new Array();
var node = new Array();
var nodeID = new Array();
var activeindex = 0;

function setHash(hash) {
	hashListener.setHash(hash);
}

function getHash() {
  var h = document.location.hash;
  if (!h) return h;
  return h.split('#')[1];
}

function dbg(s) {
	var out = document.getElementById("dbg");
	out.innerHTML = "";
	out.appendChild(document.createTextNode(s));
}
 

hashListener.onHashChanged = function () {
  var h = getHash();
  if (!h) h = 0;
  if (globalgallery) Advance(0, h);
};

function Advance(inc, absolute)
{
  var pe = activeindex + inc;
  if (inc == 0) {
    pe = parseInt(absolute);
  }
  
  if (pe >= 0 && pe < gallerytext.length) {
    activeindex = pe;
    
    if (inc != 0) setHash(pe);
    
    //alert("advancing to " + pe);
    
    var m, n1, p1;
    
    if (nodeID[0] == pe) {
      m = 0; n1 = 1; p1 = 2;
    } else if (nodeID[1] == pe) {
      m = 1; n1 = 0; p1 = 2; 
    } else if (nodeID[2] == pe) {
      m = 2; n1 = 1; p1 = 0;
    } else {
      m = 0; n1 = 1; p1 = 2;
      node[m].innerHTML = gallerytext[pe];
      nodeID[m] = pe;
    }
    
    node[m].style.display = 'block';
    
    var ind2 = pe + 1;
    var ind0 = pe - 1;
    
    if (ind0 >= 0 && ind0 < gallerytext.length) {
      node[n1].innerHTML = gallerytext[ind0];
      nodeID[n1] = ind0;
    }
    node[n1].style.display = 'none';
    
    if (ind2 >= 0 && ind2 < gallerytext.length) {
      node[p1].innerHTML = gallerytext[ind2];
      nodeID[p1] = ind2;
    }
    node[p1].style.display = 'none';
    
    //var dstr = "ind0=" + ind0 + ", ind2=" + ind2 + ", m=" + m + ", n1=" + n1 + ", p1=" + p1;
    //dbg(dstr);
  }
/*
  var node = document.getElementById(dname);
  var adivs = node.getElementsByTagName('div');
  var xdivs = new Array();
  
  var active = 0;
  var xi = 0;
  
  for (var i = 0; i < adivs.length; i++) {
    if (adivs[i].className == 'hider') {
      xdivs[xi] = adivs[i];
      if (xdivs[xi].style.display == "block") {
        active = xi;
      }
      xi ++;
    }
  }

  var pe = active + inc;
  if (inc == 0) {
    pe = parseInt(absolute);
  }
 
  // switch it up....
  if (pe >= 0 && pe < xdivs.length) {
    if (inc != 0) setHash(pe);
    //dbg(xdivs[pe]);
    xdivs[active].style.display = "none";
    xdivs[pe].style.display = "block";
  }
  */
  
  // todo kill img src
  // todo hide/show next/prev, etc.
}

function hkeys(e) {
	
	var evtobj = window.event ? event : e;
	var unicode=evtobj.charCode? evtobj.charCode : evtobj.keyCode;
	
	if (unicode == 39) {
    Advance(1);
	}
	if (unicode == 38 && lasti != -1) {
		//output();
	}
	if (unicode == 37) {
    Advance(-1);
	}
}
 
document.onkeydown = hkeys;

function outputg(data, divname)
{
	var str = new Array();
	var si = 0;

	var container = document.getElementById(divname);

	var endindex = data.items.length;
	var startindex = 0;

	str[si++] = "<div style='float:right'><a href='javascript:Advance(-1)'>prev</a>";
	str[si++] = "&nbsp;&nbsp;&nbsp;";
	str[si++] = "<a href='javascript:Advance(1)'>next</a></div>";

	var gi = 0;
	var sz = 512;
	
	for (var i = endindex - 1; i >= startindex; i--) {
		var item = data.items[i];
		var imgurl = item.url;
		var turl = item.thumb;
		var width = item.width;
		var height = item.height;
		
		var desc = item.summary;
		
		turl = imgurl + "?size=" + sz;
		imgurl = imgurl + "?size=640";
		
		// auto-fit to sz
		var iw = parseInt(item.width);
		var ih = parseInt(item.height);

		if (iw < ih) {
			height = sz;
			width  = Math.floor(item.width * sz / item.height + 0.5);
		} else {
			width = sz;
			height = Math.floor(item.height * sz / item.width + 0.5);
		}
		
		if (iw < sz && ih < sz) {
			width = item.width;
			height = item.height;
		}
		
		var istr = "<a href='" + imgurl + "' alt='" + desc + "' title='" + desc + "'><img class='galbum' width=" + width + " height=" + height + " src='" + turl + "'></a>";
    
		if (item.summary) {
		  istr += "<div class='caption' style='margin-bottom:40px'>" + item.summary + "</div>";
		}
		
		gallerytext[gi++] = istr;
	}

	// write some nodes
	str[si++] = "<div style='display:none' id='n0'></div>";
	str[si++] = "<div style='display:none' id='n1'></div>";
	str[si++] = "<div style='display:none' id='n2'></div>";

	// and thumbs for fun!
	for (var i = endindex - 1; i >= startindex; i--) {
		var item = data.items[i];
		var hnum = endindex - 1 - i;
		//var turl = item.url + "?xmax=80&ymax=80&shadow=4&bgcolor=f3f3f3";
		var turl = item.url + "?size=96&shadow=4&bgcolor=f3f3f3";
		str[si++] = "<a href='#" + hnum + "'><img style='border:none' src='" + turl + "'></a>";
	}
	
	result = str.join("");
	container.innerHTML = result;
	
	node[0] = document.getElementById('n0');
	node[1] = document.getElementById('n1');
	node[2] = document.getElementById('n2');
	nodeID[0] = -1;
	nodeID[1] = -1;
	nodeID[2] = -1;
	
	var hash = getHash();
	if (!hash) hash = "0";
	
  Advance(0, hash);
}

function loadData(url) {
	var headTag = document.getElementsByTagName("head").item(0);
	var scriptTag = document.createElement("script");
	scriptTag.src = url;
	headTag.appendChild(scriptTag);
}

var galcounter = 0;

function loadg140(folderjson, thumbsz, imgsz) {

	galcounter ++;
	var galname = "gallery" + galcounter;
	var galcbk  = "galcbk" + galcounter;
	//var imgmax    = "size=640";
	//var thumbsize = "size=144";
	
	//if (thumbsz) {
	//	thumbsize = "size=" + thumbsz;
	//}
	//if (imgsz) {
	//	imgmax = "size=" + imgsz;
	//}
	
	document.writeln("<pre><span id='dbg'></span></pre>");
	document.writeln("<center><div id=" + galname + "></div></center>");
	
	// emit a callback for this instance
	var headTag = document.getElementsByTagName("head").item(0);
	var scriptTag = document.createElement("script");
	scriptTag.text = "function " + galcbk + "(data) {outputg(data, '" + galname + "');}";
	headTag.appendChild(scriptTag);
	
	var feed = folderjson + '?callback=' + galcbk;
	
	// be explicit about thumbsize and imgmax:
	///feed += '&' + imgmax + '&' + thumbsize;

	loadData(feed);

	if (!globalgallery) {
    globalgallery = galname;
  }
}
