	/* 
Copyright Alexander Peev (.com) March 2009. All rights reserved.

	WARNING! No part of this script may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise (except for the sole purpose of client-side script execution for the webpages in the author's website(s) ) without previous permission by the author. 
*/

var browser = navigator.userAgent;
browser = browser.toLowerCase();
var is_opera = (  browser.indexOf("opera") != -1  );
var is_ie = (  ( browser.indexOf("msie") != -1 && !is_opera )  );
var current;
current = [];
var current2;
current2 = [];
var menus;
menus = [];
var expanded;
var response;
var size;
size = 0;
var controls;
controls = [];
var slides;
slides = [];
var loaded;
loaded = false;
var slidepaused;
var cache;
var slidepos;
var call_pause;
var call_update;
var pausebtn;
var mode;
mode = false;
pausebtn = false;
cache = undefined;
slidepaused = false;
slidepos = -1;
call_pause = false;
call_update = false;
if(window.sessionStorage !== undefined && window.sessionStorage !== null){
	cache = window.sessionStorage;
	try{
		if(cache.slideshow_paused !== undefined && cache.slideshow_paused == "1"){
			slidepaused = true;
			pausebtn = true;
			call_pause = true;
		}
		else{slidepaused = false;}
	}
	catch(e){
		cache = [];
		slidepaused = false;
	}
	if(cache.slideshow_position !== undefined){	
			if( !isFinite(cache.slideshow_position) && cache.slideshow_position === Infinity ){cache.slideshow_position = 0;}
			if(cache.slideshow_position < -1){cache.slideshow_position = -1;}
			slidepos = cache.slideshow_position;
			if(slidepos !== -1){call_update = true;}
	}
	else{slidepos = -1;}
}
else{
	slidepaused = false;
	slidepos = -1;
}
var pauseid;
pauseid = 0;

function createRequestObject(){
	var request_;
	var browser = navigator.appName;
	if(browser == "Microsoft Internet Explorer"){
		request_ = new ActiveXObject("Microsoft.XMLHTTP");
	}
	else{
		request_ = new XMLHttpRequest();
	}
	return request_;
}

var http = createRequestObject();

function parse(elem, dim){
	if(dim === undefined){dim = 0;}
	else{++dim;}
	var product;
	if(elem.indexOf("[d" + String(dim) + "]") == -1){return decodeURIComponent(elem);}
	product = elem.split("[d" + String(dim) + "]");
	var i;
	for(i = 0; i<product.length;++i){
		product[i] = parse(product[i], dim);
	}
	return product;
}

function preload(){
	if((document.images!== undefined) && document.images){
		var preloader;
		preloader = new Image();
		var idx;
		for(idx = 0; idx < slides.length;){
			preloader.src = slides[idx][1];
			++idx;
		}
	}
}

function handleInfo(){
	if(http.readyState == 4){
		var resp = http.responseText;
		response = resp;
		slides = parse(response);
		preload();
		loaded = true;
	}
}

function request(address){
	if(http===undefined){slides = [];loaded = true;return;}
	http.open('get', address);
	http.onreadystatechange = handleInfo;
	http.send(null);
}

function fade_in(element){
	if( (element === undefined || !element) && !current.length ){return false;}
	if(element !== undefined && element){
		element.style.display = "block";
		element.fading = "1";
		current.push(element);
		if(element.direction !== undefined){
			if(element.direction == "d"){
				element.style.backgroundPosition = "50% 30%";
			}
			else if(element.direction == "u"){
				element.style.backgroundPosition = "50% 70%";
			}
			else if(element.direction == "r"){
				element.style.backgroundPosition = "30% 50%";
			}
			else if(element.direction == "l"){
				element.style.backgroundPosition = "70% 50%";
			}
		}
		if(current.length > 1){return true;}
	}	
	var i=0;
	var e;
	for( i = 0 ; i < current.length ;  ){
		e = current[i];
		if(  (!is_ie && e.style.opacity!==undefined && (e.style.opacity >= 1.0)) || (is_ie && e.style.filter!==undefined && (parseInt(e.style.filter.substr(15), 10)  >= 100))  ){
			e.fading = "0";
			if(e.direction !== undefined){
				e.style.backgroundPosition = "center";
			}
			current.splice(i, 1);
			continue;
		}
		else{
			if(!is_ie){e.style.opacity= parseFloat(e.style.opacity) + 0.05;}
			else{if(e.style.filter.substr(15, 3)=="NaN"){e.style.filter =("alpha(opacity='100')");}else{e.style.filter=("alpha(opacity='" + String( parseInt(e.style.filter.substr(15), 10) + 5) + "')");}}
			
		}
		if(e.direction !== undefined){
			if(e.direction == "d"){
				e.style.backgroundPosition = ("50% " + String(parseInt(e.style.backgroundPosition.substr(4), 10) + 1) + "%");
			}
			else if(e.direction == "u"){
				e.style.backgroundPosition = ("50% " + String(parseInt(e.style.backgroundPosition.substr(4), 10) - 1) + "%");
			}
			else if(e.direction == "l"){
				e.style.backgroundPosition = (String(parseInt(e.style.backgroundPosition, 10) - 1) + "% 50%");
			}
			else if(e.direction == "r"){
				e.style.backgroundPosition = (String(parseInt(e.style.backgroundPosition, 10) + 1) + "% 50%");
			}
		}
		++i;
	}
	if(  (!is_ie && (e.style.opacity!==undefined) && (e.style.opacity >= 7.5)) || (is_ie && (e.style.filter!==undefined) && (parseInt(e.style.filter.substr(15), 10)  >= 75))  ){ setTimeout(function () {fade_in();}, 3);}
	else if(  (!is_ie && (e.style.opacity!==undefined) && (e.style.opacity >= 4.0)) || (is_ie && (e.style.filter!==undefined) && (parseInt(e.style.filter.substr(15), 10)  >= 40))  ){setTimeout(function () {fade_in();}, 2);}
	else{ setTimeout(function () {fade_in();}, 1);}
}
    
function fade_out(element){
	if( ((element === undefined) || !element) && !current2.length ){return false;}
	if(element !== undefined && element ){
		current2.push(element);
		element.style.display = "block";
		if(element.direction !== undefined){
			element.style.backgroundPosition = "50% 50%";
		}
		if(current2.length > 1){return true;}
	}
	var i=0;
	var e;
	for( i = 0 ; i < current2.length ;  ){
		e = current2[i];
		if( e.fading !== undefined && e.fading == "1"){
			current2.splice(i, 1);
			++i;
			continue;
		}
		if(  (!is_ie && e.style.opacity!==undefined && (e.style.opacity <= 0.05)) || (is_ie && e.style.filter!==undefined && ( (e.style.filter.substr(15, 3) == "NaN")||(parseInt(e.style.filter.substr(15), 10)  <= 5)))  ){
			if(!is_ie){e.style.opacity = "0";}
			else{e.style.filter = "alpha(opacity='0')";}
			e.style.display = "none";
			if(e.direction !== undefined){
				e.style.backgroundPosition = "center";
			}
			current2.splice(i, 1);
			continue;
		}
		else{
			if(!is_ie){e.style.opacity= parseFloat(e.style.opacity) - 0.05;}
			else{ if(e.style.filter.substr(15, 3)=="NaN"){e.style.filter =("alpha(opacity='0')");}else{e.style.filter=("alpha(opacity='" + String( parseInt(e.style.filter.substr(15), 10) - 5) + "')");} }
		}
		if(e.direction !== undefined){
			if(e.direction == "d"){
				e.style.backgroundPosition = ("50% " + String(parseInt(e.style.backgroundPosition.substr(4), 10) + 1) + "%");
			}
			else if(e.direction == "u"){
				e.style.backgroundPosition = ("50% " + String(parseInt(e.style.backgroundPosition.substr(4), 10) - 1) + "%");
			}
			else if(e.direction == "l"){
				e.style.backgroundPosition = (String(parseInt(e.style.backgroundPosition, 10) - 1) + "% 50%");
			}
			else if(e.direction == "r"){
				e.style.backgroundPosition = (String(parseInt(e.style.backgroundPosition, 10) + 1) + "% 50%");
			}
		}
		++i;
	}
	if(  (!is_ie && (e.style.opacity!==undefined) && (e.style.opacity >= 7.5)) || (is_ie && (e.style.filter!==undefined) && (parseInt(e.style.filter.substr(15), 10)  >= 75))  ){setTimeout(function () {fade_out();}, 3);}
	else if(  (!is_ie && (e.style.opacity!==undefined) && (e.style.opacity >= 4.0)) || (is_ie && (e.style.filter!==undefined) && (parseInt(e.style.filter.substr(15), 10)  >= 40))  ){setTimeout(function () {fade_out();}, 2);}
	else{setTimeout(function () {fade_out();}, 1);}
}
    
function expand(el){
	var element;
	element = el;
	var child;
	var i;
	for( i = 0 ; i < element.childNodes.length ; i++ ){
		child = element.childNodes[i];
		if((child.className === undefined) || (child.className != "drop-menu") && (child.className.indexOf("drop-menu")  == -1)){continue;}
		if(child.style.display != "block"){
			if(!is_ie){child.style.opacity = "0";}
			else{child.style.filter = "alpha(opacity='0')";}
		}
		child.style.display = "block";
		fade_in(child);
	}
}
    
function collapse(el){
	var element;
	element = el;
	var child;
	var i;
	for( i = 0 ; i < element.childNodes.length ; i++ ){
		child = element.childNodes[i];
		if((child.className === undefined) || (child.className != "drop-menu") && (child.className.indexOf("drop-menu")  == -1)){continue;}
		fade_out(child);
	}
}

function collapse_all(clck){
	var i;
	var j;
	var element;
	var child;
	for( j = 0 ; j < menus.length ; j++){
		element = menus[j];
		for( i = 0 ; i < element.childNodes.length ; i++ ){
			child = element.childNodes[i];
			if((child.className === undefined)||((child.className != "drop-menu")&&(child.className.indexOf("drop-menu")  == -1))){continue;}
			if( clck && ((child.className == "solid") || (child.className.indexOf("solid")  != -1))){continue;}
			fade_out(child);
		}
	}
}

function decide(el) {
	var element;
	element = el;
	var child;
	var i;
	for( i = 0 ; i < element.childNodes.length ; i++ ){
		child = element.childNodes[i];
		if((child.className === undefined) || (child.className != "drop-menu") && (child.className.indexOf("drop-menu")  == -1)){continue;}
		if(  ( (child.style.opacity!==undefined) && (child.style.opacity <= 0.05)) || (is_ie && (child.style.filter!==undefined) && (parseInt(child.style.filter.substr(15), 10)  <= 5)) ){
			if(child.style.display != "block"){
				if(!is_ie){child.style.opacity = "0";}
				else{child.style.filter = "alpha(opacity='0')";}
			}
			child.style.display = "block";
			fade_in(child);
		}
		else if((child.className != "solid") && (child.className.indexOf("solid")  == -1)){fade_out(child);}
	}
}

function slide_update(func){
	var i;
	var j=0;
	var element;
	if( (func !== undefined) && (func != "load") ){
		if( func == "first"){
			slidepos = 0;
			mode = (mode?false:true);
		}
		else if( func == "back"){
			--slidepos;
			if(slidepos < 0){slidepos = (slides.length - 1);}
			mode = (mode?false:true);
		}
		else if( func == "next"){
			++slidepos;
			if(slidepos >= slides.length){slidepos = 0;}
			mode = (mode?false:true);
		}
		else if( func == "last"){
			slidepos = (slides.length - 1);
			mode = (mode?false:true);
		}
		if(cache !== undefined){cache.slideshow_position = String(slidepos);}
	}
	for( i = 0 ; i < controls.length ; i++ ){
		element = controls[i];	
		if( element.func == "first"){
			if( slidepos === 0){
				if(!is_ie){element.style.opacity = "0.5";}
				else{element.style.filter = "alpha(opacity='50')";}
			}
			else{
				if(!is_ie){element.style.opacity = "1";}
				else{element.style.filter = "alpha(opacity='100')";}
			}
		}
		else if( element.func == "back"){
			if( slidepos === 0){
				if(!is_ie){element.style.opacity = "0.5";}
				else{element.style.filter = "alpha(opacity='50')";}
			}
			else{
				if(!is_ie){element.style.opacity = "1";}
				else{element.style.filter = "alpha(opacity='100')";}
			}
		}
		else if( element.func == "pause"){
		}
		else if( element.func == "next"){
			if( slidepos >= (slides.length-1)){
				if(!is_ie){element.style.opacity = "0.5";}
				else{element.style.filter = "alpha(opacity='50')";}
			}
			else{
				if(!is_ie){element.style.opacity = "1";}
				else{element.style.filter = "alpha(opacity='100')";}
			}
		}
		else if( element.func == "last"){
			if( slidepos >= (slides.length-1)){
				if(!is_ie){element.style.opacity = "0.5";}
				else{element.style.filter = "alpha(opacity='50')";}
			}
			else{
				if(!is_ie){element.style.opacity = "1";}
				else{element.style.filter = "alpha(opacity='100')";}
			}
		}
		else if( element.func == "link"){
			element.href = slides[slidepos][0];
			element.title = slides[slidepos][4];
		}
		else if( element.func == "show"){
			if(mode){
				if( element.fading !== undefined && element.fading == "1"){
					for( j = 0 ; j < current.length ;  ){
						if( element === current[j]){
							current.splice(j, 1);
							++j;
							continue;
						}
					}
					element.fading = "0";
					if(!is_ie){element.style.opacity = "1.0";}
					else{element.style.filter = "alpha(opacity='100')";}
					fade_out(element);
				}
				else{fade_out(element);}
			}
			else{
				element.style.backgroundImage = "none";
				element.style.backgroundImage = ("url(" + slides[slidepos][1] + ")");
				element.title = slides[slidepos][4];
				fade_in(element);
			}
		}
		else if( element.func == "fader"){
			if(mode){
				element.style.backgroundImage = "none";
				element.style.backgroundImage = ("url(" + slides[slidepos][1] + ")");
				element.title = slides[slidepos][4];
				fade_in(element);
			}
			else{
				if( element.fading !== undefined && element.fading == "1"){
					for( j = 0 ; j < current.length ;  ){
						if( element === current[j]){
							current.splice(j, 1);
							++j;
							continue;
						}
					}
					element.fading = "0";
					if(!is_ie){element.style.opacity = "1.0";}
					else{element.style.filter = "alpha(opacity='100')";}
					fade_out(element);
				}
				else{fade_out(element);}
			}
		}
		else if( element.func == "title"){
			element.innerHTML = slides[slidepos][2];
			element.title = slides[slidepos][4];
		}
		else if( element.func == "desc"){
			element.innerHTML = slides[slidepos][3];
			element.title = slides[slidepos][4];
		}
	}
}

function slide(el, pdr) {
	var element;
	element = el;
	var i;
	if(element.func === undefined){return;}
	var func;
		if(( element.func == "first") || ( element.func == "back") || ( element.func == "next") || ( element.func == "last")){
			func = element.func;
		}
		else if( element.func == "pause"){
			if(pdr !== undefined){
				if(pausebtn){return;}
				if(pdr){slidepaused = false;}
				else{slidepaused = true;}
			}
			if(slidepaused){
				pausebtn = false;
				slidepaused = false;
				if(!is_ie){element.style.opacity = "1";}
				else{element.style.filter = "alpha(opacity='100')";}
			}
			else{
				if(pdr === undefined){pausebtn = true;}
				 slidepaused = true;
				if(!is_ie){element.style.opacity = "0.5";}
				else{element.style.filter = "alpha(opacity='50')";}
			}
			if(cache !== undefined){
				if(slidepaused){cache.slideshow_paused = "1";}
				else{cache.slideshow_paused = "0";}
			}
			return;
		}
		else if(( element.func == "link") || ( element.func == "show") || ( element.func == "fader") || ( element.func == "title") || ( element.func == "desc")){
			if(!slidepaused){
				 slidepaused = true;
				if(!is_ie){pauseid.style.opacity = "0.5";}
				else{pauseid.style.filter = "alpha(opacity='50')";}
			}
			return;
		}
		else{return;}
	slide_update(func);
}

function slidekey(event){
	var ev;
	ev = event;
	if(!ev){
		ev = window.event; 
	}
	if(ev === undefined){return;}
	if(ev.keyCode === undefined){
		if(ev.which !== undefined){
			ev.keyCode = ev.which;
		}
		else if(ev.charCode !== undefined){
			ev.keyCode = ev.charCode;
		}
		else{
			ev.keyCode = false;
		}
	}
	if(ev.keyCode == 19){
		slide(pauseid);
	}
	else if(ev.shiftKey==1){
		if(ev.keyCode == 37){
			slide_update("first");
		}
		else if(ev.keyCode == 39){
			slide_update("last");
		}
	}
	else{
		if(ev.keyCode == 37){
			slide_update("back");
		}
		else if(ev.keyCode == 39){
			slide_update("next");
		}
	}
}

function slide_rotate(){
	setTimeout(function () {slide_rotate();}, 15000);
	if(loaded === false){return;}
	if(!slidepaused || call_update === true){
		if(call_update === false){++slidepos;}
		call_update = false;
		if( isNaN(slidepos) ){
			slidepos = parseInt(String(slidepos), 10);
			if( isNaN(slidepos) ){slidepos = 0;}
		}
		if(slidepos > slides.length || slidepos < 0){slidepos = 0;}
		if(slides[slidepos] === undefined || slides[slidepos][0] === undefined){slidepos = 0;}
		if(cache !== undefined){cache.slideshow_position = String(slidepos);}
		mode = (mode?false:true);
		slide_update("load");
	}
}

function slide_start(){
	request("/portfolio/slideshow/");
	setTimeout(function () {slide_rotate();}, 1000);
}

function getparent(el, depth) {
	var element;
	element = el;
	depth = Number(depth);
	if(depth < 1){return element.parentNode;}
	for(;depth > 0;depth--){
		element = element.parentNode;
	}
	return element;
}

function collect(element, depth){
	if(depth === undefined){depth = 0;}
	var ismenu;
	ismenu = false;
	if( (element.nodeType != 3) && (element.className !== undefined) ){
		if(  (element.className == "ignore") || (element.className.indexOf("ignore")  != -1)){return;}
		if( (element.className == "dropdown") || (element.className.indexOf("dropdown")  != -1)){menus.push(element);ismenu = true;depth = 1;}
		else if((element.className == "drop-menu") && (element.className.indexOf("drop-menu")  != -1)){depth = 0;}
		else if(element.className.indexOf("slide")  != -1){
			element.slideid = controls.length;
			if( element.className.indexOf("first")  != -1){element.func = "first";}
			else if( element.className.indexOf("back")  != -1){element.func = "back";}
			else if( element.className.indexOf("pause")  != -1){element.func = "pause";pauseid = element;
				if(call_pause === true && slidepaused === true){
					if(!is_ie){element.style.opacity = "0.5";}
					else{element.style.filter = "alpha(opacity='50')";}
				}
			}
			else if( element.className.indexOf("next")  != -1){element.func = "next";}
			else if( element.className.indexOf("last")  != -1){element.func = "last";}
			else if( element.className.indexOf("link")  != -1){element.func = "link";}
			else if( element.className.indexOf("fader")  != -1){
				element.func = "fader";
				element.direction = "l";
				if(!is_ie){element.style.opacity = "0.0";}
				else{element.style.filter = "alpha(opacity='0')";}
			}
			else if( element.className.indexOf("show")  != -1){element.func = "show";element.direction = "l";}
			else if( element.className.indexOf("title")  != -1){element.func = "title";}
			else if( element.className.indexOf("desc")  != -1){element.func = "desc";}
			controls.push(element);
		}
		else if( (element.className == "fontsize")||( element.className.indexOf("fontsize")  != -1)){
			element.onclick = function () { size_text(); return false; }; 
			element.onkeyup = function() {if(event.keyCode == 13){size_text();} return false; };
		}
		else if( (element.className == "printview")||( element.className.indexOf("printview")  != -1)){
			element.onclick = function () { printview(); return false; }; 
			element.onkeyup = function() {if(event.keyCode == 13){printview();} return false; };
		}
		if(element.className.indexOf("reveal")  != -1){
			element.style.display = "block";
			element.style.visibility = "visible";
		}
	}
	if(element.nodeType != 3){
		if((depth > 0) && (element.nodeName == "A" || element.nodeName == "INPUT" || element.nodeName == "TEXTAREA" || element.nodeName == "BUTTON")){
			element.depth = depth;
			element.onfocus = function () { expand(getparent(this, this.depth)); }; 
		}
		if(ismenu !== false){depth = 1;}
		else if(depth > 0){++depth;}
		else{depth = 0;}
		if((element.className !== undefined) && ((element.className == "repulsor") || (element.className.indexOf("repulsor") != -1))){
			element.onmouseover = function () {collapse_all(false); };
			element.onfocus = function () { collapse_all(false); }; 
		}
		var i;
		var child;
		for(i=0;i<element.childNodes.length ; i++){
			child = element.childNodes[i];
			collect(child, depth);
		}
	}
	return;
}
    
function init_all(){
	collect(document.body);
	var i;
	var menu;
	for(i = 0; i < menus.length; i++){
		menu = menus[i];
		menu.onclick = function () { decide(this); }; 
		menu.onmouseover = function () { expand(this); }; 
		menu.onfocus = function () { expand(this); }; 
		menu.onblur = function () { collapse(this); }; 
	}
	for(i = 0; i < controls.length; i++){
		menu = controls[i];
		if((menu.func !== undefined) && ((menu.func == "show")||(menu.func == "fader")||(menu.func == "title"))){
			menu.onmouseover = function () { slide(pauseid, true); }; 
			menu.onmouseout = function () { slide(pauseid, false); }; 
		}
		else if((menu.func !== undefined) && (menu.func == "link")){
			menu.onkeypress = function (event) { slidekey(event); }; 
		}
		menu.onclick = function () { slide(this); }; 
	}
	document.body.onclick = function () { collapse_all(true); }; 
	slide_start();
}
window.onload= function () { init_all(); }; 