var Growbox = Class.create();

Growbox.prototype = {
    initialize: function() {

	//log('init growbox');
	
	var userAgent = navigator.userAgent;
	if(false){
	    return;
	}





	if(userAgent.indexOf('Safari')>0){
	    //if(true){

	    var bodyWrapElem = document.body;
	    bodyWrapElem.className=bodyWrapElem.className + ' safari';
	    return;
	}

	var boxes = document.getElementsByClassName('growbox');
	for (var i=0; i<boxes.length; i++){
	    var box = boxes[i];
	    //log('growbox = ' + box.id);
	    var anchors = box.getElementsByTagName('a');
	    for (var j=0; j<anchors.length; j++){
		var anchor = anchors[j];
		var id = anchor.id;
		//log(anchor.getAttribute('href'));
		var thumb = document.getElementsByClassName('thumb',anchor)[0];
		var preview = document.getElementsByClassName('preview',anchor)[0];
		if(thumb!=null && preview!=null){
		    thumb.id='thumb'+id;
		    preview.id='preview'+id;
		    //log('set options for ' + id);
		    
		    anchor.onmouseover = function(e){myGrowbox.grow(this,e);return false;}
		    anchor.onmouseout = function(e){myGrowbox.shrink(this,e);return false;}

		    //anchor.onmouseover = function(e){growPreview(this.id,198,138);return false;}
		    //anchor.onmouseout = function(e){shrinkPreview(this.id,165,115);return false;}
		    
		    //thumb.onmouseover = function(e){myGrowbox.grow(this,e);return false;}
		    //thumb.onmouseout = function(e){myGrowbox.shrink(this,e);return false;}
		    
		    //preview.onmouseover = function(e){myGrowbox.grow(this,e);return false;}
		    //preview.onmouseout = function(e){myGrowbox.shrink(this,e);return false;}
		    
		    
		    //anchor.addEventListener('mouseover',function(){//log('in ' + this.id);myGrowbox.grow(this);return false;},false);
		    //anchor.addEventListener('mouseout',function(){//log('in ' + this.id);myGrowbox.shrink(this);return false;},false);

		    //thumb.addEventListener('mouseover',function(){//log('in ' + this.id);myGrowbox.grow(this.parentNode);},false);
		    //thumb.addEventListener('mouseout',function(){//log('out '+this.id);myGrowbox.shrink(this.parentNode);},false);
		    //preview.addEventListener('mouseover',function(){//log('in '+this.id);myGrowbox.grow(this.parentNode);},false);
		    //preview.addEventListener('mouseout',function(){//log('out '+this.id);myGrowbox.shrink(this.parentNode);},false);
		    
		}
	    }

	}
    },

    grow: function(anchor,e){
	//log('in ' + anchor.id);
	if(anchor.nodeName!='A'){
	    //log('going to parent ' + anchor.nodeName);
	    anchor = anchor.parentNode;
	}
	var anchorId = anchor.id;
	var thumb = $('thumb'+anchorId);
	var preview = $('preview'+anchorId);
	//log('prview id = ' + preview.id + ' ' + preview.getAttribute("imgWidth"));
	growPreview(anchorId,preview.getAttribute("imgWidth"),preview.getAttribute("imgHeight"));

    },
    
    shrink: function(anchor,e){
	//log('out ' + anchor.id);	
	if (!e) var e = window.event;
	var tg = (window.event) ? e.srcElement : e.target;
	var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;

	if(tg.nodeName!='A'){
	    tg = tg.parentNode;
	    //log('went to tg.parentNode');
	}
	if(reltg.nodeName != 'A'){
	    reltg = reltg.parentNode;
	    //log('went to reltg.parentNode');
	}
	if(tg.id == reltg.id){
	    return;
	}else{
	    //log('oldTarget.id = ' + tg.id + ' newTarget.id = ' + reltg.id);
	}

	

	//log('made it past');


	if(anchor.nodeName!='A'){
	    anchor = anchor.parentNode;
	}

	var id = anchor.id;
	var thumb = $('thumb'+id);
	var preview = $('preview'+id);
	shrinkPreview(id,thumb.getAttribute("imgWidth"),thumb.getAttribute("imgHeight"));

    }

}



var shrinkTimeouts = new Array();

function growPreview(elemId,width,height){
    //log('grow ' + elemId + ' ' + width + ' ' + height);
    
    if(shrinkTimeouts[elemId]!=null){
	clearTimeout(shrinkTimeouts[elemId]);
	shrinkTimeouts[elemId] = null;
	return;
    }
    var elem = $('preview' + elemId);
    if(elem.getAttribute('status') == '' || elem.getAttribute('status') == null){
	elem.setAttribute('status','growing');
	elem.style.zindex=10;
	var smallWidth = $('thumb'+elemId).getAttribute("imgWidth");
	var smallHeight = $('thumb'+elemId).getAttribute("imgHeight");
	resetPreview(elem,smallWidth,smallHeight);
	
	opts = {
	    duration:0.2,
	    afterFinish:function(obj){markDone(obj,elemId,smallWidth,smallHeight);}
	}
	elem.style.display = 'block';
	elem.setAttribute('doShrink','');
	
	new Effect.ResizeCentered(elem,width,height,0.99,opts);
    }
}

function shrinkPreview(elemId,width,height){
    //log('shrink ' + elemId);
    //log('shrink ' + elemId + ' ' + width + ' ' + height);
    shrinkTimeouts[elemId] = setTimeout(function(){realShrink(elemId,width,height);},50);
}

function realShrink(elemId,width,height){
    shrinkTimeouts[elemId] = null;
    //log('realShrink ' + elemId);
    var elem = $('preview' + elemId);
    //alert('shrinking');

    if(elem.getAttribute('status') == 'grown'){
	elem.setAttribute('status','shrinking');
	elem.style.zIndex=5;
	
	opts = {
	    duration:0.4,
	    afterFinish:markDoneShrink
	}
	try{
	    $('text'+elemId).className = 'hidden';
	}catch(err){
	    //log(elem+' '+elemId);
	}
	new Effect.ResizeCentered(elem,width,height,0,opts);
    }else{
	elem.setAttribute('doShrink','true');
    }
}

function resetPreview(elem,width,height){
    //if( $(elem).getAttribute('status') != 'growing'){
	try{
	    $(elem).style.width = width + 'px';
	}catch(err){
	    //log('trouble resetting width... ' + width);
	}
	try{
	    $(elem).style.height = height + 'px';
	}catch(err){
	    //log('trouble resetting height...' + height);
	}
	try{
	    $(elem).style.top = '0px';
	}catch(err){
	    //log('trouble resetting top...');
	}
	try{
	    $(elem).style.left = '0px';
	}catch(err){
	    //log('trouble resetting left...');
	}
	
	//$(elem).setAttribute('status','');
	//alert('just went out ' + $(elem).getAttribute('status') + ' -- ');
	//}
}

/*
function markInProgress(obj){
    obj.element.setAttribute('status','growing');
}
*/

function markDone(obj,elemId,smallWidth,smallHeight){
    //log('done grow ' + obj.element.id);
    obj.element.setAttribute('status','grown');    
    try{
	$('text'+elemId).className = 'imgText';
    }catch(err){
	;//do nothing
    }
    if(obj.element.getAttribute('doShrink') == 'true'){
	obj.element.setAttribute('doShrink','');
	shrinkPreview(elemId,smallWidth,smallHeight);
    }
}

function markDoneShrink(obj){
    //log('done shrink ' + obj.element.id);
    obj.element.style.display = 'none';
    obj.element.setAttribute('status','');    
    //resetPreview(obj.element,100,75);
}

function initGrowbox() { myGrowbox = new Growbox(); }
Event.observe(window, 'load', initGrowbox, false);




function log(msg){
    try{
	var logMsg = $('logDiv').innerHTML;
	$('logDiv').innerHTML = logMsg + msg + '<br>';
    }catch(err){
	;//do nothing if there's no logDiv
    }
}
