var casesArr = [];
var CASESURL = "portfolio/";
var SLIDEW = -940;
var SLIDESHOWH = 565;
var req;
var nCurCaseID = 0;
var nCurSlideID = 0;
var actCaseObj;
var oldCaseObj;
var extraSlide;
var nSlidesInCurCase = 0;
var actBallLi;
var pfOpen = false;
var windowPrevPos = 0;

function initPF() {

	if (!$('cases')) {
		return;
	}
	
	var caseObj0 = new caseObj("test", "test 2", "test 3", "luxima_mini.gif", "Luxima", 8);
	var caseObj1 = new caseObj("test", "test 2", "test 3", "delfina_mini.gif", "Delfina", 12);
	var caseObj2 = new caseObj("test", "test 2", "test 3", "junior_mini.gif", "junior-angin", 4);
	var caseObj3 = new caseObj("test", "test 2", "test 3", "szop_mini.gif", "ShopAtSocial", 2);
	var caseObj4 = new caseObj("test", "test 2", "test 3", "zott_mini.gif", "Zott", 6);
	var caseObj5 = new caseObj("test", "test 2", "test 3", "machina_mini.gif", "Machina Edukacyjna", 4);
	var caseObj6 = new caseObj("test", "test 2", "test 3", "elixine_mini.gif", "Elixine", 4);

	casesArr = [ caseObj0, caseObj1, caseObj2, caseObj3, caseObj4, caseObj5, caseObj6 ];

	initCaseMenu();
	initBallNavi();
	initBackToMenuBtn();
	initPrevNextClick();
	initHiddenBtns();
	initCloseBtn();
	initKB();
	checkDeepLink();
}

function initCaseMenu() {
	var caseMenu = $('case-menu');

	var n = casesArr.length;

	for ( var i = 0; i < n; i++) {

		var o = casesArr[i];

		var div = new Element('div', {
			'class' : 'case'
		});

		var link = new Element('a', {
			id : i,
			href : '#',
			events : {
				click : function(e) {
					e.stop();
					thumbClick(this.id); // kw
				},
				mouseover : function() {

				}
			}

		});

		var img = new Element('img', {
			src : CASESURL + '/' + o.thumbImg
		});

		var span = new Element('span', {
			'class' : 'info',
			html : '<strong>' + o.client + '</strong><em>' + o.caseName
					+ '</em>'
		});

		img.inject(link);
		span.inject(link);

		link.inject(div);
		div.inject(caseMenu);

	}

}

function backHomeFromPortfolio() {
	var strip = $('strip-portfolio');

	var parent = $('work');
	var pageIndicators = parent.getElements('.li-portfolios li');
	var pageIndicator = $('li-portfolio-home');
	
	var e = $('li-portfolio-home');
	var val = 0;
	var href = '#selected-cases';

	pageIndicators.each(function(item, i) {
		item.removeClass('selected');
	});

	pageIndicator.addClass('selected');

	strip.tween('margin-left', val);
	
}

function nextPortfolio(id) {
	// alert(id);

	var strip = $('strip-portfolio');

	var parent = $('work');
	var pageIndicators = parent.getElements('.li-portfolios li');
	var pageIndicator = $('li-portfolio-'+id);
	
	var e = $('li-portfolio-home');
	var val = -(id + 2) * 960;
	var href = '#selected-cases';//e.get('href');

	pageIndicators.each(function(item, i) {
		item.removeClass('selected');
	});

	pageIndicator.addClass('selected');

	strip.tween('margin-left', val);
	
}

function thumbClick(id){
	var strip = $('strip-portfolio');

	var parent = $('work');
	var pageIndicators = parent.getElements('.li-portfolios li');
	var pageIndicator = $('li-portfolio-'+id);
	
	var e = $(id);
	var val = -(parseInt(id) + 2) * 960;

	var href = '#portfolio-'+id;//e.get('href');

	pageIndicators.each(function(item, i) {
		item.removeClass('selected');
	});

	pageIndicator.addClass('selected');

	strip.tween('margin-left', val);

	var el = $('work'); 
	var off = -102;
	if (el) {
		 new Fx.Scroll(window).start(0, el.getPosition().y + off);
	}
}

function initBackToMenuBtn() {
	$('pf-back-to-menu').addEvent('click', function(e) {
		e.stop();
		switchMenuToSlideShow(false);
	});
}

function initBallNavi() {
	var bNavi = $('pf-ball-navi');
	var n = casesArr.length;

	var ul = new Element('ul');

	for ( var i = 0; i < n; i++) {
		var li = new Element('li');
		var link = createBallNaviLink(i);
		link.inject(li);
		li.inject(ul);
	}
	ul.inject(bNavi);
}

function initKB() {
	document.onkeyup = keyUp;
}

function gup(name){
	
	  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	  var regexS = "[\\?&]"+name+"=([^&#]*)";
	  var regex = new RegExp(regexS);
	  var results = regex.exec(window.location.href);
	  if( results == null )
	    return "";
	  else
	    return results[1];	
	
}

function checkDeepLink(){
	var workParam = gup('case');
	if(workParam != ""){
		casesArr.each(function(obj, index) {
			if (obj.deeplink == workParam) {
				thumbClick(index);
			}
		});
		
		
	}	
}

function initPrevNextClick() {
	
	var next = $('pf-btnNext').addEvent('click', function(e) {
		e.stop();
		hanleNextPrevClick("next");
	});

	var prev = $('pf-btnPrev').addEvent('click', function(e) {
		e.stop();
		hanleNextPrevClick("prev");
	});
	new MooSwipe($('slides'), {
		tolerance: 50, 
		preventDefaults: false,
		onSwipeLeft: function() {hanleNextPrevClick("next");},
		onSwipeRight: function() {hanleNextPrevClick("prev");}
	});
	
}

function initHiddenBtns(){
	
	$('pf-hidden-prev-btn').addEvent('click', function(e) {
		e.stop();
		hanleNextPrevClick("prev");
	});
	
	$('pf-hidden-next-btn').addEvent('click', function(e) {
		e.stop();
		hanleNextPrevClick("next");
	});
}

function initCloseBtn() {
	$('pf-close-btn').addEvent('click', function(e) {
		e.stop();
		switchMenuToSlideShow(false);
	});
}

function setWindowPrevPos() {
	windowPrevPos = window.getScroll().y;
}

function keyUp(e) {
	if (pfOpen) {
		var code = e.charCode ? e.charCode : e.keyCode
		if (code == 39) {
			hanleNextPrevClick("next");
		}
		if (code == 37) {
			hanleNextPrevClick("prev");
		}
		if (code == 27) {
			switchMenuToSlideShow(false);
		}
	}
}

function createBallNaviLink(i) {
	var link = new Element('a', {
		id : i,
		href : '#',
		events : {
			click : function(e) {
				e.stop();
				setActCaseID(this.id);
				setActSlide(0);
				startLoadingSlideContent(false);
				updateBallNavi('case');
			},
			mouseover : function() {

			}
		}
	});
	return link;
}

function updateBallNavi(s) {
	if (s == 'case') {
		var liElems = $('pf-ball-navi').getElements('li');
		var links = liElems.getElements('a');

		links.each(function(item, index) {
			if (index == nCurCaseID) {
				item.addClass('act');
			} else {
				item.set('class', '');
			}
		});

	}
	updatePfStatus();
}

function updatePfStatus() {
	var statusTxt = $('pf-status');
	var a = nCurSlideID + 1;
	statusTxt
			.set('html', '<p><span>' + actCaseObj.client + '</span> '
					+ actCaseObj.caseName + ' ' + a + '/' + actCaseObj.nSlides
					+ '</p>');
}

function setActCaseID(n) {
	nCurCaseID = n;
	oldCaseObj = actCaseObj;
	actCaseObj = casesArr[n];
	nSlidesInCurCase = actCaseObj.nSlides;
}

function setActSlide(n) {
	nCurSlideID = n;
}

function mainMenuItemClick() {
	switchMenuToSlideShow(true);
}

function switchMenuToSlideShow(b) {
	var pages = $('work').getElement('.pages');

	var caseSlideElems = $('case-slide-elems');
	var caseMenu = $('case-menu');
	var slides = $('slides');

	if (b) {
		var showCon = new Fx.Tween(caseSlideElems, {
			duration : 500,
			delay : 500,
			onComplete : function() {
				slides.setStyle('display', 'block');
				animIn(slides);
				startLoadingSlideContent(false);
				showPrevNextBtns(true);
				enableHiddenBtns(true);
				showCloseBtn(true);
				showBallNavi(true);
				showBackToMenu(true);
				showPfStatus(true);

			}
		}).start('height', SLIDESHOWH);

		var hideCaseMenu = new Fx.Tween(caseMenu, {
			duration : 500,
			delay : 500,
			onComplete : function() {
				caseMenu.setStyle('display', 'none');
			}
		}).start('opacity', 0);

		var hidePages = new Fx.Tween(pages, {
			duration : 1000,
			onComplete : function() {

			}
		}).start('height', 270);

	} else {

		showPrevNextBtns(false);
		enableHiddenBtns(false);
		showCloseBtn(false);
		showBallNavi(false);
		showBackToMenu(false);
		showPfStatus(false);
		setPFOpen(false);

		scrollWindowToPlaceBeforeSlideshow();

		var hideSlides = new Fx.Tween(slides, {
			duration : 500,
			onComplete : function() {
				slides.setStyle('display', 'none');
				slides.empty();
			}
		}).start('opacity', 0);

		var hideCon = new Fx.Tween(caseSlideElems, {
			duration : 500,
			onComplete : function() {
				slides.setStyle('display', 'none');
				caseMenu.setStyle('display', 'block');
				caseMenu.fade('in');
				slides.empty();
			}
		}).start('height', 0);

		var pagesHeight = 630;
		if ($('top').hasClass('mobile-loaded')) {
			pagesHeight = 380;
		}
		var showPages = new Fx.Tween(pages, {
			duration : 500,
			onComplete : function() {

			}
		}).start('height', pagesHeight);

	}
}

function scrollWindowToCases() {
	var winH = window.getSize().y;
	var targetY = $('selected-cases').getPosition().y + 230;
	var toY;
	var offSetY;

	if (winH > SLIDESHOWH) {
		offSetY = (winH - SLIDESHOWH) * 0.5;
		toY = targetY - offSetY + 30;
	} else {
		toY = targetY;
	}

	var scrollFx = new Fx.Scroll(window, {
		duration : 500,
		link : 'cancel',
		wheelStops : false,
		offset : {
			'x' : 0,
			'y' : 0
		},
		transition : Fx.Transitions.Quad.easeInOut
	});
	scrollFx.start(0, toY);
}

function scrollWindowToPlaceBeforeSlideshow() {
	var scrollFx = new Fx.Scroll(window, {
		duration : 1000,
		link : 'cancel',
		wheelStops : false,
		offset : {
			'x' : 0,
			'y' : 0
		},
		transition : Fx.Transitions.Quad.easeInOut
	});
	scrollFx.start(0, windowPrevPos);
}

function animIn(el) {
	el.set('opacity', 0);
	el.fade('in');
}

function showPrevNextBtns(b) {
	if (b) {
		handleBtns();
		$('pf-btnNext').fade('in');
		$('pf-btnPrev').fade('in');
	} else {
		$('pf-btnNext').fade('out');
		$('pf-btnPrev').fade('out');
	}
}

function enableHiddenBtns(b){
	if(b){
		$('pf-hidden-prev-btn').setStyle('display','block');
		$('pf-hidden-next-btn').setStyle('display','block');
	}else{
		$('pf-hidden-prev-btn').setStyle('display','none');
		$('pf-hidden-next-btn').setStyle('display','none');
	}
}

function showBallNavi(b) {
	var el = $('pf-ball-navi');
	if (b) {
		el.setStyle('display', 'block');
		el.fade('in');
	} else {
		el.fade('out');
	}
}

function showBackToMenu(b) {
	var el = $('pf-back-to-menu');
	if (b) {
		el.setStyle('display', 'block');
		el.fade('in');
	} else {
		el.fade('out');
	}
}

function showPfStatus(b) {
	var el = $('pf-status');
	if (b) {
		el.setStyle('display', 'block');
		el.fade('in');
	} else {
		el.fade('out');
	}
}

function showCloseBtn(b) {
	var el = $('pf-close-btn');
	if (b) {
		el.setStyle('display', 'block');
		el.fade('in');
	} else {
		el.fade('out');
	}
}

function startLoadingSlideContent(b) {
	var slides = $('slides');
	var bNext;

	if (b) {
		var allSlides = slides.getElements('.slide');
		var newClass;
		var n = allSlides.length;

		if (nCurSlideID > 0) {
			bNext = false;
			extraSlide = allSlides[0];

			for ( var i = 0; i < n; i++) {
				if (i != 0) {
					allSlides[i].dispose();
				}
			}

			newClassID = nCurSlideID + 1
			newClass = 'slide' + newClassID;
			extraSlide.removeClass('slide0');
			extraSlide.addClass(newClass);

			var toX = newClassID * SLIDEW;
			slides.setStyle('margin-left', toX);

		} else {

			bNext = true;
			var last = n - 1;
			extraSlide = allSlides[last];

			for ( var i = 0; i < n; i++) {
				if (i != last) {
					allSlides[i].dispose();
				}
			}

			extraSlide.set('class', '');
			extraSlide.addClass('slide');
			extraSlide.addClass('slide0');

			var toX = 0;
			slides.setStyle('margin-left', toX);
		}
	}

	var URL = CASESURL + actCaseObj.client + '/' + actCaseObj.caseID
			+ '/content.html';
	if (req) {
		if (req.isRunning()) {
			req.cancel();
		}
	}

	req = new Request.HTML( {
		url : URL,
		onSuccess : function(html) {
			if (b) {
				slides.adopt(html);
				if (bNext) {
					setClassesToSlides();
				}
				animSlideChangeAndDeleteExtraSlide(bNext);
			} else {
				slides.setStyle('margin-left', toX);
				animIn(slides);
				slides.set('html', '');
				slides.adopt(html);
			}
			findBigImgLinks();
			setPFOpen(true);

		},
		onFailure : function() {

		}
	});
	req.send();

}

function setClassesToSlides() {
	var slides = $('slides');
	var allSlides = slides.getElements('.slide');

	var n = allSlides.length;
	for ( var i = 0; i < n; i++) {
		var slide = allSlides[i];
		slide.set('class', '');
		slide.addClass('slide');
		slide.addClass('slide' + i);
	}

}

function hanleNextPrevClick(s) {
	var max = nSlidesInCurCase;
	var newIndex;
	var curIndex = nCurSlideID;

	if (s == 'next') {
		newIndex = curIndex + 1;
	} else {
		newIndex = curIndex - 1;
	}

	if (newIndex < 0) {
		changeCase('prev');

	} else if (newIndex >= max) {
		changeCase('next');

	} else {
		animSlide(newIndex);
	}
}

function animSlide(n) {
	setActSlide(n);
	var toX = n * SLIDEW;
	
	$('slides').tween('margin-left', toX);
	
	updateBallNavi('slide');
}

function changeCase(s) {
	var max = casesArr.length;
	var newIndex = 0;
	var curIndex = Number(nCurCaseID);

	if (s == 'next') {
		newIndex = curIndex + 1;
		if (newIndex >= max) {
			setActCaseID(0);
			setActSlide(0);
			startLoadingSlideContent(true);
		} else {
			setActCaseID(newIndex);
			setActSlide(0);
			startLoadingSlideContent(true);
		}
	} else {
		newIndex = curIndex - 1;
		if (newIndex < 0) {
			setActCaseID(max - 1);
			setActSlide(nSlidesInCurCase - 1);
			startLoadingSlideContent(true);
		} else {
			setActCaseID(newIndex);
			setActSlide(nSlidesInCurCase - 1);
			startLoadingSlideContent(true);
		}
	}

	updateBallNavi('case');
}

function animSlideChangeAndDeleteExtraSlide(b) {
	if (b) {
		toX = SLIDEW;
	} else {
		toX = nCurSlideID * SLIDEW;
	}
	var slides = $('slides')
	var anim = new Fx.Tween($('slides'), {
		duration : 500,
		onComplete : function() {
			extraSlide.dispose();
			if (b) {
				setClassesToSlides();
				slides.setStyle('margin-left', 0);
			}
		}
	}).start('margin-left', toX);
}

function findBigImgLinks() {
	var stvIpadLink = $('stv-ipad-link-slide3');

	if (stvIpadLink) {
		stvIpadLink.addEvent('click', function(e) {
			e.stop();
			Slimbox.open("");
		});
	}
}

function setPFOpen(b) {
	pfOpen = b;
}

function handleBtns(){
	if ($('top').hasClass('mobile-loaded')) {
		return;
	}
	W = Math.round((window.getSize().x-960)*0.5);
	lPos = -1*W + 45;
	$('pf-btnPrev').setStyle('left', lPos);
	$('pf-btnNext').setStyle('right', lPos);
	
	$('pf-hidden-prev-btn').setStyles({
		width:W,
		left:-1*W
	})
	
	$('pf-hidden-next-btn').setStyles({
		width:W,
		right:-1*W
	})
	
}

function caseObj(client, caseName, caseID, thumbImg, deeplink, nSlides) {
	this.client = client;
	this.caseName = caseName;
	this.caseID = caseID;
	this.thumbImg = thumbImg;
	this.deeplink = deeplink;
	this.nSlides = nSlides;
}

window.addEvent('domready', function() {
	if ($('top').hasClass('mobile-loaded')) {
		SLIDESHOWH = 398;
	}
	initPF();
});

window.addEvent('resize',function(){
	handleBtns();
});
	


