/*
 * =========================================================================
 * 本程序可自由复制、修改、传播，不得删除以下信息。如用于商业用途须经原作者同意方可使用。
 * =========================================================================
 * ============================= 文件摘要 ==========================================		
	* 文件名称：ImageSlide.js
	* 文件功能：图片幻灯片类
	* 文件版本：1.1
	* 版本支持：IE
	* 文件作者：周煜彬  
	* 创建时间：2008年03月21日
	* 修改时间：2008年06月19日
	* 邮箱地址：mfkwgcom@163.com
	* 版权声明：本程序属于mfkwgcom，版权归作者所有。
 * ============================= 使用说明 ==========================================
	* var obj = new ImageSlide(ID,Width,Height,delay);
	* obj.add(img1,img2,img3...);
	* obj.display();
	* container  =对象ID 
	* Width      =滚动宽度(px)
	* Height     =滚动高度(px)
	* delay      =时间(ms)
 * ============================= 举例说明 ==========================================
	<SCRIPT language="javascript" type="text/javascript"> 
		var obj = new ImageSlide("PicturePlayer",500,500,5);
		obj.add("<%= MF_STRING[0] %>","<%= MF_STRING[1] %>","<%= MF_STRING[2] %>");
		obj.display();
	</SCRIPT>
	<SCRIPT language="javascript" type="text/javascript"> 
		var obj = new ImageSlide("PicturePlayer",500,500,5);
		obj.add("<%= MF_STRING[0] %>");
		obj.add("<%= MF_STRING[1] %>");
		obj.add("<%= MF_STRING[2] %>");
		obj.display();
	</SCRIPT>
	<SCRIPT language="javascript" type="text/javascript"> 
		var obj = new ImageSlide("PicturePlayer",500,500,5);
		obj.openxml("xml/base.xml");
		obj.display();
	</SCRIPT>
 * =================================================================================
 */
var ImageSlide = new function(){
	var object  = this;
	var $A = function(id){return (typeof id == "string" ? document.getElementById(id) : id);}
	this.count  = 0;
	this.num    = 0;
	this._index = 0;
	this.Images = new Array();
	this.Url    = new Array();
	this.boxId  = arguments[0]!=null?arguments[0]:"imageSlideBox";
	this.box    = null;
	this.width  = arguments[1]!=null?arguments[1]+"px":"100%";
	this.height = arguments[2]!=null?arguments[2]+"px":"100%";
	this.delay  = arguments[3]!=null?arguments[3]:2;
	this._timer=null;
	var browser = {
		version: parseInt(navigator.appVersion),
		isNetscape: navigator.appName.indexOf("Netscape") != -1,
		isMicrosoft: navigator.appName.indexOf("Microsoft") != -1
	};
	this.initialize = function(){
		var linkStyle = "display: block; TEXT-DECORATION: none;";
		if( object.box.filters ){
			linkStyle += "FILTER:";
			linkStyle += "progid:DXImageTransform.Microsoft.Barn(duration=0.5, motion='out', orientation='vertical') ";
			linkStyle += "progid:DXImageTransform.Microsoft.Barn ( duration=0.5,motion='out',orientation='horizontal') ";
			linkStyle += "progid:DXImageTransform.Microsoft.Blinds ( duration=0.5,bands=10,Direction='down' )";
			linkStyle += "progid:DXImageTransform.Microsoft.CheckerBoard()";
			linkStyle += "progid:DXImageTransform.Microsoft.Fade(duration=0.5,overlap=0)";
			linkStyle += "progid:DXImageTransform.Microsoft.GradientWipe ( duration=1,gradientSize=1.0,motion='reverse' )";
			linkStyle += "progid:DXImageTransform.Microsoft.Inset ()";
			linkStyle += "progid:DXImageTransform.Microsoft.Iris ( duration=1,irisStyle=PLUS,motion=out )";
			linkStyle += "progid:DXImageTransform.Microsoft.Iris ( duration=1,irisStyle=PLUS,motion=in )";
			linkStyle += "progid:DXImageTransform.Microsoft.Iris ( duration=1,irisStyle=DIAMOND,motion=in )";
			linkStyle += "progid:DXImageTransform.Microsoft.Iris ( duration=1,irisStyle=SQUARE,motion=in )";
			linkStyle += "progid:DXImageTransform.Microsoft.Iris ( duration=0.5,irisStyle=STAR,motion=in )";
			linkStyle += "progid:DXImageTransform.Microsoft.RadialWipe ( duration=0.5,wipeStyle=CLOCK )";
			linkStyle += "progid:DXImageTransform.Microsoft.RadialWipe ( duration=0.5,wipeStyle=WEDGE )";
			linkStyle += "progid:DXImageTransform.Microsoft.RandomBars ( duration=0.5,orientation=horizontal )";
			linkStyle += "progid:DXImageTransform.Microsoft.RandomBars ( duration=0.5,orientation=vertical )";
			linkStyle += "progid:DXImageTransform.Microsoft.RandomDissolve ()";
			linkStyle += "progid:DXImageTransform.Microsoft.Spiral ( duration=0.5,gridSizeX=16,gridSizeY=16 )";
			linkStyle += "progid:DXImageTransform.Microsoft.Stretch ( duration=0.5,stretchStyle=PUSH )";
			linkStyle += "progid:DXImageTransform.Microsoft.Strips ( duration=0.5,motion=rightdown )";
			linkStyle += "progid:DXImageTransform.Microsoft.Wheel ( duration=0.5,spokes=8 )";
			linkStyle += "progid:DXImageTransform.Microsoft.Zigzag ( duration=0.5,gridSizeX=4,gridSizeY=40 ); ";
		}
		linkStyle1 ="position:relative;text-align:left;width: "+object.width+"; height: "+object.height;
		var html = [];
		html.push("<div style=\""+linkStyle1+"\">");
		html.push('<div style="position:absolute;width:100%;height:'+object.height+';z-index:1;'+linkStyle+'"></div>');
		var baseSpacStyle = "background:#000;width:18px;line-height:18px; font-size:12px; FONT-FAMILY:'宋体';";
		baseSpacStyle += "border:1px solid #fff;border-right:0;border-bottom:0;";
		baseSpacStyle += "color:#fff;text-align:center; cursor:pointer; ";
		baseSpacStyle += "position:absolute;bottom:0;z-index:10;";
		baseSpacStyle += "opacity:0.6;-moz-opacity:0.6;FILTER:Alpha(Opacity=40);";
		var _length = object.Images.length;
		for(i=0;i<_length;i++){
			var n = _length-i-1
			html.push('<div onclick="ImageSlide.go('+i+')" style="'+baseSpacStyle+'right:'+(19*n+10)+'px">'+(i+1)+'</div>');
		}
		html.push('</div>');
		object.box.innerHTML=html.join('');
		var objSlide = object.box.firstChild;
		object.box.firstChild.childNodes[0].style.background = 'url(' + object.Images[0] + ') no-repeat center center';
		Change();
		//objSlide.style.background = 'url(' + object.Images[0] + ') no-repeat center center';
		object.box.firstChild.childNodes[1].style.background = '#ff0000';
	}
	var Change = function(){
		if(object.Url.length>0)
			object.box.firstChild.childNodes[0].innerHTML = '<a href="'+object.Url[0]+'" style="display:block;width:'+object.width+';height:'+object.height+'" target="_blank"></a>';
	}
	var ChangeUrl = function(idx){
		if(object.Url.length>0)
			object.box.firstChild.childNodes[0].childNodes[0].href=object.Url[idx];
	}
	this.add = function(){
		for (var i = 0; i < arguments.length; i++){
			if(typeof arguments[i] == 'object'){
				this.Images.push(arguments[i].img);
				this.Url.push(arguments[i].url);
			}else
				this.Images.push(arguments[i]);
		}
		this.count=this.Images.length;
	}
	this.setnum = function (idx) {
		if(idx>=0)
			this.num=idx;
		else if(this.num<this.count-1)
			this.num++;
		else
			this.num=0;
		var _length = object.Images.length;
		for(i=1;i<=_length;i++){
			object.box.firstChild.childNodes[i].style.background = '#000';
		}
		object.box.firstChild.childNodes[(this.num+1)].style.background = '#ff0000';
		return this.num;
	}
	var play = function(){
		var objSlide = object.box.firstChild.childNodes[0];
		idx = object.setnum();
		if(browser.isMicrosoft){
			if(objSlide.filters){
				var ren = Math.floor(Math.random()*(objSlide.filters.length));
				objSlide.filters[ren].Apply();
				objSlide.filters[ren].play();
			}
			objSlide.style.height = object.height;
			objSlide.style.background = 'url(' + object.Images[idx] + ') no-repeat center center';
		}else{
			$(objSlide).fadeTo("fast",0,function(){
				$(objSlide).css({'background':'url(' + object.Images[idx] + ') no-repeat center center'})
					.fadeTo("fast",1);
			});
		}
		ChangeUrl(idx);
		//this._timer = setTimeout(play,object.delay * 1000);
	}
	this.go = function(idx){
		clearInterval(this._timer);
		var objSlide = object.box.firstChild.childNodes[0];
		if(browser.isMicrosoft){
			if(objSlide.filters){
				var ren = Math.floor(Math.random()*(objSlide.filters.length));
				objSlide.filters[ren].Apply();
				objSlide.filters[ren].play();
			}
			objSlide.style.height = object.height;
			objSlide.style.background = 'url(' + object.Images[object.setnum(idx)] + ') no-repeat center center';
		}else{
			$(objSlide).fadeTo("normal",0.2,function(){
				$(objSlide).css({'background':'url(' + object.Images[object.setnum(idx)] + ') no-repeat center center'})
					.fadeTo("normal",1);
			});
		}
		ChangeUrl(idx);
		this._timer = setInterval(play,object.delay * 1000 );
	}
	function createXMLDOM(){
		var Browse = window.navigator.userAgent.indexOf("MSIE")>-1?true:false;
		var instance = null;
		if(Browse){
			var MSXML = ["MSXML2.DOMDocument.5.0", 
							"MSXML2.DOMDocument.4.0",
							"MSXML2.DOMDocument.3.0",
							"MSXML2.DOMDocument",
							"Microsoft.XMLDOM"];
			var Length = MSXML.length;
			for(var i = 0; i < Length; i++){
				try{
					instance = new ActiveXObject(MSXML[i]);
					break;
				}catch(e){}
			}
		}else{
			if (document.implementation && document.implementation.createDocument){
				instance= document.implementation.createDocument("","doc",null);
			}
		}
		instance.async = false;
		instance.preserveWhiteSpace=true;
		instance.load(arguments[0]);
		return instance.documentElement;
	}
	this.openxml = function(xmlFile){
		var root = createXMLDOM(xmlFile);	
		var nodes = root.getElementsByTagName("img");
		var _index = nodes.length;
		this.Images=[];
		for(i=0;i<_index;i++){
			this.Images.push(nodes[i].firstChild.nodeValue);
			//alert(nodes[i].firstChild.nodeValue);
		}
		this.count=this.Images.length;
		var root = null;
		var nodes = null;
	}
	this.display = function(){
		this.boxId  = arguments[0]!=null?arguments[0]:"imageSlideBox";
		this.box    = $A(this.boxId);
		if(!this.box) return;
		this.width  = arguments[1]!=null?arguments[1]+"px":"100%";
		this.height = arguments[2]!=null?arguments[2]+"px":"100%";
		this.delay  = arguments[3]!=null?arguments[3]:2;
		object.initialize();
		this._timer = setInterval(play,object.delay * 1000 );
	}
}