var oldOnload = window.onload;
window.onload = function(e)
{
	if(window.slide_conf) {
		var slides = new slideshow(slide_conf);
		if(!slides.fail) { 
			slides.start_show();
		}	
	}	
	if(oldOnload) { oldOnload(e); }		
};

(function(){
	//set the default config info overridable by any var slide_conf in the window object
	var _slideConf = {
			image_directory : 'http://www.surroundus.com/wp-content/uploads/2009/09/',
			images : [{}],
			image_width : 715,
			image_height : 256,
			tm : 6000,
			fadeTm : 2000,
			fps : 13,
			startText : false,
			loop : true,
            textShadow : true,
            sildeShowContainer : 'content-slideshow'
	};
	var _imagesEle = null;
	var _txtEle = null;
	var _coverEle = null;
	var _previousEle =null;
	var _id_prefix = 'slideShowImg_';
	var _txtShadowEle = null;
	
	var $ = function(i) {
		return (document.getElementById(i) || false);
	};
	
	var _addImages = function() {
		if(!_imagesEle)
		{
			return false;
		}
		var imgHolder = _imagesEle;
		imgHolder.innerHTML = '';
		for(inx in _slideConf['images'])
		{
			//if a series needs an extra wrapper.
			if(typeof _slideConf['images'][inx].img_name === 'object')
			{
				_slideConf['images'][inx].img_id = _id_prefix+inx;
				var imgSeriesNodeHolder = document.createElement('DIV');
				imgSeriesNodeHolder.id = _slideConf['images'][inx].img_id;
				for(i in _slideConf['images'][inx].img_name)
				{
					var divNode = document.createElement('DIV');
					divNode.id= _slideConf['images'][inx].img_id+'_'+i;
					divNode.style.position = 'absolute';
					divNode.style.top = '0'; 
					divNode.style.left = '0';
					divNode.style.overflow = 'hidden';
					divNode.style.width = '0';
					divNode.style.height= '100%';
					divNode.style.zIndex = (parseInt(i)+1);
						var imgNode = document.createElement('IMG');
						imgNode.src = _slideConf['image_directory']+_slideConf['images'][inx].img_name[i];
						imgNode.style.display = 'block';
						imgNode.alt = _slideConf['images'][inx].img_text != '' ? _slideConf['images'][inx].img_text : _slideConf['images'][inx].img_name[i];
						divNode.appendChild(imgNode);
					imgSeriesNodeHolder.appendChild(divNode);
						
				}	
				imgHolder.appendChild(imgSeriesNodeHolder);
			} else {
				_slideConf['images'][inx].img_id = _id_prefix+inx;
				var imgNode = document.createElement('IMG');
				imgNode.id = _slideConf['images'][inx].img_id;
				imgNode.src = _slideConf['image_directory']+_slideConf['images'][inx].img_name;
				imgNode.alt = _slideConf['images'][inx].img_text != '' ?  _slideConf['images'][inx].img_text : _slideConf['images'][inx].img_name[i];
				imgNode.style.display = 'none';
				imgHolder.appendChild(imgNode);
			}	
		}
		_previousEle =imgHolder.firstChild; 
		_previousEle.style.display = 'block';
	};	
	
	var _applyCss = function() {
		
		var holder = _imagesEle.parentNode;
		holder.style.position = 'relative';
		holder.style.overflow = 'hidden';
		holder.style.margin = '0 0 20px 0';
		holder.style.width = _slideConf['image_width']+'px';
		holder.style.height = _slideConf['image_height']+'px';

		_imagesEle.style.position = 'absolute';
		_imagesEle.style.top = '0';
		_imagesEle.style.left = '0';
		_imagesEle.style.width = '100%';
		_imagesEle.style.height = '100%';
		
		_coverEle.style.position = 'absolute';
		_coverEle.style.top = '0';
		_coverEle.style.left = '0';
		_coverEle.style.width = '100%';
		_coverEle.style.height = '100%';
		_coverEle.style.backgroundColor = '#ffffff';
		_coverEle.style.zIndex = '50';
		
		if(_coverEle.style.opacity != undefined)
		{
			_coverEle.style.opacity = '0.0';
		}
		if(_coverEle.style.filter != undefined)
		{
			_coverEle.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'; 
		}	
		
		_txtEle.style.position = 'absolute';
		_txtEle.style.zIndex = '25';
		_txtEle.style.color = '#ffffff';
		_txtEle.style.fontSize = '35px';
		if(_txtShadowEle)
		{
			_txtShadowEle.style.position = 'absolute';
			_txtShadowEle.style.display = 'none';
			_txtShadowEle.style.zIndex = '25';
			_txtShadowEle.style.backgroundColor = '#000000';
			_txtShadowEle.style.opacity = '0.5';
			_txtShadowEle.style.filter = 'alpha(opacity=50)'; 
			_txtShadowEle.style.zIndex = '20';
			_txtShadowEle.style.width = '100%';
			_txtShadowEle.style.height = '47px';
			_txtShadowEle.style.left = '0';
		}
	};
	
	var _animateText = function(ele_in,tm_in)
		{
			var this_ele_obj = (ele_in != undefined) ? ele_in : ele_obj;
			
			_txtEle.style.top = this_ele_obj.img_text_coord['y']+'px';
			_txtEle.style.left = this_ele_obj.img_text_coord['x']+'px';
					
			if(this_ele_obj.img_text != '')
			{
				_txtEle.innerHTML = this_ele_obj.img_text;
				if(_txtShadowEle)
				{
					_txtShadowEle.style.display = 'block';
					_txtShadowEle.style.top = (this_ele_obj.img_text_coord['y'] - 1)+'px';
				}	
			} else {
				_txtEle.innerHTML = '';
				_txtShadowEle.style.display = 'none';
			}
			var oneTxtFrame = function(ele,count,tCount,dir)
			{
							var curr = parseInt(ele.style.left.replace('px',''));
							ele.style.left = (dir == 'left') ? (curr-1)+'px' : (curr+1)+'px';
							if(count < tCount)
							{
								count++;
								setTimeout(function(){ oneTxtFrame(ele,count,tCount,dir); },frmTm);
							} 
			} 
			var midPoint = parseInt(_txtEle.style.left.replace('px','')) + (_txtEle.offsetWidth / 2);
			//units of offset for text animation from normal fps.
			var tmOffset = 1;
			var frmTm = (1000 / _slideConf['fps']) * tmOffset;
			var frmTotalCount = ((tm_in || _slideConf['tm']) / frmTm);
			var dir = (midPoint < (_slideConf['image_width'] / 2)) ? 'right' : 'left';
			oneTxtFrame(_txtEle,0,frmTotalCount,dir);
		};
	
	var _oneCycle = function(ele_obj)
	{
		if(!$(ele_obj.img_id))
		{
			return;
		}
		var setTransparency = function(newAmt)
		{
			var e = _coverEle;
			if(e.style.opacity != undefined)
			{
				if(newAmt >= 100) {
				  var amt_str = '1.0';
				} else if(newAmt <= 0) {
				  var amt_str = '0.0';
				} else { 
				  var amt_str = '0.'+((newAmt < 10) ? '0' : '')+Math.floor(newAmt);
				}
			 	e.style.opacity = amt_str;
			} 
			if(e.style.filter != undefined) {	
				var amt_str = (newAmt >= 100) ? '100' : ((newAmt <= 0) ? '0' : newAmt);
				var fullStr = 'progid:DXImageTransform.Microsoft.Alpha(opacity='+amt_str+')';
				e.style.filter = fullStr;
			}
		};
		var _ele = $(ele_obj.img_id);
		var _frmCount = (_slideConf['tm'] / 1000) * _slideConf['fps'];
		var _count = 0;
		//for the covers transparency fade
		var _fadeFrmCount = (_slideConf['fadeTm']  / 1000) * _slideConf['fps'];
		var _chAmt = (100 / _fadeFrmCount) * 2;
		//left and right periods of no animation of transparency
		var lrBuffer = (_frmCount - _fadeFrmCount) / 2;
		
		
		var oneFrame = function(_count)
		{
			if((_count >= _frmCount / 2) && _ele.style.display != 'block')
			{
				if(_previousEle) { 
					_previousEle.style.display = "none";
					if(_previousEle.nodeName == 'DIV')
					{
						var e = _previousEle.firstChild;
						while(e)
						{
							e.style.width = '0';
							e = e.nextSibling;
						}
					}
				}
				_ele.style.display = 'block';
				//if not an image but a collection then slide each of the collection on.
				if(_ele.nodeName == 'DIV')
				{
					var e =_ele.firstChild;
					e.style.width = '100%';
					var slideImg = function(ele,conf)
					{
						var width = parseFloat(ele.style.width.replace('%',''));
						ele.style.width = (width+conf['slideFrmAmt']) > 100 ? '100%' : (width+conf['slideFrmAmt'])+'%';
						if(width < 100)
						{
							setTimeout(function(){ slideImg(ele,conf); },conf['wait']);
						} else {
							if(ele.nextSibling)
							{
								setTimeout(function(){ slideImg(ele.nextSibling,conf); },conf['wait']);
							} 
						}
					};
					
					var conf = { 	slideFrmAmt : ((100 / (_slideConf['tm'] / (1000 / _slideConf['fps'])))) * _ele.childNodes.length,
												wait : (1000 / _slideConf['fps'])};
					if(e.nextSibling)
					{
						slideImg(e.nextSibling,conf);
					}
				}
				setTransparency(0);
				_animateText(ele_obj);
			}
			if(lrBuffer < _count && (lrBuffer + _fadeFrmCount) > _count)
			{
				setTransparency((_count < _frmCount / 2) ? (_chAmt * ((_count - lrBuffer))) : (100 - (_chAmt * (_count  - _frmCount / 2)))); 
			}	
			if(_count < _frmCount)
			{
				_count++;
				setTimeout(function(){oneFrame(_count);},(1000 / _slideConf['fps']));
			} else {
				_previousEle = _ele;
			}
		};
		oneFrame(_count);	
	};
	
	var _beginAnimation = function(inx)
	{
		var inx = (inx === undefined) ? 1 : inx;
		_oneCycle(_slideConf['images'][inx]);
		
		if(inx < _slideConf['images'].length - 1)
		{
			inx++;
			setTimeout(function(){ _beginAnimation(inx); },_slideConf['tm']);
		} else if(_slideConf['loop']){
			inx = 0;
			setTimeout(function(){ _beginAnimation(inx); },_slideConf['tm']);
		}
	};
		
	slideshow = function(slide_conf){
		for(i in slide_conf)
		{
			_slideConf[i] = slide_conf[i]; 
		}
		_holderEle = $(_slideConf['sildeShowContainer']);
		if(!_holderEle) { this.fail = true; return; }
		
		_imagesEle = document.createElement('div');
		_holderEle.appendChild(_imagesEle);
		_coverEle = document.createElement('div');
		_holderEle.appendChild(_coverEle);
		_txtEle = document.createElement('div');
		_holderEle.appendChild(_txtEle);
		if(_slideConf['textShadow'])
		{
			_txtShadowEle = document.createElement('div');
			_txtEle.parentNode.appendChild(_txtShadowEle); 
		}
		_addImages();
		_applyCss();
	};
	
	slideshow.prototype = {
			start_show : function()
			{
				if(_slideConf['startText'])
				{
					_animateText(_slideConf['images'][0]);
				}
				setTimeout(function(){ _beginAnimation(); },(_slideConf['tm'] / 2));
			}
	};

}());