function addEvent(obj, evType, fn) {
    if (obj.addEventListener) {
        obj.addEventListener(evType, fn, true);
        return true;
    } else if (obj.attachEvent) {
        var r = obj.attachEvent("on"+evType, fn);
        return r;
    } else {
        return false;
    }
}

function getElementsByClassName(searchClass, node, tag)
{
	var classElements = new Array();
	if (node == null)
	{
		node = document;
	}
	if (tag == null)
	{
		tag = '*';
	}
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)" + searchClass + "(\\s|$)");
	for (var i = 0, j = 0; i < elsLen; i++)
	{
		if (pattern.test(els[i].className))
		{
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function getStyle(el,styleProp) {
	var x = el;
	if (x.currentStyle)
		var y = x.currentStyle[styleProp];
	return y;
}

function makeImage( className ) {
    var img = document.createElement('span');
    img.className = className;
    return img;
}

function makeInner( innerHTML ) {
	var inner = document.createElement('div');
	var clear1 = document.createElement('div');
	var clear2 = document.createElement('div');
    inner.className = "inner";
    inner.innerHTML = innerHTML;
    clear1.className = "clear";
    clear2.className = "clear";
	clear1.appendChild( document.createTextNode(".") );
	clear2.appendChild( document.createTextNode(".") );
    inner.appendChild( clear2 );
    inner.insertBefore( clear1, inner.firstChild );
    
    return inner;
}

    

var innerDivs;
var westImgs;
var eastImgs;

function fixSides() {
    for ( var i=0; i<innerDivs.length; i++ ) {
        westImgs[i].style.height = innerDivs[i].offsetHeight + "px";
        eastImgs[i].style.height = innerDivs[i].offsetHeight + "px";
    }
    return "Yay!";
}

function initShadow() {
    var classTreeTop = ["nw","north","ne","west","east"];
    var classTreeBottom = ["sw","south","se"];
    
	innerDivs = new Array();
	westImgs = new Array();
	eastImgs = new Array();
    
    var divs = document.getElementsByTagName('div');
    for (var i=0;i<divs.length;i++) {
        var cdiv = divs[i];
        if (cdiv.className.indexOf('shadow') > -1) {
			/*var images = cdiv.getElementsByTagName('img');
			for (var j=0; j<images.length; j++ ) {
					var image = new Image();
					image.src = images[j].src;
					image.onload = fixSides;
			}*/
            var imgs = new Array();
            var objects = cdiv.getElementsByTagName('object');
            var inner;
            if ( objects.length > 0 ) {
				inner = objects[0].parentNode;
				inner.className = 'inner';
            }
            else {
				var iframes = cdiv.getElementsByTagName('iframe');
				if (iframes.length > 0)
				{
					for (var iframeIndex = 0; iframeIndex < iframes.length; iframeIndex++)
					{
						//inner = iframes[iframeIndex].parentNode.parentNode;
						inner = cdiv;
						inner.className += " inner";
					}
					var clear2 = document.createElement('div');
					clear2.className = "clear";
					clear2.appendChild(document.createTextNode("."));
					inner.appendChild(clear2);
				}
				else 
				{
					// only IE doesn't load right
					if (document.all)
						var captcha = getElementsByClassName("captcha", cdiv, "p");
					if (captcha && captcha.length > 0)
					{
						inner = cdiv;
						inner.className += " inner";
						inner.style.paddingBottom = "7px";
						inner.style.marginBottom = "20px";
						var clear2 = document.createElement('div');
						clear2.className = "clear";
						clear2.appendChild(document.createTextNode("."));
						inner.appendChild(clear2);
						
					}
					else
					{
						inner = makeInner( cdiv.innerHTML );
						cdiv.innerHTML = "";
						cdiv.appendChild( inner );
					}
				}
            }
            for ( var j=classTreeTop.length - 1; j>=0; j-- ) {
				imgs[ j ] = makeImage( classTreeTop[j] );
                cdiv.insertBefore( imgs[ j ], cdiv.firstChild );
            }
            for (var j = 0; j < classTreeBottom.length; j++)
            {
				imgs[j + classTreeTop.length] = makeImage(classTreeBottom[j]);
                cdiv.appendChild(imgs[j + classTreeTop.length]);
			}
            for ( var j=0; j<imgs.length; j++ ) {
                var src;
                // Fixing IE
                if ( src=getStyle( imgs[j], "backgroundImage" ) ) {
					var img = imgs[j];
					src = src.substring( 5, src.length - 2);
					var imgName = src.toUpperCase();
					if (imgName.substring(imgName.length-3, imgName.length) == "PNG") {
						img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader"
							+ "(src=\'" + src + "\', sizingMethod='scale');";
						img.style.background = 'none';
					}
                }
            }
            innerDivs[innerDivs.length] = inner;
            if (iframes && iframes.length > 0)
			{
				var bottomOffset = 14;
				var toOffset1 = imgs[3];
				var toOffset2 = imgs[4];
			}
            if (captcha && captcha.length > 0 && document.all)
			{
				imgs[5].style.background = "#FFF";
				imgs[7].style.background = "#FFF";
				imgs[5].style.filter = imgs[5].style.filter.replace("scale", "crop");
				imgs[7].style.filter = imgs[7].style.filter.replace("scale", "crop");
				imgs[5].style.height = "28px";
				imgs[5].style.marginBottom = "-28px";
				imgs[7].style.height = "28px";
			}

            westImgs[westImgs.length] = imgs[3];
            eastImgs[eastImgs.length] = imgs[4];
        }
    }
    for ( var i=0; i<innerDivs.length; i++ ) {
		if ( innerDivs[i] && innerDivs[i].offsetHeight ) {
			westImgs[i].style.height = innerDivs[i].offsetHeight + "px";
			eastImgs[i].style.height = innerDivs[i].offsetHeight + "px";
        }
    }
    if (toOffset1 && toOffset2 && bottomOffset)
    {
		toOffset1.style.marginBottom = bottomOffset + "px";
		toOffset1.style.height = (toOffset1.offsetHeight - bottomOffset) + "px";
		toOffset2.style.marginBottom = bottomOffset + "px";
		toOffset2.style.height = (toOffset2.offsetHeight - bottomOffset) + "px";
    }
}

addEvent(window, 'load', initShadow);