/**
 syntax:
	cvi_istack.defaultImagearray		= null;			//OBJ e.g. photos
	
		var photos = [
			{
				source: 'path/file.jpg', 			// required 
				options: '{tilt:"r",text:"string"}'	// optional
			}
		];
	
	cvi_istack.defaultMainwidth		= 128;	//INT 80-n (px width) 
	cvi_istack.defaultMainheight	= 128;	//INT 80-n (px height)
	cvi_istack.defaultPlayframes	= 20; 	//INT 1-100 equals frames to fade (* 30 milliseconds)
	cvi_istack.defaultPlaydelay		= 5000; //INT 1000-n equals milliseconds (1/1000)
	cvi_istack.defaultLoadtimeout	= 3000	//INT 1000-n equals milliseconds (1/1000)
	cvi_istack.defaultPlayscript	= ''; 	//STRING e.g. cvi_*
	cvi_istack.defaultNoiefade		= false;//BOOLEAN
	
	cvi_istack.add( object, options );
	cvi_istack.play( object );
	cvi_istack.pause( object );
	cvi_istack.remove( object );
FLT=cvi_istack.version;
STR=cvi_istack.released;
	
 *
**/
	
var cvi_istack = {version : 1.0, released : '2009-06-09 16:00:00',
	defaultImagearray : null, defaultMainwidth : 128, defaultMainheight : 128, defaultLoadtimeout : 3000, defaultPlaydelay : 5000, defaultPlayframes : 20, defaultPlayscript : '',	defaultNoiefade : false,
	add : function(obj,opts) {function getArg(a,t) {return (typeof opts[a]===t?opts[a]:obj.opts[a]);};
		function uniqueID() {var val=Date.parse(new Date())+Math.floor(Math.random()*100000000000); return val.toString(16);}
		if(obj&&obj.tagName.toUpperCase()=="DIV"&&!obj.active) {var temp=cvi_istack.E('canvas'); 
			obj.trident=document.all&&document.namespaces&&!window.opera?1:0; obj.notrans=obj.trident&&!window.XMLHttpRequest?1:0; obj.canvas=temp.getContext?1:0; if(obj.trident||obj.canvas) {
			var defopts={"imagearray":cvi_istack.defaultImagearray, "mainwidth":cvi_istack.defaultMainwidth, "mainheight":cvi_istack.defaultMainheight, "loadtimeout":cvi_istack.defaultLoadtimeout, "playframes":cvi_istack.defaultPlayframes, "playdelay":cvi_istack.defaultPlaydelay, "playscript":cvi_istack.defaultPlayscript, "noiefade":cvi_istack.defaultNoiefade};
				if(opts) {for(i in defopts){if(!opts[i]){opts[i]=defopts[i];}}}else{opts=defopts;} temp=(typeof opts['imagearray']==='object'?opts['imagearray']:new Array());
				if(temp.length&&temp.length>=1) {
					obj.photo=temp; temp=''; delete opts['imagearray']; obj.id=obj.id!='undefined'?obj.id:uniqueID(); obj.opts=opts;   
					obj.mainwidth=parseInt(Math.max(32,getArg('mainwidth','number'))); obj.mainheight=parseInt(Math.max(32,getArg('mainheight','number')));
					obj.loadtimeout=parseInt(Math.max(1000,getArg('loadtimeout','number'))); obj.playframes=parseInt(Math.max(1,Math.min(100,getArg('playframes','number'))));
					obj.playdelay=parseInt(Math.max(1000,getArg('playdelay','number')))+(obj.trident&&obj.noiefade?0:(obj.playframes*30));
					obj.noiefade=getArg('noiefade','boolean'); obj.playscript=getArg('playscript','string'); obj.pureimgs=(obj.playscript==''?true:false);
					if(!obj.pureimgs) {obj.playscript+='.add'; obj.active=eval('typeof '+obj.playscript+'=="function";');}else{obj.active=true;}
					if(obj.active) {obj.innerHTML=''; cvi_istack._preload(obj,0,0);}else {obj.active=false; cvi_istack.L('error','[exit] cvi_istack.add(): unsupported playscript'); }
				}else {cvi_istack.L('error','[exit] cvi_istack.add(): insufficient images'); }
			}else {cvi_istack.L('error','[exit] cvi_istack.add(): unsupported browser'); }
		} return false; 
	},
	_preload : function(obj,cnt,cur) {
		if(obj&&typeof(obj.active)==="boolean"&&obj.active) {var ele,img=null;if(obj.timer) {window.clearTimeout(obj.timer);}
			if(cnt<obj.photo.length) {obj.timer=window.setTimeout(function() {cnt++; cvi_istack._preload(obj,cnt,cur);},obj.loadtimeout);
				img=new Image(); if(!window.opera) {img.src=obj.photo[cnt].source;}
				img.onabort=function() {cnt=obj.photo.length; cvi_istack._preload(obj,cnt,cur);};
				img.onerror=function() {cnt++; cvi_istack._preload(obj,cnt,cur);}; 
				img.onload=function() {if(img.width&&img.height&&img.width>=32&&img.height>=32) {
					obj.photo[cnt].loaded=true; ele=cvi_istack.E('img'); ele.id=obj.id+"_"+cur; ele.src=img.src; 
					ele.style.position='absolute'; ele.style.display='block'; ele.style.visibility='hidden'; ele.style.margin_right='20px';
					ele.width=obj.mainwidth; ele.height=obj.mainheight; ele.style.width=obj.mainwidth+'px'; ele.style.height=obj.mainheight+'px'; ele.style.left='0px'; ele.style.top='0px'; obj.appendChild(ele);
					if(!obj.pureimgs) {if(obj.photo[cnt].options&&obj.photo[cnt].options!='') {eval(obj.playscript+'(ele,'+obj.photo[cnt].options+');');}else {eval(obj.playscript+'(ele);');}}
					} window.clearTimeout(obj.timer); if(obj.trident) {img.onload=''; img=null;} cnt++; cur++; cvi_istack._preload(obj,cnt,cur);
				}; if(window.opera) {img.src=obj.photo[cnt].source;}
			}else {for(var i=0; i<obj.photo.length; i++) {if(!obj.photo[i].loaded) {obj.photo.splice(i,1); i--;}} obj.curimg=0; obj.lstimg=0; cvi_istack.play(obj);}
		}else {cvi_istack.L('warn','cvi_istack._preload(): object does not exist'); }return false;
	},
	play : function(obj) {
		if(obj&&typeof(obj.active)==="boolean"&&obj.active) {var fo,fi,fade,ele=cvi_istack.G(obj.id+'_'+obj.curimg); 
			if(ele) {ele.style.visibility='visible';}
			if(obj.photo.length>1) {if(obj.timer) {window.clearInterval(obj.timer);} obj.timer=window.setInterval(function() {
					obj.curimg=(obj.curimg<(obj.photo.length-1)?obj.curimg+1:0); var q=0,p=100,c=0,t=obj.playframes,k=p/t; 
					fi=cvi_istack.G(obj.id+'_'+obj.curimg); fo=cvi_istack.G(obj.id+'_'+obj.lstimg);
					if(fi&&fo) {if(obj.trident&&obj.noiefade) {fo.style.visibility='hidden'; fi.style.visibility='visible'; obj.lstimg=obj.curimg;}else {
							fo.style.filter="alpha(opacity=100)"; fo.style.opacity=1; fo.style.visibility='visible'; fi.style.filter="alpha(opacity=0)"; fi.style.opacity=0; fi.style.visibility='visible';
							if(fade) {window.clearInterval(fade);} fade=window.setInterval(function() {
								q+=k; fi.style.filter="alpha(opacity="+q+")"; fi.style.opacity=q/100;  p-=k; fo.style.filter="alpha(opacity="+p+")"; fo.style.opacity=p/100; c++; 
								if(c>t) {window.clearInterval(fade); fi.style.filter="alpha(opacity=100)"; fi.style.filter=""; fi.style.opacity=1; fo.style.filter="alpha(opacity=0)"; fo.style.opacity=0; fo.style.visibility='hidden'; obj.lstimg=obj.curimg;} 
							},30);
						}
					}else {window.clearInterval(obj.timer);}
				},obj.playdelay);
			}
		}else {cvi_istack.L('warn','cvi_istack.play(): object does not exist');}return false;
	},
	pause : function(obj) {if(obj&&typeof(obj.active)==="boolean"&&obj.active) {if(obj.timer) {window.clearInterval(obj.timer);}}else {cvi_istack.L('warn','cvi_istack.pause(): object does not exist');}return false;},
	remove : function(obj) {if(obj&&typeof(obj.active)==="boolean"&&obj.active) {if(obj.timer) {window.clearInterval(obj.timer);} obj.innerHTML=''; obj.active=false; }else {cvi_istack.L('warn','cvi_istack.remove(): object does not exist');}return false;},
	L : function(s,v) {s=s.toUpperCase()||'LOG'; if(window.console) {window.console[s.toLowerCase()](v);}else if(window.opera) {opera.postError(s+': '+v);}else {window.document.title=s+': '+v;}},
	G : function(v) {return(document.getElementById(v));},
	E : function(v) {return(document.createElement(v));},
	A : function(o,v) {o.appendChild(v);}
}
