function SjZViewer(baseServer,baseImage,width,height,newWidth, newHeight, imgVersion,inView,pageId){
	this.baseServerUrl = baseServer;
	this.onEvent = new Object();
	this.SjElement = SjElement;
	this.SjElement(); 	
	if ((typeof inView == 'undefined') || (inView == null)) {
		inView = 'izView';
	}
    if (sjGetElement(inView)){
    	// this does not work with invisible content, which is the case for us to support also the legacy images
		//width = parseInt(sjGetElement(inView).offsetWidth);
		//height = parseInt(sjGetElement(inView).offsetHeight);
    	width = jQuery("#izView:first").css("width").match(/\d+/)[0];
    	height = jQuery("#izView:first").css("height").match(/\d+/)[0];
		var str="";
		str+=' <div id='+this._elementId+'_base';
		str+=' STYLE="width:' + width + 'px;height:' + height + 'px">';
		str+=' <div  id='+this._elementId;
		str+=' STYLE="position:absolute;width:' + width + 'px;height:' + height + 'px;">';
		str+=' </div> ';
		str+=' </div> ';
		sjSetLayerHTML(inView,str);
		this.elem=sjGetElement(this._elementId);
		this.elem._elementId = this._elementId;
		this.elem_base=sjGetElement(this._elementId+'_base');
		this.elem_base._elementId = this._elementId+'_base';
		this.x = 0;
		this.y = 0;
	}else{
		var str="";
		str+=' <div id='+this._elementId+'_base';
		str+=' STYLE="position:relative;width:' + width + 'px;height:' + height + 'px;">';
		str+=' <div  id='+this._elementId;
		str+=' STYLE="position:absolute;left:0;top:0;width:' + width + ';height:' + height + '">';
		str+=' </div> ';
		str+=' </div> ';
			document.write(str);

		this.elem=sjGetElement(this._elementId);
		this.elem._elementId = this._elementId;
		this.elem_base=sjGetElement(this._elementId+'_base');
		this.elem_base._elementId = this._elementId+'_base';
		this.x = 0;
		this.y = 0;
	}

	this.zviewer = new SjZoom(this.elem,baseServer+baseImage,width,height,true,true,true);
    this.zviewer.toXY(0,0);
	 this.zviewer.initHandlers();
	 
	 //if (((baseServer) && (baseImage)) && ((newWidth)&&(newHeight)&&(imgVersion))){
	 if (((baseServer) && (baseImage)) && ((newWidth)&&(newHeight))){
		 this.zviewer.changeContext(baseServer+baseImage,null,null,null,null,newWidth, newHeight, imgVersion,pageId);
	 }else if ((baseServer) && (baseImage)){
		 this.zviewer.changeContext(baseServer+baseImage,null,null,null,null,null,null,pageId);
	 }
	 var sjZoomViewer = this;
	 this.zviewer.addEventListener('endZoom', 
		function (o){
				switch(o.target.state){
					case "zoomIn":
					if (sjZoomViewer.onEvent.onImageZoomedIn){
						sjZoomViewer.onEvent.onImageZoomedIn(1+Math.log(o.target.defaultScl/o.target.currentScl)/Math.log(o.target.zoom_factor));
					}
					break;
					case "zoomOut":
					if (sjZoomViewer.onEvent.onImageZoomedOut){
						sjZoomViewer.onEvent.onImageZoomedOut(1+Math.log(o.target.defaultScl/o.target.currentScl)/Math.log(o.target.zoom_factor));
					}
						break;
					case "reset":
					if (sjZoomViewer.onEvent.onImageResetted){
						sjZoomViewer.onEvent.onImageResetted(1+Math.log(o.target.defaultScl/o.target.currentScl)/Math.log(o.target.zoom_factor));
					}
						break;
					case "changeContext":
					if (sjZoomViewer.onEvent.onImageChanged){
						sjZoomViewer.onEvent.onImageChanged(o.target.oldImage,o.target.mainURL);
					}
						break;
					case "setRGN":
					if (sjZoomViewer.onEvent.onRegionSet){
						sjZoomViewer.onEvent.onRegionSet(o.target.currentRGN);
					}
						break;
				}  
			return false;
		}
	);
}

SjZViewer.prototype = new SjElement();

SjZViewer.prototype.addToPage = function(absolutePos) {
	if(absolutePos) {
		sjGetElementStyle(this.elem_base._elementId).position='absolute'; 
		sjSetXY(this.elem_base._elementId,this.x,this.y);
	}else{ 
		sjGetElementStyle(this.elem_base._elementId).position ='relative';
	    this.zviewer.toXY(0,0);
	}
};

SjZViewer.prototype.enableNav = function(position,inX,inY,inWidth,inHeight) {	
	this.zviewer.enableNav(position,inX,inY,inWidth || 50,inHeight || 50); 
};

SjZViewer.prototype.setBorderNav = function(sz,inColor) {	
	if (this.zviewer.navLayer){
		this.zviewer.navLayer.setBorder(sz,inColor); 
	}
};

SjZViewer.prototype.setBackground = function(bgColor) {
	if( ""+bgColor != "undefined" && ""+bgColor.length > 6 ) {
		this.zviewer.color("#"+bgColor.substr(bgColor.length-6)); 
		if (this.zviewer.navLayer){
			this.zviewer.navLayer.color("#"+bgColor.substr(bgColor.length-6)); 
		}
	} else {
		this.zviewer.color(bgColor); 
		if (this.zviewer.navLayer){
			this.zviewer.navLayer.color(bgColor.substr(bgColor.length-6)); 
		}
	};
};

/*
SjZViewer.prototype.setImage = function(img, reset, newWidth, newHeight, imgVersion) { 
	if (reset || (this.zviewer.initialScl == this.zviewer.currentScl)){
		this.zviewer.changeContext(img,null,null,null,null,newWidth, newHeight, imgVersion);
	}else{
		this.zviewer.changeContext(img,this.zviewer.currentX,this.zviewer.currentY,this.zviewer.currentScl,null,newWidth, newHeight, imgVersion);
	}
};
*/
SjZViewer.prototype.setImage = function(img, reset, newWidth, newHeight, imgVersion,pageId) { 
	if (reset || (this.zviewer.initialScl == this.zviewer.currentScl)){
		this.zviewer.changeContext(img,null,null,null,null,newWidth, newHeight, imgVersion,pageId);
	}else{
		this.zviewer.changeContext(img,this.zviewer.currentX,this.zviewer.currentY,this.zviewer.currentScl,null,newWidth, newHeight, imgVersion,pageId);
	}
};

SjZViewer.prototype.setBrochureImage = function(img, reset, defaultScl, newWidth, newHeight, imgVersion,pageId) { 
	if (reset || (this.zviewer.initialScl == this.zviewer.currentScl)){
		this.zviewer.changeContext(img,null,null,null,defaultScl,newWidth, newHeight, imgVersion,pageId);
	}else{
		this.zviewer.changeContext(img,this.zviewer.currentX,this.zviewer.currentY,this.zviewer.currentScl,defaultScl,newWidth, newHeight, imgVersion,pageId);
	}
};

SjZViewer.prototype.setFadeTime = function(inFadeTime) { 
	this.zviewer.fadeTime = inFadeTime; 
};

SjZViewer.prototype.setTurnTime = function(inTurnTime) { 
	this.zviewer.fadeTime = inTurnTime*1000; 
};

SjZViewer.prototype.setTransitionTime = function(inTransitionTime) { 
	this.zviewer.transitionTime = inTransitionTime*1000; 
};

SjZViewer.prototype.setWaitIconTimer = function(inTimerStr){
	var tempStr = inTimerStr.split(",");
	this.zviewer.waitIconTimer.showDelay = (tempStr[0]-0)*1000;
	this.zviewer.waitIconTimer.hideDelay = (tempStr[1]-0)*1000;
}


SjZViewer.prototype.setMaxZoom = function(limit) {	
	this.zviewer.setMaxZoom(this.zviewer.max_zoom,this.zviewer.zoom_factor,limit/100); 
};

SjZViewer.prototype.setZoomStep = function(amount) {	
	this.zviewer.setMaxZoom(this.zviewer.max_zoom, Math.pow(2,1/amount),this.zviewer.zoom_factor_limit); 
};

SjZViewer.prototype.zoomOut = function() {	
	this.zviewer.ZoomOut(this.zviewer.backImage); 
};

SjZViewer.prototype.zoomIn = function() {	
	this.zviewer.ZoomIn(this.zviewer.backImage);
};

SjZViewer.prototype.pan = function(direction,amount) {	
	var directionX=0;
	var directionY=0;
	switch(direction){
		case 'leftup':
			directionX=-1;directionY=-1;
			break;
		case 'up':
			directionX=0;directionY=-1;
			break;
		case 'rightup':
			directionX=1;directionY=-1;
			break;
		case 'left':
			directionX=-1;directionY=0;
			break;
		case 'right':
			directionX=1;directionY=0;
			break;
		case 'leftdown':
			directionX=-1;directionY=1;
			break;
		case 'down':
			directionX=0;directionY=1;
			break;
		case 'rightdown':
			directionX=1;directionY=1;
			break;
	}
	this.zviewer.pan(this.zviewer.backImage,directionX,directionY,amount); 
};

SjZViewer.prototype.reset = function() {			
	this.zviewer.ResetView(this.zviewer.backImage); 
};

SjZViewer.prototype.initialRGN = function(rgn) {		
	this.zviewer.ZoomInit(rgn,"rgn"); 
};

SjZViewer.prototype.initialRGNN = function(rgn) {
	this.zviewer.ZoomInit(rgn,"rgnn"); 
};

SjZViewer.prototype.initialRGNA = function(rgn) {		
	this.zviewer.ZoomInit(rgn,"rgna"); 
};

SjZViewer.prototype.setRGN = function(rgn) {		
	this.zviewer.ZoomSet(rgn,"rgn"); 
};

SjZViewer.prototype.setRGNN = function(rgn) {		
	this.zviewer.ZoomSet(rgn,"rgnn"); 
};

SjZViewer.prototype.setRGNA = function(rgn) {		
	this.zviewer.ZoomSet(rgn,"rgna"); 
};

SjZViewer.prototype.setBorder = function(sz,bgColor) {	
	var w =	parseInt(sjGetWidth(this.elem_base._elementId));
	var h =	parseInt(sjGetHeight(this.elem_base._elementId));
	var bgColor = bgColor || "#666666";
	var sz = sz || 0;
		if( ""+bgColor != "undefined" && ""+bgColor.length > 6 ) {
			sjSetBackColor(this.elem_base._elementId,"#"+bgColor.substr(bgColor.length-6));
			if (this.zviewer.navLayer)
				sjSetBorder(this.zviewer.navLayer._elementId,1,'solid',"#"+bgColor.substr(bgColor.length-6));
		} else {
			sjSetBackColor(this.elem_base._elementId,bgColor);
			if (this.zviewer.navLayer)
				sjSetBorder(this.zviewer.navLayer._elementId,1,'solid',bgColor);
		};
			sjSetWidth(this.elem_base._elementId, w+2*sz);
			sjSetHeight(this.elem_base._elementId, h+2*sz);
			sjSetXY(this.elem._elementId, sz,sz);
			this.zviewer.imgBorder = sz;
};

SjZViewer.prototype.setFormat = function(str) {		
	this.zviewer.setFormat(str); 
};

SjZViewer.prototype.setCachingModel = function(str) {	
	this.zviewer.setCachingModel(str); 
};

SjZViewer.prototype.addInformation = function(str) {	
	this.zviewer.addInformation(str); 
};

SjZViewer.prototype.setHelpPage = function(str,w,h) {	
	this.zviewer.setHelpPage(str,w,h); 
};

SjZViewer.prototype.initialRGN = function(rgn) {		
	this.zviewer.ZoomInit(rgn,"rgn"); 
};

SjZViewer.prototype.initialRGNN = function(rgn) {		
	this.zviewer.ZoomInit(rgn,"rgnn"); 
};

SjZViewer.prototype.initialRGNA = function(rgn) {		
	this.zviewer.ZoomInit(rgn,"rgna"); 
};

SjZViewer.prototype.advanced = function( zoomAmount,tiles,percision,transitionLoops,buf_size ) {
	this.zviewer.advanced( zoomAmount,tiles,percision,transitionLoops,buf_size );
};


SjZViewer.prototype.enableUI = function(imgFolder,offset,spacing) {
	var w =	parseInt(sjGetWidth(this.elem_base._elementId));
	var h =	parseInt(sjGetHeight(this.elem_base._elementId));
		sjSetHeight(this.elem_base._elementId,parseInt(sjGetHeight(this.elem_base._elementId))+20-Math.min(20,offset)+1);
		this.zviewer.enableUI(imgFolder,offset,spacing);
};

SjZViewer.prototype.enableCloseButton = function(position) {	
	this.zviewer.enableCloseButton(position); 
};

SjZViewer.prototype.showInformation = function() {
	this.zviewer.showInformation();
}

////////
SjZViewer.prototype.setClickToZoom = function(inState){
	return (this.zviewer.clickToZoom = inState);
}

