/*
NOTES
-----
- Transparent PNGs should have the suffix __t e.g. image__t.png
- If you want to add a rollover add a class called "js-rollover"
- If you want to handle the rollover stuff your self but would still like the javascript to
  preload the images add js-rollover-man class to the element
*/

function correctPngs(){
	//correct foreground images
	for(var i=0; i<document.images.length; i++){
		var img = document.images[i];
		var imgSrc = img.src.toLowerCase();
		if (imgSrc.substring(imgSrc.length-7, imgSrc.length) == "__t.png"){
			var imgId = (img.id) ? "id='" + img.id + "' " : "";
			var imgClass = (img.className) ? "class='" + img.className + "' " : "";
			var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
			
			//IE 6 and IE 5.5
			if (browser.PNGTransSupport==1){
				//IE transparent PNG 
				var display = "display:inline-block;"
				if (img.className=="block") display = "display:block;"
				var imgStyle = display + img.style.cssText;
				if (img.align == "left") imgStyle = "float:left;" + imgStyle;
				if (img.align == "right") imgStyle = "float:right;" + imgStyle;
				var imgHeight = img.height+"px";
				var imgWidth = img.width+"px";
				var sizingMethod="image";
				if (img.className.indexOf("-scale")!=-1)
					sizingMethod="scale";	
				if (img.className.indexOf("-scaleWidth100%") != -1)
					imgWidth="100%";
				if (img.className.indexOf("-scaleHeight100%") != -1)
					imgHeight="100%";
				
				if (img.parentElement.href && img.parentElement.className.indexOf("js-rollover")!=-1){
					//rollover
					imgStyle = "cursor:hand;" + imgStyle;	
					newHTML="<span " + imgId + imgClass + imgTitle+
						" style=\"width:" + imgWidth + "; height:" + imgHeight + ";" + imgStyle +
						" font-size:1px; line-height:1px; "+
						"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"+
						"(src='" + img.src + "', sizingMethod='"+sizingMethod+"');\""+
						" onmouseover=\"swapIETransparentPng(this)\" onmouseout=\"swapBackIETransparentPng(this)\""+
						"></span>";
					preloadedImages.add(getF2Image(img.src));
				} else {
					//non-rollover
					if (img.parentElement.href)
						imgStyle = "cursor:hand;" + imgStyle;	
					newHTML = "<span " + imgId + imgClass + imgTitle + 
						" style=\"width:" + imgWidth + "; height:" + imgHeight + ";" + imgStyle +
						" font-size:1px; line-height:1px; "+
						"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"+
						"(src=\'" + img.src + "\', sizingMethod='"+sizingMethod+"');\"></span>";
				}
				img.outerHTML = newHTML;
				i = i-1;
			} 
		} else {
			if (img.parentElement.href && img.parentElement.className.indexOf("js-rollover")!=-1){
				//add rollover to non transparent PNG
				img.onmouseover=swapImage;
				img.onmouseout=swapBackImage;
			}
		}
	}	
	
	//correct background images
	correctBackgroundPngs(getBodyElem(),0);	
}

function correctBackgroundPngs(element, level){
	var children=element.childNodes;
  for(var i=0; i < children.length; i++) {
		var node=children[i];
		if (node.nodeType == 1){
			// the video HTML seems to short-circuit the function
			/*if (node.nodeName.toLowerCase() == "object" || node.nodeName.toLowerCase() == "embed")
				continue;*/
			//alert(node.nodeName+" ,id: "+node.id+", class:"+node.className+", i:"+i+", level:"+level+", num children:"+children.length);
			if (node.currentStyle.backgroundImage.indexOf("__t.png")!=-1){
				//alert("trans png");
				//transparent PNG set as a background image
				var backgroundImage=extractUrl(node.currentStyle.backgroundImage);
				node.style.background="none";
				var sizingMethod="crop";
				if (node.className.indexOf("-bgScale")!=-1)
					sizingMethod="scale";
				node.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+backgroundImage+"', sizingMethod='"+sizingMethod+"')";				
				if (node.nodeName.toLowerCase() == "a")
					node.style.cursor="hand";					
				if (node.nodeName.toLowerCase() == "a" && node.className.indexOf("js-rollover")!=-1){
					//add rollover
					if (node.className.indexOf("js-rollover-man")==-1){
						node.onmouseover=swapIETransparentPng;
						node.onmouseout=swapBackIETransparentPng;
					}
					preloadedImages.add(getF2Image(backgroundImage));
				}
			} else if (node.currentStyle.backgroundImage!="none") {
				//add rollover to non-transparent background PNGs
				if (node.nodeName.toLowerCase() == "a" && node.className.indexOf("js-rollover")!=-1){
					if (node.className.indexOf("js-rollover-man")==-1){
						node.onmouseover=swapBgImage;
						node.onmouseout=swapBackBgImage;						
					}
					preloadedImages.add(getF2Image(node.currentStyle.backgroundImage));
				}		
			}			
			if (node.hasChildNodes()) {
				correctBackgroundPngs(node, level+1);
			}
		}
  }
}

function addRollovers(){
	var anchors=document.getElementsByTagName("a");
	for(var i=0;i<anchors.length;i++){
		var anchor=anchors[i];
		if (anchor.className.indexOf("js-rollover")!=-1){
			var image=getChildElem(anchor, "img");
			if (image!=null){
				//link has image
				if (anchor.className.indexOf("js-rollover-man")==-1){
					image.onmouseover=swapImage;
					image.onmouseout=swapBackImage;
				}
				preloadedImages.add(getF2Image(image.src));
			} else {
				//link doesn't have image
				if (anchor.className.indexOf("js-rollover-man")==-1){
					anchor.onmouseover=swapBgImage;
					anchor.onmouseout=swapBackBgImage;
				}
				var currentStyle=getCurrentStyle(anchor);
				if (currentStyle!=null)
					preloadedImages.add(getF2Image(currentStyle.backgroundImage));
			}
		}
	}
}

function extractUrl(cssUrl){
	return cssUrl.substring(5, cssUrl.length-2);
}

/* swap image event handlers
----------------------------------------------------------------------------*/

/* IE filter image
---------------------------------------*/

function swapIETransparentPng(elem){
	if (elem === undefined)
		elem=this;
	elem.style.filter=getF2Image(elem.style.filter);	
}

function swapBackIETransparentPng(elem){
	if (elem === undefined)
		elem=this;
	elem.style.filter=getF1Image(elem.style.filter);
}

/* foreground image
---------------------------------------*/

function swapImage(event){
	var image=getEventTarget(event);
	image.src=getF2Image(image.src);
}

function swapImageUsingId(id){
	alert(id);
	var image=$(id);
	image.src=getF2Image(image.src);
}

function swapBackImage(event){
	var image=getEventTarget(event);
	image.src=getF1Image(image.src);
}

function swapBackImageUsingId(id){
	alert(id);
	var image=$(id);
	image.src=getF1Image(image.src);
}

/* background image
---------------------------------------*/

function swapBgImage(event){
	var image=getEventTarget(event);
	image.style.backgroundImage=getF2Image(getCurrentStyle(image).backgroundImage);
}

function swapBgImageUsingId(id){
	var image=$(id);
	image.style.backgroundImage=getF2Image(getCurrentStyle(image).backgroundImage);
}

function swapBackBgImage(event){
	var image=getEventTarget(event);
	image.style.backgroundImage=getF1Image(getCurrentStyle(image).backgroundImage);
}

function swapBackBgImageUsingId(id){
	var image=$(id);
	image.style.backgroundImage=getF1Image(getCurrentStyle(image).backgroundImage);
}

/*
----------------------------------------------------------------------------*/

function transPngInit(){
	if (browser.PNGTransSupport < 2)
		correctPngs();
	else {
		addRollovers();
	}
	preloadedImages.preload();
}

runOnLoad(transPngInit);
