
// parse URL for _GET values
var iCurrentTreeID = iOtherTreeID = 0;
var iPrev, iNext;
var strCurrentTreeName = '';
var strSort = strLastSort = 'LibraryID';
var iRealTime = 0;
var indexLinks = Array();
var bSearching = false;
var bThumbnails = false;
var strSearchQuery = '';
var rightOffset = 10;
if (ReadCookie('legend') == '') WriteCookie('legend',false);
var legendOpen = ReadCookie('legend');
 if (legendOpen == 'true') rightOffset = 420;


var aTmpValues = self.location.href.split('?');
if (aTmpValues.length > 1) {
    var strGetValues = aTmpValues[1];
    var aGetValues = strGetValues.split('&');
    for (i=0; i < aGetValues.length; ++i) {
    	var aGet = aGetValues[i].split('=');
    	
    	if (aGet[0] == 'tree')
    		iCurrentTreeID = aGet[1];
    		
    	if (aGet[0] == 'sort')
    		strSort = aGet[1];
			
    	if (aGet[0] == 'search') {
    		strSearch = aGet[1];
    		strSearchQuery = "&search=" + strSearch;
    	}

		if (aGet[0] == 'rt')
            iRealTime = aGet[1];
    }
}
// add tree to _GET when sort form is changed only if tree != 0
var strTreeGET = '';
if (iCurrentTreeID != 0)
	strTreeGET = '&Tree='+iCurrentTreeID;

function doClick(which, el) {	
	if (savEvtTime - dcAt <= 0) return false;	// preempt if DC occurred after original click.
	FilterTypes(el, true);
}

var lastDblClick;
function doDoubleClick(which, el) {
	var d = new Date();
	dcAt = d.getTime();
	if (savTO != null) {
		clearTimeout( savTO );	// Clear pending Click  
		savTO = null;
	}
	
	thisDblClick = 'num' + parseInt(el);	
	eval (thisDblClick + ' = true; ');
	
	if (thisDblClick != lastDblClick) {
		var type = parseInt(el);
		var state = false;
		TypeFilter(type);
		lastDblClick = thisDblClick;
	} else {
		var type = 0;
		var state = true;	
		lastDblClick = 'num0';
	}	
	
	for (p=1; p <= 6; ++p) {
		if (p != type) {
			var c = 'num' + p;
			eval (c + ' = ' + state);
			TypeFilter(p);
		}
	}
}

// slide panel function
function fShowPanels(i,variationName,numPolygons) {
	sp_variations.showPanel(i);
	document.getElementById('cur_var_name').innerHTML = variationName; 
	document.getElementById('cur_var_tris').innerHTML = numPolygons;	
}

// keystroke detection
function addListener(a,b,c,d){if(a.addEventListener){a.addEventListener(b,c,d);return true;}else if(a.attachEvent){var e=a.attachEvent("on"+b,c);return e;}else{alert("Handler could not be attached");}}
function bind(a,b,c,d){return window.addListener(a,b,function(){d.apply(c,arguments)});}
function handleKeystroke(evt) {             
	if( !evt ) evt = window.event;
	var asc = !evt.keyCode ? (!evt.which ? evt.charCode : evt.which) : evt.keyCode;
	var chr = String.fromCharCode(asc).toLowerCase();
	for (var i in this) {
		if (asc == i) {
			this[i](evt);
			break;
		}
	}
}

function cancelEvent(evt) {
	evt.cancelBubble = true;
	evt.returnValue = false;
	if (evt.preventDefault) evt.preventDefault();
	if (evt.stopPropagation) evt.stopPropagation();
	return false;
}

var keyMap = new Array();
var ARROW_LEFT = 37;
var ARROW_UP   = 38;
var ARROW_RIGHT = 39;
var ARROW_DOWN = 40;
var PAGE_UP = 33;
var PAGE_DOWN = 34;
var TAB = 9;
var ENTER = 13;
var SPACEBAR = 32;

keyMap[ARROW_LEFT] = arrowLeft;
keyMap[ARROW_UP] = arrowUp;
keyMap[ARROW_RIGHT] = arrowRight;
keyMap[ARROW_DOWN] = arrowDown;
keyMap[PAGE_UP] = pageUp;
keyMap[PAGE_DOWN] = pageDown;
keyMap[ENTER] = Enter;
keyMap[SPACEBAR] = Spacebar;

function arrowLeft(evt) {
//	sp_variations.showPreviousPanel();

	iPrevCell = (sp_variations.currentPanel.id.substring(10,sp_variations.currentPanel.id.length)) - 1;
	if (iPrevCell < 0) iPrevCell = 0;
	onClickFunc = String(document.getElementById('var_' + iPrevCell).onclick);
	iStart = onClickFunc.indexOf('fShowPanels');
	leftFunc = onClickFunc.substring(iStart, onClickFunc.length - 1);
	eval(leftFunc);
}
function arrowRight(evt) {
//	sp_variations.showNextPanel();

	iNextCell = (sp_variations.currentPanel.id.substring(10,sp_variations.currentPanel.id.length))
	iNextCell++;
	
	if (document.getElementById('var_' + iNextCell)) {
		onClickFunc = String(document.getElementById('var_' + iNextCell).onclick);
		iStart = onClickFunc.indexOf('fShowPanels');
		rightFunc = onClickFunc.substring(iStart, onClickFunc.length - 1);
		eval(rightFunc);
	}
}

function arrowUp(evt) {
	cancelEvent(evt);
	var iPrev = iCurrentTreeID;
	var elOffset = 0;
	var j;	
	
	for (i=1; i < indexLinks.length; ++i) {
		if (i > 0 && indexLinks[i-1].className != 'subset' && indexLinks[i-1].className != 'divider')
			elOffset = elOffset + indexLinks[i-1].offsetHeight;
		else if (i > 1 && indexLinks[i-1].className == 'divider') 
			elOffset = elOffset + indexLinks[i-1].scrollHeight + 13;
		if (indexLinks[i].id == iCurrentTreeID) {
			j = i-1;			
			break;
		}
	}
	if (strSort == 'Name' || strSort == 'ScientificName')
		elOffset = elOffset - indexLinks[i-1].scrollHeight;

	while (j >= 0 && (indexLinks[j].className == 'divider' || indexLinks[j].className == 'subset')) j--;
	if (j > -1) {
		iPrev = indexLinks[j];
	
		var getTree = new ajaxObject('get_tree.php', processTree);
			getTree.update('tree='+parseInt(iPrev.id)+'&sort='+strSort+strSearchQuery+'&rt='+iRealTime+'&js=1');
	
		SelectNewRow(iCurrentTreeID,iPrev);
		iCurrentTreeID = iPrev.id;
		
		if (elOffset <= document.getElementById('roll_list').scrollTop)
			document.getElementById(iCurrentTreeID).scrollIntoView(true);
	}
}

function arrowDown(evt) {
	cancelEvent(evt);
	var iNext = iCurrentTreeID;
	var elOffset = indexLinks[0].scrollHeight;
	var k = 0;
			
	for (i=0; i < (indexLinks.length - 1); ++i) {
		if (i < indexLinks.length && indexLinks[i+1].className != 'subset' && indexLinks[i+1].className != 'divider')
			elOffset = elOffset + indexLinks[i+1].offsetHeight;
		else if (indexLinks[i+1].className == 'divider') 
			elOffset = elOffset + indexLinks[i+1].scrollHeight + 13;
		if (indexLinks[i].id == iCurrentTreeID) {
			k = i+1;				
			break;
		}
	}
	
	if (k < indexLinks.length) {
		while (indexLinks[k].className == 'divider' || indexLinks[k].className == 'subset') k++;
		iNext = indexLinks[k];
		var getTree = new ajaxObject('get_tree.php', processTree);
			getTree.update('tree='+parseInt(iNext.id)+'&sort='+strSort+strSearchQuery+'&rt='+iRealTime+'&js=1');
	
		SelectNewRow(iCurrentTreeID,iNext);
		iCurrentTreeID = iNext.id;
		
		if (elOffset >= (document.getElementById('roll_list').scrollTop + document.getElementById('roll_list').offsetHeight))	
			document.getElementById(iCurrentTreeID).scrollIntoView(false);
	}
}

function pageUp(evt) {
	cancelEvent(evt);
	var categories = Array();
	var foundCurrentTree = false;
	for (i=0; i < indexLinks.length; ++i) {
		if (indexLinks[i].className == 'subset')
			categories.push(i);
			
		if (indexLinks[i].id == iCurrentTreeID && j!=0) {
			var k = 1;
			if (categories.length > 1)
				k = categories[categories.length - 1];
			
			if (indexLinks[k+1].id == iCurrentTreeID && categories.length > 1) 
				k = categories[categories.length - 2];
			
			var getTree = new ajaxObject('get_tree.php', processTree);
				getTree.update('tree='+indexLinks[k+1].id+'&sort='+strSort+strSearchQuery+'&rt='+iRealTime+'&js=1');
				
			document.getElementById(indexLinks[k-1].id).scrollIntoView(true);
			SelectNewRow(iCurrentTreeID,indexLinks[k+1].id);
			iCurrentTreeID = indexLinks[k+1].id;

			break;
		}	
	}
}

function pageDown(evt) {
	cancelEvent(evt);
	var foundCurrentTree = false;
	for (i=0; i < indexLinks.length; ++i) {
		if (foundCurrentTree == false) {
			if (indexLinks[i].id == iCurrentTreeID)
				foundCurrentTree = true;
		} else {
			if (indexLinks[i].className == 'subset') {				
				var getTree = new ajaxObject('get_tree.php', processTree);
					getTree.update('tree='+indexLinks[i+1].id+'&sort='+strSort+strSearchQuery+'&rt='+iRealTime+'&js=1');
				
				document.getElementById(indexLinks[i-1].id).scrollIntoView(true);
				SelectNewRow(iCurrentTreeID,indexLinks[i+1].id);
				
				iCurrentTreeID = indexLinks[i+1].id;				
				
				break;
			}
		}
	}
}

function Enter(evt) {
	cancelEvent(evt);
	if (bSearching == true) {
		AjaxSearch();	
} else if (bSearching == false) {
		elDivId = sp_variations.getCurrentPanel().id;
		var el = document.getElementById(elDivId).firstChild;
		startLytebox(el.id, el.href, el.title, el.rel);
	}
	
	return false;
}

function SetIframeFocus() {
    if (ie) {
        var myIframe = document.frames['lbIframe'];
        var myField = document.frames['lbIframe'].document.getElementById('VideoPlayer');
    } else {
        var myIframe = document.getElementById('lbIframe');
        var myField = document.getElementById('lbIframe').contentDocument.getElementById('VideoPlayer');
    }
    myIframe.focus();
    myField.focus();
    
    clearTimeout(s);
}

function Spacebar(evt) {
    if (document.getElementById('view_rotate') != undefined) {    
    	initLytebox();         
    	var viewRotate = document.getElementById('view_rotate');    	
		var objLink = document.createElement('a');
		objLink.setAttribute('href',viewRotate.href);
		objLink.setAttribute('title',viewRotate.title);
		objLink.setAttribute('rel', viewRotate.rel);
		objLink.setAttribute('rev',viewRotate.rev);
		myLytebox.start(objLink, false, true);
		
        s = setTimeout("SetIframeFocus()", 250);

        return false;
    }	
}

/*
function Tab(evt) {
}
*/


// Add the keydown listener to the document object for global capture
bind(document, 'keydown', keyMap, handleKeystroke);


// highlight newly selected row
function SelectNewRow(curID,newID) {
	if (document.getElementById(curID)) {
		// remove class from old selected item
		var oldItem = document.getElementById(curID);
		var basicClass = oldItem.className.split(' current')[0];
		oldItem.className = basicClass;			

		oldItem.onmouseover = function() {this.style.cursor = 'pointer';};	
	}
	
	if (newID) {
		if (document.getElementById(newID)) newID = document.getElementById(newID);
		// make this the new selected item
		newID.className = newID.className + ' current';
		newID.onmouseover = function() {newID.style.cursor = 'default';};	
	}
}


function ResizeLegend() {
	if (legendOpen == 'true') {
		if (rightOffset > 10) {
			rightOffset = rightOffset - 10;
			document.getElementById('legendbox').style.width = rightOffset + 'px';		
			setTimeout("ResizeLegend()", 5);
		} else { 
			legendOpen = 'false'; 
			WriteCookie('legend','false',168);
		}
	} else {
		if (rightOffset < 420) {
			rightOffset = rightOffset + 10;
			document.getElementById('legendbox').style.width = rightOffset + 'px';		
			setTimeout("ResizeLegend()", 5);
		} else {
			legendOpen = 'true';
			WriteCookie('legend','true',168);
		}
	}
}


function ChangeVersion(ver) {
	iVersion = ver;	

	if (document.sort_form.sort_select.value == 'Search') {
        AjaxSearch();
	} else {
		var getIndex = new ajaxObject('tree_index.php');
			getIndex.update('tree='+iOtherTreeID+'&version='+ver+'&sort='+document.sort_form.sort_select.value+'&js=1');
			getIndex.callback = function(responseText, responseStatus) {
				processIndex(responseText, responseStatus);
			}

	
    	if (iCurrentTreeID != 0 && !bThumbnails && document.getElementById(iCurrentTreeID) != undefined) {
            if (document.getElementById('change_version_link') != undefined && document.getElementById('change_version_link').rel != -1 ) {
        		var getTree = new ajaxObject('get_tree.php', processTree);
        			getTree.update('tree='+iOtherTreeID+'&rt='+iRealTime+'&js=1');
        			getTree.callback = function(responseText, responseStatus) {
        				if (responseStatus==200) {	
        					processTree(responseText, responseStatus);
        				}
        			};
        			
                var iTempID = iCurrentTreeID;
                iCurrentTreeID = iOtherTreeID;
                iOtherTreeID = iTempID;
            } 
    	} else if (bThumbnails) {
            ViewAll();
        }
	}	
}


function EnforceRealTime() {
    if (document.getElementById('realtime_cb').checked == true)
        iRealTime = 1;
    else {
        iRealTime = 0;
    }
    if (!bThumbnails && iCurrentTreeID != 0) {
    	var getTree = new ajaxObject('get_tree.php', processTree);
    		getTree.update('tree='+iCurrentTreeID+'&rt='+iRealTime+'&js=1');
	}
}


function processIndex(responseText, responseStatus) {
  if (responseStatus==200) {
	if (document.getElementById('ajax_master'))
        document.getElementById('ajax_master').innerHTML=responseText ;
	IndexEvents();
	// NextPrevLinks();	
  } else {
    alert(responseStatus + ' -- Error Processing Request');
  }
}


function processTree(responseText, responseStatus) {
  if (responseStatus==200) {
  	if (document.getElementById('ajax_detail')) {
        document.getElementById('ajax_detail').style.visibility = 'visible';
  	    document.getElementById('ajax_detail').innerHTML=responseText;
  	}
  	if (iCurrentTreeID != 0 && !bThumbnails) {
  		LoadedTreeEvents();
  		
  		// google analytics tracking
  		var pageTracker = _gat._getTracker("UA-15712251-1");
        pageTracker._addIgnoredRef('sklipowicz.com');
  		var trackURL = "/trees/?tree="+iCurrentTreeID;
  		pageTracker._trackPageview(trackURL);
  		
	} else if (bThumbnails) {
        if (strSort == 'Search')
            ProcessViewAll();
        else
            ViewAll();
            
  		// google analytics tracking
  		var pageTracker = _gat._getTracker("UA-15712251-1");
        pageTracker._addIgnoredRef('sklipowicz.com');
  		var trackURL = "/trees/?tree=thumbnails";
  		pageTracker._trackPageview(trackURL);
  		
	} else if (iCurrentTreeID == 0) {
    	document.getElementById('legendbox').style.width = rightOffset + 'px';
    	if (ie) document.getElementById('legendbox').style.filter ="progid:DXImageTransform.Microsoft.Alpha(opacity=80)";
    	
    	if (document.getElementById('overview_player') != undefined) {
            // swfobject flash player
            var flashvars = {};
            var params = {};
            params.wmode = "transparent";
            params.allowFullScreen = "true";
            var attributes = {};
            attributes.id = "VideoPlayer";
            attributes.name = "VideoPlayer";
            swfobject.embedSWF("http://www.speedtree.com/trees/flash/store_overview.swf", "overview_player", "714", "510", "9.0.0", false, flashvars, params, attributes);
        }
        
        if (document.getElementById('thumbnail_gif')) {
            document.getElementById('thumbnail_gif').parentNode.nextSibling.nextSibling.style.textAlign = 'right';
            if (ie6) {
                document.getElementById('thumbnail_gif').style.margin = '0 10px -25px 0';
            }
            document.getElementById('thumbnail_gif').parentNode.onclick = function() { ViewAll(); return false; };
            document.getElementById('thumbnail_toggle').onclick = function() { ViewAll(); return false; };
            document.getElementById('thumbnail_gif').onmouseover = function() { this.src = 'graphics/thumbnail_view_hover.gif'; };
            document.getElementById('thumbnail_gif').onmouseout = function() { this.src = 'graphics/thumbnail_view.gif'; };
            document.getElementById('thumbnail_toggle').onmouseover = function() { document.getElementById('thumbnail_gif').src = 'graphics/thumbnail_view_hover.gif'; };
            document.getElementById('thumbnail_toggle').onmouseout = function() { document.getElementById('thumbnail_gif').src = 'graphics/thumbnail_view.gif'; };
        }
    }
            
  } else {
    alert(responseStatus + ' -- Error Processing Request');
  }
}


// Events for AJAX loaded index list
function IndexEvents() {
	
	indexLinks = document.getElementById('roll_list').getElementsByTagName('LI');
	var i=0;
	while (i<indexLinks.length) {
		indexLinks[i].style.cursor = 'pointer';
		if (indexLinks[i].className != 'subset')
		{		
			if (indexLinks[i].className != 'divider')
			{					
				indexLinks[i].onclick = function()
				{
					// highlight newly selected row
					bThumbnails = false;
					SelectNewRow(iCurrentTreeID,this);
					iCurrentTreeID = parseInt(this.id);
					var getTree = new ajaxObject('get_tree.php', processTree);
						getTree.update('tree='+iCurrentTreeID+'&sort='+strSort+strSearchQuery+'&rt='+iRealTime+'&js=1');
				};
				
				if (indexLinks[i].className.indexOf('current') != -1)
					indexLinks[i].onmouseover = function() { this.style.cursor = 'default'; };
				
			} else {	// divider
				indexLinks[i].onclick = function() { FilterTypes(this.id, false); };
			}
		}
		i++;
	}
	
	if (iCurrentTreeID != 0 && !bThumbnails && document.getElementById(iCurrentTreeID)) {
			SelectNewRow(iOtherTreeID,iCurrentTreeID);
            s = setTimeout('document.getElementById(iCurrentTreeID).scrollIntoView(true); clearTimeout(s);',10);       	

	} else {
		newID = null;
		if (document.getElementById(iOtherTreeID)) {
			newID = iOtherTreeID;
			iCurrentTreeID = iOtherTreeID;
		}
            
		if (document.getElementById(iCurrentTreeID)) {
			document.getElementById(iCurrentTreeID).scrollIntoView(true);
			SelectNewRow(iOtherTreeID,newID);
		}
	}
	
    document.getElementById('sort_select').onchange = SortChanged;	
}


// Define the sliding panels globally, so they can be reloaded
var sp_variations;
function initSlidingPanels() { sp_variations = new Spry.Widget.SlidingPanels("variations", { fps: 90 }); }

function LoadedTreeEvents() {
    if (document.getElementById('variations_cell')) {
    	var thumbLinks = document.getElementById('variations_cell').getElementsByTagName('IMG');
    	for (i = 0; i < thumbLinks.length; ++i) {
    		thumbLinks[i].onmouseover = function() { AlphaFocus(this.id, 'varThumb'); };
    		thumbLinks[i].style.cursor ="pointer";	
        	if (ie){	// load initial transparency values for rollOvers
    			thumbLinks[i].style.filter ="progid:DXImageTransform.Microsoft.Alpha(opacity=100)";
    		}			
    	}
	}

	var detailImgs = getElementsByClass('thumb_link', 'A');
	for (i = 0; i < detailImgs.length; ++i) {
		if (detailImgs[i].parentNode.id != 'description') {
			var childImg;
			
			if (detailImgs[i].parentNode.id.indexOf('variation') == -1) {
				detailImgs[i].onmouseover = function()
				{ 		
					childImg = document.getElementById(this.id).childNodes[1];
					if (ie) childImg = document.getElementById(this.id).firstChild;			
					childImg.style.borderColor = '#CCC'; 
					
					this.onmouseout = function() { childImg.style.borderColor = '#FFF'; };			
				};
			}
			
			if (detailImgs[i].rel.indexOf('lytebox') != -1) {
				detailImgs[i].onclick = function() {
					var el_id = this.id;
					var el = document.getElementById(el_id);
					startLytebox(el_id, el.href, el.title, el.rel);
					
					return false;
				}
			} else if (detailImgs[i].rel.indexOf('lyteframe') != -1) {
				detailImgs[i].onmousedown = function() { initLytebox(); };
				detailImgs[i].onclick = function() {
					startLytebox(this, this.href, this.title, this.rel, this.rev);
					return false;	
				}
			}
		}
	}
	
	if (document.getElementById('legendbox')) {
    	document.getElementById('legendbox').style.width = rightOffset + 'px';
    	if (ie) document.getElementById('legendbox').style.filter ="progid:DXImageTransform.Microsoft.Alpha(opacity=80)";
	}
    
    if (document.getElementById('variations'))	
	   initSlidingPanels();
}


// AJAX process functions
function AjaxSearch() {
    if (document.search_form.search.value.length < 4) {
		if (document.search_form.search.value.length == 0) {
			document.getElementById('cancel_btn').style.visibility = 'hidden';
			var getIndex = new ajaxObject('tree_index.php');
				getIndex.update('tree='+iCurrentTreeID+'&js=1&sort='+strLastSort+strSearchQuery);
				getIndex.callback = function(responseText, responseStatus) {
					processIndex(responseText, responseStatus);
					var s=0;
					while (document.getElementById('sort_select')[s].value != strLastSort) s++;

					document.getElementById('sort_select')[s].selected = true;
				}
		} else alert("Sorry, your search must be longer than 3 characters");
		
	} else {
		if (document.sort_form.sort_select.length <= 4) {
			var optSearch = document.createElement('option');
			optSearch.innerHTML = 'Search';
			optSearch.value = 'Search';
			document.getElementById('sortgroup').appendChild(optSearch);
		}
	  	document.sort_form.sort_select[4].selected = true;
              
		strSearch = document.getElementById('search').value;
		strSearchQuery = "&search=" + strSearch;
		var getSearch = new ajaxObject('tree_index.php', processIndex);						   	
			getSearch.update('search='+strSearch+'&js=1', 'POST');
			getSearch.callback = function(responseText, responseStatus)
			{
				processIndex(responseText, responseStatus);
				
				if (document.getElementById(iCurrentTreeID))
				{
					SelectNewRow(0,iCurrentTreeID);
					if (iCurrentTreeID != 0 && !bThumbnails) document.getElementById(iCurrentTreeID).scrollIntoView(false);	
				}
			}
		if (iCurrentTreeID == 0 || bThumbnails) {

            var getSearchThumbs = new ajaxObject('thumbnails.php', processTree);						   	
                getSearchThumbs.update('search='+strSearch+'&js=1', 'POST');
            
            ProcessViewAll();    
        }
        
        
	}
    strSort = 'Search';	
}


// thumbnails.php
function CellHover(thumb)
{
    document.getElementById(thumb).style.backgroundImage = "url(graphics/cell_hover.gif)";
    document.getElementById(thumb).onmouseout = function() 
		{document.getElementById(thumb).style.backgroundImage = "url(graphics/cell.gif)";};
}


function ProcessViewAll() {

	if (ie) {
        sheet.addRule("#thumbnails", "height: 707px !Important; ");
        sheet.addRule(".category_header", "padding-top: 0px; ");
        if (ie6 || ie7)
            sheet.addRule("#category_links", "margin: -30px 0 -20px 10px; position: relative; display: block; width: 675px; "); 
        else
            sheet.addRule("#category_links", "margin: -30px 0 -20px 10px; position: absolute; display: block; ");        
    } else {
        sheet.insertRule("#thumbnails { height: 707px !Important; }", sheet.cssRules.length);
        sheet.insertRule(".category_header { padding-top: 0px; }", sheet.cssRules.length);
        
        if (firefox || opera) {
            if (opera) sheet.insertRule(".category_header { margin-top: -5px; }", sheet.cssRules.length);
            if (document.getElementById('category_links')) {
                sheet.insertRule("#category_links { position: fixed; display: block; margin: -30px 0 -36px 10px; }", sheet.cssRules.length);
                document.getElementById('category_links').style.marginTop = -(30 + window.pageYOffset) + "px"; 
                window.onscroll = function() {
                    if (document.getElementById('category_links')) {
                        document.getElementById('category_links').style.marginTop = -(30 + window.pageYOffset) + "px";
                        document.getElementById('category_links').style.marginLeft = (10 - window.pageXOffset) + "px";
                    }
                };
            }
        } else {
            sheet.insertRule("#category_links { position: absolute; display: block; margin: -30px 0 -36px 10px; }", sheet.cssRules.length);
        }
    }

    if (document.getElementById('category_links')) {
    	var categoryLinks = document.getElementById('category_links').getElementsByTagName("A");
    	for (i = 0; i < categoryLinks.length; ++i) {
    	    if (categoryLinks[i].id == 'dockstate') {
                var dockImg = categoryLinks[i].firstChild.src;
                var arrDockImg = dockImg.split(".gif");
                dockImg = arrDockImg[0];
                categoryLinks[i].onmouseover = function() {
                    this.firstChild.src = dockImg + "_hover.gif";
                }
                categoryLinks[i].onmouseout = function() {
                    this.firstChild.src = dockImg + ".gif";
                }
                categoryLinks[i].href = "thumbnails.php?sort="+strSort+"&rt="+iRealTime;
            } else {
    	    	categoryLinks[i].onclick = function() { document.getElementById(this.rel).scrollIntoView(true); return false; };
            }	
    	} 
	}
	
	var treeCells = getElementsByClass('cell_link');
	for (i = 0; i < treeCells.length; ++i) {
		treeCells[i].onmouseover = function() { CellHover(this.parentNode.id); };
		treeCells[i].onclick = function() { 
			bThumbnails = false;
			thisID = parseInt(this.id);
			SelectNewRow(iCurrentTreeID, thisID);
			document.getElementById(thisID).scrollIntoView(true);
			iCurrentTreeID = thisID;
			var getTree = new ajaxObject('get_tree.php', processTree);
			getTree.update('tree='+parseInt(this.id)+'&sort='+strSort+strSearchQuery+'&rt='+iRealTime+'&js=1');
			return false;
		};
	}
	
	if (document.getElementById('overview_player') != undefined) {
        // swfobject flash player
        var flashvars = {};
        var params = {};
        params.wmode = "transparent";
        params.allowFullScreen = "true";
        var attributes = {};
        attributes.id = "VideoPlayer";
        attributes.name = "VideoPlayer";
        swfobject.embedSWF("http://www.speedtree.com/trees/flash/store_overview.swf", "overview_player", "714", "510", "9.0.0", false, flashvars, params, attributes);
    }
	
	if (document.getElementById('legendbox')) {
        document.getElementById('legendbox').style.width = rightOffset + 'px';
	   if (ie) document.getElementById('legendbox').style.filter ="progid:DXImageTransform.Microsoft.Alpha(opacity=80)";
	}
	
//	iCurrentTreeID = 'thumbnails';
	bThumbnails = true;
}


function ViewAll() {
    //iCurrentTreeID = 'thumbnails';
	bThumbnails = true;
    if (strSort == 'Search') {
        var getSearchThumbs = new ajaxObject('thumbnails.php', processTree);						   	
            getSearchThumbs.update('search='+strSearch+'&js=1', 'POST');
    		ProcessViewAll(); 
    } else {
    	var getTree = new ajaxObject('thumbnails.php');
    		getTree.update('js=1&sort='+strSort+'&rt='+iRealTime);
    		getTree.callback = function(responseText, responseStatus) {
    			if (responseStatus==200) {
    	           document.getElementById('ajax_detail').innerHTML=responseText;
    			   ProcessViewAll(); 
    			}
    		}
	}
}


function SortChanged() {
	if (this.value == 'Search') AjaxSearch();
	else {
		var getIndex = new ajaxObject('tree_index.php');
			getIndex.update('tree='+iCurrentTreeID+'&sort='+this.value+'&js=1');
			getIndex.callback = function(responseText, responseStatus) {
				processIndex(responseText, responseStatus);
			}
			
		if (bThumbnails) {	
    		var getTree = new ajaxObject('thumbnails.php', processTree);
                getTree.update('js=1&sort='+strSort+'&rt='+iRealTime);
    			getTree.callback = function(responseText, responseStatus) {
    				if (responseStatus==200)	
    					ViewAll();
    			};
		} else if (document.getElementById(iCurrentTreeID)) {
			document.getElementById(iCurrentTreeID).scrollIntoView(true);
		}
	}
	document.getElementById('search_form').focus();
	strSort = strLastSort = this.value;
	if (strSort != "Search")
		strSearchQuery = "";
}

// Event handlers
function TreeBrowserEvents() {
	var getIndex = new ajaxObject('tree_index.php');
	getIndex.update('tree='+iCurrentTreeID+'&sort='+strSort+strSearchQuery+'&js=1');
	getIndex.callback = function(responseText, responseStatus) {
		processIndex(responseText, responseStatus);
		if (iCurrentTreeID == 'thumbnails') ViewAll();
		else if (iCurrentTreeID != 0) document.getElementById(iCurrentTreeID).scrollIntoView(false);	
	}
	
	var getTree = new ajaxObject('get_tree.php', processTree);
		getTree.update('tree='+iCurrentTreeID+'&rt='+iRealTime+'&js=1&sort='+strSort+strSearchQuery);	

	// thumbnails button
	if (document.getElementById('tree_index'))
        document.getElementById('tree_index').onclick = function() { ViewAll(); return false; }
        
    if (document.getElementById('realtime_cb') != undefined) {
        document.getElementById('realtime_cb').onclick = EnforceRealTime;
	    if (document.getElementById('realtime_cb').checked == true)
            iRealTime = 1;  
            
        document.getElementById('rt_only').onclick = function() { 

            if (document.getElementById('realtime_cb').checked == true)
                document.getElementById('realtime_cb').checked = false;
            else
                document.getElementById('realtime_cb').checked = true;
            EnforceRealTime();            
        };
    }
		
	document.getElementById('sort_select').onchange = SortChanged;
	document.getElementById('search').onkeypress = function(event) {
	   document.getElementById('cancel_btn').style.visibility = 'visible';
		if (ie) event = window.event;
		if (event.keyCode==13){
		    strSearch = document.getElementById('search').value;
		    strSearchQuery = '&search=' + strSearch;
			document.getElementById('cancel_btn').style.visibility = 'visible';	
			AjaxSearch();
			return false;
			
		} else if (document.getElementById('search').value.length == 0) {
			document.getElementById('cancel_btn').style.visibility = 'hidden';
		}
		
	};
	
	document.getElementById('search').onfocus = function() { bSearching = true; };
	document.getElementById('search').onblur = function() { bSearching = false; };
	document.getElementById('search_button').onclick = function() { AjaxSearch(); return false; };
	
	if (document.getElementById('cancel_btn')) {
		if (document.getElementById('search').value.length == 0)
			document.getElementById('cancel_btn').style.visibility = 'hidden';
		document.getElementById('cancel_btn').onclick = function() {
			this.style.visibility = 'hidden';
			document.getElementById('search').focus();
			document.getElementById('search').value = '';
			if (document.getElementById('sort_select').value == "Search") {
				strSearchQuery = '';
				AjaxSearch();
			}
			strSort = strLastSort;
			
			return false;
		};
	}
	
	if (strSort == 'CategoryID') 
		document.getElementById('sort_select')[2].selected = true;
		
	document.getElementById('sort_form').style.display = 'block';
	document.getElementById('version_form').style.display = 'block';
	document.getElementById('search_form').style.display = 'block';	
	
	if (ie7 || ie6) sheet.addRule(".subset ul li:first-child", "margin-top: -7px");
//	AddLoadEvent(function() { disableSelection('tree_cell', 'ajax_master', 'index_header'); });
}

if (!opera && !webkit)
    PreLoadEvent(TreeBrowserEvents);
else
    AddLoadEvent(TreeBrowserEvents);

