j(function() {
	Portfolio.init();

	j('#lang-selector a').click(function(e) {
		var lang = j(this).attr('hreflang');
		var href = j('#project-list a.selected')[0].href.replace(/\/[a-z]{2}\//, '/' + lang + '/');
		location.href = href;
		e.preventDefault();
		e.stopPropagation();
		return false;
	});
});

j(function() {
	hm = new HistoryManager(function(hash, prev) {
		if (!hash && !prev) return;
		var id = parseInt(hash) || Portfolio.DEFAULT_PROJECT;
		Portfolio.update(id);
	}, 150, '/history.php', true);
});

ZoomViewer = {
	_source : null,

	_getInitialStyle : function() {
		var sourceOffset = j(this._source).offset();
		var sourceWidth = j(this._source).innerWidth();
		var sourceHeight = j(this._source).innerHeight();

		return {
			left :  sourceOffset.left + 'px',
			top : sourceOffset.top + 'px',
			width : sourceWidth + 'px',
			height : sourceHeight + 'px',
			opacity : 0
		};
	},

	init : function(selector) {
		var self = this;

		j(selector).click(function(e) {
			self._source = this;
			if (j(this).hasClass('nozoom')) return false;
			j('#thumbnail-loading').show();
			var img = j(this).find('img');
			j('#zoom-viewer').css({
				visibility : 'hidden'
			});
			j('#zoom-viewer-img').attr('src', '').attr({
				src : this.href,
				title : img.attr('title')
			});
			return false;
		});
		j('#zoom-viewer-overlay').css('opacity', 0.5).click(function() {
			self.hide();
		});
		j('#zoom-viewer-close').click(function() {
			self.hide();
		});
	},
	hide : function() {
		var me = this;

		j('#zoom-viewer-overlay').fadeOut(300);
		j('#zoom-viewer-close').hide();
		j('#zoom-viewer').animate(me._getInitialStyle(), 700, 'easeInQuint', function() {
			j(this).hide();
		});
	},
	imageLoaded : function() {
		var me = this;

		var resize = function() {

		};
		j('#thumbnail-loading').hide();
		var vpw = j(window).width();
		var vph = j(window).height();
		
		j('#zoom-viewer').show();
		j('#zoom-viewer-img').css({
			width : 'auto',
			height : 'auto'
		});
		var w = j('#zoom-viewer-img').innerWidth();
		var h = j('#zoom-viewer-img').innerHeight();
		if (h > vph) {
			var ratio = w/h;
			var diff = h - vph;
			h -= diff;
			w -= diff * ratio;
		}
		j('#zoom-viewer-img').css({
			width : '100%',
			height : '100%'
		});
		var top = vph/2 - h/2;
		var left = vpw/2 - w/2;
		
		var vpscroll =  document.viewport.getScrollOffsets();
		top += vpscroll.top;
		left += vpscroll.left;

		if (top < 15) top = 15;
		if (left < 1) left = 1;
		j('#zoom-viewer-overlay').fadeIn(300);
		j('#zoom-viewer').css('visibility', 'visible').css(me._getInitialStyle()).animate({
			left : left,
			top : top,
			width : w,
			height : h,
			opacity : 1
		}, 700, function() {
			j('#zoom-viewer-close').show();
		});
	}
};

Portfolio = {
	curID : 0,
	projects : [],
	_projects : {},
	leftThumbPos : 0,
	currentThumb : 0,
	slider : null,
	thumbOffset : 0,
	
	_updateProject : function(data) {
		if (!data.pj) return;
		j('#project-loading').hide();
		this.curID = this.projects.indexOf(parseInt(data.pj.pj_id));
		hm.setTitle(data.pj.pj_title);
		j('#project-title').html(data.pj.pj_name);
		j('#project-description').html(data.pj.pj_description.replace(/(\r\n|\n)/g, '<br/>'));
		j('#project-date').html(data.pj.fdate);
		j('#project-thumb-main div').html('');
		if (data.images.length) {
			j('#project-thumb-main').show();
			j('#project-thumb-pages-main').show();
			var pages = '', img, path, klass;
			for (var i = 0; i < data.images.length; i++) {
				img = data.images[i];
				if (img.pji_path) {
					path = data.domain + '/images/projects/screenshots/' + img.pji_path;
					klass = '';
				}
				else {
					path = data.domain + '/images/projects/thumbnails/' + img.pji_thumb;
					klass = ' class="nozoom"';
				}
				j('<a href="' + path + '"' + klass + '><img src="' + data.domain + '/images/projects/thumbnails/' + img.pji_thumb + '" alt="" title="' + (img.pji_title || '') + '" /></a>').appendTo('#project-thumb-main div');
				pages += '<a href="javascript:;" onclick="Portfolio.thumb(' + i + ')">' + (i+1) + '</a> ';
			}
			this.initThumbs();
			j('#project-thumb-pages').html(pages);
			j('#project-thumb-pages a').eq(0).addClass('selected');
		}
		else {
			j('#project-thumb-main').hide();
			j('#project-thumb-pages-main').hide();
		}
		j('#project-types a').hide();
		if (data.types.include('DES')) j('#project-type-des').show();
		if (data.types.include('DEV')) j('#project-type-dev').show();
		if (data.types.include('MKT')) j('#project-type-mkt').show();
		j('#project-list li a').removeClass('selected');
		j('#project-' + data.pj.pj_id + ' a').addClass('selected');

		this.thumb(this.selectedImg);
		j.scrollTo('#content', 1000);
	},
	init : function() {
		this.thumbWidth = j('#project-thumb-main').innerWidth();
		this.thumbHeight = j('#project-thumb-main').innerHeight();
		this.slider = j('#project-thumb-main div').get(0);
		this.thumbOffset = j('#project-thumb-main').offset();
		this.initThumbs();
	},
	initThumbs : function() {
		this.currentThumb = 0;
		this.leftThumbPos = 0;
		j('#project-thumb-main div').css('width', this.thumbWidth * j('#project-thumb-main div a').size() + 20);
		j(this.slider).css('left', 0);
		ZoomViewer.init('#project-thumb-main div a');
	},
	next : function() {
		this.curID++;
		if (this.curID >= this.projects.length) this.curID = 0;
		this.view(this.projects[this.curID]);
	},
	prev : function() {
		this.curID--;
		if (this.curID < 0) this.curID = this.projects.length-1;
		this.view(this.projects[this.curID]);
	},
	/**
	 * Update project by id
	 */
	update : function(id) {
		if (!this.projects.include(id)) return;
		j('#project-loading').show();
		if (this._projects[id]) this._updateProject(this._projects[id]);
		else {
			j.getJSON('/' + [LANG, 'portfolio', 'update', id].join('/'), function(data) {
				this._projects[id] = data;
				this._updateProject(data);
			}.bind(this));
		}
	},
	/**
	 * Update thumb
	 */
	thumb : function(index) {
		if (this.currentThumb == index) return;
		this.leftThumbPos += (this.currentThumb - index) * this.thumbWidth;
		j(this.slider).animate({left : this.leftThumbPos + 'px'}, 1000, 'easeInOutBack');
		this.currentThumb = index;
		j('#project-thumb-pages a').removeClass('selected').eq(index).addClass('selected');
		this.selectedImg = 0;
	},
	view : function(id, img) {
		this.selectedImg = img || 0;
		if (hm.currentHash != id) location.hash = id;
		else this.thumb(img);
	}
};