
function ckQuickviewObj()  {
	this.oContainer = null;

	this.defaultPos = ({"left":-1,"right":-1}); //where displayed under normal circumstances, without adjusting to keep within view
	this.displayPos = ({"left":-1,"right":-1});
	this.triggerPos = ({"left":-1,"right":-1});
	this.triggerDim = ({"width":-1,"height":-1});
	this.maxDim = ({"width":100,"height":100});
	
	this.containerPadding = ({"left":0,"right":0,"top":0,"bottom":0});
	
	this.bThumbnail = false;
	
	return this;
}


ckQuickviewObj.prototype.display = function() {
	if (this.oContainer) {

		var elementW,elementH;
		if (arguments.length==1) {
			//thumbnail view. The image is passed in after finishes loading
			var oImg = (arguments[0]);
			this.oContainer.style.width = oImg.width;
			elementH = oImg.height;
			elementW = oImg.width;
		} else {
			elementH = this.oContainer.height;
			elementW = this.oContainer.width;
		}
		
		
		this.evalContainerPadding();

		this.displayPos.left = this.defaultPos.left;
		if ((this.displayPos.left + elementW) > document.body.clientWidth) {
			this.displayPos.left = this.triggerPos.left - elementW - (this.containerPadding.left + this.containerPadding.right) - 5; // extra 5 to separate from trigger so mouseout will fire
		}
		
		this.displayPos.top = this.defaultPos.top;
		var screenBottom = document.body.clientHeight + document.body.scrollTop;
		if ((this.displayPos.top + elementH) > screenBottom) {
			this.displayPos.top = (screenBottom - elementH) - 20; //20 for chrome bottom
		}

		try {
			if (oFloatingWindow) {
				if (oFloatingWindow.isShowing()) { //need to adjust based on floating window position (i.e. article selection)
					this.displayPos.top -= oFloatingWindow.windowContainer.offsetTop;
					this.displayPos.left -= oFloatingWindow.windowContainer.offsetLeft;
				}
			}
		} catch(err) {
			//silent fail if no floating window declared
		}
		
		//--actual display	
		this.oContainer.style.left = this.displayPos.left;
		this.oContainer.style.top = this.displayPos.top;
		
		this.oContainer.style.display="block";
		
		this.bThumbnail = false; //always reset
	}
}

ckQuickviewObj.prototype.hide = function() {
	if (this.oContainer) this.oContainer.style.display="none";
}
/*----------------------------------------------------------------------------------------------------
Common Uses
-----------------------------------------------------------------------------------------------------*/
ckQuickviewObj.prototype.viewThumbnail = function(oTriggerEl,imageURL) {
	//create our own container
	var containerID = "ckQuickview.thumbnail"
	var oDiv, oImg;
	if (!(oDiv = document.getElementById(containerID))) {
		oDiv = document.createElement("DIV");
		oDiv.id = containerID;
		oDiv.style.padding="5px";
		oDiv.style.position="absolute";
		oDiv.style.backgroundColor="#202020";
		oDiv.align="center";
		oDiv.style.display="none";
		
		oImg = document.createElement("IMG")
		oImg.id = containerID + ".img";
		oImg.onload = function(){ oQuickview.display(this) } //Booooo. Hardcoded oQuickview. IE and FF mark 'this' as IMG, make sure everyone else does too.
		oDiv.appendChild(oImg);
		
		document.body.appendChild(oDiv);
	}

	this.bThumbnail = true;
	if (oImg = document.getElementById(containerID +".img")) oImg.src = "/ckcommon/gallery/getThumbnail.asp?src=" + imageURL + '&maxW=' + this.maxDim.width + '&maxH=' + this.maxDim.height;
	this.view(oTriggerEl,oDiv);	
	
}

ckQuickviewObj.prototype.viewHTML = function(oTriggerEl,sHTML,width) {
	//create our own container
	var containerID = "ckQuickview.htmlWrapper"
	var oDiv;
	if (!(oDiv = document.getElementById(containerID))) {
		oDiv = document.createElement("DIV");
		oDiv.id = containerID;
		oDiv.className="ckQuickview-defaultWrapper"
		
		
		document.body.appendChild(oDiv);
	}
	
	if (oDiv) {
		this.bThumbnail = false;
		oDiv.style.width=width;
		oDiv.innerHTML = sHTML;
	}
	
	this.bThumbnail = false;
	this.view(oTriggerEl,oDiv)
	
}


ckQuickviewObj.prototype.view = function(oTriggerEl,variant) {
	//variant is either element object or element id
	var oEl;
	if (typeof(variant)=="string") oEl = document.getElementById(variant);
	else oEl = variant;
	
	if (oEl) {
		if (!this.bThumbnail) {
			//move element to be a child of document.body since that's where positioning of the element is determined from
			var oNewEl = oEl.cloneNode(true);
			oNewEl = document.body.appendChild(oNewEl);
			oNewEl.style.position="absolute"; //make sure element is absolute positionable
			oNewEl.style.zIndex=1010;
			this.oContainer = oNewEl;
			oEl.parentNode.removeChild(oEl);
		} else {		
			oEl.style.position="absolute"; //make sure element is absolute positionable
			oEl.style.zIndex=1010;
			this.oContainer = oEl;
		}
		this.setDefaultPos(oDHTML.getTopPos(oTriggerEl),oDHTML.getRightPos(oTriggerEl)+5);
		this.setTrigger(oTriggerEl);
		
		if (!this.bThumbnail) this.display();
	} else {
		throwConsoleError("ckQuickviewObj.view","Element to view is null");
	}
	
}

/*----------------------------------------------------------------------------------------------------
Sets and Utilities
-----------------------------------------------------------------------------------------------------*/
ckQuickviewObj.prototype.setTrigger = function(oEl) {
	this.triggerPos.left = oDHTML.getLeftPos(oEl)
	this.triggerPos.top = oDHTML.getTopPos(oEl)
	this.triggerDim.width = oEl.width;
	this.triggerDim.height = oEl.height;
}

ckQuickviewObj.prototype.setMaxDim = function(w,h) {
	this.maxDim.width = w;
	this.maxDim.height = h;
}
ckQuickviewObj.prototype.setDefaultPos = function(top,left){
	this.defaultPos.top = top;
	this.defaultPos.left = left;
}

ckQuickviewObj.prototype.evalContainerPadding = function(){
	if (this.oContainer) {
		//ff always returns in 4 dimensions, IE returns exactly what put in attribute
		var sPadding = this.oContainer.style.padding;
		sPadding = sPadding.replace(/px/g,'');
		var aPadding = sPadding.split(" ");
		for (var index=0; index < aPadding.length; index++) aPadding[index] = parseInt(aPadding[index]);
		
		if (aPadding.length==1) {
			this.containerPadding.top = aPadding[0];
			this.containerPadding.right = aPadding[0];
			this.containerPadding.bottom = aPadding[0];
			this.containerPadding.left = aPadding[0];
		} else if (aPadding.length==2) {
			this.containerPadding.top = aPadding[0];
			this.containerPadding.right = aPadding[1];
			this.containerPadding.bottom = aPadding[0];
			this.containerPadding.left = aPadding[1];
		} else if (aPadding.length==4) {
			this.containerPadding.top = aPadding[0];
			this.containerPadding.right = aPadding[1];
			this.containerPadding.bottom = aPadding[2];
			this.containerPadding.left = aPadding[3];
		}
	}
}

