var g_popupMainElem;
var savedPopupElem, g_savedAnimElem;
var prBox;
//-------------------------------------------------------
function killPrBox () {
if (prBox) {
document.body.removeChild (prBox);
prBox = null;
}
}
var popuppic_showDebug = false;
//-------------------------------------------------------
function pr (string, time) {
if (prBox) {
if (prBox.timerHandle)
aardvarkTools.cancelTimerFunction (prBox.timerHandle);
document.body.removeChild (prBox);
}
var winDims = Karmatics.getWindowDimensions ();
var el = aardvarkTools.createElement;
prBox = el ("div", {style: {position: "absolute", left: (winDims.scrollX + 50)+"px", top: (winDims.scrollY + 50)+"px", padding: "5px", border: "1px solid black", backgroundColor: "#ffd"}, innerHTML: string});
document.body.appendChild (prBox);
prBox.timerHandle = aardvarkTools.setTimerFunction (((time)?time:3000), killPrBox);
}
/*
//---------------------------------------
// todo: belongs in general utils
function checkElementForAncestry (el) {
for (var i = 1; i < arguments.length; i++) {
var t = el;
if (arguments[i]) {
while (t) {
if (t == arguments[i])
return true;
t = t.parentNode;
}
}
}
return false;
}
*/
function checkElementForNoHideTag (el) {
var t = el;
while (t) {
if (t.noHide)
return true;
t = t.parentNode;
}
return false;
}
//-------------------------------------------------------
function popuppic_makeAnimElement (styleInfo, filled) {
var d = document.createElement ('DIV');
d.style.position = 'absolute';
d.className = styleInfo.startPhrase + "animrect";
d.style.borderColor = styleInfo.borderColor;
if (filled)
d.style.backgroundColor = styleInfo.borderColor;
d.style.borderStyle = 'solid';
d.style.borderWidth = '10px';
d.style.display = 'none';
document.body.appendChild (d);
return d;
}
//-------------------------------------------------------
function popuppic_removeImageAndCaptionElems (elem, delay) {
if (!elem) return;
if (delay)
aardvarkTools.setTimerFunction (delay, popuppic_removeImageAndCaptionElems, elem);
else
{
document.body.removeChild (elem);
document.body.removeChild (elem.captionTable);
}
}
//-------------------------------------------------------
function popuppic_removeAnimElem (elem, delay) {
if (!elem) return;
if (delay)
aardvarkTools.setTimerFunction (delay, popuppic_removeAnimElem, elem);
else
document.body.removeChild (elem);
}
//-------------------------------------------------------
function popuppic_keystrokeCommand (evt) {
if (!evt)
evt = aardvark.window.event;
var keyCode = evt.keyCode ? evt.keyCode :
evt.charCode ? evt.charCode :
evt.which ? evt.which : 0;
var c = String.fromCharCode(keyCode).toLowerCase();
switch (c) {
case 'h':
popuppic_hidePopup ();
killPrBox ();
break;
case 'd':
popuppic_showDebug = !popuppic_showDebug;
break;
case 'c':
document.title = "- ";
break;
case 'y':
popuppic_loadImage (sfsc_data.showroomImageData.blockList[1], 2);
break;
}
}
//-------------------------------------------------------
function popuppic_setClickHandler () {
Karmatics.setListener (document, "click", popuppic_bgClick, false);
Karmatics.setListener (document, "keydown", popuppic_keystrokeCommand);
}
//-------------------------------------------------------
function popuppic_bgClick (evt) {
var elem = ((evt.target) ? evt.target : evt.srcElement);
if (g_popupMainElem) {
if (checkElementForNoHideTag (elem) == false) {
popuppic_hidePopup ();
}
}
}
//------------------------------------------------
// often called from timer func
function popuppic_displayImageAndCaption () {
g_popupMainElem.style.visibility = 'visible';
g_popupMainElem.captionTable.style.visibility = "visible";
}
//------------------------------------------------
// often called from timer func
function popuppic_popupAnim (ratio, animInfo) {
if (ratio > 1.0){
if (animInfo.expand)
popuppic_displayImageAndCaption ();
popuppic_removeAnimElem(animInfo.elem, 20);
return;
}
var d = animInfo.elem;
var b = Math.round (ratio*6);
d.style.borderWidth = ((animInfo.expand)?(3+b):(9-b)) + 'px';
Karmatics.moveElem (d, (animInfo.x2 - animInfo.x1) * ratio + animInfo.x1, (animInfo.y2 - animInfo.y1) * ratio + animInfo.y1);
d.style.width = ((animInfo.w2 - animInfo.w1) * ratio + animInfo.w1) + 'px';
d.style.height = ((animInfo.h2 - animInfo.h1) * ratio + animInfo.h1) + 'px';
d.style.display = '';
aardvarkTools.setTimerFunction (20, popuppic_popupAnim, (ratio + animInfo.ratioAdder), animInfo);
}
//-------------------------------------------------------
function popuppic_hidePopup () {
var d = g_popupMainElem;
if (d && d.style.visibility != "hidden") {
var ai = {};
ai.elem = popuppic_makeAnimElement(g_popupMainElem.block.styleInfo);
var bigImage = d.popupImage;
var smallElem = d.block.list[d.index].thumbnailElem;
if (bigImage && smallElem) {
var bigPos = Karmatics.getPos (bigImage);
var smallPos = Karmatics.getPos (smallElem);
ai.x1 = bigPos.x;
ai.x2 = smallPos.x;
ai.y1 = bigPos.y;
ai.y2 = smallPos.y;
ai.w1 = bigImage.offsetWidth;
ai.h1 = bigImage.offsetHeight;
ai.w2 = smallElem.offsetWidth;
ai.h2 = smallElem.offsetHeight;
ai.expand = false;
var diff = Math.abs(ai.y2-ai.y1) + Math.abs(ai.x2-ai.x1) + Math.abs(ai.w2-ai.w1) + Math.abs(ai.h2-ai.h1);
ai.ratioAdder = (diff<100)?1:(diff<200)?.2:(diff<400)?.13:(diff<600)?.09:.065;
// overkill?
g_popupMainElem.block = null;
document.body.removeChild (g_popupMainElem.captionTable);
g_popupMainElem.captionTable = null;
document.body.removeChild (g_popupMainElem);
g_popupMainElem = null;
popuppic_popupAnim (.1, ai);
}
}
}
function popuppic_imageLoadCallback (img) {
img.style.visibility = "visible";
}
//-------------------------------------------------------
function popuppic_loadImage (block, index, useLastPopup)
{
var el = aardvarkTools.createElement;
if (!block.styleInfo)
block.styleInfo = {startPhrase: "", borderColor: "#666"};
var styleInfo = block.styleInfo;
var imgData = block.list[index];
var savedPopupElem = null;
var windowDims = Karmatics.getWindowDimensions ();
var startDims, alignY;
if (useLastPopup) {
startDims = Karmatics.getPos(g_popupMainElem);
startDims.width = g_popupMainElem.offsetWidth;
startDims.height = g_popupMainElem.offsetHeight;
var p = Karmatics.getPos(g_popupMainElem.captionTable);
alignY = p.y;
}
else {
startDims = Karmatics.getPos(imgData.thumbnailElem);
startDims.width = imgData.thumbnailElem.offsetWidth;
startDims.height = imgData.thumbnailElem.offsetHeight;
}
if (g_popupMainElem) {
g_popupMainElem.animInfo = null;
g_popupMainElem.block = null;
savedPopupElem = g_popupMainElem;
}
var c, captionTable;
c = el ("div", {className: styleInfo.startPhrase + "photocontainer", style:{position: "absolute", left: windowDims.scrollX + "px", top: windowDims.scrollY + "px", visibility: "hidden"}});
document.body.appendChild (c);
g_popupMainElem = c;
c.block = block;
c.index = index;
captionTable = el("table", {className: styleInfo.startPhrase + "photocaption", style: {position: "absolute", left: windowDims.scrollX + "px", top: windowDims.scrollY + "px", visibility: "hidden"}});
g_popupMainElem.captionTable = captionTable;
document.body.appendChild (captionTable);
var bigWidth = imgData.wL, bigHeight = imgData.hL;
var mainImage = el ("img", {style:{width: imgData.wL + "px", height: imgData.hL + "px", cursor: "pointer"}});
g_popupMainElem.popupImage = mainImage; // needed?
c.appendChild (mainImage);
var tr1, tr2, tbody;
tbody = el("tbody", null, tr1 = el("tr"), tr2 = el("tr"));
if (index > 0) {
img1 = el("img", {src: block.path + block.list[index-1][0]+ "-small." + block.ext, style:{width: block.list[index-1].wS + "px", height: block.list[index-1].hS + "px"}});
tr1.appendChild (el("td", {className: styleInfo.startPhrase + "thumbnail", noHide: true}, img1));
tr2.appendChild (el("td", {className: styleInfo.startPhrase + "prevNext", noHide: true},
a = el ("a", {href: "#"}, "previous")
));
aardvarkTools.setEventHandler (img1, "onclick", popuppic_loadImage, block, index-1, true);
aardvarkTools.setEventHandler (a, "onclick", popuppic_loadImage, block, index-1, true);
}
else {
tr1.appendChild (el("td", {style: {width: "50px"}}));
tr2.appendChild (el("td", {style: {width: "50px"}}));
}
tr1.appendChild (el("td", {className: styleInfo.startPhrase + "captionText", rowSpan: "2", innerHTML: imgData[1]}));
if (index < block.list.length-1) {
img2 = el("img", {src: block.path + block.list[index+1][0]+ "-small." + block.ext, style:{width: block.list[index+1].wS + "px", height: block.list[index+1].hS + "px"}});
tr1.appendChild (el("td", {className: styleInfo.startPhrase + "thumbnail", noHide: true}, img2));
tr2.appendChild (el("td", {className: styleInfo.startPhrase + "prevNext", noHide: true},
a = el ("a", {href: "#"}, "next")));
aardvarkTools.setEventHandler (img2, "onclick", popuppic_loadImage, block, index+1, true);
aardvarkTools.setEventHandler (a, "onclick", popuppic_loadImage, block, index+1, true);
}
else {
// todo
tr1.appendChild (el("td", {style: {width: "50px"}}));
tr2.appendChild (el("td", {style: {width: "50px"}}));
}
captionTable.appendChild (tbody);
var totalHeight = bigHeight + captionTable.offsetHeight;
var ai = {};
ai.x1 = startDims.x;
ai.x2 = ai.x1 + startDims.width/2 - (bigWidth/2 + 10);
ai.y1 = startDims.y;
if (useLastPopup)
ai.y2 = alignY - (bigHeight + 10);
else
ai.y2 = ai.y1 + startDims.height/2 - (totalHeight/2 + 10);
ai.w1 = startDims.width;
ai.h1 = startDims.height;
ai.w2 = bigWidth;
ai.h2 = bigHeight;
ai.expand = true;
ai.imageData = imgData;
var wh = windowDims.scrollX + windowDims.width - 6;
if (ai.x2 < 3)
ai.x2 = 3;
else if (ai.x2 > windowDims.width - (bigWidth + 40))
ai.x2 = windowDims.width - (bigWidth + 40);
var ctX = ai.x2 + bigWidth/2 - captionTable.offsetWidth/2 + 10;
if (totalHeight > windowDims.height)
{
ai.y2 = windowDims.scrollY - 10 + windowDims.height/2 - bigHeight/2;
Karmatics.moveElem (captionTable, ctX, windowDims.scrollY + windowDims.height - captionTable.offsetHeight);
}
else
{
if (ai.y2 < windowDims.scrollY)
ai.y2 = windowDims.scrollY;
else if (ai.y2 + totalHeight + 24 > windowDims.scrollY + windowDims.height)
ai.y2 = windowDims.scrollY + windowDims.height - (totalHeight+10);
Karmatics.moveElem (captionTable, ctX, ai.y2 + bigHeight + 10);
}
if (useLastPopup)
captionTable.style.visibility = "visible";
var diff = Math.abs(ai.y2-ai.y1) + Math.abs(ai.x2-ai.x1) + Math.abs(ai.w2-ai.w1) + Math.abs(ai.h2-ai.h1);
ai.ratioAdder = (diff<100)?.95:(diff<200)?.2:(diff<400)?.13:(diff<600)?.09:.065;
Karmatics.moveElem (c, ai.x2, ai.y2);
if (popuppic_showDebug) {
var s = "";
for (var x in ai) {
var s2 = "";
for (var y in ai[x])
s2 += "{" + y + ": " + ai[x][y] + "} ";
if (s2.length > 0)
s += x + ": " + s2 + "
";
else
s += x + ": " + ai[x] + s2 + "
";
}
for (var x in windowDims) {
var s2 = "";
for (var y in windowDims[x])
s2 += "{" + y + ": " + windowDims[x][y] + "} ";
if (s2.length > 0)
s += x + ": " + s2 + "
";
else
s += x + ": " + windowDims[x] + s2 + "
";
}
pr (s, 300000);
}
if (savedPopupElem && ai.ratioAdder>.9) {
aardvarkTools.setEventHandler (mainImage, "onload", popuppic_imageLoadCallback, mainImage);
// src must be assigned AFTER onload, or onload won't get called in ie
mainImage.style.visibility = "hidden";
mainImage.src = block.path + imgData[0] + "." + block.ext;
popuppic_displayImageAndCaption ();
popuppic_removeImageAndCaptionElems (savedPopupElem, 20);
}
else {
// src must be assigned AFTER onload, or onload won't get called in ie
mainImage.src = block.path + imgData[0] + "." + block.ext;
ai.elem = popuppic_makeAnimElement(styleInfo, useLastPopup);
popuppic_popupAnim (ai.ratioAdder, ai);
popuppic_removeImageAndCaptionElems (savedPopupElem, 20);
}
return false;
}