/* (c) 2008-2009, Nikiforov Vladimir aka Volod */

//полезный линк
//http://www.webreference.com/programming/javascript/mk/column2/

//фон картинки и иже с ними
var foto_background = '';
var foto_version = 0;
var variant_num = 0;
var tmp_result = '';

var cropping_mode = false;
var now_moving = false;
var frame_drawn = false;
var frame_mode = '';//l r t b(ottom) m(ove) etc
var crop = {'l':0, 't':0, 'r':0, 'b':0};
var start_point = {'l':0, 't':0, 'r':0, 'b':0};

var frameBorderWidth = 10;

function debug(s)
{
	var e = $('#debugdiv');
	if (e) e.html(s);
}

function getMouseCoord(event)
{
	var ev = event || window.event;
	
	if (ev.pageX || ev.pageY)
		return {'x' : ev.pageX, 'y' : ev.pageY};
	else
		return {
			'x' : ev.clientX +
				(document.documentElement.scrollLeft || document.body.scrollLeft) -
				0,//document.body.clientLeft,
			'y' : ev.clientY +
				(document.documentElement.scrollTop || document.body.scrollTop) -
				0//document.body.clientTop
		};
}

function onFrameMouseMove(event)
{
	if ((!cropping_mode) || (!now_moving) || (crop.l == 0)) return;
	var ev = getMouseCoord(event);
	
	var cr = document.getElementById('cropper');
	var frst = document.getElementById('frame').style;

	if (frame_drawn)
	{		
		dx = ev.x - start_point.x;
		dy = ev.y - start_point.y;
		debug(frame_mode + '-mouse down: '+ev.x + ' ' + ev.y + ' crop: ' + crop.l + ', ' + crop.t+ ' x ' + crop.r + ', ' + crop.b);
		
		if (frame_mode == 'm')
		{
			if (crop.l + dx > parseInt(cr.style.left))
				crop.l += dx;
			if (crop.r + dx < parseInt(cr.style.left) + parseInt(cr.style.width))
				crop.r += dx;
			if (crop.t + dy > parseInt(cr.style.top))
				crop.t += dy;
			if (crop.b + dy < parseInt(cr.style.top) + parseInt(cr.style.height))
				crop.b += dy;
		}
		if (frame_mode == 'l' && crop.l + dx > parseInt(cr.style.left))
			crop.l += dx;
		if (frame_mode == 'r' && crop.r + dx < parseInt(cr.style.left) + parseInt(cr.style.width))
			crop.r += dx;
		if (frame_mode == 't' && crop.t + dy > parseInt(cr.style.top))
			crop.t += dy;
		if (frame_mode == 'b' && crop.b + dy < parseInt(cr.style.top) + parseInt(cr.style.height))
			crop.b += dy;
		start_point.x = ev.x;
		start_point.y = ev.y;
	}
	else
	{
		crop.r = ev.x;
		crop.b = ev.y;
	}
	drawFrame();
}

function onFrameMouseDown(event)
{
	if (!cropping_mode) return;
	var ev = getMouseCoord(event);
	debug('mouse down: '+ev.x + ' ' + ev.y);
	now_moving = true;
	if (frame_drawn)
	{
		start_point.x = ev.x;
		start_point.y = ev.y;
		frame_mode = '';
		if (ev.x > crop.l + frameBorderWidth && ev.x < crop.r && ev.y > crop.t + frameBorderWidth && ev.y < crop.b)
			frame_mode = 'm';
		
		if (ev.x > crop.l && ev.x < crop.l + frameBorderWidth && ev.y > crop.t + frameBorderWidth && ev.y < crop.b)
			frame_mode = 'l';
		
		if (ev.x > crop.r && ev.x < crop.r + frameBorderWidth && ev.y > crop.t + frameBorderWidth && ev.y < crop.b)
			frame_mode = 'r';

		if (ev.x > crop.l + frameBorderWidth && ev.x < crop.r && ev.y > crop.t && ev.y < crop.t + frameBorderWidth)
			frame_mode = 't';
		
		if (ev.x > crop.l + frameBorderWidth && ev.x < crop.r && ev.y > crop.b && ev.y < crop.b + frameBorderWidth)
			frame_mode = 'b';
			
		debug(frame_mode + '-mouse down: '+ev.x + ' ' + ev.y + ' crop: ' + crop.l + ', ' + crop.t+ ' x ' + crop.r + ', ' + crop.b);
		drawFrame();
	}
	else
	{
		crop.l = ev.x;
		crop.t = ev.y;
	}
}

function onFrameMouseUp(event)
{
	var ev = getMouseCoord(event);
	debug('mouse down: '+ev.x + ' ' + ev.y);
	
	if (!cropping_mode) return;
	now_moving = false;
	if (!frame_drawn)
		frame_drawn = true;
	
	if (crop.r < crop.l){var a = crop.r; crop.r = crop.l; crop.l = a;}	
	if (crop.b < crop.t){var a = crop.b; crop.b = crop.t; crop.t = a;}
}

function drawFrame()
{
	if (Math.abs(crop.r - crop.l) < 10 || Math.abs(crop.b - crop.t) < 10)
		return;

	debug('crop: ' + crop.l + ', ' + crop.t+ ' x ' + crop.r + ', ' + crop.b);
	var c = document.getElementById('frame');
	c.style.display = 'block';
	c.style.borderWidth = frameBorderWidth + 'px';
	frst = c.style;
	frst.borderColor = (frame_mode == 'm') ? '#9F9':'#F99';
	if (frame_mode == 'l') frst.borderLeftColor = '#9F9';
	if (frame_mode == 'r') frst.borderRightColor = '#9F9';
	if (frame_mode == 't') frst.borderTopColor = '#9F9';
	if (frame_mode == 'b') frst.borderBottomColor = '#9F9';

	frst.left = ((crop.l < crop.r) ? crop.l : crop.r) + 'px';
	frst.top = ((crop.t < crop.b) ? crop.t : crop.b) + 'px';
	frst.width = (Math.abs(crop.r - crop.l) - frameBorderWidth) + 'px';
	frst.height = (Math.abs(crop.b - crop.t) - frameBorderWidth) + 'px';

	var cr = document.getElementById('cropper');
	var c = document.getElementById('framet');
	c.style.display = 'block';	
	with (c.style)
	{
		left = cr.style.left;
		top = cr.style.top;
		width = cr.style.width;
		height = (Math.min(crop.t, crop.b) - parseInt(cr.style.top)) + 'px';
	}

	var c = document.getElementById('frameb');
	c.style.display = 'block';	
	with (c.style)
	{
		left = cr.style.left;
		top = Math.max(crop.t, crop.b) + 'px';
		width = cr.style.width;		
		height = (parseInt(cr.style.height) - Math.max(crop.t, crop.b) + parseInt(cr.style.top)) + 'px';
	}

	var c = document.getElementById('framel');
	c.style.display = 'block';	
	with (c.style)
	{
		left = cr.style.left;
		top = Math.min(crop.t, crop.b) + 'px';
		width = (Math.min(crop.l, crop.r) - parseInt(cr.style.left)) + 'px';
		height = Math.abs(crop.t - crop.b) + 'px';
	}

	var c = document.getElementById('framer');
	c.style.display = 'block';	
	with (c.style)
	{
		left = Math.max(crop.l, crop.r) + 'px';
		top = Math.min(crop.t, crop.b) + 'px';
		width = (parseInt(cr.style.width) - Math.max(crop.l, crop.r) + parseInt(cr.style.left)) + 'px';
		height = Math.abs(crop.t - crop.b) + 'px';
	}
}

function showCropper()
{	
	if (variant_num != 0)
	{
		alert("Кадрирование предназначено только для основного варианта фотографии");
		return;
	}
	var c = document.getElementById('cropper');
	if (!c) return;//если не на странице с фоткой!

//открываем до получения координат div mainfoto, т.к. при открытии dropframelink все двигается вниз
	$('#cropbutton').attr('src', '/images/crop-grey.gif');
	$('#dropframelink').css('display','block');
	
	c.style.display = 'block';	
	var ib = getBounds(document.getElementById('mainfoto'));
	with (c.style)
	{
		left = ib.left + 'px';
		top = ib.top + 'px';
		width = ib.width + 'px';
		height = ib.height + 'px';
	}	
	crop = {'l':0, 't':0, 'r':0, 'b':0};
	cropping_mode = true;
	frame_drawn = false;
	frame_mode = '';
}

function hideCropper()
{
	cropping_mode = false;
	
	$('#cropper').hide();
	$('#frame').hide();
	$('#framet').hide();
	$('#frameb').hide();
	$('#framel').hide();
	$('#framer').hide();
	$('#cropbutton').attr('src', '/images/crop-black.gif');
	$('#dropframelink').hide();
}

function toggleCropper()
{
	cropping_mode = !cropping_mode;
	(cropping_mode) ? showCropper() : hideCropper();
}

function showFrame(l,t,r,b)
{
	showCropper();
	frame_drawn = true;
	var cr = document.getElementById('cropper');
	if (!cr) return;//если не на странице с фоткой!
	var dx = parseInt(cr.style.left);
	crop.l = l + dx;
	crop.r = r + dx;
	var dy = parseInt(cr.style.top);
	crop.t = t + dy;
	crop.b = b + dy;
	window.scrollTo(0,0);
	debug('crop: ' + crop.l + ', ' + crop.t+ ' x ' + crop.r + ', ' + crop.b);
	drawFrame();
}

function dropFrameIntoComment()
{
	if (crop.l == crop.r || crop.t == crop.b)
	{
		alert('Чтобы выделить участок изображения,\nкликните мышкой и потащите её немного :)');
		return;
	}
	var cf = document.getElementById('CommentForm');
	if (!cf)
	{
		alert('Некуда вставить вариант.\nОтсутствует форма ввода комментария.');
		return;
	}
	
	var c = document.getElementById('CommentForm').comment;	
	var cr = document.getElementById('cropper');
	var dx = parseInt(cr.style.left);
	var l = crop.l - dx;
	var r = crop.r - dx;
	var dy = parseInt(cr.style.top);
	var t = crop.t - dy;
	var b = crop.b - dy;
	if (c.value != '') c.value += ' ';
	c.value += '[crop:'+l+','+t+','+r+','+b+']';
	toggleCropper();
}

function variantPrevNext(dir)
{
	if (dir == 1)
	{//вперед
		if (variant_num == photo_variants.length-1){return;}
		variant_num++;		
	}
	else
	{//назад
		if (variant_num == 0) { return;}
		variant_num--;		
	}
	changeVariant(variant_num);
}

function changeVariant(v)
{
	hideCropper();
	e = document.getElementById('mainfoto');
	variant_num = v;
	id = photo_variants[variant_num].id;
	v = photo_variants[variant_num].v;
	foto_version = v;
	if (v > 0)
	{
		id += 'v' + v;
	}
	e.src = '/gallery/images/pr/' + id + '.jpg';
	e.style.width = photo_variants[variant_num].w + 'px';
	e.style.height = photo_variants[variant_num].h + 'px';

	$('#link_img_prev_variant').attr('title', (variant_num).toString() + ' / ' +photo_variants.length);
	$('#link_img_next_variant').attr('title', (variant_num+2).toString() + ' / ' +photo_variants.length);

	if (variant_num == 0)
	{
		$('#link_img_prev_variant').attr('src','/images/buttons/greenleft_disabled.gif').attr('title', '');
	}
	else
	{
		$('#link_img_prev_variant').attr('src','/images/buttons/greenleft.gif')
	}
	if (variant_num == photo_variants.length-1)
	{
		$('#link_img_next_variant').attr('src','/images/buttons/greenright_disabled.gif').attr('title', '');
	}
	else
	{
		$('#link_img_next_variant').attr('src','/images/buttons/greenright.gif')
	}	
}

function toggleVariantForm()
{
	$('#variantform').toggle();
}

function vote_callback(data)
{
	if (data != 'OK')
	{
		alert(data);
		return;
	}
	$('#votebox1').toggle();
	$('#votebox2').toggle();
}

function vote(v, id, uid)
{//v=0 - undo; v=-1 -> against; v=1 for	
	if (uid <=0)
		alert('Представьтесь, пожалуйста!\n\nФорма авторизации - в правом верхнем углу окна.\n\nЕсли Вы еще не зарегистрированы, там же Вы найдете кнопку "регистрация".');
	else
		$.get('/php.php', {file: 'gallery_photo', method: 'vote', id: id, v: v}, vote_callback);
}

function toggle(n, f)
{	
	e = document.getElementById(n);
	with (e.style)
	{
		if (f != '')
		{
			display = f;
		}
		else
		{
			if (display == 'block')
				display = 'none';
			else
				display = 'block';
		}
	}
}


/*
http://groups.google.com/group/javascript-russian/web/%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D0%BE-%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%8B.%20%D1%83%D0%B7%D0%BD%D0%B0%D1%82%D1%8C%20%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D1%8B%20%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%20%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%BE%D0%B9%20%D0%B5%D0%B3%D0%BE%20%D0%BD%D0%B0%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80
<B>Получение размеров картинки и веса файла на локальном диске</B> (только IE)<br>

<script>d=document;g=function(X){return d.getElementById(X)}
function f(t){(iS=g('imgSend')).src='file:///'+t.value;
 g('wxHSend').value='---';
 setTimeout("g('wxHSend').value=''+iS.offsetWidth+'x'+iS.offsetHeight;\
   g('fileSize').value=iS.fileSize+' bytes'",999);
}
</script>
<input id=fileSend type=file onChange=f(this)><br>
<input id=wxHSend><br>
<input id=fileSize><br>
<img id=imgSend src=snow.gif
  alt="сюда будут загружаться картинки с локального диска" align=absmiddle> - <--<br>
*/

function check_add_photo_form(f)
{
	err = '';
	if (f.image_file.value == '')
		err += 'Не выбран файл!'
	if (err != '')
	{
		alert(err);
		return false;
	}
	return true;
}

function close_modify_photo_form()
{
	$('#ModifyPhotoFormPlace').hide();
	$('#pictureinfo').show();
	$('#adminrow').show();
}

function modifyPhoto(id)
{
	$('#pictureinfo').hide();
	$('#adminrow').hide();
	$('#ModifyPhotoFormPlace')
		.html(LOAD_INDICATOR)
		.show()
		.load('/gallery/ajax/getmodifyphotoform.php',{id: id});
}

function add_photo()
{
	var f = document.getElementById('AddPhotoFormPlace');
		
	var fl = document.getElementById('AddPhotoLink');

	if (f.style.display == 'block')
	{
		f.style.display = 'none';
		fl.innerHTML = saved_fl_innerHTML;
		return;
	}
	
	saved_fl_innerHTML = fl.innerHTML;
	fl.innerHTML = "<a href='javascript:add_photo()'>скрыть форму</a>";

	$('#AddPhotoFormPlace')
		.show()
		.html(LOAD_INDICATOR)
		.load('/gallery/ajax/getaddphotoform.php');
}

function gallery_full_screen_popup(id, bg)
{
	url = '/gallery/full_screen_image.php?id='+id;
	
	if (foto_background == '')
		foto_background = bg;
	
	url += '&background=' + foto_background;
	
	if (foto_version > 0)
		url += '&v=' + foto_version;
	window.open(url, "_blank", "width="+(screen.availWidth)+",height="+(screen.availHeight)+",status=no,resizable=no,directories=no,scrollbars=yes,fullscreen=yes,toolbar=no,menubar=no, left=0,top=0");
}

function bg(color)//вообще-то это change_background(), но там 16 вызовов в HTML коде :)
{
	$('#foto').css('background', '#' + color + color + color);
	$('#savebglink').show();
	foto_background = color;
}

function setAwardsNeeded(an, photo_id)
{	
	$.get('/php.php', {file: 'gallery_photo', method:'modify', id: photo_id, awards_needed: an}, alert_or_reload);
}

function setPrivate_callback(data)
{
	t = (data['private'] == 0) ? 'в галерее' : 'в привате';
	$('.splink'+data['id']).html(t).attr('href','javascript:alert("фото уже "+"'+t+'")').
	css('color',' black');
}

function setPrivate(prv, photo_id)
{	
	$.getJSON('/php.php', {file: 'gallery_photo', method:'modify', id: photo_id, private: prv, json: 1}, setPrivate_callback);
}

function saveBackground_callback(data)
{
	if (data == 'OK')
	{
		$('#notifyline')
			.show()
			.html("<b>фон сохранен</b>")
			.fadeOut(3000);
		$('#savebglink').hide();			
	}
	else
		alert(data);
}

function saveBackground(photo_id)
{	
	$('#notifyline').show().html("сохранение фона....");
	
	$.get('/php.php', {file: 'gallery_photo', method:'modify', id: photo_id, background: foto_background},
		saveBackground_callback);
}

function deletePhoto_callback(data)//data = (status, reload, author_id, photo_id, err_message)
{
	if (data[0] == 1)
	{
		if (data[1] == 1)//reload
			document.location = '/gallery/search.php?author_id='+data[2];
		else
			$('.photocell'+data[3]).fadeOut(1000);
	}
	else
	{
		alert(data[4]);
	}
}

function deletePhoto(id, r)
{
	if (confirm("Уверены?"))
		$.getJSON('/php.php', {
			file: 'gallery_photo',
			method: 'delete',
			id: id,
			reload: r},
			deletePhoto_callback);
}

function deleteVariant_callback(data)
{
	if (parseInt(data) == data)
		$('#versionpreview'+data).fadeOut(1000);
	else
		alert(data);	
}

function deleteVariant(id, v)
{
	if (confirm("Уверены?"))
		$.get('/php.php', {file: 'gallery_photo', method: 'deleteVariant', id: id, v: v}, deleteVariant_callback);
}

function toggleSortlinks()
{
	$(".sortlinks").toggle();
}

function toggleGrey()
{
	ph = $('#mainfoto');
	ph.css('filter', (ph.css('filter') == 'gray') ? 'none': 'gray');
}