
function ScreenshotViewer() {
	this.hideFlash			= true;
	this.maxOpacity			= 25;
	this.doAnimations		= false;
	
	this.overlayTimerArray		= new Array();
	this.overlayTimerCount		= 0;
	this.imageTimerArray		= new Array();
	this.imageTimerCount		= 0;
	this.timerIDArray			= new Array();
	this.timerIDCount			= 0;
	
	this.checkFrame();
	
	/*@cc_on
		/*@if (@_jscript)
			this.ie = (document.all && !window.opera) ? true : false;
		/*@else @*/
			this.ie = false;
		/*@end
	@*/
	this.ie7 = (this.ie && window.XMLHttpRequest);
	
	this.initialize();
}

ScreenshotViewer.prototype.initialize = function() {

	var objBody = this.doc.getElementsByTagName("body").item(0);
	
	if (this.doc.getElementById('lbOverlay')) {
		objBody.removeChild(this.doc.getElementById("lbOverlay"));
		objBody.removeChild(this.doc.getElementById("lbMain"));
	}

	var objOverlay = this.doc.createElement("div");
		objOverlay.setAttribute('id','lbOverlay');
		if ((this.ie && !this.ie7) || (this.ie7 && this.doc.compatMode == 'BackCompat')) {
			objOverlay.style.position = 'absolute';
		}
		objOverlay.style.display = 'none';
		objBody.appendChild(objOverlay);
	
	var objScreenshotViewer = this.doc.createElement("div");
		objScreenshotViewer.setAttribute('id','lbMain');
		objScreenshotViewer.style.display = 'none';
		objBody.appendChild(objScreenshotViewer);
	
	var objOuterContainer = this.doc.createElement("div");
		objOuterContainer.setAttribute('id','lbOuterContainer');
		objScreenshotViewer.appendChild(objOuterContainer);

	var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
	var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

	if (isIE || isOpera)
	{
		var objObject = this.doc.createElement("div");
			objObject.setAttribute('id', 'flashScreenshotViewer');
			objOuterContainer.appendChild(objObject);
	}
	else
	{
		var objEmbed = this.doc.createElement("embed");
			objEmbed.setAttribute('pluginspage', 'http://www.macromedia.com/go/getflashplayer');
			objEmbed.setAttribute('type', 'application/x-shockwave-flash');
			objEmbed.setAttribute('allowScriptAccess', 'sameDomain');
			objEmbed.setAttribute('align', 'middle');
			objEmbed.setAttribute('name', 'screenshotViewer');
			objEmbed.setAttribute('height', '784');
			objEmbed.setAttribute('width', '941');
			objEmbed.setAttribute('bgcolor', '#ffffff');
			//objEmbed.setAttribute('wmode', 'opaque');
			objEmbed.setAttribute('wmode', 'transparent');
			objEmbed.setAttribute('menu', 'false');
			objEmbed.setAttribute('quality', 'high');
			objEmbed.setAttribute('src', 'scripts/screenshotViewer.swf');
			objEmbed.setAttribute('id', 'flashScreenshotViewer');
			objOuterContainer.appendChild(objEmbed);
	}
};

ScreenshotViewer.prototype.start = function(titleName, startIndex, imageFolder) {
	
	if (this.ie && !this.ie7) {	this.toggleSelects('hide');	}
	//if (this.hideFlash) { this.toggleFlash('hide'); }

	var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
	var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

	if (isIE || isOpera)
	{
		var flashvars = {};
		flashvars.titleName = titleName;
		flashvars.startIndex = startIndex;
		flashvars.imageFolder = imageFolder;
		
		var params = {};
		params.menu = "false";
		params.allowScriptAccess = "sameDomain";
		params.bgcolor = "#ffffff";
		//params.wmode = "opaque";
		params.wmode = "transparent";
		params.quality = "high";
		
		var attributes = {};
		attributes.id = "flashScreenshotViewer";
		attributes.name = "flashScreenshotViewer";
		attributes.align = "middle";
		
		swfobject.embedSWF("scripts/screenshotViewer.swf", "flashScreenshotViewer", "941", "784", "9.0.0", "scripts/expressInstall.swf", flashvars, params, attributes);
	}
	else
	{
		var embed = this.doc.getElementById('flashScreenshotViewer');
			embed.style.visibility = 'visible';
			embed.setAttribute('FlashVars', 'titleName='+titleName+'&startIndex='+startIndex+'&imageFolder='+imageFolder);
	}
	
	var pageSize	= this.getPageSize();
	var objOverlay	= this.doc.getElementById('lbOverlay');
	var objBody		= this.doc.getElementsByTagName("body").item(0);
	
	objOverlay.style.height = pageSize[1] + "px";
	objOverlay.style.display = '';
	
	this.appear('lbOverlay', (this.doAnimations ? 0 : this.maxOpacity));
	
	var object = this.doc.getElementById('lbMain');
		object.style.top = (this.getPageScroll() + (pageSize[3] / 15)) + "px";
		object.style.display = '';

	this.doc.getElementById('lbOuterContainer').style.border = 'none';
		
	this.doc.getElementById('lbOverlay').onclick = function() { myScreenshotViewer.end(); return false; }
	this.doc.getElementById('lbMain').onclick = function(e) {
		var e = e;
		if (!e) {
			if (window.parent.frames[window.name] && (parent.document.getElementsByTagName('frameset').length <= 0)) {
				e = window.parent.window.event;
			} else {
				e = window.event;
			}
		}
		var id = (e.target ? e.target.id : e.srcElement.id);
		if (id == 'lbMain') { myScreenshotViewer.end(); return false; }
	}
};

ScreenshotViewer.prototype.end = function(caller)
{
	var closeClick = (caller == 'slideshow' ? false : true);
	
	this.doc.getElementById('lbMain').style.display = 'none';
	this.fade('lbOverlay', (this.doAnimations ? this.maxOpacity : 0));
	this.toggleSelects('visible');
	if (this.hideFlash) { this.toggleFlash('visible'); }
};

ScreenshotViewer.prototype.checkFrame = function()
{
	if (window.parent.frames[window.name] && (parent.document.getElementsByTagName('frameset').length <= 0)) {
		this.isFrame = true;
		this.lytebox = "window.parent." + window.name + ".myScreenshotViewer";
		this.doc = parent.document;
	} else {
		this.isFrame = false;
		this.lytebox = "myScreenshotViewer";
		this.doc = document;
	}
};

ScreenshotViewer.prototype.appear = function(id, opacity)
{
	var object = this.doc.getElementById(id).style;
	object.opacity = (opacity / 100);
	object.MozOpacity = (opacity / 100);
	object.KhtmlOpacity = (opacity / 100);
	object.filter = "alpha(opacity=" + (opacity + 10) + ")";
	
	if (opacity == 100 && id == 'lbImage') {
		try { object.removeAttribute("filter"); } catch(e) {}
		this.updateDetails();
	} else if (opacity >= this.maxOpacity && id == 'lbOverlay') {
		for (var i = 0; i < this.overlayTimerCount; i++) { window.clearTimeout(this.overlayTimerArray[i]); }
		return;
	} else {
		if (id == 'lbOverlay') {
			this.overlayTimerArray[this.overlayTimerCount++] = setTimeout("myScreenshotViewer.appear('" + id + "', " + (opacity+15) + ")", 1);
		} else {
			this.imageTimerArray[this.imageTimerCount++] = setTimeout("myScreenshotViewer.appear('" + id + "', " + (opacity+15) + ")", 1);
		}
	}
};

ScreenshotViewer.prototype.fade = function(id, opacity)
{
	var object = this.doc.getElementById(id).style;
	object.opacity = (opacity / 100);
	object.MozOpacity = (opacity / 100);
	object.KhtmlOpacity = (opacity / 100);
	object.filter = "alpha(opacity=" + opacity + ")";
	
	if (opacity <= 0) {
		try {
			object.display = 'none';
		} catch(err) { }
	} else if (id == 'lbOverlay') {
		this.overlayTimerArray[this.overlayTimerCount++] = setTimeout("myScreenshotViewer.fade('" + id + "', " + (opacity-20) + ")", 1);
	} else {
		this.timerIDArray[this.timerIDCount++] = setTimeout("myScreenshotViewer.fade('" + id + "', " + (opacity-10) + ")", 1);
	}
};

ScreenshotViewer.prototype.getPageScroll = function()
{
	if (self.pageYOffset) {
		return this.isFrame ? parent.pageYOffset : self.pageYOffset;
	} else if (this.doc.documentElement && this.doc.documentElement.scrollTop){
		return this.doc.documentElement.scrollTop;
	} else if (document.body) {
		return this.doc.body.scrollTop;
	}
};

ScreenshotViewer.prototype.getPageSize = function()
{	
	var xScroll, yScroll, windowWidth, windowHeight;
	
	if (window.innerHeight && window.scrollMaxY) {
		xScroll = this.doc.scrollWidth;
		yScroll = (this.isFrame ? parent.innerHeight : self.innerHeight) + (this.isFrame ? parent.scrollMaxY : self.scrollMaxY);
	} else if (this.doc.body.scrollHeight > this.doc.body.offsetHeight){
		xScroll = this.doc.body.scrollWidth;
		yScroll = this.doc.body.scrollHeight;
	} else {
		xScroll = this.doc.getElementsByTagName("html").item(0).offsetWidth;
		yScroll = this.doc.getElementsByTagName("html").item(0).offsetHeight;
		
		xScroll = (xScroll < this.doc.body.offsetWidth) ? this.doc.body.offsetWidth : xScroll;
		yScroll = (yScroll < this.doc.body.offsetHeight) ? this.doc.body.offsetHeight : yScroll;
	}
	
	if (self.innerHeight) {
		windowWidth = (this.isFrame) ? parent.innerWidth : self.innerWidth;
		windowHeight = (this.isFrame) ? parent.innerHeight : self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		windowWidth = this.doc.documentElement.clientWidth;
		windowHeight = this.doc.documentElement.clientHeight;
	} else if (document.body) {
		windowWidth = this.doc.getElementsByTagName("html").item(0).clientWidth;
		windowHeight = this.doc.getElementsByTagName("html").item(0).clientHeight;
		
		windowWidth = (windowWidth == 0) ? this.doc.body.clientWidth : windowWidth;
		windowHeight = (windowHeight == 0) ? this.doc.body.clientHeight : windowHeight;
	}
	
	var pageHeight = (yScroll < windowHeight) ? windowHeight : yScroll;
	var pageWidth = (xScroll < windowWidth) ? windowWidth : xScroll;
	
	return new Array(pageWidth, pageHeight, windowWidth, windowHeight);
};

ScreenshotViewer.prototype.toggleFlash = function(state)
{
	var objects = this.doc.getElementsByTagName("object");
	for (var i = 0; i < objects.length; i++) {
		objects[i].style.visibility = (state == "hide") ? 'hidden' : 'visible';
	}

	var embeds = this.doc.getElementsByTagName("embed");
	for (var i = 0; i < embeds.length; i++) {
		embeds[i].style.visibility = (state == "hide") ? 'hidden' : 'visible';
	}
	
	if (this.isFrame) {
		for (var i = 0; i < parent.frames.length; i++) {
			try {
				objects = parent.frames[i].window.document.getElementsByTagName("object");
				for (var j = 0; j < objects.length; j++) {
					objects[j].style.visibility = (state == "hide") ? 'hidden' : 'visible';
				}
			} catch(e) {}
			
			try {
				embeds = parent.frames[i].window.document.getElementsByTagName("embed");
				for (var j = 0; j < embeds.length; j++) {
					embeds[j].style.visibility = (state == "hide") ? 'hidden' : 'visible';
				}
			} catch(e) {}
		}
	}
};

ScreenshotViewer.prototype.toggleSelects = function(state)
{
	var selects = this.doc.getElementsByTagName("select");
	for (var i = 0; i < selects.length; i++ ) {
		selects[i].style.visibility = (state == "hide") ? 'hidden' : 'visible';
	}

	if (this.isFrame) {
		for (var i = 0; i < parent.frames.length; i++) {
			try {
				selects = parent.frames[i].window.document.getElementsByTagName("select");
				for (var j = 0; j < selects.length; j++) {
					selects[j].style.visibility = (state == "hide") ? 'hidden' : 'visible';
				}
			} catch(e) {}
		}
	}
};

ScreenshotViewer.prototype.pause = function(numberMillis)
{
	var now = new Date();
	var exitTime = now.getTime() + numberMillis;
	while (true) {
		now = new Date();
		if (now.getTime() > exitTime) { return; }
	}
};

if (window.addEventListener) {
	window.addEventListener("load", initScreenshotViewer, false);
} else if (window.attachEvent) {
	window.attachEvent("onload", initScreenshotViewer);
} else {
	window.onload = function() { initScreenshotViewer(); }
}

function initScreenshotViewer() { myScreenshotViewer = new ScreenshotViewer(); }