var id;
var index=1;

var current;
var thumbs;
var origTitle;
var isFilmstrip;

/**
 * @param comparator comparator function with arg0=object, arg1=value
 */
var indexOf = function (_this, value,comparator) {
	var i;
	if(!comparator) {
  	for (i=0; i < _this.length; i++) {
  		if (_this[i] === value) {
  			return i;
  		}
  	}
	} else {
	  	for (i=0; i < _this.length; i++) {
  		if (comparator(_this[i],value)) {
  			return i;
  		}
  	}
	}
	return -1;
};
Array.prototype.indexOf = function(value,comparator) {
  return indexOf(this,value,comparator);
}

var showPreview = function(a) {
    var obj = getObj("preview");
	  obj.src="norm/"+a.id+".jpg";
	  obj.title=a.title;
	  obj.onclick=function() {document.location = a.href};
}
var center = function(div,obj) {
 div.scrollTop=obj.offsetTop-(div.offsetHeight-obj.offsetHeight)/2;
}
var blurEvent = function(evt) {
  if(evt && evt.id) {
    getObj(evt.id).parentNode.className="";
  }
}
var focusEvent = function(obj) {
  if(obj && obj.id) {
    obj.parentNode.className="focus";
    current=obj.id;
    if(isFilmstrip) {
      showPreview(obj);
      center(getObj('thumbnails'),obj.parentNode);
    }
  }
}
var tryCreatePreviewImage = function() {
  if(!getObj("preview")) {
    var div= getObj("imagePreview");
    var img = document.createElement("img");
    img.setAttribute("id","preview");
    div.appendChild(img);
  }
}
window.onload = function() {
  isFilmstrip=false;
  origTitle=document.title;
  thumbs = getObj("thumbnails").getElementsByTagName("a");
  
  var li = document.links;
  for(var i=0;i<li.length;i++) {
   li[i].onblur = function() { blurEvent(this);}
   li[i].onfocus = function() {focusEvent(this);}
  }
  if(location.hash) {
    id = location.hash.substring(1,location.hash.length);
    document.getElementById(id).focus();
  } else if(li.length>1) {
    li[1].focus();
    index=1;
  }
  if(getPersistentStatus("filmstrip")) {
    toggleFilmStrip();
  }
}

var toggleFilmStrip = function() {
  var thumbnails = getObj("thumbnails");
  if(isFilmstrip) { //to normal
    getObj("imagePreview").className="hide";
    document.documentElement.className="";
    thumbnails.className="";
    isFilmstrip=false;
    for(var i=0;i<thumbs.length;i++) {
      thumbs[i].onclick = function() {document.location = this.href};
    }
  } else { //to filmstrip
    isFilmstrip=true;
    thumbnails.className="filmstrip";
    document.documentElement.className="filmstrip";
    getObj("imagePreview").className="";  
    tryCreatePreviewImage();
    for(var i=0;i<thumbs.length;i++) {
      thumbs[i].onclick = function() {
        showPreview(this);
        return false;
      }
    }
//    function() {focusEvent(this);}
    var currentObj = getObj(current);
    focusEvent(currentObj);
    currentObj.onfocus = function() {}
    currentObj.focus();
    currentObj.onfocus = function() {focusEvent(this);}
  }
}
var keyDown = function(evt) {
  var code;
  if(typeof event=="undefined")
    code = evt.keyCode;
  else 
    code = event.keyCode;

  var index = indexOf(thumbs,current,function(el,val) {return el.id==val});
  var newIndex=0;
  switch(code) {
    case 37: //left
      if(index<1) {
        newIndex=thumbs.length-1;
      } else {
        newIndex=index-1;
      }
      thumbs[newIndex].focus();
    break;
    case 39: //right
      if(index>=thumbs.length-1) {
        newIndex=0;
      } else {
        newIndex=index+1;
      }
      thumbs[newIndex].focus();
    break;
    case 45: //insert
      setPersistentStatus("filmstrip",!isFilmstrip);
      toggleFilmStrip();
    break;
    default:
      return;
      //console.debug("keycode is:"+evt.keyCode)
    break;
  }
  document.title=origTitle+" - "+thumbs[newIndex].title+" ["+(newIndex+1)+"/"+thumbs.length+"]";
}
document.onkeydown = keyDown;
/*function al(e, a, b){
  alert (a + ":" + b);
  //prevent default action if link clicked
  (e.preventDefault) ? e.preventDefault() : (e.returnValue = false);
}*/
