function hideFancyMessage() {
	closeFancyBox();
	jQuery('#showFancyMessage').remove();
	if (window.fmCallback) window.fmCallback.call();
	window.fmCallback = null;
}
function showFancyMessage(title, msg, callback) {
	if (window.fmCallback) window.fmCallback.call();
	window.fmCallback = null;
	jQuery('#showFancyMessage').remove();
	jQuery('body').append("<div class=\"displayNone\"><div class=\"addPhoto\" id=\"showFancyMessage\"><div class=\"wndTop\"></div><div class=\"wndTitle\"><span>"+title+"</span><a class=\"wndClose\" href=\"javascript:hideFancyMessage();\"></a></div><div class=\"wndContentTop\"></div><div class=\"wndContent form\">"+msg+"</div><div class=\"wndContentSplitter\"></div><div class=\"wndContent\"><a class=\"ok\" href=\"javascript:hideFancyMessage();\"></a></div><div class=\"wndFooter\"></div></div><a class=\"showFancyMessage\" href=\"#showFancyMessage\"></a></div>");
	var fancyOptions = {
		"titleShow"     : false,
		"transitionIn"	: "fade",
		"transitionOut"	: "none",
		"overlayOpacity": "0.7",
		"showCloseButton" : false,
		"padding"		: "0",
		"modal"			: false,
		"centerOnScroll": true,
		"overlayColor"	: "#000"
	};
	jQuery('a.showFancyMessage').fancybox(fancyOptions);
	jQuery('a.showFancyMessage:first').click();
	window.fmCallback = callback;
}
function showPreloader() {
	jQuery('#fancybox-wrap div.wndContent:not(:first)').prepend('<div class="windowPreloader"></div>');
	jQuery('div.windowPreloader').show();
}
function hidePreloader() {
	jQuery('div.windowPreloader').hide();
	jQuery('div.windowPreloader').remove();
}
function ajaxLoad(div_id, post_url, post_data, callback) {
	jQuery(document).ready(function() {
		ajaxLoadNow(div_id, post_url, post_data, callback);
	});
}
function updateFancyBox() {
	jQuery("a.fancybox").fancybox({
		"titleShow"     : false,
		"transitionIn"	: "fade",
		"transitionOut"	: "none",
		"overlayOpacity": "0.5",
		"showCloseButton" : false,
		"padding"		: "0",
		"modal"			: true,
		"centerOnScroll": false,
		"overlayColor"	: "#000"
	});
}
function ajaxLoadNow(div_id, post_url, post_data, callback) {
	jQuery.ajax(
	{
		'type': "POST",
		'url': post_url,
		'data': post_data,
		'dataType': "html",
		'success': function(data) {
			jQuery(div_id.toString()).html(data).css({opacity: 0}).slideDown().animate({opacity: 1});
			//update fancybox links
			updateFancyBox();
			if (callback) callback.call();
		},
		error: function(req, status, error) {
		}
	});
}
function ajaxLoadCallback(div_id, post_url, post_data, callback) {
	jQuery.ajax(
	{
		'type': "POST",
		'url': post_url,
		'data': post_data,
		'dataType': "html",
		'success': function(data) {
			jQuery(div_id.toString()).html(data);
			if (callback) {
				callback.call();
			}
		},
		error: function(req, status, error, data) {
		}
	});
}
function loadPhotos(callback) {
	ajaxLoad("#ajaxPhotoContainer", "/rcpxml/xml_photos", {'id': window.recipie_id}, function() {if (callback) callback.call(); jQuery('a.cropPending:first').click(); });
}
function loadSteps(callback) {
	ajaxLoad("#ajaxStepContainer", "/rcpxml/xml_steps", {'id': window.recipie_id}, function() {if (callback) callback.call(); jQuery('a.cropPending:first').click(); });
}
function loadIngredients() {
	ajaxLoad("#ajaxIngredientContainer", "/rcpxml/xml_ingredients", {'id': window.recipie_id});
}
function activateRc(id, callback) {
	jQuery.ajax(
	{
		'type': "POST",
		'url': "/rcpxml/xml_approverc",
		'data': {'id': id},
		'dataType': "text",
		'success': function(data) {
			if (callback) {
				callback.call();
			}
			if (data != '0') {
				showFancyMessage('Ошибка', data);
			}
		},
		error: function(req, status, error) {
		}
	});
}
function closeCrop(callback) {
	activateRc(window.cropRcID, function(){closeFancyBox(); if (callback) {	callback.call(); }});
}
function setDefaultPreview() {
	var prHeight = 138 / window.cropAspectRatio;
	window.cropPreview.parent().height(prHeight);	
	window.cropChanged = false;
	if (window.cropAspectRatio > 1) {
		window.cropPreview.css({'width': 138, 'height':'auto', 'marginLeft':0, 'marginTop':0});
	} else {
		var marginLeft = -((window.previewNatWidth - window.previewNatHeight) / (window.previewNatHeight / 138)) / 2;
		window.cropPreview.css({'width': 'auto', 'height':138, 'marginLeft':marginLeft, 'marginTop':0});
	}
}
function setCropPreview() {
	var cw = jQuery("#cropWidget");
	window.cropPreview = jQuery("#cropPreview").attr("src", cw.attr("src")).removeClass('displayNone').css({'height' : 'auto', 'width' : 'auto'});
	window.previewNatWidth = window.cropPreview.width();
	window.previewNatHeight = window.cropPreview.height();
	window.cropCoeff = window.previewNatWidth / cw.width();
	setDefaultPreview();
}
function updateCropPreview(coords)
{
	if ((coords.w == 0) || (coords.h == 0)) {
		setDefaultPreview();
		return;
	}
	var rx = 138 / coords.w;
	var ry = 138 / window.cropAspectRatio / coords.h;
	window.cropPreview.css({
		'width': Math.round(rx * window.previewNatWidth / window.cropCoeff) + 'px',
		'height': Math.round(ry * window.previewNatHeight / window.cropCoeff) + 'px',
		'marginLeft': '-' + Math.round(rx * coords.x) + 'px',
		'marginTop': '-' + Math.round(ry * coords.y) + 'px'
	});
	window.cropChanged = true;
};
function refreshCropWidget() {
	if (!window.cropAspectRatio) window.cropAspectRatio = 0;
	window.cropWidget = jQuery.Jcrop('#cropWidget', {
		'aspectRatio': window.cropAspectRatio,
		'onSelect': updateCropPreview,
		'onChange': updateCropPreview
	});
	setCropPreview();
	jQuery.fancybox.resize();
}
function applyCrop(callback, ignoreError) {
	if (window.cropChanged) {
		window.cropChanged = false;
		var s = window.cropWidget.tellSelect();
		jQuery('body').append('<div id=\"nonexistentdiv\" class\"displayNone\"></div>');
		ajaxLoadCallback('#nonexistentdiv', '/rcpxml/xml_applycrop', {
			'x': s.x * window.cropCoeff, 
			'y': s.y * window.cropCoeff,
			'width' : s.w * window.cropCoeff,
			'height' : s.h * window.cropCoeff,
			'id' : window.cropRcID
		}, function() {
			var data = jQuery('#nonexistentdiv').html();
			if ((data != "0") && (!ignoreError)) {
				showFancyMessage('Ошибка', data, callback);
			} else {
				closeFancyBox();
				if (callback) callback.call();
			}
			jQuery('#nonexistentdiv').remove();
		});
	} else {
		closeCrop(function(){if (callback) callback.call();});
	}
}
function applyCropPhoto() {
	applyCrop(function() {
		loadPhotos(function() {
			var pt = jQuery('#previewThumbnail' + window.cropRcID);
			pt.attr('src', pt.attr('src') + '?' + (new Date()).getTime());
		});
	});
}
function applyCropStep() {
	applyCrop(function() {
		loadSteps(function() {
			var pt = jQuery('#previewThumbnail' + window.cropRcID);
			pt.attr('src', pt.attr('src') + '?' + (new Date()).getTime());
		});
	});
}
function updateAvatar(callback) {
	window.location.reload();
}
function applyCropAvatar() {
	applyCrop(function() {
		updateAvatar();
	}, true);
}
function loadCrop(resid, aspr, callback) {
	ajaxLoadCallback("#ajaxCropContainer", "/rcpxml/xml_crop", {'id':resid}, function(){
		//window.setTimeout("refreshCropWidget();", 200); //moved to cropReady() called by ONLOAD in ajax content's IMG
		window.cropped = 0;
		window.cropRcID = resid;
		window.cropAspectRatio = aspr;
		if (callback) callback.call();
	});
}
function cropReady() {
	if (window.cropped == 0) {
		window.setTimeout("refreshCropWidget();", 200);
		window.cropped = 1;
	}
}
function submitPhoto() {
	jQuery("#addPhotoForm").ajaxSubmit(function(data) {
		loadPhotos();
		if (data != "0") {
			closeFancyBox();
		} else {
			showFancyMessage('Ошибка', 'Фотография не добавлена. Убедитесь что изображение выбрано, его тип - JPEG или PNG и размеры - не меньше 300x300 пикселей', function(){loadPhotos();});
		}
	});
}
function submitStep() {
	jQuery("#addStepForm").ajaxSubmit(function(data) {
		loadSteps();
		if (data != "0") {
			closeFancyBox();
		} else {
			showFancyMessage('Ошибка', 'Шаг не добавлен. Убедитесь что изображение выбрано, его тип - JPEG или PNG и размеры - не меньше 138x138 пикселей, а также что указано описание шага', function(){loadSteps();});
		}
	});
}
function submitIngredient() {
	jQuery("#addIngredientForm").ajaxSubmit(function(data) {
		if (data != "0") {
			closeFancyBox();
		} else {
			showFancyMessage('Ошибка', 'Ингредиент не добавлен. При добавлении обязательно указать название и количество ингредиента');
		}
		loadIngredients();
	});
}
function submitCookbook() {
	jQuery("#addBookForm").ajaxSubmit(function(data) {
		closeFancyBox();
		if (data == "1") {
			window.location.reload();
		}
	});
}
function setSuiteFilter(fv) {
	jQuery("#suiteMasterFilter").val(fv);
}
function submitSuite() {
	jQuery("#addSuiteForm").ajaxSubmit(function(data) {
		closeFancyBox();
		if (data == "1") {
			window.location.reload();
		}
	});
}
function loadCookbook(id) {
	id = id?id:"";
	ajaxLoadCallback("#ajaxBookContainer", "/rcpxml/xml_editbook", {'id': id, 'load': 1}, function() {
		jQuery("a#editCookbook").click();
	});
}
function cropAvatar(data) {
	jQuery('#cropImageLink').click();
	loadCrop(data, 1);
}
function submitAvatar() {
	jQuery("#addAvatarForm").ajaxSubmit(function(data) {
		closeFancyBox();
		if (data != "0") {
			window.setTimeout('cropAvatar('+data+');', 200);
		} else {
			updateAvatar();
		}
	});
}
function deleteItem() {
	jQuery("#delForm").ajaxSubmit(function() {
		closeFancyBox();
		//с этим точно надо что-то делать
		loadPhotos();
		loadSteps();
		loadIngredients();
	});
}
function selectPhoto(id) {
	jQuery("#delForm input").attr("value", id);
	jQuery("#delForm").attr("action", "/rcpxml/xml_delphoto");
	jQuery("#delItem div.wndTitle span").html("Удаление фото");
	jQuery("#delItem div.wndContent span").html("Подтвердите удаление фотографии");
}
function selectStep(id) {
	jQuery("#delForm input").attr("value", id);
	jQuery("#delForm").attr("action", "/rcpxml/xml_delstep");
	jQuery("#delItem div.wndTitle span").html("Удаление шага");
	jQuery("#delItem div.wndContent span").html("Подтвердите удаление шага приготовления рецепта");
}
function selectIngredient(id) {
	jQuery("#delForm input").attr("value", id);
	jQuery("#delForm").attr("action", "/rcpxml/xml_delingredient");
	jQuery("#delItem div.wndTitle span").html("Удаление ингредиента");
	jQuery("#delItem div.wndContent span").html("Подтвердите удаление ингредиента");
}
function clearAddPhotoForm(id) {
	jQuery("#addPhotoForm input[type=file]").attr("value", "");
	jQuery("#addPhotoForm textarea").attr("value", "");
}
function clearAddStepForm(id) {
	jQuery("#addStepForm input[type=file]").attr("value", "");
	jQuery("#addStepForm textarea").attr("value", "");
	jQuery("#addStepForm").attr("action", "/rcpxml/xml_addstep");
	jQuery("#addStepForm input[name=id]").attr("value", id);
}
function clearAddIngredientForm(id) {
	jQuery("#addIngredientForm input").attr("value", "");
	jQuery("#addIngredientForm textarea").attr("value", "");
	jQuery("#addIngredientForm").attr("action", "/rcpxml/xml_addingredient");
	jQuery("#addIngredientForm input[name=id]").attr("value", id);
}
function clearAddAvatarForm(id) {
	jQuery("#addAvatarForm input[type=file]").attr("value", "");
}
function editStep(id) {
	ajaxLoadNow("#addStep div.wndContent.form", "/rcpxml/xml_editstep", {"id": id});
}
function editIngredient(id) {
	ajaxLoadNow("#addIngredient div.wndContent.form", "/rcpxml/xml_editingredient", {"id": id});
}
function confirmDeleteCB(url) {
	jQuery("#confirmDelCBLink").attr("href", url);
}
$.fn.insertAtCaret = function (myValue) {
        return this.each(function(){
                //IE support
                if (document.selection) {
                        this.focus();
                        sel = document.selection.createRange();
                        sel.text = myValue;
                        this.focus();
                }
                //MOZILLA/NETSCAPE support
                else if (this.selectionStart || this.selectionStart == '0') {
                        var startPos = this.selectionStart;
                        var endPos = this.selectionEnd;
                        var scrollTop = this.scrollTop;
                        this.value = this.value.substring(0, startPos)
                                      + myValue
                              + this.value.substring(endPos,
this.value.length);
                        this.focus();
                        this.selectionStart = startPos + myValue.length;
                        this.selectionEnd = startPos + myValue.length;
                        this.scrollTop = scrollTop;
                } else {
                        this.value += myValue;
                        this.focus();
                }
        });

};
function smile(s) {
	jQuery('#commentFormText').insertAtCaret(s);
}
function loadCookbooks(id) {
	ajaxLoadCallback("#ajaxBookContainer", "/rcpxml/xml_add2book", {'id': id, 'load': 1}, function() {
		jQuery("a#add2Cookbook").click();
	});
}
function add2Cookbook() {
	jQuery("#add2BookForm").ajaxSubmit(function(data) {
		jQuery("#statusWnd div.wndContent:first").html(data);
		jQuery("a#statusWndAnchor").click();
	});
}
function loadCompetitions(id) {
	ajaxLoadCallback("#ajaxCompetitionContainer", "/rcpxml/xml_send2comp", {'id': id, 'load': 1}, function() {
		jQuery("a#send2Competition").click();
	});
}
function send2Competition() {
	jQuery("#send2CompForm").ajaxSubmit(function(data) {
		jQuery("#statusWnd div.wndContent:first").html(data);
		jQuery("a#statusWndAnchor").click();
	});
}
function vote4Complink(cid) {
	jQuery.ajax(
	{
		'type': "POST",
		'url': '/rcpxml/xml_vote2complink',
		'data': {'cid': cid},
		'dataType': "html",
		'success': function(data) {
			if (data != 'xxx') {
				jQuery("#voteWnd div.wndContent:first").html(data);
				jQuery("a#voteWndAnchor").click();
			}
		},
		'error': function(req, status, error) {
		}
	});
	return false;
}


function ratePhoto(markPhotoId, rating, prevRatingContainer, ratingContainer) {
	jQuery.ajax(
	{
		'type': "POST",
		'url': '/rcpxml/rate_photo',
		'data': {'id': markPhotoId, 'mark': rating},
		'dataType': "html",
		'success': function(data) {
			prevRatingContainer.html(data);
			ratingContainer.html(data);
			prevRatingContainer.find("div.slvRating").slvRatingDisplay();
			ratingContainer.find("div.slvRating").slvRatingDisplay();
			ratingContainer.find('div.rcpVote .slvStar').click(window.votePhotoFnc);
		},
		'error': function(req, status, error) {
		}
	});
}

function addBookInline() {
	jQuery('#addBookInline').toggle();
	jQuery.fancybox.resize();
}
function submitBookInline() {
	jQuery("#addBookInlineForm").ajaxSubmit(function(data) {
		jQuery("#ajaxBookContainer").html(data);
		jQuery.fancybox.resize();
	});
}
function deleteRecipie(url) {
	jQuery("#rcpDeleteLink").attr("href", url);
}
function submitEmailPass() {
	jQuery("#chEmailPassForm").ajaxSubmit(function(data) {
		if (data != "0") {
			showFancyMessage('Ошибка', data);
		} else {
			location.reload();
		}
	});
}
function cleanEmailPassForm() {
	jQuery("#chEmailPassForm").get(0).reset();
}
jQuery(document).ready(function(){
	jQuery('html').ajaxStart(function(){showPreloader();}).ajaxStop(function(){hidePreloader();});
});
function send2friend(id) {
	id = id?id:"";
	ajaxLoadCallback("#ajaxRcp2FriendContainer", "/rcpxml/xml_send2friend", {'id': id, 'load': 1}, function() {
		jQuery("a#send2FriendAnchor").click();
	});
}
function submit2Friend() {
	var t = jQuery('#send2friendForm');
	if (t.length) {
		ajaxLoadCallback("#ajaxRcp2FriendContainer", "/rcpxml/xml_send2friend", t.serialize(), function() {
			jQuery.fancybox.resize();
		});
	} else {
		closeFancyBox();
	}
	
}

