// IE5.5+ PNG Alpha Fix v2.0beta1: Background Tiling Support
// (c) 2008 Angus Turnbull http://www.twinhelix.com

// This is licensed under the GNU LGPL, version 2.1 or later.
// For details, see: http://creativecommons.org/licenses/LGPL/2.1/

if (!window.IEPNGFix) {
	window.IEPNGFix = {};
}

if(!window.IEPNGFix){window.IEPNGFix={}}
IEPNGFix.tileBG=function(elm,pngSrc,ready){
	var data=this.data[elm.uniqueID],
	elmW=Math.max(elm.clientWidth,elm.scrollWidth),
	elmH=Math.max(elm.clientHeight,elm.scrollHeight),
	bgX=elm.currentStyle.backgroundPositionX,
	bgY=elm.currentStyle.backgroundPositionY,
	bgR=elm.currentStyle.backgroundRepeat;
	
	if(!data.tiles){
		data.tiles={
			src:'',cache:[],img:new Image(),old:{}
		}
	}
	var tiles=data.tiles,
	pngW=tiles.img.width,
	pngH=tiles.img.height;
	
	if(pngSrc){
		if(!ready&&pngSrc!=tiles.src){
			tiles.img.onload=function(){this.onload=null;IEPNGFix.tileBG(elm,pngSrc,1)};
		return tiles.img.src=pngSrc}
	}else{
		if(tiles.src)
		ready=1;
		pngW=pngH=0
	}
	tiles.src=pngSrc;
	
	if(!ready&&elmW==tiles.old.w&&elmH==tiles.old.h&&bgX==tiles.old.x&&bgY==tiles.old.y&&bgR==tiles.old.r){
		return
	}
	var pos={
		top:'0%',
		left:'0%',
		center:'50%',
		bottom:'100%',
		right:'100%'
	},x,y,pc;x=pos[bgX]||bgX;y=pos[bgY]||bgY;
	
	if(pc=x.match(/(\d+)%/)){
		x=Math.round((elmW-pngW)*(parseInt(pc[1])/100))}if(pc=y.match(/(\d+)%/)){y=Math.round((elmH-pngH)*(parseInt(pc[1])/100))
	}
	x=parseInt(x);
	y=parseInt(y);
	var repeatX={'repeat':1,'repeat-x':1}[bgR],repeatY={'repeat':1,'repeat-y':1}[bgR];
	
	if(repeatX){
		x%=pngW;
		if(x>0)x-=pngW
	}if(repeatY){
		y%=pngH;
		if(y>0)y-=pngH
	}this.hook.enabled=0;
	if(!({relative:1,absolute:1}[elm.currentStyle.position])){
		elm.style.position='relative'
	}
	var count=0,xPos,maxX=repeatX?elmW:x+0.1,yPos,maxY=repeatY?elmH:y+0.1,d,s,isNew;
	
	if(pngW&&pngH){
		for(xPos=x;xPos<maxX;xPos+=pngW){
			for(yPos=y;yPos<maxY;yPos+=pngH){
				isNew=0;
				if(!tiles.cache[count]){
					tiles.cache[count]=document.createElement('div');
					isNew=1
				}
				var clipR=(xPos+pngW>elmW?elmW-xPos:pngW),clipB=(yPos+pngH>elmH?elmH-yPos:pngH);
				d=tiles.cache[count];
				s=d.style;
				s.behavior='none';
				s.left=xPos+'px';
				s.top=yPos+'px';
				s.width=clipR+'px';
				s.height=clipB+'px';
				s.clip='rect('+(yPos<0?0-yPos:0)+'px,'+clipR+'px,'+clipB+'px,'+(xPos<0?0-xPos:0)+'px)';
				s.display='block';
				
				if(isNew){
					s.position='absolute';s.zIndex=-999;elm.insertBefore(d,elm.firstChild)
				}this.fix(d,pngSrc,0);count++
			}
		}
	}
	while(count<tiles.cache.length){
		this.fix(tiles.cache[count],'',0);
		tiles.cache[count++].style.display='none'
	}this.hook.enabled=1;tiles.old={w:elmW,h:elmH,x:bgX,y:bgY,r:bgR}
};
