/**
 *_shadow_me="{'distanceFromSurface': '5'}"
 * 
 */

function shadowElement(elem, properties){
	//setup
	//Shadow Length
	var distance = parseInt(properties['distanceFromSurface']);
	//Shadow Hardness
	var initOpacity=30;
	var opacity =  initOpacity;
	//Shadow Smoothing Factor
	var opacityDecrement = opacity/(distance*2);
	//Corner Smoothing Factor
	var subopacityDecrement = opacity/(distance*5);
	elem.style.position = 'relative';
	var height = elem.offsetHeight - 5;
	var width = elem.offsetWidth -2;
	
	//right shadow
	if(distance > 0){
		insertDiv(distance, height, opacity, width, distance, elem);
	}
	i = 1;
	insertDiv(1, 1 /*- ( i * 2)*/, opacity, width + distance, distance - 1, elem);
	while(opacity > 0){
		//alert(opacity);
		insertDiv(1, height /*- ( i * 2)*/, opacity, width + distance + i -1, distance, elem);	
		opacity -= opacityDecrement;
		i++;
		var subOpacity = opacity;
		var j = 1;
		for(var j = 1; j <= i; j++){
			//alert(subOpacity);
			insertDiv(1, 1, subOpacity - (j * subopacityDecrement), width + distance + i - 1, distance - j , elem);
			insertDiv(1, 1, subOpacity - (j * subopacityDecrement), width + distance + i - 1, distance + j + height - 1, elem);
			subOpacity -= subopacityDecrement;
		}
	}
	
	//bottom shadow
	var opacity =  initOpacity;
	if(distance > 0){
		insertDiv(width - distance, distance, opacity, distance, height, elem);
	}
	i = 1;
	insertDiv(1, 1 /*- ( i * 2)*/, opacity,distance + width , height + distance, elem);
	while(opacity > 0){
		//alert(opacity);
		insertDiv(width, 1, opacity, distance, height + distance + i -1, elem);	
		opacity -= opacityDecrement;
		i++;
		var subOpacity = opacity;
		var j = 1;
		for(var j = 1; j <= i; j++){
			//alert(subOpacity);
			insertDiv(1, 1, subOpacity - (j * subopacityDecrement), distance - j, height + distance + i - 1 , elem);
			insertDiv(1, 1, subOpacity - (j * subopacityDecrement), distance + j + width - 1, height + distance + i - 1, elem);
			subOpacity -= opacityDecrement;
		}
	}
	
	//top shadow
	var opacity =  initOpacity;
	i = 1;
	while(opacity > 0){
		//alert(opacity);
		if(i > distance){
			insertDiv(width, 1, opacity, distance, (1 - i) + (distance - 1), elem);	
		}else{
			insertDiv(distance, 1, opacity, width, (1 - i) + (distance - 1), elem);	
		}
		opacity -= opacityDecrement;
		i++;
		var subOpacity = opacity;
		var j = 1;
		for(var j = 1; j <= i; j++){
			//alert(subOpacity);
			if(i > distance){
				//alert(subOpacity);
				insertDiv(1, 1, subOpacity - (j * subopacityDecrement), distance - j, (1 - i) + (distance - 1) , elem);
			}
			insertDiv(1, 1, subOpacity - (j * subopacityDecrement), distance + j + width - 1, (1 - i) + (distance - 1), elem);
			subOpacity -= subopacityDecrement;
		}
	}
	
	//left shadow
	var opacity =  initOpacity;
	i = 1;
	insertDiv(1, 1 /*- ( i * 2)*/, opacity,distance - 1 , height + distance, elem);
	while(opacity > 0){
		//alert(opacity);
		if(i > distance){
			insertDiv(1, height, opacity, (1 - i) + (distance - 1), distance, elem);	
		}else{
			insertDiv(1, distance, opacity, (1 - i) + (distance - 1), height, elem);	
		}
		opacity -= opacityDecrement;
		i++;
		var subOpacity = opacity;
		var j = 1;
		for(var j = 1; j <= i; j++){
			//alert(subOpacity);
			if(i > distance){
				insertDiv(1, 1, subOpacity - (j * subopacityDecrement), (1 - i) + (distance - 1), distance - j, elem);
			}
			insertDiv(1, 1, subOpacity - (j * subopacityDecrement), (1 - i) + (distance - 1), distance + j + height - 1, elem);
			subOpacity -= subopacityDecrement;
		}
	}
	

}

function insertDiv(width, height, opacity, posx, posy, elem){
	//if(height == 826 && posx == 1011){
		//alert('test1');
		//alert(opacity);
	//}
	var div = document.createElement('div');
	div.style.height = height+'px';
	div.style.width = width+'px';
	div.style.position = 'absolute';
	div.style.left = posx+'px';
	div.style.top = posy+'px';
	div.style.backgroundColor = '#000000';
	div.style.opacity= (Math.round(opacity*100)/100) / 100;
	div.style.filter = 'alpha(opacity='+opacity+');';
	elem.insertBefore(div, null);
}
