var YD=YAHOO.util.Dom;
var YE=YAHOO.util.Event;
var buttonimg = null;
var qlimg = null;
var quicklook = null;

var qlinimg = "http://www.scrapbook.com/images/quicklook.gif";
var qloutimg = "http://www.scrapbook.com/images/quicklook2.gif";

function ptIn(p, rgn) {
	return (p[0]>=rgn.left && p[0]<rgn.right && p[1]>=rgn.top && p[1]<rgn.bottom);
}

function imgOver(e) {
	var targ = YE.getTarget(e);
	if (targ!=qlimg) {
		buttonimg = targ;
		var imgarea = YD.getRegion(buttonimg);
		
		var buttontop = Math.max(imgarea.bottom-45, imgarea.top-10);
		YD.setXY(qlbutton, [imgarea.left-10, buttontop]);
		qlbutton.src = (ptIn(YE.getXY(e), YD.getRegion(qlbutton))) ? qlinimg: qloutimg;
		YD.setStyle(qlbutton, 'visibility', 'visible');
	}
}

function imgOut(e) {
	if (YE.getRelatedTarget(e)==qlbutton) {
		qlbutton.src = qlinimg;
	} else {
		hideButton();
	}
}

function qlBtnOut(e) {
	if (YE.getRelatedTarget(e)==buttonimg) {
		qlbutton.src = qloutimg;
	} else {
		hideButton();
	}
}

function onQLHidden() {
	YE.removeListener(document.body, "mousedown", anyMouseDown);
	YD.setXY(quicklook.element, [0,0]);
	quicklook=null;
	qlimg=null;
}

function quickfn(fn, p) {
	return function() {fn(p);};
}

function qlBtnClick(e) {
	if (buttonimg && buttonimg.id && buttonimg.id.substr(0, 3)=="ql_") {
		var sku = buttonimg.id.substr(3);

		quicklook = new YAHOO.widget.Panel("qlelt", 
			{ 
					close:true,  
					visible:false,
					constraintoviewport:true,
					zIndex:10,
					width:'590px',
					height:'590px'
			} 
		); 
		quicklook.setHeader('Quick Look');
		quicklook.setBody('Loading...');
		quicklook.render(document.body);
		quicklook.center();
		quicklook.show();
		quicklook.subscribe("hide", onQLHidden);
		qlimg = buttonimg;
		YE.addListener(document.body, "mousedown", anyMouseDown);

		hideButton();

		++ajaxCounter;
		currentId = sku;
		DOMhelp.appendContent(dynElts,
			o('script', {'src':'http://www.scrapbook.com/quicklook/content_mc.php?n='+ajaxCounter+'&sku='+escape(currentId)}));
		setTimeout(quickfn(quicklookContentFail, ajaxCounter), 15000);
	}
}

function quicklookContentFail(n) {
	if (ajaxCounter==n && quicklook) {
		++ajaxCounter;
		DOMhelp.replaceContent(quicklook.body, 'We\'re having a problem loading the Quick Look window. Try clicking on the product name instead.');
	}
}

function quicklookContent(n, html) {
	if (ajaxCounter==n && quicklook) {
		++ajaxCounter;
		quicklook.body.innerHTML = html;
		
		var elt=document.getElementById('qltabber');
		if (elt) {
			elt.tabber = new tabberObj({'div':elt});
		}

		DOMhelp.appendContent(dynElts,
			o('script', {'src':'http://www.scrapbook.com/quicklook/content_slow.php?n='+ajaxCounter+'&sku='+escape(currentId)}));
		setTimeout(quickfn(quicklookSlowContentFail, ajaxCounter), 15000);
	}
}

function quicklookContentSlow(n, galleryhtml, galtabtitle, availhtml) {
	if (ajaxCounter==n) {
		++ajaxCounter;
		var elt = document.getElementById('qlgallerytab');
		if (elt) {
			elt.innerHTML = galleryhtml;
		}
		elt = document.getElementById('qltabbernav2');
		if (elt) {
			elt.innerHTML = galtabtitle;
			elt.title = galtabtitle;
		}
		elt = document.getElementById('prod-info-avail');
		if (elt) {
			elt.innerHTML = availhtml;
		}
	}
}

function quicklookSlowContentFail(n) {
	if (ajaxCounter==n) {
		++ajaxCounter;
		var elt=document.getElementById('prod-info-rating');
		if (elt) {
			elt.innerHTML = 'Error retrieving rating.';
		}
		elt = document.getElementById('qlgallerytab');
		if (elt) {
			elt.innerHTML = 'Unable to retrieve projects.';
		}
	}
}

function anyMouseDown(ev) {
	if (quicklook && !ptIn(YE.getXY(ev), YD.getRegion(quicklook.element))) {
		quicklook.hide();
	}
}

function hideButton() {
	YD.setStyle(qlbutton, 'visibility', 'hidden');
	YD.setXY(qlbutton, [0, 0]);
	buttonimg = null;
}

var o = DOMhelp.createElement;
var currentId = null;
var ajaxCounter = 0;

var qlbutton;
var dynElts = o('div',
 qlbutton =     o('img.qlbutton', {'src':qloutimg}));
(new Image()).src=qlinimg;

YE.addListener(qlbutton, "click", qlBtnClick);
YE.addListener(qlbutton, "mouseout", qlBtnOut);

var iw = 'content';
if (window.insertWithin) {
	iw = window.insertWithin;
}
YD.insertBefore(dynElts, YD.getFirstChild(iw));

function quicklookSetup() {
	var elts = YD.getElementsByClassName('quicklook', 'img');
	YE.removeListener(elts, "mouseover", imgOver);
	YE.removeListener(elts, "mouseout", imgOut);
	YE.addListener(elts, "mouseover", imgOver);
	YE.addListener(elts, "mouseout", imgOut);
}

quicklookSetup();
