// please don't screw the pooch
// wendell att qx dott net 
// and please don't steal! :) 
// Copyright 2007. 
// You may copy but you must give credit
function liquidGallery(theWidth) {
		
	var lg = document.getElementById("liquidGallery");
	var colcount = 3;
	
	if(!lg) { return; }

	var lgtbl = lg.getElementsByTagName("TABLE");
	if(lgtbl[0]) {
		var lgtd = lgtbl[0].getElementsByTagName("TD");
		if(lgtd[0]) {
			var tbl = document.createElement("TABLE");
			tbl.width="100%";
			var tblrow = tbl.insertRow(-1);
			var tblcounter = 1; 
			var tblcell;
			for(var i=0; lgtd[i]; i++)
			{
				tblrow.appendChild( lgtd[i].cloneNode(true) );
				if (tblcounter > colcount) {
					tblcounter=1;
					tblrow = tbl.insertRow(-1);
				}
				else tblcounter++;
			}
			lg.replaceChild(tbl, lgtbl[0]);
		}
	}

	var ocfunc = function() {
		myLightbox.start(this);
		return false;
	}
	if(document.evaluate) {
		var xp = 'descendant::a[@href][contains(@rel, "lightbox")]';
		var ss = document.evaluate(
			xp, lg, null,
			XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
			null
		);
		for( var i=0; i<ss.snapshotLength; i++ ) {
			ss.snapshotItem(i).onclick = ocfunc;
		}
	} else {
		var anchors = lg.getElementsByTagName("a");
		for( var i=0; i<anchors.length; i++ ) {
			var anchor = anchors[i];
			if(anchor.href && anchor.rel.match("lightbox")) {
				anchor.onclick = ocfunc;
			}
		}
	}
	
};

function addLoadListener(fn)
{
/*	if (typeof window.addEventListener != 'undefined')
	{
		window.addEventListener('load', fn, false);
	}
	else if (typeof document.addEventListener != 'undefined')
	{
		document.addEventListener('load', fn, false);
	}
	else if (typeof window.attachEvent != 'undefined')
	{
		window.attachEvent('onload', fn);
	}
	else
	{
		return false;
	}
	
	return true;*/
};


function attachEventListener(target, eventType, functionRef, capture)
{
    if (typeof target.addEventListener != "undefined")
    {
        target.addEventListener(eventType, functionRef, capture);
    }
    else if (typeof target.attachEvent != "undefined")
    {
        target.attachEvent("on" + eventType, functionRef);
    }
    else
    {
        return false;
    }

    return true;
};


addLoadListener(checkBrowserWidth);
attachEventListener(window, "resize", checkBrowserWidth, false);

function checkBrowserWidth()
{
	var theWidth = getBrowserWidth();
	
	if (theWidth == 0)
	{
		var resolutionCookie = document.cookie.match(/(^|;)tmib_res_layout[^;]*(;|$)/);

		if (resolutionCookie != null)
		{
			setStylesheet(unescape(resolutionCookie[0].split("=")[1]));
		}
		
		addLoadListener(checkBrowserWidth);
		return false;
	}

	if (theWidth > 2000)
	{
		setStylesheet("highres");
		document.cookie = "tmib_res_layout=" + escape("highres");

	}
	else
	{
		setStylesheet("");
		document.cookie = "tmib_res_layout=";
	}
	liquidGallery(theWidth);	
	return true;
};

function getBrowserWidth()
{
	if (window.innerWidth)
	{
		return window.innerWidth;
	}
	else if (document.body)
	{
		return document.body.clientWidth;
	}
	else if (document.documentElement && document.documentElement.clientWidth != 0)
	{
		return document.documentElement.clientWidth;
	}
	return 0;
};



function setStylesheet(styleTitle)
{
	var currTag;

	if (document.getElementsByTagName)
	{
		for (var i = 0; (currTag = document.getElementsByTagName("link")[i]); i++)
		{
			if (currTag.getAttribute("rel").indexOf("style") != -1 && currTag.getAttribute("title"))
			{
				currTag.disabled = true;

				if(currTag.getAttribute("title") == styleTitle)
				{
					currTag.disabled = false;
				}
			}
		}
	}
	
	return true;
};


/* this section (2) copyright Mingyi Liu 2004-06
This version is 1.0.
autocomplete stuff not being used just yet ...
*/

var ml_autocomplete = {
  keyTime : null,
  keyStr : '',
  allOpts : null,
  lastElement : null,
  onChange : null, // callback function reference
  delay : 500, // do type-ahead if two keys were pressed within 500 milliseconds (0.5 second, one can change this value for customization)
  
  populate : function(srcEvent)
  {
    var element = (srcEvent)? ((srcEvent.target)? srcEvent.target : srcEvent.srcElement) : window.event.srcElement;
    if(this.lastElement != element)
    {
      this.allOpts = new Array();
      for(var i = 0; i < element.options.length; i++)
        this.allOpts[i] = element.options[i].text.toLowerCase();
      this.lastElement = element;
    }
  },
  setSelection : function(srcEvent)
  {
    var myEvent = (srcEvent)? srcEvent : window.event;
    var element = (myEvent.target)? myEvent.target : myEvent.srcElement;
    var keyCode = myEvent.keyCode;
    if(keyCode == 13 && this.onChange)
    {
      this.onChange(element.value);
      this.keyTime = null; // reset time after enter key's pressed
      return;
    }
    // messy JS keycodes force me to preprocess. Note: I use a US keyboard, other keyboards may vary?
    if((keyCode > 47 && keyCode < 58) || (keyCode > 64 && keyCode < 91 || keyCode == 32)) ; // space or alphanumerical characters, leave them alone
    else if(keyCode > 95 && keyCode < 106) keyCode -= 48; // keypad numbers
    else if(keyCode > 105 && keyCode < 112) keyCode -= 64; // keypad '+', '-', '/', '*', '.'
    else if(keyCode > 187 && keyCode < 192) keyCode -= 144; // '/', '.', ',', '-'
    else if(keyCode > 218 && keyCode < 222) keyCode -= 128; // '\', '[', ']'
    else
    {
      switch(keyCode)
      {
        case 187: keyCode = 61; break; // '='
        case 222: keyCode = 39; break; // '''
        case 192: keyCode = 96; break; // '`'
        case 186: keyCode = 59; break; // ';'
        default: return; // do not process non printable characters (unfortunately backspace cannot be supported because browsers like IE interpret backspace as go back a page in history)
      }
    }
    var currentKey = String.fromCharCode(keyCode).toLowerCase();
    var idx, currentSIdx = element.selectedIndex, useOld = false;
    var newTime = new Date().getTime();
    if(this.keyTime != null && newTime - this.keyTime < this.delay) 
    {
      this.keyStr += currentKey;
      idx = this.findIdx(currentSIdx);
      if(idx == -1)
      {
        this.keyTime = newTime;
        return; // not found, keep current selection then (leave the incorrect keyStr alone)
      }
    }
    else // handle default browser behavior
    {
      this.keyStr = currentKey;
      idx = this.findIdx(currentSIdx);
    }
    if(idx >= 0) // if keyStr is found in an option, select the option
    {
      if(currentSIdx >= 0) element.options[currentSIdx].selected = false;
      // gecko-based browsers have a very strange bug that strikes when user presses
      // the same character multiple times (like 'AAA', 'BBBB'), which could be "fixed"
      // in a strange way too (actually the idx > 0 test is not even necessary!)
      // first make a pattern to check if it's same character multiple times
      var pattern = new RegExp('^' + this.keyStr.charAt(0) + '+$', "i");
      if((navigator.userAgent.toLowerCase().indexOf("gecko") != -1) && pattern.test(this.keyStr) && idx > 0) element.options[idx-1].selected = true;
      else element.options[idx].selected = true;
    }
    this.keyTime = newTime;
  },
  findIdx : function(currentSIdx)
  {
    // full scan to find the smallest idx that match string keyStr (case-insensitive)
    var len = this.keyStr.length;
    var startidx = (currentSIdx < 0)? 0 : ((len == 1)? currentSIdx + 1 : currentSIdx);
    for(var i = startidx; i < this.allOpts.length; i++)
      if(this.allOpts[i].length >= len && this.allOpts[i].substring(0, len) == this.keyStr)
        return i;
    for(var i = 0; i < startidx; i++)
      if(this.allOpts[i].length >= len && this.allOpts[i].substring(0, len) == this.keyStr)
        return i;
    return -1;
  }
};
/* end section 2 */ 

