
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 = 30; 
	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 = 8; 
	
	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);
		 }
	 }
}
/*<a href="http://xmcyberpolice.cn/alert.asp" target=_blank><img src="http://xmcyberpolice.cn/image/gt.gif" width  ="30" border='0'></a>*/