	function ExpressPortfolio()
	{
		this.init();
	}

	ExpressPortfolio.prototype.guide = null;
	ExpressPortfolio.prototype.main_box = null;
	ExpressPortfolio.prototype.data = null;
	ExpressPortfolio.prototype.myname = 'EP';
	ExpressPortfolio.prototype.order = {'left': 0, 'center': 0, 'right': 0,};
	ExpressPortfolio.prototype.data_max_id = 0;
	ExpressPortfolio.prototype.steps = 10;
	ExpressPortfolio.prototype.lock = false;

	ExpressPortfolio.prototype.init = function()
	{
		this.fillGuide();
	}

	ExpressPortfolio.prototype.openWindow = function()
	{
		var s, w, h, l, t;

		w = 960;
		h = 700;

		s = getStageSize();

		l = parseInt((s[0] - w) / 2);
		t = parseInt((s[1] - h) / 2);

		if (l < 1) {
			l = 1;
		}
		if (t < 1) {
			t = 1;
		}

		if (document.documentElement) {
			l = parseInt(document.documentElement.scrollLeft + l);
			t = parseInt(document.documentElement.scrollTop + t);
		} else {
			l = parseInt(document.body.scrollLeft + l);
			t = parseInt(document.body.scrollTop + t);
		}

		$('express_portfolio_box').style.left = l + 'px';
		$('express_portfolio_box').style.top = t + 'px';
	}

	ExpressPortfolio.prototype.closeWindow = function()
	{
		$('express_portfolio_box').style.top = '-1000px';
	}

	ExpressPortfolio.prototype.build = function()
	{
		var html, i, g, tmp;
		html = '';

		html += '' +
					'<div id="nav_bar" style="position: absolute; z-index: 999; top: 33px; left: 0px; width: 100%; height: 30px; bor-der-top: solid 1px #ffffff; bor-der-bottom: solid 1px #ffffff;" onm-ouseover="$(\'nav_bar_controls\').style.visibility=\'visible\';" onm-ouseout="$(\'nav_bar_controls\').style.visibility=\'hidden\';">' +
						'<div id="nav_bar_controls" style="text-align: center; font-family: Tahoma; bac-kground-color: #005da3; padding-top: 7px; height: 23px; font-size: 14px; font-weight: bold; color: #7dbae9; vis-ibility: hidden;">' +
							'<img src="/pics/express_portfolio/arrow_left.gif" class="hand" width="48" height="17" alt="" border="" align="absmiddle" onclick="' + this.myname + '.move(\'left\');" />' +
							'&nbsp; РАБОТА <span style="color: #ffffff;">№<span id="current_job">0</span></span> ИЗ <span id="total_job">0</span> &nbsp;' +
							'<img src="/pics/express_portfolio/arrow_right.gif" class="hand" width="48" height="17" alt="" border="" align="absmiddle" onclick="' + this.myname + '.move(\'right\');" />' +
						'</div>' +
					'</div>' +
					'<div id="close_button" style="position: absolute; z-index: 999; top: 10px; left: 900px;">' +
						'<a href="#" onclick="' + this.myname+ '.closeWindow(); return false;" style="font-family: Tahoma; font-size: 10px; color: #ffffff;">закрыть</a>' +
					'</div>';

		for (i in this.data) {
			tmp = this.data[i];
			this.data_max_id = i;
			switch (i) {
				case '0':
					g = this.guide.left[10];
					this.order.left = i;
					html += '' +
								'<div id="trans_' + i + '" onclick="' + this.myname+ '.showMainPartfolio(\'' + tmp.urlname + '\', ' + i + ');" style="position: absolute; top: ' + g.t + 'px; left: ' + g.l + 'px; width: ' + g.w + 'px; height: ' + g.h + 'px; background-image: url(/pics/express_portfolio/tbg_' + g.b + '.png); z-index: ' + (g.z + 1) + ';"></div>' +
								'<img id="image_' + i + '" src="' + tmp[1] + '" width="' + g.w + '" height="' + g.h + '" style="position: absolute; top: ' + g.t + 'px; left: ' + g.l + 'px; z-index: ' + g.z + ';" alt="" border="0" />' +
								'<img id="shadow_' + i + '" src="/pics/express_portfolio/shadow.png" width="' + g.sw + '" height="' + g.sh + '" style="position: absolute; top: ' + g.st + 'px; left: ' + g.sl + 'px; z-index: ' + (g.z - 1) + ';" alt="" border="0" />';
					break;
				case '1':
					this.order.center = i;
					g = this.guide.right[10];
					html += '' +
								'<div id="trans_' + i + '" onclick="' + this.myname+ '.showMainPartfolio(\'' + tmp.urlname + '\', ' + i + ');" style="position: absolute; top: ' + g.t + 'px; left: ' + g.l + 'px; width: ' + g.w + 'px; height: ' + g.h + 'px; background-image: url(/pics/express_portfolio/tbg_' + g.b + '.png); z-index: ' + (g.z + 1) + ';"></div>' +
								'<img id="image_' + i + '" src="' + tmp[2] + '" width="' + g.w + '" height="' + g.h + '" style="position: absolute; top: ' + g.t + 'px; left: ' + g.l + 'px; z-index: ' + g.z + ';" alt="" border="0" />' +
								'<img id="shadow_' + i + '" src="/pics/express_portfolio/shadow.png" width="' + g.sw + '" height="' + g.sh + '" style="position: absolute; top: ' + g.st + 'px; left: ' + g.sl + 'px; z-index: ' + (g.z - 1) + ';" alt="" border="0" />';
					break;
				case '2':
					this.order.right = i;
					g = this.guide.right[1];
					html += '' +
								'<div id="trans_' + i + '" onclick="' + this.myname+ '.showMainPartfolio(\'' + tmp.urlname + '\', ' + i + ');" style="position: absolute; top: ' + g.t + 'px; left: ' + g.l + 'px; width: ' + g.w + 'px; height: ' + g.h + 'px; background-image: url(/pics/express_portfolio/tbg_' + g.b + '.png); z-index: ' + (g.z + 1) + ';"></div>' +
								'<img id="image_' + i + '" src="' + tmp[1] + '" width="' + g.w + '" height="' + g.h + '" style="position: absolute; top: ' + g.t + 'px; left: ' + g.l + 'px; z-index: ' + g.z + ';" alt="" border="0" />' +
								'<img id="shadow_' + i + '" src="/pics/express_portfolio/shadow.png" width="' + g.sw + '" height="' + g.sh + '" style="position: absolute; top: ' + g.st + 'px; left: ' + g.sl + 'px; z-index: ' + (g.z - 1) + ';" alt="" border="0" />';
					break;
			}
		}

		if (i < 2) {
			alert('Для работы экспресс портфолио необходимо выбрать хотябы 3 элемента из портфолио');
			return;
		}
		$(this.main_box).innerHTML = html;
		$('total_job').innerHTML = parseInt(this.data_max_id) + 1;
		$('current_job').innerHTML = parseInt(this.order.center) + 1;
	}

	ExpressPortfolio.prototype.move = function(direction)
	{
		if (this.lock) {
			return;
		} else {
			this.lock = true;
		}
		switch (direction) {
			case 'right':
				this.printStep(direction, 10);
				break;
			case 'left':
				this.printStep(direction, 1);
				break;
			default:
				alert('Invalid direction');
				break;
		}
	}

	ExpressPortfolio.prototype.printStep = function(direction, n)
	{
		var g, tmp, i;

		switch (direction) {
			case 'right':
				tmp = 'left';
				break;
			case 'left':
				tmp = 'right';
				break;
			default:
				alert('Invalid direction');
				break;
		}

		g = this.guide[tmp][n];

		$('image_' + this.order[tmp]).style.top = g.t + 'px';
		$('image_' + this.order[tmp]).style.left = g.l + 'px';
		$('image_' + this.order[tmp]).width = g.w;
		$('image_' + this.order[tmp]).height = g.h;
		$('image_' + this.order[tmp]).style.zIndex = g.z;

		$('shadow_' + this.order[tmp]).style.top = g.st + 'px';
		$('shadow_' + this.order[tmp]).style.left = g.sl + 'px';
		$('shadow_' + this.order[tmp]).width = g.sw;
		$('shadow_' + this.order[tmp]).height = g.sh;
		$('shadow_' + this.order[tmp]).style.zIndex = g.z - 1;

		$('trans_' + this.order[tmp]).style.top = g.t + 'px';
		$('trans_' + this.order[tmp]).style.left = g.l + 'px';
		$('trans_' + this.order[tmp]).style.width = g.w + 'px';
		$('trans_' + this.order[tmp]).style.height = g.h + 'px';
		$('trans_' + this.order[tmp]).style.zIndex = g.z + 1;
		$('trans_' + this.order[tmp]).style.backgroundImage = 'url(/pics/express_portfolio/tbg_' + g.b + '.png)';

		g = this.guide[direction][n];

		$('image_' + this.order.center).style.top = g.t + 'px';
		$('image_' + this.order.center).style.left = g.l + 'px';
		$('image_' + this.order.center).width = g.w;
		$('image_' + this.order.center).height = g.h;
		$('image_' + this.order.center).style.zIndex = g.z;

		$('shadow_' + this.order.center).style.top = g.st + 'px';
		$('shadow_' + this.order.center).style.left = g.sl + 'px';
		$('shadow_' + this.order.center).width = g.sw;
		$('shadow_' + this.order.center).height = g.sh;
		$('shadow_' + this.order.center).style.zIndex = g.z - 1;

		$('trans_' + this.order.center).style.top = g.t + 'px';
		$('trans_' + this.order.center).style.left = g.l + 'px';
		$('trans_' + this.order.center).style.width = g.w + 'px';
		$('trans_' + this.order.center).style.height = g.h + 'px';
		$('trans_' + this.order.center).style.zIndex = g.z + 1;
		$('trans_' + this.order.center).style.backgroundImage = 'url(/pics/express_portfolio/tbg_' + g.b + '.png)';

		if (direction == 'right') {
			switch (n) {
				case 9:
					$('image_' + this.order.center).src = this.data[this.order.center][1];

					i = parseInt(this.order.left) - 1;
					if (!(this.data[i])) {
						i = this.data_max_id;
					}
					tmp = this.data[i];
					g = this.guide.left[10];
					$(this.main_box).innerHTML += '' +
									'<div id="trans_' + i + '" onclick="' + this.myname+ '.showMainPartfolio(\'' + tmp.urlname + '\', ' + i + ');" style="position: absolute; top: ' + g.t + 'px; left: ' + g.l + 'px; width: ' + g.w + 'px; height: ' + g.h + 'px; background-image: url(/pics/express_portfolio/tbg_' + g.b + '.png); z-index: ' + (g.z + 1) + ';"></div>' +
									'<img id="image_' + i + '" src="' + tmp[1] + '" width="' + g.w + '" height="' + g.h + '" style="position: absolute; top: ' + g.t + 'px; left: ' + g.l + 'px; z-index: ' + g.z + ';" alt="" border="0" />' +
									'<img id="shadow_' + i + '" src="/pics/express_portfolio/shadow.png" width="' + g.sw + '" height="' + g.sh + '" style="position: absolute; top: ' + g.st + 'px; left: ' + g.sl + 'px; z-index: ' + (g.z - 1) + ';" alt="" border="0" />';
					break;
				case 1:
					$('image_' + this.order.left).src = this.data[this.order.left][2];

					$(this.main_box).removeChild($('image_' + this.order.right));
					$(this.main_box).removeChild($('trans_' + this.order.right));
					$(this.main_box).removeChild($('shadow_' + this.order.right));

					i = parseInt(this.order.left) - 1;
					if (!(this.data[i])) {
						i = this.data_max_id;
					}
					this.order.right = this.order.center;
					this.order.center = this.order.left;
					this.order.left = i;

					$('current_job').innerHTML = parseInt(this.order.center) + 1;

					this.lock = false;
					break;
			}
			if (n > 1) {
				setTimeout(this.myname + '.printStep("' + direction + '", ' + (n - 1) + ');', 50);
			}
		} else {
			switch (n) {
				case 2:
					$('image_' + this.order.center).src = this.data[this.order.center][1];

					i = parseInt(this.order.right) + 1;
					if (!(this.data[i])) {
						i = 0;
					}
					tmp = this.data[i];
					g = this.guide.right[1];
					$(this.main_box).innerHTML += '' +
									'<div id="trans_' + i + '" onclick="' + this.myname+ '.showMainPartfolio(\'' + tmp.urlname + '\', ' + i + ');" style="position: absolute; top: ' + g.t + 'px; left: ' + g.l + 'px; width: ' + g.w + 'px; height: ' + g.h + 'px; background-image: url(/pics/express_portfolio/tbg_' + g.b + '.png); z-index: ' + (g.z + 1) + ';"></div>' +
									'<img id="image_' + i + '" src="' + tmp[1] + '" width="' + g.w + '" height="' + g.h + '" style="position: absolute; top: ' + g.t + 'px; left: ' + g.l + 'px; z-index: ' + g.z + ';" alt="" border="0" />' +
									'<img id="shadow_' + i + '" src="/pics/express_portfolio/shadow.png" width="' + g.sw + '" height="' + g.sh + '" style="position: absolute; top: ' + g.st + 'px; left: ' + g.sl + 'px; z-index: ' + (g.z - 1) + ';" alt="" border="0" />';
					break;
				case 10:
					$('image_' + this.order.right).src = this.data[this.order.right][2];

					$(this.main_box).removeChild($('image_' + this.order.left));
					$(this.main_box).removeChild($('trans_' + this.order.left));
					$(this.main_box).removeChild($('shadow_' + this.order.left));

					i = parseInt(this.order.right) + 1;
					if (!(this.data[i])) {
						i = 0;
					}
					this.order.left = this.order.center;
					this.order.center = this.order.right;
					this.order.right = i;

					$('current_job').innerHTML = parseInt(this.order.center) + 1;

					this.lock = false;
					break;
			}
			if (n < 10) {
				setTimeout(this.myname + '.printStep("' + direction + '", ' + (n + 1) + ');', 50);
			}
		}
	}

	ExpressPortfolio.prototype.showMainPartfolio = function(url, i)
	{
		if (this.order.center == i) {
			document.location.href = '/portfolio/' + url + '/';
		}
		else if (this.order.left == i) {
			this.move('left');
		}
		else if (this.order.right == i) {
			this.move('right');
		}
	}

	ExpressPortfolio.prototype.tracert = function()
	{
		var html, i, g;
		html = '';

		for (i in this.guide.right) {
			g = this.guide.right[i];

			html += '<div style="position: absolute; top: ' + g.t + 'px; left: ' + g.l + 'px; width: ' + g.w + 'px; height: ' + g.h + 'px; border: solid 1px #ff9999;" title="' + i + '" onmouseover="this.style.border = \'solid 1px #ffffff\'; this.innerHTML = \'w=\' + this.style.width + \'; h=\' + this.style.height + \'; l=\' + this.style.left + \'; t=\' + this.style.top + \';\';" onmouseout="this.style.border = \'solid 1px #ff9999\'; this.innerHTML = \'\';"></div>';
		}

		for (i in this.guide.left) {
			g = this.guide.left[i];

			html += '<div style="position: absolute; top: ' + g.t + 'px; left: ' + g.l + 'px; width: ' + g.w + 'px; height: ' + g.h + 'px; border: solid 1px #99ff99;" title="' + i + '" onmouseover="this.style.border = \'solid 1px #ffffff\'; this.innerHTML = \'w=\' + this.style.width + \'; h=\' + this.style.height + \'; l=\' + this.style.left + \'; t=\' + this.style.top + \';\';" onmouseout="this.style.border = \'solid 1px #99ff99\'; this.innerHTML = \'\';"></div>';
		}

		$(this.main_box).innerHTML = html;
		document.write('<div style="float: left;"><pre>' + var_dump(this.guide) + '</pre></div>');
	}

	ExpressPortfolio.prototype.fillGuide = function()
	{
		var way, i;

		this.guide = {'right': {}, 'left': {}};

		for (way in this.guide) {
			for (i = 1; i <= this.steps; i++) {
				this.guide[way][i] = this.getGuideBit(way, i);
			}
		}
	}

	ExpressPortfolio.prototype.getGuideBit = function(way, step)
	{
		var small_width, small_height, small_top, big_width, big_height, center_left, center_top, left_left, right_left, tmp, dw, w, h, l, t, b, z;

		small_width = 271;
		small_height = 325;
		small_top = 170;
		big_width = 422;
		big_height = 507;
		center_left = 270;
		center_top = 90;
		left_left = 142;
		right_left = 557;

		var shadow_small_width = 450;
		var shadow_big_width = 700;
		var shadow_small_height = 64;
		var shadow_big_height = 100;

		var sw = Math.round((shadow_big_width - shadow_small_width) / (this.steps - 1) * (step - 1));
		var sh = Math.round((shadow_big_height - shadow_small_height) / (this.steps - 1) * (step - 1));
		var sl = 0;
		var st = 0;

		dw = Math.round((big_width - small_width) / (this.steps - 1));
		w = Math.round((big_width - small_width) / (this.steps - 1) * (step - 1));
		h = Math.round((big_height - small_height) / (this.steps - 1) * (step - 1));
		tmp = Math.floor((this.steps - 1) / 2);

		if (way == 'right') {
			w = small_width + w;
			h = small_height + h;

			sw = shadow_small_width + sw;
			sh = shadow_small_height + sh;

			l = right_left - (dw * (step - 1)) - (Math.round((Math.round((right_left - center_left) / (this.steps - 1)) - dw) / tmp) * this.allSumm(step - 2));

			t = small_top + Math.round((center_top - small_top) / (this.steps - 1) * (step - 1));

			b = 7 * (this.steps - step);
			z = 10 * step;
		} else {

			sw = shadow_big_width - sw;
			sh = shadow_big_height - sh;

			w = big_width - w;
			h = big_height - h;

			l = left_left + Math.round((center_left - left_left) / (this.steps - 1) * (this.steps - step));

			t = center_top - Math.round((center_top - small_top) / (this.steps - 1) * (step - 1));

			b = 7 * (step - 1);
			z = 10 * (this.steps - step + 1);
		}
		sl = l - parseInt((sw - w) / 2);
		st = h + t - 11;

		return {'w': w, 'h': h, 'l': l, 't': t, 'b': b, 'z': z, 'sl': sl, 'st': st, 'sw': sw, 'sh': sh};
	}

	ExpressPortfolio.prototype.allSumm = function(n)
	{
		var ret = 0;
		for (i = 1; i <= n; i++) {
			ret += i;
		}
		return ret;
	}
