var SC_init_status = 0;
var SC_basepath = "js/showcase/";
//var SC_basepath = "";
var SC_frames_per_second = 80;
var SC_spinner;
var SC_imageloader=null;
var SC_loaders = [];
var SC_bg_opacity=null;
var SC_isIE=false; 
var SC_size_anim_duration = 1;
var SC_vertical_centering = true;

if (window.addEventListener) {
	window.addEventListener('load',SC_init,false);
} else {
	window.attachEvent('onload',SC_init,false);
}
//SC_startup();
/*function SC_startup () {
  	var body = document.getElementsByTagName('body').item(0);
	//var body = document.body;
	if (body==null) {
		var t=setTimeout("SC_startup()",100); 
	} else {
		//alert('init');
		SC_init();
	}
}*/

function SC_init() {
	if (SC_init_status==0) {
		SC_include(SC_basepath+"showcase_config.js");
		SC_include(SC_basepath+"animator.js");
		SC_addcss(SC_basepath+"showcase.css");
		SC_spinner = document.createElement('img');
		SC_spinner.id = "SC_spinner";
		SC_spinner.src=SC_basepath+"loader.gif";
		if (!SC_spinner.style.setProperty) SC_isIE = true;
		SC_init_status++;
	}
}
function SC_init2 () {
	var bg = SC_getBackGround();
	var win = SC_getWindow();
	var content = SC_getContent();
	var contentFrame = SC_getFrame();
	contentFrame.appendChild(SC_spinner);
	contentFrame.innerHTML+="";
	SC_init_status++;
}

function SC_showContent (contents, width, height, finishfunc) {
	if (SC_init_status<2) { return false; }
	var bg = SC_getBackGround();
	bg.style.display = "block";
	if (SC_bg_opacity==null) SC_bg_opacity = SC_getOpacity(bg);
	SC_startanim(bg, SC_setOpacity, 0, SC_bg_opacity, 0.4);
	
	var win = SC_getWindow();
	win.style.display = "block";
	SC_setOpacity(win, 100);
	
	var hoverHolder = document.getElementById('SC_hoverHolder');
	hoverHolder.style.display="none";
	
	var closebtn = document.getElementById('SC_closebtn');
	closebtn.style.display = "none";
	var content = SC_getContent();
	var contentFrame = SC_getFrame();
	contentFrame.style.display = "block";
	SC_removecontent();
	contentFrame.style.width = "0px";
	contentFrame.style.height = "0px";
	if (width==undefined || width==null) width=SC_WinWidth()*0.8;
	if (height==undefined || height==null) height=SC_WinHeight()*0.8;
	if (typeof(contents) == "string") {
		nc = document.createElement('div');
		nc.innerHTML = contents;
		contents = nc;
	} else {
		contents.style.width = width+"px";
      	contents.style.height = height+"px";
	}
	contents.style.position = "absolute";
	var nextBtn = document.getElementById('SC_nextbtn');
	var prevBtn = document.getElementById('SC_prevbtn');
	nextBtn.style.display = "none";
	prevBtn.style.display = "none";
	SC_spinner.style.display = "none";
	
	SC_startanim(contentFrame, "width", 0, width, SC_size_anim_duration, 0.5);
	SC_startanim(contentFrame, "height", 0, height, SC_size_anim_duration, 0.5, function () {
		content.appendChild(contents);
		if (SC_isIE==false) {
			SC_setOpacity(contents, 0);
			SC_startanim(contents, SC_setOpacity, 0, 100, 0.2, 0, finishfunc);
			closebtn.style.display = "block";
			SC_setOpacity(closebtn, 0);
			setTimeout(function () {
				SC_startanim(closebtn, SC_setOpacity, 0, 100, 0.5, 0.5);
			}, 500);
		} else {
			if (finishfunc!==null) finishfunc.call();
		}
	});
	if (SC_isIE) {
		closebtn.style.display = "block";
		SC_setOpacity(closebtn, 100);
	}
	//bg.addEventListener('click',SC_hide,false);
}

var SC_actArray;
var SC_currItem;
function SC_getPrevItem (curr) {
	if (SC_actArray==null) return null;
	var p = null;
	var l;
	for ( key in SC_actArray ) {
		if (curr==SC_actArray[key]) {
			p = l;
		}
		l = SC_actArray[key];
	}
	//if (p==null) p==curr;
	return p;
}
function SC_getNextItem (curr) {
	if (SC_actArray==null) return null;
	var n = null;
	var l = null;
	for ( key in SC_actArray ) {
		if (curr==SC_actArray[key]) {
			l = key;
		} else {
			if (n==null && l!=null) n = SC_actArray[key];
		}
	}
	//if (n==null) n==curr;
	return n;
}

function SC_showImage(fileurl, imagearray) {
	if (SC_init_status<2) return false;
	// determining chain pos
	SC_actArray = imagearray;
	SC_currItem = fileurl;
		
	var content = SC_getContent();
	var contentFrame = SC_getFrame();
	var win = SC_getWindow();
	
	//background appearing
	var bg = SC_getBackGround();
	bg.style.display = "block";
	if (SC_bg_opacity==null) SC_bg_opacity = SC_getOpacity(bg);
	if (win.style.display != "block") {
		SC_startanim(bg, SC_setOpacity, 0, SC_bg_opacity, 0.2);
	}
	var nextBtn = document.getElementById('SC_nextbtn');
	var prevBtn = document.getElementById('SC_prevbtn');
	nextBtn.style.display = "none";
	prevBtn.style.display = "none";
		
	var hoverHolder = document.getElementById('SC_hoverHolder');
	hoverHolder.style.display="block";
	//hiding close button
	var closebtn = document.getElementById('SC_closebtn');
	SC_setOpacity(closebtn, 0);
	closebtn.style.display = "none";
	
	// displaying loader
	//SC_removecontent();
	if (win.style.display != "block") {
		contentFrame.style.width = SC_spinner.width+"px";
		contentFrame.style.height = SC_spinner.height+"px";
		SC_spinner.style.position="relative";
		SC_spinner.style.top = "0px";
		SC_spinner.style.left = "0px";
	} else {
		SC_spinner.style.position="absolute";
		SC_spinner.style.top = (contentFrame.scrollHeight/2-SC_spinner.height/2)+"px";
		SC_spinner.style.left = (contentFrame.scrollHeight/2-SC_spinner.width/2)+"px";
	}
	SC_removecontent();
	//displaying loader
	SC_spinner.style.display = "block";
	SC_setOpacity(SC_spinner, 100);
	
	contentFrame.style.display = "block";
	
	//starting image load
	if (SC_imageloader==null) SC_imageloader = document.createElement('img');
	SC_imageloader.onload = SC_imageLoaded;
	SC_imageloader.src = fileurl;
	//if (win.style.display != "block") 
	SC_imageloader.style.position = "absolute";

	//displaying window
	win.style.display = "block";
	SC_setOpacity(win, 100);
	//alert(SC_imageloader.outerHTML);
}

function SC_imageLoaded () {
	var win = SC_getWindow();
	var closebtn = document.getElementById('SC_closebtn');
	var content = SC_getContent();
	var contentFrame = SC_getFrame();
	var loadedimage = SC_imageloader;
	SC_real_removecontent();
	//clearing loader
	SC_imageloader = null;
	//removing spinner
	SC_spinner.style.display="none";

	if (SC_isIE) SC_setOpacity(closebtn, 100);
	
	//calculating display size
	var sr = loadedimage.width/loadedimage.height;
	var wsr = SC_WinWidth()/SC_WinHeight();
	if (sr>=1 && wsr<=sr) {
		sw = Math.min(SC_WinWidth()*0.9, loadedimage.width);
		sh = loadedimage.height*sw/loadedimage.width;
	} else {
		sh = Math.min(SC_WinHeight()*0.9, loadedimage.height);
		sw = loadedimage.width*sh/loadedimage.height;		
	}
	//setting display size
	loadedimage.width=sw;
	loadedimage.height=sh;
	
	//animating appearance
	SC_startanim(contentFrame, "width", parseFloat(contentFrame.style.width.replace("px", "")), sw, SC_size_anim_duration);
	SC_startanim(contentFrame, "height", parseFloat(contentFrame.style.height.replace("px", "")), sh, SC_size_anim_duration, 0, function () {
		content.appendChild(loadedimage);
		SC_setOpacity(loadedimage, 0);
		SC_startanim(loadedimage, SC_setOpacity, 0, 100, 0.5);
		closebtn.style.display = "block";
		if (!SC_isIE) {	
			SC_startanim(closebtn, SC_setOpacity, 0, 100, 0.5, 0.3);
		}
		
		//display buttons if necessary, and start preloading
		var nextBtn = document.getElementById('SC_nextbtn');
		var prevBtn = document.getElementById('SC_prevbtn');
		if (SC_getNextItem(SC_currItem)!=null) {
			var nl = document.createElement('img');
			nl.src = SC_getNextItem(SC_currItem);
			SC_loaders.push(nl);
			nextBtn.style.display = "block";
		}
		if (SC_getPrevItem(SC_currItem)!=null) {
			var pl = document.createElement('img');
			pl.src = SC_getPrevItem(SC_currItem);
			SC_loaders.push(pl);
			prevBtn.style.display = "block";
		}

	});
}

function SC_prev() {
	if (SC_actArray!=null) {
		var p = SC_getPrevItem(SC_currItem);
		SC_showImage(p, SC_actArray);
	}
}
function SC_next() {
	if (SC_actArray!=null) {
		var n = SC_getNextItem(SC_currItem);
		//alert(SC_actArray[n]);
		SC_showImage(n, SC_actArray);
	}	
}

function SC_hide () {
	SC_real_removecontent();
  	var closebtn = document.getElementById('SC_closebtn');
  	SC_setOpacity(closebtn, 0);
	closebtn.style.display = "none";
	var bg = SC_getBackGround();
	SC_startanim(bg, SC_setOpacity, SC_bg_opacity, 0, 0.3, 0.1, function () {
		bg.style.display = "none";
	});
	var win = SC_getWindow();
	var content = SC_getContent();
	var contentFrame = SC_getFrame();
	SC_startanim(contentFrame, "width",  parseFloat(contentFrame.style.width.replace("px", "")), 0, 0.3, 0);
	SC_startanim(contentFrame, "height", parseFloat(contentFrame.style.height.replace("px", "")), 0, 0.3, 0, function () {
		win.style.display = "none";
	});
	//bg.removeEventListener('click',SC_hide,false);
}

function SC_removecontent () {
	var content = SC_getContent();
	var kids = content.childNodes;
	for (var j=0; j < kids.length; j++) {
	    if (kids[j].id!="SC_hoverHolder" && kids[j].id!="SC_spinner" && kids[j].id!="SC_closebtn") {
	    	if (SC_isIE) {
				content.removeChild(kids[j]);
			} else {
				SC_startanim(kids[j], SC_setOpacity, 100, 0, Math.max(0, SC_size_anim_duration-0.1), 0, function () {
					SC_real_removecontent();
				});
			}
	    }
	}
}
function SC_real_removecontent () {
	var content = SC_getContent();
	var kids = content.childNodes;
	for (var j=0; j < kids.length; j++) {
	    if (kids[j].id!="SC_hoverHolder" && kids[j].id!="SC_spinner" && kids[j].id!="SC_closebtn") {
	    	content.removeChild(kids[j]);
	    }
	}
}

function SC_getBackGround () {
	var bg = document.getElementById('SC_Background');
	if (bg==null) {
		var body = document.getElementsByTagName('body').item(0);
		//var body = document.body;
		bg = document.createElement('div');
		bg.id = "SC_Background";
		bg.className = "SC_Background";
		bg.style.display = "none";
		bg.style.position = "absolute";
		bg.style.top = "0px";
		bg.style.left = "0px";
		SC_setfullscreen(bg);
		//SC_keepfullscreen(bg);
		//SC_keepcentered(bg);
		body.appendChild(bg);
	}
	return bg;
}

function SC_getWindow() {
	var win = document.getElementById('SC_Frame');
	if (win==null) {
		var body = document.getElementsByTagName('body').item(0);
		//var body = document.body;
		win = document.createElement('div');
		win.id = "SC_Frame";
		win.className = "SC_Frame";	
		win.style.display = "none";
		//assemlbe frame
		var framewin = ""
			+ "<div id='SC_innerFrame' class='SC_innerFrame'>"
			+	"<div class='SC_Frame_content' id='SC_Frame_content'>"
			+		"<div class='SC_closebtn' id='SC_closebtn' onclick='javascript:SC_hide()'></div>"
			+ 		"<div id='SC_hoverHolder' class='SC_hoverHolder' >"
			+			"<div id='SC_pagerHolder' class='SC_pagerHolder' style='height:100%;width:100%;clear:both;'><a class='SC_prevbtn' id='SC_prevbtn' onclick='javascript:SC_prev()'></a><a class='SC_nextbtn' id='SC_nextbtn' onclick='javascript:SC_next()'></a><div style='clear:both'></div></div>"
			+		"</div>"
			+ 	"</div>"
			+ "</div>"
		  	;
		  	
		win.innerHTML = framewin;
		//SC_settocenter(win, true, false);
		setInterval(SC_setPositions, 20);
		//setTimeout(SC_setPositions, 20);
		//SC_keepcentered(win, true, false);
		body.appendChild(win);
	}
	return win;
}
function SC_setPositions () {
	var win = SC_getWindow();
	SC_settocenter(win, true, false);
}

function SC_getFrame () {
	SC_getWindow();
	return document.getElementById('SC_innerFrame');
}
function SC_getContent () {
	SC_getWindow();
	return document.getElementById('SC_Frame_content');
}

//animation basics
var SC_animprefs = new Array();
function SC_startanim (target, func, from, to, seconds, delay, endfunc) {
	var fps = SC_frames_per_second; 
	if (delay==undefined) delay = 0; 
	if (endfunc==undefined) endfunc = null;
	//if (SC_isIE) seconds = 0; 
	var anim_settings = new Array();
	var milliseconds = 1000/fps;
	//alert(new Date().getTime());
	anim_settings['starttime'] = new Date().getTime()+delay*1000;
	anim_settings['endtime'] = anim_settings['starttime']+seconds*1000;
	anim_settings['startvalue'] = from;
	anim_settings['endvalue'] = to;
	anim_settings['target'] = target;
	anim_settings['function'] = func;
	anim_settings['interval'] = milliseconds;
	anim_settings['onfinish'] = endfunc;
	var t=setTimeout("SC_procanim('"+SC_animprefs.length+"')",milliseconds);
	anim_settings['interval_id'] = t;
	SC_animprefs.push(anim_settings);
	SC_procanim(SC_animprefs.length-1, 0);
}
function SC_procanim (animid) {
	var anim_settings = SC_animprefs[animid];
	if (anim_settings==null) return; 
 	if (anim_settings['startvalue']==null) {
		if (typeof anim_settings['function'] == "function") {
			anim_settings['function'].call(this, anim_settings['target'], currstate);
		} else {
			anim_settings['target'].style.getProperty(anim_settings['function']);
		}		
	}
	var currenttime = new Date().getTime();
	var progressvalue = 1-(anim_settings['endtime']-currenttime)/(anim_settings['endtime']-anim_settings['starttime']);
	if (progressvalue<0) {
    var t=setTimeout("SC_procanim('"+animid+"')",anim_settings['interval']);
		return;
	}
	if (progressvalue>1) progressvalue = 1; 
	progressvalue = SC_easeOut(progressvalue); 
	//document.getElementById('s_name').value += progressvalue+"-";
	//progressvalue = progress;
	var modvalue = progressvalue*(anim_settings['endvalue']-anim_settings['startvalue']);
	var currstate = anim_settings['startvalue'] + modvalue;
	if (typeof anim_settings['function'] == "function") {
		anim_settings['function'].call(this, anim_settings['target'], currstate);
	} else {
		if (anim_settings['function']=="width" || 
			anim_settings['function']=="height" ||
			anim_settings['function']=="top" ||
			anim_settings['function']=="left") {
			currstate = currstate+"px";
		}
		if (!SC_isIE) {
			anim_settings['target'].style.setProperty(anim_settings['function'], currstate, "");
		} else {
			anim_settings['target'].style.setAttribute(anim_settings['function'], currstate, ""); 
		}
	}
	if (progressvalue==1) {
		if (anim_settings['onfinish']!=null) anim_settings['onfinish'].call();
	} else {
	    var t=setTimeout("SC_procanim('"+animid+"')",anim_settings['interval']);
	}
}
function SC_easeOut (state) {
	var a = 2;
	return 1 - Math.pow(1 - state, a*2);
}
function SC_easeIn (state) {
	var a = 2;
	return Math.pow(state, a*2);
}

function SC_setContent (target, content) {
	target.innerHTML = content;
}

//library

function SC_WinWidth () {
	if (self.innerHeight) {
		x = self.innerWidth;
    } else if (document.documentElement && document.documentElement.clientHeight) {
		x = document.documentElement.clientWidth;
    } else if (document.body) {
		x = document.body.clientWidth;
    }
	return x;
}
function SC_WinHeight () {
	var y = 0;
	if (self.innerHeight) {
		y = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		y = document.documentElement.clientHeight;
	} else if (document.body) {
		y = document.body.clientHeight;
	}
	return y;
}

function getDocHeight() {
    var D = document;
    return Math.max(
        Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
        Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
        Math.max(D.body.clientHeight, D.documentElement.clientHeight)
    );
}
function getDocWidth() {
    var D = document;
    return Math.max(
        Math.max(D.body.scrollWidth, D.documentElement.scrollWidth),
        Math.max(D.body.offsetWidth, D.documentElement.offsetWidth),
        Math.max(D.body.clientWidth, D.documentElement.clientWidth)
    );
}
function SC_setfullscreen (target) {
	var wh = getDocHeight();
	var ww = getDocWidth();
	target.style.width = ww+"px";
	target.style.height = wh+"px";
}
function SC_keepfullscreen (target) {
	SC_setfullscreen(target);
	setTimeout(function () {SC_keepfullscreen(target);}, 1/SC_frames_per_second);
}

function SC_settocenter (target, top, left) {
	var wh = SC_WinHeight();
	var ww = SC_WinWidth();
	var IE = document.all?true:false
	var ot = window.pageYOffset;
	if (IE) {
		ot = document.documentElement.scrollTop;
	}
	if (top==undefined || top) target.style.top = (ot+(wh-target.offsetHeight)/2)+"px";
	if (left==undefined || left) target.style.left = ((ww-target.offsetWidth)/2)+"px";
}
function SC_keepcentered (target, top, left) {
	SC_settocenter(target, top, left);
	setTimeout(function () {SC_keepcentered(target, top, left);}, 1/SC_frames_per_second);
}

function SC_getOpacity(target) {
	var ts;
	if (document.defaultView) ts = document.defaultView.getComputedStyle(target, null);
	else ts = target.currentStyle; 
	if (!isNaN(ts.opacity)) { 
		opacityVal = ts.opacity; 
	} else if (!isNaN(ts.MozOpacity)) { 
		opacityVal = ts.MozOpacity; 
	} 
	return opacityVal*100;
	//return target.style.opacity*100;
}
function SC_setOpacity(target, value) {
	target.style.opacity = value/100;
	target.style.filter = 'alpha(opacity=' + value + ')';
	target.style.MozOpacity = value/100;
}

function SC_include(filename)
{
	var body = document.getElementsByTagName('body').item(0);
	//var body = document.body;
	script = document.createElement('script');
	script.src = filename;
	script.type = 'text/javascript';
	body.appendChild(script)
}
function SC_addcss(filename)
{
	var body = document.getElementsByTagName('body').item(0);
	//var body = document.body;
	stylesheet = document.createElement('link');
	stylesheet.rel = "stylesheet";
	stylesheet.href = filename;
	stylesheet.type = 'text/css';
	
	body.appendChild(stylesheet)
}

