
if( !AE.widget.dynamicImagesShow ){
	//动态图片展示
	AE.widget.dynamicImagesShow = function(){

		var _self = this;	
		var config, dImgDesc, oDIvCycle, oImgs, fnAutoAdjust;
		var defConfig = {

		//两组件公用部份
			sTabClass:'companyProductNavItem',
			sItemClass:'companyProductItem',
			oParentNode:document.body,
			sSwitchEvent:"click",
			aPreviewImgWH:[60,60],
			
		//本组件独立的属性设置 图片描述,如图片名称
			sImgDescTargetId:'companyProductItemDesc',
			aImgDescText:[],
			aImgDescTextHref:[],
	
	
		//图片属性设置
			aImgSrc:[],
			aImgAlt:[],
			aImgHref:[],
			sImgHrefTarget:'_self',
			sImgAlign:'middle',
			aContainerWH:[320,220],
			sLoadingHint:'loading...',
			bNeedAdjust:true,	
			nSwitchDelayTime:1000*2,
			nLoadingTime :1000*20,
			sOverTimeHint:'image loader error',
			
			//divCycle的参数
			iDelayTime:600,
			iCycleTimes:0,
			sCurrentClass:"current",
			sOrder:"asc"
		}
	
		_self.init = function(oConfig){
			config = TB.applyIf( oConfig || {}, defConfig);
			config.oParentNode = get(config.oParentNode);
			dImgDesc = get(config.sImgDescTargetId);
			oDIvCycle = new divCycle();
			oDIvCycle.init(config);
		
			if( config.aImgHref == 'auto'  ){ config.aImgHref = createAutoImgHref(config.aImgSrc.length);} 
			//轮换显示的同时更改相应的图片描述
			if( dImgDesc ){ oDIvCycle.onSwitch.subscribe( updateImgDesc,null, oDIvCycle ); }	
	
			oImgs = new AE.widget.dynamicLoadedImages();
			oImgs.onInit.subscribe(parseLoadedImgHref, null, oImgs);
			oImgs.onComplete.subscribe(parseCurrentImgHref, null, oImgs);
			fnAutoAdjust = oImgs.autoAdjust;
			
			oImgs.init(config);
			oImgs.loading(null, 0);
			previewImgAutoFit();
		}

		//根据序号显示指定的图片
		// @参数 iIndex: 要显示的图片序号
		_self.show = function(iIndex){
			if( oDIvCycle ){
				if( iIndex >= config.aImgSrc.length ){
					iIndex = 0;
				}
				
				oDIvCycle.show( null,iIndex);
				var loaderImages = oImgs.getLoadedImg();
				if( !loaderImages[iIndex] ){
					oImgs.loading(null, iIndex);
				}
			}
		}

		//预览图自适应大小
		var previewImgAutoFit = function(){
			var aItem = YUD.getElementsByClassName(config.sTabClass, '*', config.oParentNode);
			if( aItem.length <1 || !YL.isFunction(fnAutoAdjust) ){ return null; }
	
			var previewImgWH = config.aPreviewImgWH;	
			if( !YL.isArray(previewImgWH) ){		
				previewImgWH = new Array();
				previewImgWH[0] = parseInt(YUD.getStyle(aItem[0], 'width'));	
				previewImgWH[1] = parseInt(YUD.getStyle(aItem[0], 'height'));
			}
			
			//解决fireFox下速度慢无法获取尺寸的问题
			var delayTime =  ( YAHOO.util.Event.isIE ? 0 : 500);
			setTimeout( function(){
				for(var i = 0; i < aItem.length; i++){				
					var aImg = aItem[i].getElementsByTagName("IMG");
					if( aImg.length > 0 ){
						fnAutoAdjust( aImg[0].src, aImg[0], previewImgWH[0], previewImgWH[1] );
					}
				}
				},delayTime);
		}
		
		//创建图片的播放链接,生成链接为(假如4张图片): #1 #2 #3 #0;
		// @参数 count: 图片链接数量
		var createAutoImgHref = function( count ){
			if( count == null  || count < 0 ){ return []; };
			var aHref = new Array();
			for( var i = 1; i < count; i++ ){
				aHref.push( '#' + i );
			}
			aHref.push('#0');
			return aHref;
		}
	
		//解析当前显示图片的链接地址 #0 <到第一张照片>  #1 <到第二张照片>
		var parseCurrentImgHref = function(){
			// this -- dynamicLoadedImages对象

			if( !this.getCurrentIndex ){ return null; }
			var currentIndex = this.getCurrentIndex();
			var aImg = oImgs.getLoadedImg();
			if( aImg && aImg[currentIndex] ){
				parseImgHref(aImg[currentIndex]);
			}		
			return true;
		}

		//解析已加载的图片(直接写在页面上的图片)链接
		var parseLoadedImgHref = function(){
			// this -- dynamicLoadedImages对象
			var aImg = this.getLoadedImg();
			for( var i = 0; i < aImg.length; i++){
				if( !aImg[i] ){
					continue;
				}
				parseImgHref(aImg[i]);
			}
		}
		
		//解析图片的链接地址 #0 <到第一张照片>  #1 <到第二张照片>
		//@参数 dImg 被 链接(A) 包函的图片元素
		var parseImgHref = function(dImg){
			if( !dImg || dImg.tagName != 'IMG' || dImg.parentNode.tagName != 'A' ){ return null; }
			var dLink = dImg.parentNode;

			var re =/#(\d+)$/i;
			var sHref = YL.trim(dLink.href);
			var aParms = re.exec(sHref);
			
			if( !aParms || aParms[1] == null ){ return null;}
			var n = parseInt(aParms[1]);
			dLink.href='javascript:void(0)';
			YUE.on(dLink, 'click', function(){ _self.show( n ); return false; });
		}
		
	
		//更新图片描述的内容
		var updateImgDesc = function(){
			// this -- divCycle对象
			if( !this.getCurrentIndex ){ return };
			var currentIndex = this.getCurrentIndex();
			
			if( config.aImgDescText[currentIndex] ){ dImgDesc.innerHTML = config.aImgDescText[currentIndex]; return null;};				
	
			if( dImgDesc.tagName == 'A' && config.aImgDescTextHref[currentIndex] ){
					dImgDesc.href = config.aImgDescTextHref[currentIndex];			
			}
		}
	}
	
}


if( !AE.widget.dynamicLoadedImages ) {

	//当某个事件触发时载入指定的图片,并添加到指定的容器中,并给图片添加链接
		AE.widget.dynamicLoadedImages = function(){
		var _self = this;
		var config, aLoadedImg, aImgSrc, aImgAlt, aContainer, aTab, oParent, aLoadingTimeoutID, aSwitchTimeoutId, currentIndex;
		
		_self.onComplete =new YAHOO.util.CustomEvent("onComplete");
		_self.onInit =new YAHOO.util.CustomEvent("onInit");
	
		var defConfig = {
			sTabClass:'',
			sItemClass:'',
			oParentNode:document.body,
	
			aContainerWH:[200,200],
			aImgSrc:[],
			aImgAlt:[],
			aImgHref:[],
			sImgHrefTarget:'_self',
	
			sSwitchEvent:'click',
			sImgAlign:'middle',
	
			sLoadingHint:'loading...',
			sLoadingHintClass:'loadingHint',
			bNeedAdjust:true,
	
			nSwitchDelayTime:1000*2,
	
			nLoadingTime :1000*20,
			sOverTimeHint:'image loader error',
			sOverTimeHintClass:'overTimeHint'
		}
	
		_self.init = function(oConfig){
			config = TB.applyIf( oConfig || {}, defConfig);
	
			oParent = config.oParentNode;
			currentIndex = 0;
			aTab = YUD.getElementsByClassName(config.sTabClass, '*', oParent);			// get(config.targetImgId);
			aContainer = YUD.getElementsByClassName(config.sItemClass, '*', oParent);
			aLoadedImg = [];
			aLoadingTimeoutID = [];
			aSwitchTimeoutId = [];
			aImgSrc = config.aImgSrc;
			aImgAlt = config.aImgAlt;
			initLoadedImages();		
		
			setTimeout( function(){ initImageSize()}, 1 );
			for(var i = 0; i < aTab.length; i++){
				YUE.on( aTab[i], config.sSwitchEvent, _self.loading, i);
			}
			_self.onInit.fire();
		}

		var initImageSize = function(){
			var aItem = aContainer;
			for( var i = 0; i < aItem.length; i++){
				var aImg = aItem[i].getElementsByTagName('IMG');
				if( aImg.length > 0 ){					
					_self.autoAdjust( aImg[0].src, aImg[0], config.aContainerWH[0], config.aContainerWH[1] );	
				}
			}
		}
		
		var initLoadedImages = function(){		
			for(var i = 0; i < aContainer.length; i++ ){
					var aTemp = aContainer[i].getElementsByTagName('img');
					if( aTemp.length > 0 && i < aImgSrc.length && isSrcEqual( aTemp[0].src, aImgSrc[i]) ){
						aLoadedImg[i] = aTemp[0];
					}
			}
		}
	
		_self.loading = function(e, index){

				if( aLoadedImg[index] || index > aImgSrc.length || aImgSrc[index] == 'error' || index > aContainer.length ){ 
					return ; 
					};
					
				aLoadedImg[index] = new Image();
				if( aImgAlt[index] ){
					aLoadedImg[index].alt = aImgAlt[index]
				}
				YUE.on( aLoadedImg[index], 'load', loadComplete, index );		
				//获取容器里的图片
				var aTemp = aContainer[index].getElementsByTagName('IMG');						
				if( aTemp.length > 0 ){
						aLoadedImg[index].className = aTemp[0].className;
				}
				//	当载入超过指定时间时显示出错提示
				if( config.nLoadingTime > 0 ){
					aLoadingTimeoutID[index] = setTimeout( function(){ loadError(index);	}, config.nLoadingTime );
				}
				
				// 当图片在载入超过指定的时间时则显示载入提示信息, setTimeout主要是防止快速载入时页面闪动的问
				aSwitchTimeoutId[index] = setTimeout( function(){
									if( aContainer[index] ){ 
										rewriteElementContent( aContainer[index], createDocElement('span', config.sLoadingHint, { className: config.sLoadingHintClass}) ); 
									}
								},
								config.nSwitchDelayTime);
				aLoadedImg[index].src = aImgSrc[index];
				
		}
	
		_self.getLoadedImg = function(){
			return aLoadedImg;
		}
		
		_self.getCurrentIndex = function(){
			return currentIndex;
		}
	
		//完成载入后 根据参数调整大小 设置垂直居中等
		var loadComplete  = function(e,index){
			YUE.removeListener( aLoadedImg[index], 'load', loadComplete, index );
			YUE.removeListener( aTab[index], config.sSwitchEvent, _self.loading, index);

			//句柄使用数组可防止在快速切换图片时被冲掉
			clearTimeout(aLoadingTimeoutID[index]);
			clearTimeout(aSwitchTimeoutId[index]);
			
			if( aContainer[index] ){
				//设置延时,当网络速度超快时不能在firfox下获取到图片的尺寸
				setTimeout( function(){
					var sHref = YL.isArray(config.aImgHref)?config.aImgHref[index]:config.aImgHref;
					writeLinkImage( aLoadedImg[index], sHref, aContainer[index]);
					currentIndex = index;
					_self.onComplete.fire();
				},1);
			}
		}
	
		// 自动调整图片大小
		_self.autoAdjust = function(sUrl, dImg, w, h){
			setImgSizeWH( sUrl, dImg, w, h );			
			if( config.sImgAlign == 'middle' ){
				var dImgH = parseInt(YUD.getStyle(dImg, 'height'));
				var mTop = parseInt((h - dImgH)/2);
				
				if( mTop != 0 && mTop != parseInt(YUD.getStyle(dImg,'marginTop')) ){
					YUD.setStyle(dImg, 'marginTop', mTop+'px');
				}
			}
		}
	
		var loadError = function(index){
			if( aContainer[index] ) { 			 
				var addEl = createDocElement('span', config.sOverTimeHint, { className: config.sOverTimeHintClass } ) ;
				rewriteElementContent( aContainer[index], addEl );			
			}
		}
	
		// 把元素原有内容清空并添加新的元素
		// @参数 dEl  要清空的元素
		// @参数 writeEl  要重新写入的元素
		var rewriteElementContent = function( dEl, writeEl ){
			if( dEl && writeEl){
				dEl.innerHTML = '';
				dEl.appendChild(writeEl);
			}
		}
	
		//创建带超链接的图片
		// @参数 dImg, 图片
		// @参数 sHref, 图片的链接地址
		// @参数 dContainer, 放图片的容器
		var writeLinkImage = function(dImg, sHref, dContainer){
			dContainer.innerHTML = '';
	
			//当设置了超链接时则创建带超链接的图片,否则直接添加图片
			if( sHref ){
				var dLink = createDocElement('A', '', { 'href':sHref, 'target':config.sImgHrefTarget});
				YUD.setStyle(dImg, 'visibility', 'hidden');
				dLink.appendChild(dImg);
	
				dContainer.appendChild(dLink);
			} else {
				dContainer.appendChild(dImg);
			}
			if(config.bNeedAdjust ){ _self.autoAdjust( dImg.src, dImg, config.aContainerWH[0], config.aContainerWH[1] ); }
				YUD.setStyle(dImg, 'visibility', '');
		}

		//判断两个绝对路径的src是否相等
		var isSrcEqual = function(currentSrc, requestSrc){
			if( currentSrc == requestSrc ){	return true; }
			return false;
		}
		
		//创建页面doc元素 如: createDocElement('A', 'to alibaba', {target:'_blank'})
		// @参数 sTagName, 要创建的标签名
		// @参数 sValue, 元素的值
		// @参数 oAttr, 此元素的属性参数对象
		var createDocElement = function( sTagName, sValue, oAttr ){
			var el = document.createElement(sTagName);
			if( !el ){ return null; };
			if( sTagName.toUpperCase() != 'IMG' ){
				el.innerHTML = sValue;
			}
			if( YL.isObject(oAttr) ){			
				for( var key in oAttr ){
					if( key == 'className' || key == 'class' ){
								el.className = oAttr[key];
								continue;
					}
					el.setAttribute(key, oAttr[key]);
				}
			}
			return el;
		}
	}

}

