tdi_imageZoom = {
	vars:{
		magDiv:0,
		magImage:{
			obj:0,script:0
		},
		magThumbDiv:0,
		magThumb:0,
		magView:{
			obj:0,script:0
		},
		plusIcon:{
			obj:0,script:0
		},
		minusIcon:{
			obj:0,script:0
		},
		mag:{
			zInc:.1,cInc:0,cZoom:0,maxZoom:1,minZoom:0
		},
		dims:{
			w:0,h:0,l:0,t:0,maxL:0,maxT:0,magDivW:0,magDivH:0
		},
		bImageLoaded:0
	},
	utils:function(oPar, sName){
		this.par = oPar
		this.name = sName
		this.inish = function(oSelf){
			this.self = oSelf
		}
		this.hideShow = function(sVis){
			v = this.par.vars
			v.minusIcon.obj.style.visibility = sVis
			v.magImage.obj.style.visibility = sVis
			v.magThumbDivAlpha.style.visibility = sVis
			v.magThumbDiv.style.visibility = sVis
			if(sVis == "hidden"){
			    v.magImage.obj.style.cursor = "default"
			} else {
			    v.magImage.obj.style.cursor = "move"
		    }
		}
	},	
	autoFuns:{
		main:function(oPar, sName){
			this.par = oPar
			this.name = sName
			this.site = oPar.par
			this.inish = function(oSelf){
				this.fun = {
					loadImg:function(sLargeSrc, sSmallSrc){
						oSelf.loadImg(sLargeSrc, sSmallSrc)
					},
					sizeImg:function(event){
						oSelf.sizeImg(event)
					}
				}
				this.self = oSelf
			}
			this.run = function(oMagDiv, oMagDivAlpha, oMagThumbDiv, oMagThumb, sThumbClass, oPlusIcon, oMinusIcon){
				var targ = this.par.vars
				targ.magDiv = oMagDiv
				
				targ.dims.magDivW = targ.magDiv.offsetWidth
				targ.dims.magDivH = targ.magDiv.offsetHeight
				targ.magImage.obj = targ.magDiv.appendChild(document.createElement("IMG"))
				this.setCSS(targ.magImage.obj)
				targ.magImage.script = new this.par.funs.mover(this.par, this.site, this.name, targ.magImage.obj, 1, 0)
				targ.magImage.script.inish(targ.magImage.script)
				this.site.utils.noSelect(targ.magImage.obj, 0)
				this.site.utils.addListener(targ.magImage.obj, ["load", "error"], this.fun.sizeImg)
				targ.magThumbDivAlpha = oMagDivAlpha
				targ.magThumbDiv = oMagThumbDiv
				targ.magThumb = oMagThumb
				targ.magView.obj = targ.magThumbDiv.appendChild(document.createElement("div"))
				var im = targ.magView.obj.appendChild(document.createElement("div"))
				im.style.width = im.style.height = "100%"
				im.style.cursor = "move"
				if(this.site.vars.isIE){
				    im.style.overflow = "hidden"
				    im = im.appendChild(document.createElement("img"))
				    im.src = this.site.vars.spGif
				    im.style.width = "100%"
				    im.style.height= "100%"
				}
				//im.style.backgroundColor = "#ffffff"
				targ.magView.script = new this.par.funs.mover(this.par, this.site, this.name, targ.magView.obj, -1, 1)
				targ.magView.script.inish(targ.magView.script)
				this.site.utils.noSelect(targ.magView.obj, 0)
				targ.magView.obj.className = sThumbClass
				this.setCSS(targ.magView.obj)
				targ.plusIcon.obj = oPlusIcon
				targ.plusIcon.script = new this.par.funs.zoomControl(this.par, targ.plusIcon.obj, 1)
				targ.plusIcon.script.inish(targ.plusIcon.script, this.site)
				targ.minusIcon.obj = oMinusIcon
				targ.minusIcon.script = new this.par.funs.zoomControl(this.par, targ.minusIcon.obj, -1)
				targ.minusIcon.script.inish(targ.minusIcon.script, this.site)
				return this.fun.loadImg
			}
			this.setCSS = function(oObj){
				oObj.style.cssText = "position:absolute;left:0px;top:0px"
			}
			this.loadImg = function(sLargeSrc, sSmallSrc){
				var v = this.par.vars 
				this.par.utils.hideShow("hidden")
				v.plusIcon.obj.style.visibility = "hidden"
				v.bImageLoaded = 0
				v.magImage.obj.style.width = v.magImage.obj.style.height = "auto"
				v.magImage.obj.src = sLargeSrc
				v.magThumb.src = sSmallSrc
			}
			this.sizeImg = function(event){
				if(event.type == "load"){
					var v = this.par.vars
					var m = v.mag
					var d = v.dims
					var im = v.magImage
					v.bImageLoaded = 1
					var w = im.obj.offsetWidth
					var h = im.obj.offsetHeight
					d.l = 0
					d.t = 0
					d.w = w
					d.h = h
					m.cZoom = m.minZoom = Math.ceil((d.magDivW/w)*100)/100
					m.cInc = -1
					v.plusIcon.obj.style.visibility = ""
					v.plusIcon.script.run()
				} 
			}
		},
		controler:function(oPar, sName){
			this.par = oPar
			this.name = sName
			this.inish = function(oSelf){
				this.self = oSelf
			}
			this.run = function(sAction, oParams){
				switch(sAction){
					case "zoom":
					    
						var v = this.par.vars
						var m = v.mag
						var d = v.dims
						var im = v.magImage
						m.cInc += oParams.dir
						var vis = "visible"
						vis = ""
						if(m.cInc<0) m.cInc = 0
						if(!m.cInc) vis = "hidden"
						this.par.utils.hideShow(vis)
						var z = m.minZoom+(m.zInc*(m.cInc))
						var vis = "visible"
						vis = ""
						if(z > 1){
							z = 1
							//m.cInc--
						}
						if(z == 1) vis = "hidden"
						v.plusIcon.obj.style.visibility = vis
						var zDiff = z-m.cZoom
						var w = d.w*z
						var h = d.h*z
						im.obj.style.width = w+"px"
						im.obj.style.height = h+"px"
						var thumbZ = d.magDivW/w
						if(thumbZ > 1) thumbZ = 1
						var buffer = 4
						//if(this.par.par.vars.isIE) buffer = 0
						
						//evt_clean
						var thumbW = (v.magThumb.offsetWidth-buffer) * thumbZ
						var thumbH = (v.magThumb.offsetHeight-buffer) * thumbZ
						if(thumbH < 0) thumbH = document.getElementById("tdi_magThumbGroup").offsetHeight
						v.magView.obj.style.width = thumbW+"px"
						v.magView.obj.style.height = thumbH+"px"
						d.maxL = (d.magDivW-w)
						d.maxT = (d.magDivH-h)+12
						d.thumbUnit = ((v.magThumb.offsetWidth-buffer)-thumbW)/-d.maxL
						d.imageUnit = -d.maxL/((v.magThumb.offsetWidth-buffer)-thumbW)
						v.magImage.script.mouseMove(0)
					break;
					case "move":
						var l = this.par.vars.magImage.obj
						var ll = this.par.vars.magView.obj
						var d = this.par.vars.dims
						var m = 1
						if(oParams.isThumb) m = d.imageUnit
						d.l += oParams.x*m
						d.t += oParams.y*m
						if(d.l > 0) d.l = 0
						if(d.t > 0) d.t = 0
						if(d.l < d.maxL) d.l = d.maxL
						if(d.t < d.maxT) d.t = d.maxT
						l.style.left = d.l+"px"
						l.style.top = d.t+"px"
						ll.style.left = ((d.l*d.thumbUnit)*-1)+"px"
						ll.style.top = ((d.t*d.thumbUnit)*-1)+"px"
					break;
				}
			}
		}
	},
	funs:{
		zoomControl:function(oPar, oObj, iDir){
			this.par = oPar
			this.obj = oObj
			this.dir = iDir
			this.inish = function(oSelf, oSite){
				var fun = function(event){
					oSelf.run()
				}
				oSite.utils.addListener(this.obj, ["mouseup"], fun)
			}
			this.run = function(){
				this.par.controler.run("zoom", {dir:iDir})
			}
		},
		mover:function(oPar, oSite, sName, oObj, iDir, bIsThumb){
			this.par = oPar
			this.name = sName+"_"+(new Date).getTime()
			this.site = oSite
			this.obj = oObj
			this.dir = iDir
			this.isThumb = bIsThumb
			this.inish = function(oSelf){
				this.self = oSelf
				oSelf.fun = {
					mouseEvent:function(event){
						oSelf.mouseEvent(event)
					},
					mouseMove:function(event, lastEvent){
						oSelf.mouseMove(event, lastEvent)
						event.returnValue = "false"
					}
				}
				this.site.utils.addListener(this.obj, ["mousedown"], oSelf.fun.mouseEvent)
			}
			this.mouseEvent = function(event){
				if(event.type == "mousedown"){
					this.site.vars.events.mouseup[this.name] = this.fun.mouseEvent
					this.site.vars.events.mousemove[this.name] = this.self.fun.mouseMove
					event.returnValue = false
				} else {
					delete this.site.vars.events.mouseup[this.name]
					delete this.site.vars.events.mousemove[this.name]
				}
			}
			this.mouseMove = function(e, le){
				var p = {x:0, y:0, isThumb:0}
				if(e) p = {x:(e.clientX-le.clientX)*this.dir, y:(e.clientY-le.clientY)*this.dir, isThumb:this.isThumb}
				this.par.controler.run("move", p)
				e.returnValue = "false"
			}
		}
	},
	inish:tdi_site.funs.genInish
}
tdi_site.autoFuns["imageZoom"] = tdi_imageZoom
