function createNamespace(str)
{
var a = str.split(".");
var o = window;
for(var i=0; i < a.length; i++)
{
if(!o[a[i]])
o[a[i]] = {};

o = o[a[i]];
}
}
var isMoz=(typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument!='undefined');
var isSaf= navigator.userAgent.toLowerCase().indexOf("safari") != -1;
var isIE = !isMoz && !isSaf;
createNamespace("NH");
createNamespace("NH.Anim");
createNamespace("NH.Util");
NH.closeOtherBlinds = function(currentElem, blindElems)
{
for(var i = 0; i < blindElems.length; i++)
{
var blindElem = blindElems[i];
if(blindElem != currentElem && blindElem.isOpen)
blindElem.doBlind();
}
}
NH.Anim.Blind = function(animElem, clickElem, isOpen)
{
if(!animElem || !clickElem)
return false;

this.animElem = animElem;
this.clickElem = clickElem;
this.fnc = undefined;
this.animSpeed = 10;
this.isAnimating = false;
if(this.clickElem.style && typeof(this.clickElem.style.cursor) == "string")
this.clickElem.style.cursor = "pointer";
this.hiddenDiv = undefined;

NH.Util.attachEvent(this.clickElem, "onmouseup", NH.Util.createThisCallback(this, "doBlind", false));

var parent = this.animElem.parentNode;
this.hiddenDiv = parent.insertBefore(document.createElement("div"), this.animElem);

parent.removeChild(this.animElem);
this.hiddenDiv.appendChild(this.animElem);
this.animElem.style.display = (this.isOpen) ? "block" : "none";
this.hiddenDiv.style.overflow = "hidden";

setInterval(NH.Util.createThisCallback(this, "doBlind", true), 100);

this.doBlind = function(intervalCheck)
{
if(this.isAnimating || (intervalCheck && this.hiddenDiv.offsetHeight == this.animElem.offsetHeight))
return false;
this.isAnimating = true;
var targetHeight;
if(!intervalCheck)
{
if(this.fnc)
this.fnc();
NH.Util.swapClassName(this.animElem, "blind-on", "blind-off");
NH.Util.swapClassName(this.clickElem, "blind-on", "blind-off");
this.animElem.style.display = "block";
this.hiddenDiv.style.height = this.isOpen ? this.animElem.offsetHeight : "0px";
if(!this.hiddenDiv.style.width)
this.hiddenDiv.style.width = this.animElem.offsetWidth;
if(this.isOpen)
targetHeight = 0
else
targetHeight = this.animElem.offsetHeight;
}
else
targetHeight = this.animElem.offsetHeight;
NH.Anim.sizeAnimation(this.hiddenDiv, this.hiddenDiv.offsetWidth, targetHeight, this.animSpeed, NH.Util.createThisCallback(this, "finishBlind", intervalCheck));
}
this.finishBlind = function(intervalCheck)
{
this.isAnimating = false;
if(intervalCheck)
return false;

if(this.isOpen)
{
this.animElem.style.display = "none";
this.isOpen = false;
}
else
this.isOpen = true;
}

this.setIsOpen = function(isOpen)
{
this.isOpen = isOpen;

if(this.animElem.className.match("blind-on") ||
this.animElem.className.match("blind-off") ||
this.clickElem.className.match("blind-on") ||
this.clickElem.className.match("blind-off"))
{
NH.Util.removeClassName(this.animElem, "blind-on");
NH.Util.removeClassName(this.animElem, "blind-off");
NH.Util.removeClassName(this.clickElem, "blind-on");
NH.Util.removeClassName(this.clickElem, "blind-off");
}
var className = isOpen ? "blind-on" : "blind-off";
NH.Util.addClassName(this.animElem, className);
NH.Util.addClassName(this.clickElem, className);

this.animElem.style.display = (isOpen) ? "block" : "none";
}

this.setIsOpen(isOpen);
}
NH.Anim.Magnify = function(container, img, text, isMagnified)
{
if(!container || !img || !text)
return false;

this.container = container;
this.img = img;
this.text = text;
this.fnc = undefined;
this.animSpeed = 3;

this.isOpen = false;
this.isMagnifying = false;
this.isMinifying = false;
this.originalImgWidth = parseInt(this.img.offsetWidth);
this.originalImgHeight = parseInt(this.img.offsetHeight);

NH.Util.attachEvent(this.container, "onmouseover", NH.Util.createThisCallback(this, "doMagnify"));

this.init = function(isMagnified)
{
if(isMagnified)
{
this.isOpen = true;
NH.Util.addClassName(this.container, "magnified");
}
else
{
this.img.style.width = (this.originalImgWidth / 2) + "px";
this.img.style.height = (this.originalImgHeight / 2) + "px";
this.text.style.display = "none";
NH.Util.addClassName(this.container, "minified");
}
}
this.init(isMagnified);

this.doMagnify = function()
{
if(this.isOpen || this.isMagnifying)
return false;

this.isMagnifying = true;
NH.Util.swapClassName(this.container, "magnified", "minified");
NH.Anim.sizeAnimation(this.img, this.originalImgWidth, this.originalImgHeight, this.animSpeed, NH.Util.createThisCallback(this, "finishMagnify"));
if(this.fnc)
this.fnc.call();
}

this.finishMagnify = function()
{
this.isOpen = true;
this.isMagnifying = false;
this.text.style.display = "block";
if(this.fnc)
this.fnc.call();
}

this.doMinify = function()
{
if(!this.isOpen || this.isMinifying)
return false;

this.isMinifying = true;
NH.Util.swapClassName(this.container, "magnified", "minified");

NH.Anim.sizeAnimation(this.img, (this.originalImgWidth / 2), (this.originalImgHeight / 2), this.animSpeed, NH.Util.createThisCallback(this, "finishMinify"));
this.text.style.display = "none";
}
this.finishMinify = function()
{
this.isOpen = false;
this.isMinifying = false;
}
}
NH.closeOtherMags = function(currentElem, magElems)
{
for(var i = 0; i < magElems.length; i++)
{
var magElem = magElems[i];
if(magElem != currentElem)
magElem.doMinify();
}
}
NH.Util.swapClassName = function(elem, style1, style2)
{
if(!elem)
return false;

if(elem.className.match(style2))
{
NH.Util.removeClassName(elem, style2);
NH.Util.addClassName(elem, style1);
}
else
{
NH.Util.removeClassName(elem, style1);
NH.Util.addClassName(elem, style2);
}
}
NH.Util.attachEvent = function(elem, evt, fnc)
{
if(!elem)
return false;

if (!isIE)
{
if (evt.substr(0,2).toLowerCase() == "on")
evt = evt.substr(2);
elem.addEventListener(evt, fnc, false);
}
else
elem.attachEvent(evt, fnc);
}
NH.Anim.sizeAnimation = function(el, cx, cy, speed, fncComplete)
{
var ptCur = {x: NH.Anim.GetWidth(el), y: el.clientHeight};
var ptTarg = {x: cx, y: cy };

function fncSize(x,y,i,c)
{
el.style.width = x + "px";
el.style.height = y + "px";
}
var dist = Math.max(Math.abs(ptTarg.x - ptCur.x), Math.abs(ptTarg.y - ptCur.y));

new NH.Anim.translateAnimation(ptCur.x, ptCur.y, ptTarg.x, ptTarg.y, (speed) ? speed : 5, fncSize, fncComplete);
};
NH.Anim.translateAnimation = function(x1, y1, x2, y2, speed, fncMove, fncComplete)
{
var idTimer;
var path = NH.Anim.calcLinearPath(x1, y1, x2, y2, speed ? speed : 5);

var iCur = 0;

this.moveElement = function()
{
var pt = path[iCur++];

if(pt)
fncMove(pt.x, pt.y, iCur, path.length);

if (iCur >= path.length)
{
clearInterval(idTimer);

if (fncComplete)
fncComplete();
}
};

idTimer = setInterval(NH.Util.createThisCallback(this, "moveElement"), 10);
};
NH.Anim.calcLinearPath = function(x1, y1, x2, y2, stepsize)
{
var dist = Math.sqrt(((x2-x1) * (x2-x1)) + ((y2-y1) * (y2-y1)));
var steps = dist / stepsize;

var dx = (x2 - x1) / steps;
var dy = (y2 - y1) / steps;

var path=[];
for(var i=0; i <= steps; i++)
{
path[i] = {x:x1, y:y1};

x1 += dx;
y1 += dy;
}

path[path.length] = {x:x2, y:y2};

return path;
}
NH.Anim.GetWidth = function(el)
{
return (el.clientWidth == undefined || el.clientWidth == 0) ? el.style.pixelWidth : el.clientWidth;
};
NH.Util.createCallback = function(fncName)
{
var objects = fncName.split(".");
var obj = window;
for(var i = 0; i < objects.length; i++)
obj = obj[objects[i]];

var args = [];
for(var i=1; i < arguments.length; i++)
{
args.push(arguments[i]);
}

return function()
{
var additionalArgs = [];
for(var i=0; i < args.length; i++)
additionalArgs.push(args[i]);

for(var i=0; i < arguments.length; i++)
additionalArgs.push(arguments[i]);
if(obj)
return obj.apply(undefined, additionalArgs);
};
}
NH.Util.createThisCallback = function(obj, strFunc)
{
var temp = obj;
var args = [];
for(var i=2; i < arguments.length; i++)
args.push(arguments[i]);

return function()
{
var additionalArgs = [];
for(var i=0; i < args.length; i++)
additionalArgs.push(args[i]);

// Add args we were passed onto the end
for(var i=0; i < arguments.length; i++)
additionalArgs.push(arguments[i]);

if (temp[strFunc])
return temp[strFunc].apply(obj, additionalArgs);
};
};
NH.Util.preventDefault = function(e)
{
var event;
var e = e || event;
if(e && e.preventDefault)
{
e.stopPropagation();
e.preventDefault();
}
else if(e)
e.returnValue = false;
return false;
};
NH.Util.preventInputSubmit = function(e)
{
var event;
var e = e || event;
var code = e.which || e.keyCode;
if (code == '13')
{
return NH.Util.preventDefault(e);
}
};
String.prototype.truncate = function(num)
{
if(this.length > num + 3)
return this.substring(0, num) + "...";
else
return this;
}
//adds a class name ot an element without removing any that exist.
NH.Util.addClassName = function(elem, name)
{
if(!elem)
return false;

if(!elem.className.match(name))
{
if(elem.className.length == 0)
elem.className = name;
else
elem.className += " " + name;
}
}
//removes a class name ot an element without removing any that exist.
NH.Util.removeClassName = function(elem, name)
{
if(!elem)
return false;

if(elem.className.match(name))
{
if(elem.className == name)
elem.className = "";
else
elem.className = elem.className.replace(" " + name, "");
}
}
//shows loading for an element
NH.Anim.showLoading = function(elem)
{
if(!elem)
return false;

//debugger;
var width = elem.offsetWidth;
var height = elem.offsetHeight;
height -= 20;
if (height < 30)
height = 30;
//var newE = elem.appendChild(document.createElement("div"));
//newE.innerHTML = "LOADING";
elem.innerHTML = "<div style='width:" + width + "px;height:" + height + "px;padding:10px;'><img src='/share/img/al1.gif' alt='Loading' width='16' height='16' /> Loading...</div>";
}
//......................................

function init_shoppingAnim()
{
var hl = document.getElementById("cat_hl_13154");
if(hl)
{
var spans = hl.getElementsByTagName("span");
var arr = [];
for(var i = 0; i < spans.length; i++)
{
var span = spans[i];
if(span.className != "odd" && span.className != "even")
continue;

var inner = span.getElementsByTagName("span");
for(var j = 0; j < inner.length; j++)
{
var ispan = inner[j];
if(ispan.className == "text")
var text = ispan;
if(ispan.className == "image")
{
var img = ispan.getElementsByTagName("img")[0];
}
}

arr.push(new NH.Anim.Magnify(span, img, text, (i==0)));
}
for(var i = 0; i < arr.length; i++)
{
arr[i].fnc = NH.Util.createCallback("NH.closeOtherMags", arr[i], arr);
}
}
}
//................................

