//fix :last-child in ie
function fix_ie_last_child(){
	// TO CHANGE SCRIPT VER
	var mudake = null;
	if($.browser.msie){
		$('li:last', '.menu-main ul').addClass('last');
	}
}

function init_title_best_tours() {
	$('a.scroll-handler').click(function() {
		var $link = $(this)
		$link.parent().children('.offers-wrapper').slideToggle('fast', function(){
			$link.toggleClass('scrolled').html($link.hasClass('scrolled') ? 'Свернуть' : 'Показать');
		})
	})	
}

function product_prices(_opts, _value, _links) {
	var countryLinks = _links;
	$('#product_prices').tourSelectList({
		template: 'tourSelectList',
		opts: _opts,
		value: _value
	}).bind('select', function(){
		window.location = countryLinks[$(this).val()]
	})
}

// Simple JavaScript Templating
// John Resig - http://ejohn.org/ - MIT Licensed
(function(){
  var cache = {};

  this.tmpl = function tmpl(str, data){
    // Figure out if we're getting a template, or if we need to
    // load the template - and be sure to cache the result.
    var fn = !/\W/.test(str) ?
      cache[str] = cache[str] ||
        tmpl(document.getElementById(str).innerHTML) :

      // Generate a reusable function that will serve as a template
      // generator (and which will be cached).
      new Function("obj",
        "var p=[],print=function(){p.push.apply(p,arguments);};" +

        // Introduce the data as local variables using with(){}
        "with(obj){p.push('" +

        // Convert the template into pure JavaScript
        str
          .replace(/[\r\t\n]/g, " ")
          .split("<%").join("\t")
          .replace(/((^|%>)[^\t]*)'/g, "$1\r")
          .replace(/\t=(.*?)%>/g, "',$1,'")
          .split("\t").join("');")
          .split("%>").join("p.push('")
          .split("\r").join("\\'")
      + "');}return p.join('');");

    // Provide some basic currying to the user
    return data ? fn( data ) : fn;
  };
})();

/* (Let's get EVIL! and patch jQuery UI)
Patching 1.8.11 jquery.ui.widget.js, $.widget.bridge
Reason: Native implementation for widgets methods which return "this" ,
  replaces the result by jQuery element

Oleg's asPublisher returns this, and this remain widget instance
*/
$.widget.bridge = function( name, object ) {
    $.fn[ name ] = function( options ) {
        var isMethodCall = typeof options === "string",
            args = Array.prototype.slice.call( arguments, 1 ),
            returnValue = this;

        // allow multiple hashes to be passed on init
        options = !isMethodCall && args.length ?
            $.extend.apply( null, [ true, options ].concat(args) ) :
            options;

        // prevent calls to internal methods
        if ( isMethodCall && options.charAt( 0 ) === "_" ) {
            return returnValue;
        }

        if ( isMethodCall ) {
            this.each(function() {
                var instance = $.data( this, name ),
                    methodValue = instance && $.isFunction( instance[options] ) ?
                        instance[ options ].apply( instance, args ) :
                        instance;
                // TODO: add this back in 1.9 and use $.error() (see #5972)
//                if ( !instance ) {
//                    throw "cannot call methods on " + name + " prior to initialization; " +
//                        "attempted to call method '" + options + "'";
//                }
//                if ( !$.isFunction( instance[options] ) ) {
//                    throw "no such method '" + options + "' for " + name + " widget instance";
//                }
//                var methodValue = instance[ options ].apply( instance, args );
                if ( methodValue !== instance && methodValue !== undefined || options == 'asPublisher') { // ILYA patch
                    returnValue = methodValue;
                    return false;
                }
            });
        } else {
            this.each(function() {
                var instance = $.data( this, name );
                if ( instance ) {
                    instance.option( options || {} )._init();
                } else {
                    $.data( this, name, new object( options, this ) );
                }
            });
        }

        return returnValue;
    };
};

/*
	getCookieVal, GetCookie and SetCookie
	should be used only in auth/shared_variables.php until Nov 23 2011 (after Nov 23 2011 these functions could be safely dropped)
*/
function getCookieVal (offset) {
        var endstr = document.cookie.indexOf (";", offset);
        if (endstr == -1)
                endstr = document.cookie.length;
                return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie (name) {
        var arg = name + "=";
        var alen = arg.length;
        var clen = document.cookie.length;
        var i = 0;
        while (i < clen) {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg)
                return getCookieVal (j);
                i = document.cookie.indexOf(" ", i) + 1;
                if (i == 0) break;
        }
        return null;
}

function SetCookie (name, value) {
        var argv = SetCookie.arguments;
        var argc = SetCookie.arguments.length;
        var expires = (argc > 2) ? argv[2] : null;
        var path = (argc > 3 && argv[3]) ? argv[3] : '/';
        var domain = (argc > 4 && argv[4]) ? argv[4] : ROOT_HOST;
        var secure = (argc > 5) ? argv[5] : false;
        if (expires !== null && typeof(expires.toGMTString) == 'function') {
        	expires = expires.toGMTString();
        }
        document.cookie = name + "=" + escape (value) +
        ((expires === null) ? "" : ("; expires=" + expires)) +
        ((path == null) ? "" : ("; path=" + path)) +
        ((domain == null) ? "" : ("; domain=" + domain)) +
        ((secure == true) ? "; secure" : "");
}

function add_pre_load_pic(url) {var pic = new Image();pic.src=url}
;try {document.execCommand("BackgroundImageCache", false, true)} catch(e) {};

var current, _init = false, _stop = function(_ev) {_ev.preventDefault();_ev.stopPropagation();},
_black_color = '#000000',
_grey_color = '#999999',
_lightgrey_color = '#b9b9b9',

_def_style = {
	filledCss: {color: _black_color},
	emptyCss: {color: _grey_color}
},

_light_def_style = {
	filledCss: {color: _black_color},
	emptyCss: {color: _lightgrey_color}
},

_monthLabels = [ 'января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря' ],
_monthLabelsRP = [ 'январе', 'феврале', 'марте', 'апреле', 'мае', 'июне', 'июле', 'августе', 'сентябре', 'октябре', 'ноябре', 'декабре' ],
_monthLabelsShort = ['янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек'],
_monthLabelsShortRp = ['янв.','февр.','марта','апр.','мая','июня','июля','авг.','сент.','окт.','нояб.','дек.'];

$.fn.hideOnClckOutside=function(a){var o=$(this),st=function(e){_stop(e)},h=function(){o.hide()},s=function(){o.show()};a.click(function(e){st(e);o.filter(':hidden').length?s():h()});$(document).click(h);return o.click(st)};
$.objectSize=function(o){var c=0;for(var i in o)c++;return c}
$.flattenObject = function(_o) {
	var _obj = _o;
	$.each(_obj, function(_key, _value) {
		if (_value && (typeof(_value) == 'object')) {
			_value = $.flattenObject(_value);
			delete _obj[_key];
			$.extend(_obj, _value);
		}
	});
	return _obj;
}
$.fn.serializeHash = function() {
	var a = this.serializeArray();
	var result = {};
	for (var i=0; i<a.length; i++) {
		result[a[i].name] = a[i].value;
	}
	return result;
}

function _getNumerableStringRu(_num, _single, _less5, _more5) {

	if (_num < 10 || _num > 20) {

		if ((_num % 10) == 1) {

			return _single;
		} else if ((_num % 10) >= 2 && (_num % 10) <= 4) {

			return _less5;
		} else {

			return _more5;
		}
	} else {

		return _more5;
	}
}

// from http://phpjs.org/functions/number_format:481
function number_format (number, decimals, dec_point, thousands_sep) {
    // Formats a number with grouped thousands
    //
    // version: 1103.1210
    // discuss at: http://phpjs.org/functions/number_format    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://getsprink.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +     bugfix by: Howard Yeend
    // +    revised by: Luke Smith (http://lucassmith.name)
    // +     bugfix by: Diogo Resende
    // +     bugfix by: Rival    // +      input by: Kheang Hok Chin (http://www.distantia.ca/)
    // +   improved by: davook
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Jay Klehr
    // +   improved by: Brett Zamir (http://brett-zamir.me)    // +      input by: Amir Habibi (http://www.residence-mixte.com/)
    // +     bugfix by: Brett Zamir (http://brett-zamir.me)
    // +   improved by: Theriault
    // +      input by: Amirouche
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)    // *     example 1: number_format(1234.56);
    // *     returns 1: '1,235'
    // *     example 2: number_format(1234.56, 2, ',', ' ');
    // *     returns 2: '1 234,56'
    // *     example 3: number_format(1234.5678, 2, '.', '');    // *     returns 3: '1234.57'
    // *     example 4: number_format(67, 2, ',', '.');
    // *     returns 4: '67,00'
    // *     example 5: number_format(1000);
    // *     returns 5: '1,000'    // *     example 6: number_format(67.311, 2);
    // *     returns 6: '67.31'
    // *     example 7: number_format(1000.55, 1);
    // *     returns 7: '1,000.6'
    // *     example 8: number_format(67000, 5, ',', '.');    // *     returns 8: '67.000,00000'
    // *     example 9: number_format(0.9, 0);
    // *     returns 9: '1'
    // *    example 10: number_format('1.20', 2);
    // *    returns 10: '1.20'    // *    example 11: number_format('1.20', 4);
    // *    returns 11: '1.2000'
    // *    example 12: number_format('1.2000', 3);
    // *    returns 12: '1.200'
    // *    example 13: number_format('1 000,50', 2, '.', ' ');    // *    returns 13: '100 050.00'
    // Strip all characters but numerical ones.
    number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
    var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
            var k = Math.pow(10, prec);return '' + Math.round(n * k) / k;
        };
    // Fix for IE parseFloat(0.55).toFixed(0) = 0;
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
    if (s[0].length > 3) {s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');}
    return s.join(dec);
}

function strip_tags (input, allowed) {
    // Strips HTML and PHP tags from a string
    //
    // version: 1103.1210
    // discuss at: http://phpjs.org/functions/strip_tags    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Luke Godfrey
    // +      input by: Pul
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Onno Marsman    // +      input by: Alex
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Marc Palau
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Brett Zamir (http://brett-zamir.me)    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Eric Nagel
    // +      input by: Bobby Drake
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Tomasz Wesolowski    // +      input by: Evertjan Garretsen
    // +    revised by: Rafa? Kukawski (http://blog.kukawski.pl/)
    // *     example 1: strip_tags('<p>Kevin</p> <b>van</b> <i>Zonneveld</i>', '<i><b>');
    // *     returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>'
    // *     example 2: strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>');    // *     returns 2: '<p>Kevin van Zonneveld</p>'
    // *     example 3: strip_tags("<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>", "<a>");
    // *     returns 3: '<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>'
    // *     example 4: strip_tags('1 < 5 5 > 1');
    // *     returns 4: '1 < 5 5 > 1'    // *     example 5: strip_tags('1 <br/> 1');
    // *     returns 5: '1  1'
    // *     example 6: strip_tags('1 <br/> 1', '<br>');
    // *     returns 6: '1  1'
    // *     example 7: strip_tags('1 <br/> 1', '<br><br/>');    // *     returns 7: '1 <br/> 1'
    allowed = (((allowed || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)
    var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
        commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
    return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
    });
}

function preg_quote( str ) {	// Quote regular expression characters
	//
	// +   original by: booeyOH
	// +   improved by: Ates Goral (http://magnetiq.com)

	return str.replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1");
}

function sprintf( ) {	// Return a formatted string
	//
	// +   original by: Ash Searle (http://hexmen.com/blog/)
	// + namespaced by: Michael White (http://crestidg.com)

	var regex = /%%|%(\d+\$)?([-+#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuidfegEG])/g;
	var a = arguments, i = 0, format = a[i++];

	// pad()
	var pad = function(str, len, chr, leftJustify) {
		var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr);
		return leftJustify ? str + padding : padding + str;
	};

	// justify()
	var justify = function(value, prefix, leftJustify, minWidth, zeroPad) {
		var diff = minWidth - value.length;
		if (diff > 0) {
			if (leftJustify || !zeroPad) {
			value = pad(value, minWidth, ' ', leftJustify);
			} else {
			value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length);
			}
		}
		return value;
	};

	// formatBaseX()
	var formatBaseX = function(value, base, prefix, leftJustify, minWidth, precision, zeroPad) {
		// Note: casts negative numbers to positive ones
		var number = value >>> 0;
		prefix = prefix && number && {'2': '0b', '8': '0', '16': '0x'}[base] || '';
		value = prefix + pad(number.toString(base), precision || 0, '0', false);
		return justify(value, prefix, leftJustify, minWidth, zeroPad);
	};

	// formatString()
	var formatString = function(value, leftJustify, minWidth, precision, zeroPad) {
		if (precision != null) {
			value = value.slice(0, precision);
		}
		return justify(value, '', leftJustify, minWidth, zeroPad);
	};

	// finalFormat()
	var doFormat = function(substring, valueIndex, flags, minWidth, _, precision, type) {
		if (substring == '%%') return '%';

		// parse flags
		var leftJustify = false, positivePrefix = '', zeroPad = false, prefixBaseX = false;
		for (var j = 0; flags && j < flags.length; j++) switch (flags.charAt(j)) {
			case ' ':positivePrefix = ' ';break;
			case '+':positivePrefix = '+';break;
			case '-':leftJustify = true;break;
			case '0':zeroPad = true;break;
			case '#':prefixBaseX = true;break;
		}

		// parameters may be null, undefined, empty-string or real valued
		// we want to ignore null, undefined and empty-string values
		if (!minWidth) {
			minWidth = 0;
		} else if (minWidth == '*') {
			minWidth = +a[i++];
		} else if (minWidth.charAt(0) == '*') {
			minWidth = +a[minWidth.slice(1, -1)];
		} else {
			minWidth = +minWidth;
		}

		// Note: undocumented perl feature:
		if (minWidth < 0) {
			minWidth = -minWidth;
			leftJustify = true;
		}

		if (!isFinite(minWidth)) {
			throw new Error('sprintf: (minimum-)width must be finite');
		}

		if (!precision) {
			precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : void(0);
		} else if (precision == '*') {
			precision = +a[i++];
		} else if (precision.charAt(0) == '*') {
			precision = +a[precision.slice(1, -1)];
		} else {
			precision = +precision;
		}

		// grab value using valueIndex if required?
		var value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++];

		switch (type) {
			case 's':return formatString(String(value), leftJustify, minWidth, precision, zeroPad);
			case 'c':return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad);
			case 'b':return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
			case 'o':return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
			case 'x':return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
			case 'X':return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad).toUpperCase();
			case 'u':return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
			case 'i':
			case 'd': {
						var number = parseInt(+value);
						var prefix = number < 0 ? '-' : positivePrefix;
						value = prefix + pad(String(Math.abs(number)), precision, '0', false);
						return justify(value, prefix, leftJustify, minWidth, zeroPad);
					}
			case 'e':
			case 'E':
			case 'f':
			case 'F':
			case 'g':
			case 'G':
						{
						var number = +value;
						var prefix = number < 0 ? '-' : positivePrefix;
						var method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())];
						var textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2];
						value = prefix + Math.abs(number)[method](precision);
						return justify(value, prefix, leftJustify, minWidth, zeroPad)[textTransform]();
					}
			default:return substring;
		}
	};

	return format.replace(regex, doFormat);
}

function htmlspecialchars (string, quote_style, charset, double_encode) {
    // http://kevin.vanzonneveld.net
    // +   original by: Mirek Slugen
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Nathan
    // +   bugfixed by: Arno
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    bugfixed by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Ratheous
    // +      input by: Mailfaker (http://www.weedem.fr/)
    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
    // +      input by: felix
    // +    bugfixed by: Brett Zamir (http://brett-zamir.me)
    // %        note 1: charset argument not supported
    // *     example 1: htmlspecialchars("<a href='test'>Test</a>", 'ENT_QUOTES');
    // *     returns 1: '&lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;'
    // *     example 2: htmlspecialchars("ab\"c'd", ['ENT_NOQUOTES', 'ENT_QUOTES']);
    // *     returns 2: 'ab"c&#039;d'
    // *     example 3: htmlspecialchars("my "&entity;" is still here", null, null, false);
    // *     returns 3: 'my &quot;&entity;&quot; is still here'
    var optTemp = 0,
        i = 0,
        noquotes = false;
    if (typeof quote_style === 'undefined' || quote_style === null) {
        quote_style = 2;
    }
    string = string.toString();
    if (double_encode !== false) { // Put this first to avoid double-encoding
        string = string.replace(/&/g, '&amp;');
    }
    string = string.replace(/</g, '&lt;').replace(/>/g, '&gt;');

    var OPTS = {
        'ENT_NOQUOTES': 0,
        'ENT_HTML_QUOTE_SINGLE': 1,
        'ENT_HTML_QUOTE_DOUBLE': 2,
        'ENT_COMPAT': 2,
        'ENT_QUOTES': 3,
        'ENT_IGNORE': 4
    };
    if (quote_style === 0) {
        noquotes = true;
    }
    if (typeof quote_style !== 'number') { // Allow for a single string or an array of string flags
        quote_style = [].concat(quote_style);
        for (i = 0; i < quote_style.length; i++) {
            // Resolve string input to bitwise e.g. 'ENT_IGNORE' becomes 4
            if (OPTS[quote_style[i]] === 0) {
                noquotes = true;
            }
            else if (OPTS[quote_style[i]]) {
                optTemp = optTemp | OPTS[quote_style[i]];
            }
        }
        quote_style = optTemp;
    }
    if (quote_style & OPTS.ENT_HTML_QUOTE_SINGLE) {
        string = string.replace(/'/g, '&#039;');
    }
    if (!noquotes) {
        string = string.replace(/"/g, '&quot;');
    }

    return string;
}


function getWindowCenter() {
	var _center = {left: 0, top: 0};
	try {
		_doc_width = window.screen.width,
		_doc_height = window.screen.height;
		_center.left = Math.round(_doc_width / 2);
		_center.top = Math.round(_doc_height / 2);
	} catch (e) {}
	return _center;
}

function getPopupWindowSettings(_l, _t, _w, _h) {
	var _wh = Math.round(_w / 2),
	_hh = Math.round(_h / 2);
	return 'width=' + _w + ',height=' + _h + ',left=' + (_l - _wh) + ',top=' + (_t - _hh) + ',resizable=yes,scrollbars=yes,toolbar=no,location=no,directories=no,menubar=no'
}

/* execute function in place if the browser is not IE6 and $(func) otherwise
 * it is used to aboid bug with document.body.appendChild in IE6
 * */
function iewrap(func) {
	if($.browser.msie && $.browser.version <= 8) $(func);
	else func();
}

function shareVK(_vk) {
	try {
		VK.Share.button({description: '', title: _vk.title, url: _vk.url});
	} catch (e) {$(this).hide()}
	VK.Share.click(0, this);
}

function shareTwi(_twi) {
	var _center = getWindowCenter();
	window.open(
		'http://twitter.com/share?url=' + _twi.url + '&text=' + _twi.text,
		'Twitter',
		getPopupWindowSettings(_center.left, _center.top, 540, 280)
	);
}

function shareFb(_fb) {
	var _center = getWindowCenter();
	window.open(
		'http://www.facebook.com/sharer.php?u=' + encodeURIComponent(_fb.url),
		'FaceBook',
		getPopupWindowSettings(_center.left, _center.top, 590, 450)
	);
}

function shareLj(_lj) {
	var _center = getWindowCenter();

	var descr = '<a href="'+_lj.url+'">'+_lj.url+'</a>';

	if($.browser.msie && $.browser.version >= 8)
	{
		// prevent from XSS filtering in IE 8+
	}else
	{
		if(typeof(_lj.info) != 'undefined')
		{
			descr = '<br/>' + _lj.info+'<br/><br/>' + descr;
		}

		if(typeof(_lj.photo) != 'undefined')
		{
			descr = '<img src="'+_lj.photo+'" />' + descr;
		}

	}

	window.open(
		'http://livejournal.com/update.bml?event=' + encodeURIComponent(descr) + '&subject=' + _lj.text,
		'LiveJournal',
		getPopupWindowSettings(_center.left - 300, _center.top - 300, 1000, 600)
	);
}

function shareMail(_mail) {
	$('#share-mail').trigger('click');
	//window.location = 'mailto:?subject=' + _mail.text + '&body=' + _mail.url
}

function share_social_media(_vk, _fb, _twi, _lj, _mail) {

	$('#vk-button').click(function(_ev) {
		_stop(_ev);
		shareVK.call(this, _vk)
	})

	$('#twi-button').click(function(_ev) {
		_stop(_ev);
		shareTwi.call(this, _twi)
	})

	$('#fb-button').click(function(_ev) {
		_stop(_ev);
		shareFb.call(this, _fb)
	})

	$('#lj-button').click(function(_ev) {
		_stop(_ev);
		shareLj.call(this, _lj)
	})

	$('#mail-button').click(function(_ev) {
		_stop(_ev);
		shareMail.call(this, _mail)
	})
}


function country_visa_form_001(params)  {
	var container=$('#visa_form_container');

	if (params.form_template) {
		$('#visa_add_tourist').click(function() {
			$('.last',container).before(params.form_template)
		})
	}

}
// deprecated 5 Oct 2011
function country_visa_info_001() {

	$('#visa_issue_selector, #visa_citizenship_selector').children('a.selected').click(function (event){
		$(this).parent().toggleClass('active');
		$('#visa_issue_selector, #visa_citizenship_selector').not($(this).parent()).removeClass('active');
		event.stopPropagation();
	});
	
	$('#visa_issue_selector, #visa_citizenship_selector').find('ul.scroll').delegate('li', 'click', function() {
		window.location = $(this).find('a').attr('href');
	})

	$(document).click(function(_ev) {
		$('#visa_issue_selector, #visa_citizenship_selector').removeClass('active');
	}).keydown(function(_ev){
		if (_ev.keyCode == 27)
			$('#visa_issue_selector, #visa_citizenship_selector').removeClass('active');
	});

}

function forum_auth() {
	$(function(){
		$('.b-create-new').authBind('click', function(event) {
			_stop(event);
			window.location.href = $(event.target).attr('href');
		}, 'Чтобы создать тему, войдите на сайт.');

		$('.b-reply a').authBind('click', function(event) {
			_stop(event);
			window.location.href = $(event.target).attr('href');
		}, 'Чтобы ответить, войдите на сайт.');
	});
}

function places_search_form(_label) {
	$(function() {

		$('#search_name').smart_input($.extend(_def_style, {label: _label}));

		$("#placessearch a").click(function(_ev){
			_ev.preventDefault();_ev.stopPropagation();

			if ($('#search_name').val()) {
				$('#error_empty_name').hide();

				$('#placessearch input[name=]').remove();

				$('#placessearch').submit();
			} else if ($('#error_no_places').length == 0) {
				$('#error_empty_name').show();
			}
		});


		$("#placessearch input").keydown(function(_ev) {

			$('#error_empty_name').hide();

			if (_ev.keyCode == '13' && $('#search_name').val()) {
				$('#placessearch input[name=]').remove();
				$("#placessearch").submit();
			} else if (_ev.keyCode == '13' && $('#error_no_places').length == 0) {
				$('#error_empty_name').show();
			}
		});
	});
}

function region_weather_03(opts, optGroups, value, links) {

	var element = $('#weather_info_region_selector')
	if (element.length) {

		element.tourSelectList({
			template: 'tourSelectList',
			opts: opts,
			optGroups: optGroups,
			value: value
		}).bind('select', function(){
			window.location = links[$(this).val()]
		})

		$.History.bind(function(hash){
			if (hash=='info') {
				$.scrollTo(element,{
					offset: -100,
					duration: 800
				});
			}
		});

	}

}


function tour_details_head_01(tour_slug,default_city_id) {
	/* tour code */
	var show_button=$('#show_tour_code');

	show_button.click(function(){
		show_button.sleep()
		new JSONRequest({
			method: 'generateTourCode',
			params: [tour_slug],
			success: function(res) {
				show_button.wakeup();
				if (res.success) {
					show_button.parent().hide();
					$('#tour_code span').html(res.tour_code);
					$('#tour_code').show();
				}
			}
		});
	});

	/* show tour form */
	$('#tour_show_form').click(function() {
		$('#tour_actions_block').fadeOut(function() {$('#tour_order_form_block').fadeIn();});

	});
}

function init_photo_lister(options) {
	var num_el = options.num_el, photo_el = options.photo_el, pics = options.pics, prev_btn = options.prev_btn, next_btn = options.next_btn;

	var curr_pos = parseInt(num_el.html());

	var hidden_el = document.createElement('div');

	var autoload_photos = [];

	if(pics.length <= 10) autoload_photos = pics;
	else
	{
		for(var i = 0; i < 5; i++)
		{
			autoload_photos.push(pics[i]);
			autoload_photos.push(pics[pics.length-i-1]);
		}
	}

	$(hidden_el).css({
		position: 'absolute',
		top: '-10000px',
		left: '-10000px',
		visibility: 'hidden',
		zIndex: -1
	});

	document.body.appendChild(hidden_el);

	hidden_el.innerHTML = autoload_photos.join('');

	function goTo(pos)
	{
		// cycle through
		if(pos > pics.length) pos = 1;
		else if(pos < 1) pos = pics.length;

		curr_pos = pos;

		num_el.html(curr_pos);
		photo_el.html(pics[pos-1]);

		if(pos >= 5 && pos <= pics.length-5-1)
		{
			// pre-load next and prev image
			hidden_el.innerHTML = pics[pos-2] + pics[pos];
		}
	}

	next_btn.click(function(e) {
		e.preventDefault();
		goTo(curr_pos+1);
	});

	prev_btn.click(function(e) {
		e.preventDefault();
		goTo(curr_pos-1);
	});

	goTo(curr_pos);
}

/** @APPROVED */
function tour_details_form_01(_name_label, _midname_label, _surname_label, _phone_label, _email_label, _call_me_label, _name_error, _contacts_error, _email_error, _phone_error, _call_me_error) {

	$(function(){

		var
			_form = $('#tour_order_form'),
			_name = $('#site_order_client_name'),
			//_midname = $('#site_order_client_middlename'),
			//_surname = $('#site_order_client_surname'),
			_phone_number = $('#site_order_client_phone'),
			_email = $('#site_order_client_email'),
			_more = $('#site_order_client_more'),
			_errors = $('#site_order_errors div')
			_email_regexp = /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i;
			_phone_regexp = /^\+?[\d\-\s\(\)]{7,14}/;


		var hide_error = function() {
			_errors.fadeOut();
		}

		function create_error(error_element, text) {
			error_element.html(text);
			error_element.fadeIn();
		}

		_name.smart_input($.extend(_def_style, {label: _name_label, onFocus: hide_error}));
		//_midname.smart_input($.extend(_def_style, {label: _midname_label, onFocus: hide_error}));
		//_surname.smart_input($.extend(_def_style, {label: _surname_label, onFocus: hide_error}));
		_phone_number.smart_input($.extend(_def_style, {label: _phone_label, onFocus: hide_error}))//.phone_number();
		_email.smart_input($.extend(_def_style, {label: _email_label, onFocus: hide_error}));
		_more.smart_input($.extend(_def_style, {label: _call_me_label, onFocus: hide_error}));

		$('#tour_order_form_submit').live('click', function(_ev) {
			_ev.preventDefault();

			var _valid = true;

			var val = _name.val();
			if (!val) {
				create_error($('#error_site_order_client_name'), _name_error);
				_valid = false;
			}

			var phone_val = _phone_number.val();
			var email_val = _email.val();

			if (_valid && !email_val=='' && !email_val.match(_email_regexp)) {
				create_error($('#error_site_order_client_email'), _email_error);
				_valid = false;
			}
			
			if (!email_val && phone_val && !phone_val.match(_phone_regexp)) {
				create_error($('#error_error_site_order_global'), _phone_error);
				_valid = false;
			}		

			if (_valid && !phone_val && !email_val) {
				create_error($('#error_error_site_order_global'), _contacts_error);
				_valid = false;
			}

			if (_valid) {
				$('#tour_order_form_submit').sleep();

				function post_order_form(){
					$.ajax({
						data: $('#tour_order_form').serializeArray(),
						type: 'POST',
						url: _form.attr('action'),
						complete: function() {
							$('#tour_order_form_submit').wakeup();
						},
						success: function(res) {
							$('#tour_order_form').slideUp('fast', function(){
								$('#tour_order_form_result').html(res).slideDown();
							});
						}
					});
				}

				// set user vid
				setUserVid(post_order_form);
			}
		});
	});
}



function country_currency_info_text() {
	$(function(){
		$('#currency_country_selector a.selected').click(function (event){
			$('#currency_country_selector').toggleClass('active');
			event.stopPropagation();
		});

		$(document).click(function(_ev) {
			$('#currency_country_selector').removeClass('active');
		});
	});
}

function country_currency_info_products() {
	var page = $('#page').find('ul.product-prices')
	var page_offset = page.offset()
	
	function closePopup() {
        $('div.more-info').filter(':visible').addClass('hidden')
		$('div.more-info').filter(':visible').css('z-index', '1')
		$('.product-prices li').css('z-index', '1');
	}
	function showPopup(ob) {
		closePopup()
		var parent = $(ob).closest('li');
		var popup = parent.css('z-index', '5');
		var popup = parent.find('div.more-info').removeClass('hidden');
		var popup_offset = popup.offset();

		if (popup_offset.left - page_offset.left < 0) {
			var right = parseInt(popup.css('right'))
			popup.css({right: right - (page_offset.left - popup_offset.left) + 'px'})
		}
		else if ((page_offset.left + page.width()) - (popup_offset.left + popup.width()) < 0) {
			var right = parseInt(popup.css('right'))
			popup.css({right: '-5px'})
		}
	}
	$('div.l-block-image').click(function(ev){
		ev.preventDefault()
		showPopup(this)
	});
	$('div.more-info').click(function(ev){
		ev.preventDefault()
		closePopup()
	});
	$(document).keydown(function(ev){
		if (ev.keyCode == 27) closePopup()
	})
}

function country_currency_info_converter(_opts, _values, _optGroups, _val_left, _val_right) {

	function convert(from) {
		if (from == 'left' && parseFloat(_left.val()))
		{
			var rate= _right.attr('rate') / _left.attr('rate');
			_right.val(parseFloat(_left.val() * rate).toFixed(2));
		}
		else if (from == 'right' && parseFloat(_right.val()))
		{
			var rate = _left.attr('rate') / _right.attr('rate');
			_left.val(parseFloat(_right.val() * rate).toFixed(2));
		}
	}

	function checkKey(ev) {
		var key;
		if (ev.charCode!=undefined) {
			key=ev.charCode;
		} else {
			key=ev.keyCode;
		}
		return (
			(key >= 48 && key <= 57) ||
			key==46 ||
			key==0 ||
			(key >= 37 && key <=40) ||
			key==8 || key==46|| key==9
			);
	}
	
	function initSelectors(_opts, _values, _optGroups, _value_1, _value_2) {
		$('#left_currency').tourSelectList({
			template: 'tourSelectList',
			itemTemplate: 'item-currency-list',
			opts: _opts,
			value: _value_1,
			optGroups: _optGroups
		}).bind('select', function(){
			var rate = _values[ $(this).val() ];
			_left.attr('rate', rate);
			_right.keyup();
		})

		$('#right_currency').tourSelectList({
			template: 'tourSelectList',
			itemTemplate: 'item-currency-list',
			opts: _opts,
			value: _value_2,
			optGroups: _optGroups
		}).bind('select', function(){
			var rate = _values[ $(this).val() ];
			_right.attr('rate', rate);
			_left.keyup();
		})		
	}

	var _left = $('#left_currency_input');
	var _right = $('#right_currency_input');	

	initSelectors(_opts, _values, _optGroups, _val_left, _val_right)

	$(_left, _right).keypress(function(event){
		if (!checkKey(event)) {
			return false
		};
	});

	_left.keyup(function(_ev){
		this.value = this.value.replace(/[^0-9\.]/g,'');
		convert('left');
	});
	
	_right.keyup(function(_ev){
		this.value = this.value.replace(/[^0-9\.]/g,'');
		convert('right');
	});

	/* do inital convert*/
	_left.keyup();
}

function countrysearch_002(data,text) {
	$(function(){
		$('#country_filter').smart_input({
			label: text['input_label'],
			filledCss: {
				color: _black_color
			},
			emptyCss: {
				color: '#666666'
			}
		});

		$('#country_filter').simple_autocomplete({
			data: data,
			onFound: function () {
				$('#search_error').hide();
			},
			onSearch: function () {
				$('#search_error').hide();
			},
			onNotFound: function () {
				$('#search_error').show();
			},
			onConfirm: function() {
				var url=$('#ui_autocomplete_container .ui-autocomplete-active a').eq(0).attr('href');
				if (url) {
					window.location.href=url;
				}
			},
			onOpen: function() {
				$('#country_sort, #countries').fadeTo(0,0.5);
			},
			onClose: function() {
				$('#country_sort, #countries').fadeTo(0,1);
			},
			min_len:1
		})

		$('#country_filter_execute').click(function(event) {
			if ($('#country_filter').val().length) {
				$('#country_filter').simple_autocomplete('search',$('#country_filter').val());
			}
			$('#country_filter').focus();
			event.stopPropagation();
			event.preventDefault();
		});
	});
}

function countrysearch_001(orders) {
	var current_sort=['popularity','down'];

	var doSort=function(sort_by,direction) {
		var content=$('#countries');
		var prev_letter;

		// tricky way to clone object
		var sort=orders[sort_by][direction];

		$.each(sort, function () {
			var element=$('#country_'+this);
			element.removeClass('last');

			/* do stuff to group items*/
			if (sort_by=='name') {
				var current_letter=$.trim(element.text()).substr(0,1);


				if (prev_letter && prev_letter!=current_letter) {
					element.addClass('last');
				}
				prev_letter=current_letter;
			}

			/* do sort*/
			$(content).prepend(element);
		});
	}

	$('#country_sort a').click(function(event) {
		var new_sort=current_sort;
		if (current_sort[0]==$(this).attr('order')) {
			if (current_sort[1]=='down')  {
				new_sort[1]='up';
			} else {
				new_sort[1]='down';
			}
		} else {
			new_sort[0]=$(this).attr('order');
			new_sort[1]='down';
			$('#country_sort a').attr('class','');
		}


		$(this).attr('class',new_sort[1]);
		doSort(new_sort[0],new_sort[1]);
		current_sort=new_sort;
	})
}


function init_calendar() {

	$('#link-drop-departure-start-calendar li._c').live('mouseenter', function() {
		$('#link-drop-departure-start-calendar li').removeClass('fake left');

		var _el = $(this).addClass('fake'),
		_prev_nbh = $(this).closest('div.month').prev('div.month').find('li'),
		_next_nbh = $(this).closest('div.month').next('div.month').find('li'),
		_prev = _prev_nbh.add(_el.prevAll()).addClass('fake'),
		_next = _el.nextAll().add(_next_nbh),
		_nextClear = _next_nbh.filter('.selected_dates').length? _next_nbh.first().nextUntil('.selected_dates').andSelf().add(_el.nextUntil('.selected_dates')) : _el.nextUntil('.selected_dates'),
		_selected = _next.filter('.selected_dates');
		if (_selected.length) {
			_el.addClass('left');
			_selected.first().addClass('left');
			_nextClear.addClass('fake left');
		}
	});

	$('#link-drop-departure-end-calendar li._c').live('mouseenter', function() {
		$('#link-drop-departure-end-calendar li').removeClass('fake right');

		var _el = $(this).addClass('fake'),
		_prev_nbh = $(this).closest('div.month').prev('div.month').find('li'),
		_next_nbh = $(this).closest('div.month').next('div.month').find('li'),
		_prev = _prev_nbh.add(_el.prevAll()),
		_next = _el.nextAll().add(_next_nbh).addClass('fake'),
		_prevClear = _prev_nbh.filter('.selected_dates').length? _prev_nbh.last().prevUntil('.selected_dates').andSelf().add(_el.prevUntil('.selected_dates')) : _el.prevUntil('.selected_dates'),
		_selected = _prev.filter('.selected_dates');
		if (_selected.length) {
			_el.addClass('right');
			_selected.last().addClass('right');
			_prevClear.addClass('fake right');
		}
	});
}



function init_form_meta(meta_slug){
	$('#meta-slug').val(meta_slug);
	$('.meta-filler').show();
	$('#meta-filler-link').click(
		function(){
			$.post("/system/metaEdit/", {get_metas: 1, slug: meta_slug},
				function(data) {
					if(data.credentials == 1){
						$('#meta-title').val(data.title);
						$('#meta-desc').val(data.description);
						$('#meta-keywords').val(data.keywords);
					} else {
						alert('Нет прав для редактирования мета-тегов');
					}
				}
			);
			$('#popup-meta-filler').show();
		}
	);
	$('#popup-meta-filler-close').click(
		function(){
			$('#popup-meta-filler').hide();
		}
	);
	$('#edit-meta-form').submit(
		function(){
			data_form = $(this).serializeArray();
			data_form.set_metas = 1;
			$.post("/system/metaEdit/", data_form,
			   function(data) {
				   if(data.success == 1){
						$('.popup-meta-filler').hide();
				   } else {
					   alert('Не удалось сохранить теги');
				   }
		   });
		   return false;
		}
	);
}

function init_form_seo_text(page_slug, seo_text_slug){
	/*$('#seo-slug').val(meta_slug);*/
	$('#seo-text-init-btn-'+seo_text_slug).click( function() {
		$.post("/system/seoContentEdit/", {get_content: 1, slug: page_slug+seo_text_slug},
			function(data) {
				if(data.credentials == 1){
					$('#edit-seo-form-'+seo_text_slug+' input[name=title]').val(data.title);
					$('#edit-seo-form-'+seo_text_slug+' textarea[name=content]').text(data.content);
				} else {
					alert('Нет прав для редактирования seo текста');
				}
			}
		);
		$('#popup-seo-text-'+seo_text_slug).show();
		return false;
	});

	$('.popup-seo-filler-close').click(
		function(){
			$('.popup-meta-filler').hide();
		}
	);
	$('#edit-seo-form-'+seo_text_slug).submit(
		function(){
			data_form = $(this).serializeArray();
			data_form.set_metas = 1;
			$.post("/system/seoContentEdit/", data_form,
			   function(data) {
				   if(data.success == 1){
						$('.popup-meta-filler').hide();
				   } else {
					   alert('Не удалось сохранить теги');
				   }
		   });
		   return false;
		}
	);
}

function init_form_extended() {

	// big hack for relative dates

	if($.hash())
	{
		var hashstr = $.hash();
		var date_from = hashstr.replace(/.*DaF\=([^&]+)\&.*/, '$1');
		var date_to = hashstr.replace(/.*DaT\=([^&]+)\&.*/, '$1');

		var match = date_from.match(/^([+-])([0-9]+)d$/);
		if(match)
		{
			var dt = new Date();

			var delta = match[2]*86400;
			if(match[1] == '-') delta *= -1;

			dt = new Date( dt.getTime() + delta*1000 );

			hashstr = hashstr.replace(/DaF\=([^&]+)\&/, 'DaF='+dt.getDate()+'.'+(dt.getMonth()+1)+'.'+dt.getFullYear()+'&' );
		}

		var match = date_to.match(/^([+-])([0-9]+)d$/);
		if(match)
		{
			var dt = new Date();

			var delta = match[2]*86400;
			if(match[1] == '-') delta *= -1;

			dt = new Date( dt.getTime() + delta*1000 );

			hashstr = hashstr.replace(/DaT\=([^&]+)\&/, 'DaT='+dt.getDate()+'.'+(dt.getMonth()+1)+'.'+dt.getFullYear()+'&' );
		}

		$.hash(hashstr);
	}

	$(function() {
		var _formHandler = new internalFormHandler(initExtendedForm);
		$('#next_page:not(.btn-disabled)').live('click', function(_ev) {_stop(_ev);_formHandler.nextPage()});
		$('#prev_page:not(.btn-disabled)').live('click', function(_ev) {_stop(_ev);_formHandler.prevPage()});
	})
}

function init_form_short_internal() {
	$(function() {
		var _formHandler = new hotelFormHandler(initShortForm);
		$('#next_page:not(.btn-disabled)').live('click', function(_ev) {_stop(_ev);_formHandler.nextPage()});
		$('#prev_page:not(.btn-disabled)').live('click', function(_ev) {_stop(_ev);_formHandler.prevPage()});
	});
}

function _remove_tour(_context, _slug, _confirm) {
	if (!_slug) return;
	if (!confirm(_confirm)) return;
	var _el = $(_context).closest('div.x_meneger').prev('a.x');
	_el.sleep();
	new JSONRequest({method: 'removeTour', params: [_slug], success: function() {_el.wakeup().fadeOut()}})
}

function tourstanok_tour_details() {
	$(function() {
		$('#select-city-dropdown').formWidgetCollapsable({
			getValue: function(_li) {return {phone: _li.attr('phone'), city: _li.attr('city')}}
		});
		var _s = new subscriber({}), _help_block = $('#tour_info_block'), _children = _help_block.children('div');
		_s.addSubscribeHandler($('#select-city-dropdown').formWidgetCollapsable('asPublisher'), 'valueChange', function(_e, _v) {$('#phone-number-span').html(_v.phone);var _block = $('#tourstanok_offices').children('div').hide().filter('[city="'+_v.city+'"]').show();$('#address_to_buy_block').children('div').html(_block.html())});

		$('#address_to_buy').click(function(_ev) {
			_stop(_ev);
			var _block = $('#address_to_buy_block', _help_block);
			_block.children('div').html($('#tourstanok_offices').children('div:visible').html());
			if (_children.filter('div:visible').length) {
				_children.hide();
				_block.show();
			} else {
				_children.hide();
				_block.slideDown(500);
			}
		});

		$('#what_are_you_talking_about').click(function(_ev) {
			_stop(_ev);
			if (_children.filter('div:visible').length) {
				_children.hide();
				$('#what_are_you_talking_about_block', _help_block).show();
			} else {
				_children.hide();
				$('#what_are_you_talking_about_block', _help_block).slideDown(500);
			}
		});

		$('#how_to_order_tour').click(function(_ev) {
			_stop(_ev);
			if (_children.filter('div:visible').length) {
				_children.hide();
				$('#how_to_order_tour_block', _help_block).show();
			} else {
				_children.hide();
				$('#how_to_order_tour_block', _help_block).slideDown(500);
			}
		});
	});
}

/** @APPROVED */
function tour_details_gallery_01(_imgs) {

	$.each(_imgs, function(_i, _src) {

		var _img = new Image();
		_img.src = _src;
	});

	$(function(){

		var _holder = $('#hotel-images-holder'),
		_img = _holder.find('img'),
		_prev = _holder.find('a.prev'),
		_next = _holder.find('a.next'),
		_state = 0,
		_setState = function(_s) {

			if (_imgs[_state] !== undefined) {

				_img.attr('src', _imgs[_state]);

				if (_state == 0) {

					_prev.hide();
				}else {

					_prev.show();
				}

				if (_state == (_imgs.length - 1)) {

					_next.hide();
				} else {

					_next.show();
				}
			}
		}

		if (_imgs.length) {

			_prev.click(function() {
				if (_state > 0) {

					_setState(--_state);
				}
			});

			_next.click(function() {

				if (_state < (_imgs.length - 1)) {

					_setState(++_state);
				}
			});

			_setState(_state);
		} else {

			_holder.hide();
		}
	});
}



function region_info_001() {
		$('a[rel="region_photo"]').lightBox({
			fixedNavigation: true,
			imageLoading:	 '/images/lightbox-ico-loading.gif',
			imageBtnPrev:	 '/images/lightbox-btn-prev.gif',
			imageBtnNext:	 '/images/lightbox-btn-next.gif',
			imageBtnClose:	 '/images/lightbox-btn-close.gif',
			imageBlank:		 '/images/lightbox-blank.gif',
			txtImage:		 'Фото',
			txtOf:			 'из'
		});
}

function country_info_001() {
	$(document).ready(function(){
		$('#info_navigation a').each(function(){
			if ($(this).attr('href').search('#')) {
				$(this).attr('href',$(this).attr('href').replace('#','#j'));
			}
		});
	});

	$.History.bind(function(hash){
		$('#info_content h2 span').removeClass('active');
		if (hash) {
			$.scrollTo($('#'+hash.slice(1)),{
				offset: -100,
				duration: 800
			});
			$('#'+hash.slice(1)+' span').addClass('active');

			$('#info_navigation a').removeClass('active');
			$('#info_navigation a[href="'+window.location.href+'"]').addClass('active');
		}
	});
}


function country_currency_001(_default_rate) {
	var _link_holder = $('#currency_selector'),
	_rate=_default_rate,
	_last_changed_input='left';


	function convert(_from) {
		if (_from!=undefined) {
			_last_changed_input=_from;
		}
		if (_last_changed_input=='left' && $('#left_currency').val() == parseFloat($('#left_currency').val())) {
			$('#right_currency').val(parseFloat(($('#left_currency').val())/_rate).toFixed(2));
		} else if (_last_changed_input=='right' && $('#right_currency').val()==parseFloat($('#right_currency').val())) {
			$('#left_currency').val(parseFloat(($('#right_currency').val())*_rate).toFixed(2));
		}
	}

	function checkKey(ev) {
		var key;
		if (ev.charCode!=undefined) {
			key=ev.charCode;
		} else {
			key=ev.keyCode;
		}
		var _r=(
			(key >= 48 && key <= 57) ||
			key==46 ||
			key==0 ||
			(key >= 37 && key <=40) ||
			key==8 || key==46|| key==9
			);
		return _r
	}

	$('#left_currency').keypress(function(_ev){
		if(!checkKey(_ev)){
			return false
		};

	});
	$('#right_currency').keypress(function(_ev){
		if(!checkKey(_ev)){
			return false
		};
	});

	$('#left_currency').keyup(function(_ev){
		this.value = this.value.replace(/[^0-9\.]/g,'');
		convert('left');
	});
	$('#right_currency').keyup(function(_ev){
		this.value = this.value.replace(/[^0-9\.]/g,'');
		convert('right');
	});



	_link_holder.find('a.selected').click(function(_ev){
		_link_holder.toggleClass('active');
		_ev.stopPropagation();
	});

	_link_holder.find('ul').click(function(_ev) {
		var _target=$(_ev.target).closest('li');
		if (_target.length) {
			_link_holder.find('a strong').html(_target.closest('li').html());
			_rate=_target.closest('li').attr('rate');
			convert();
		}
	});

	$(document).click(function(_ev) {
		_link_holder.removeClass('active');
	});
}
// deprecated
function title_user_reviews_001(_route){
	var _link_holder = $('#review_country_selector');

	_link_holder.find('a.selected').click(function(_ev){
		_link_holder.toggleClass('active');
		_ev.stopPropagation();
	});

	_link_holder.find('ul').click(function(_ev) {
		var _target=$(_ev.target).closest('li');
		if (_target.length) {
			_link_holder.find('a strong').html(_target.closest('li').html());
			_link_holder.attr('country_id',_target.closest('li').attr('country_id'));
			$('#add_country_review').attr('href',_route+'&country='+_link_holder.attr('country_id'));
		}
	});

	$(document).click(function(_ev) {
		_link_holder.removeClass('active');
	});
}

function country_review_001(_param_01) {
	$(function() {
		$('.country_reviews a.add,#add_review_text').authBind('click', function(_ev) {
			_stop(_ev);
			window.location.href = _param_01;
		}, 'Чтобы добавить отзыв,<br> войдите на сайт.');
	});
}

function country_review_list_actions_init(){
	$('.country_reviews .moderate .delete').click(function(){
		var a = $(this);
		var box = a.parent().parent();
		if(confirm('Точно удалить?')){
			box.sleep();
			var href = a.get(0).href;
			var isR  = href.substr(-1) != '#';
			JSONRequest({method:'countryReviewDelete', params:[a.attr('article_id')], success:function(r){box.wakeup();if(r.success){if(isR){location.href=href;}else{box.fadeOut(700);box.remove();}}}});
		}
		return false;
	});
}

function country_review_form_init(_def_name, _def_email, _def_title, _def_content, _title_short, _content_short, _no_date, _no_region, _no_title, _no_description, _no_email,  _act) {

	var _regionSelector = $('#region_id_selector').formWidgetCollapsable({name: 'region', getValue: function(_li) {return _li.attr('item_id')}}),
	_regionSelectedOnce = false,
	_sbscrbr = new (function() {subscriber(this)})();
	_sbscrbr.addSubscribeHandler(_regionSelector.formWidgetCollapsable('asPublisher'), 'valueChange', function(_ev, _v) {$('#article_region').val(_v);_regionSelectedOnce=true;})


	var _links = $('#month_id_selector').find('a.selected');
	_links.click(function(_ev) {_stop(_ev);$('#month_id_selector').toggleClass('active')});
	$(document).click(function() {$('#month_id_selector').removeClass('active')});

	$('#review-visit-calendar').month_calendar({
		onSelect: function(_date) {
			var _year = _date.getFullYear(), _month = _date.getMonth() + 1, _day = _date.getDate(),
				_label = 'в ' + _monthLabelsRP[_month - 1] + ' ' + _year;

			ys = new String(_year);
			ms = new String(_month);

			if ( ms.length == 1 ) ms = "0" + ms;

			$('#article_event_month').val(ms);
			$('#article_event_year').val(ys);

			$(this).closest('div.select').find('a.selected').find('strong').html(_label);

			$('#month_id_selector').removeClass('active');
		},
		minDate: '1990-01-01',
		disabledClass: 'none'
	});

	$('#add_review_form').submit(function() {
		$('.error-bubbles div').fadeOut(500);
		var _pn = $('#article_people_name');
		if (_pn.length) { // if authed
			if (!_pn.val() && !$('#article_people_email').val()) {
				$('#no-name-email').text(_no_email);
				$('#no-name-email').fadeIn(500);
				return false;
			}
		}
		if (!$('#article_event_month').val() || !$('#article_event_year').val()) {
			$.scrollTo($('#month_id_selector'), 500,{offset: -80, onAfter: function() {
				$('#no-date').text(_no_date);
				$('#no-date').fadeIn(500)
				}});

			return false;
		}
		if (!$('#article_region').val() && _regionSelectedOnce !== true) {
			$.scrollTo($('#region_id_selector'), 500,{offset: -80, onAfter: function() {
					$('#no-region').text(_no_region);
					$('#no-region').fadeIn(500);

			}});

			return false;
		}
		if (!$('#article_title').val()) {
			$.scrollTo($('#titleanchor'), 500,{offset: -150, onAfter: function() {
					$('#no-header').text(_no_title);
					$('#no-header').fadeIn(500);
				}});


			return false;
		}
		if (!$('#article_content').val()) {
			$.scrollTo($('#bodyanchor'), 500,{offset: -80, onAfter: function() {
					$('#no-text').text(_no_description);
					$('#no-text').fadeIn(500)
				}});


			return false;
		}
		if ($('#article_title').val().length < 3) {

			$.scrollTo($('#titleanchor'), 500,{offset: -150, onAfter: function() {
					$('#no-header').text(_title_short);
					$('#no-header').fadeIn(500);
				}});
			return false;
		}
		if ($('#article_content').val().length < 3) {
			$.scrollTo($('#bodyanchor'), 500,{offset: -80, onAfter: function() {
					$('#no-text').text(_content_short);
					$('#no-text').fadeIn(500)
				}});
			return false;
		}
		//var rnd = Math.round(Math.random()*100000);
		$(this).sleep().attr('action', _act);
		return true;
	});

	$('#add_review_form input, #add_review_form textarea').focusin(function(){$(this).removeClass('inactive');$('.error-bubbles div').fadeOut(500);}).focusout(function(){$(this).addClass('inactive')});

	$('#article_people_name').smart_input($.extend(_def_style, {label: _def_name}));
	$('#article_people_email').smart_input($.extend(_def_style, {label: _def_email}));
	$('#article_title').smart_input($.extend(_def_style, {label: _def_title}));
	$('#article_content').smart_input($.extend(_def_style, {label: _def_content}));

	$('#add_review_form .submit_review').unbind().click(function(_ev){
		_ev.preventDefault();

		// set user vid
		setUserVid(function(){
			$('#add_review_form').submit();
		});
	});
}

function article_list_select_country_js(url) {
	url = url.replace('?', '');
	var _selector = $('#country_id_selector').formWidgetCollapsable({name: 'country', getValue: function(_li) {return _li.attr('item_id')}}),
	_sbscrbr = new (function() {subscriber(this)})();
	_sbscrbr.addSubscribeHandler(_selector.formWidgetCollapsable('asPublisher'), 'valueChange', function(_ev, _v) {$('.country_reviews').sleep();window.location.href=_v? url+_v+'/' : url;})
}

function article_list_select_region_js(url) {
	url = url.replace('?', '');
	var _regionSelector = $('#region_id_selector').formWidgetCollapsable({name: 'region', getValue: function(_li) {return _li.attr('item_id')}}),
	_sbscrbr = new (function() {subscriber(this)})();
	_sbscrbr.addSubscribeHandler(_regionSelector.formWidgetCollapsable('asPublisher'), 'valueChange', function(_ev, _v) {$('.country_reviews').sleep();window.location.href=_v? url+_v+'/' : url;})
}

function country_review_comment_form_init(){
	var formObj = $('#add_comment2'),
	submitBtn = $('#comment-form-btn-blue');
	submitBtn.unbind().click(function() {
		formObj.sleep();
		$.post(formObj.attr('action'), formObj.serializeArray(), function(html){
			var scroll_to = $(html);
			$('textarea', formObj).val('');
			formObj.wakeup();
			$('.response_comments .comments .error').remove();
			$('.response_comments').show();
			$('.response_comments .comments').append(scroll_to);
			$.scrollTo(scroll_to, 500);
		});

		return false;
	});

	$('#add_comment_button').click(function(){
		$.scrollTo(formObj, 500);
		return false;
	});

	$('#login_and_add_comment').authBind('click', function() {
		this.parent().hide();
		formObj.parent().show();
		$('#add_comment_button').show();
		$('#comment_text').focus();
		return false
	}, 'Чтобы добавить отзыв,<br> войдите на сайт.');
}

function country_weather_001() {
	$(function() {

		var _dropdown = $('.whaters .select');

		_dropdown.click(
			function (_ev) {
				_stop(_ev);
				var _el = $(this);

				if (_el.hasClass('active')) {
					_el.removeClass('active');
				} else {
					_dropdown.removeClass('active');
					$(this).addClass("active");
				}
			}
		);

		$('li', _dropdown).click(function (_ev) {
			$(this).find('a').click();
		});

		$(document).click(function(_ev) {
			if (!$(_ev.target).closest('.whaters .select').length) {
				_dropdown.removeClass('active');
			}
		});

		$('a', _dropdown).click(function(_ev) {
			window.location.href=$(this).attr("href");
		});
	});
}

/** @APPROVED */
function winopen(URL, URL1) {

	window.open(URL,'small_window','height=350,width=500,scrollbars=yes');
}

/** @APPROVED */
function reviews_success_001() {
	$(function() {
		$('.popup_bouncer').mouseenter(function(){
			$('.pop').hide();
			$('#pop_review_' + $(this).attr('id')).show()

		});//.closest('.post2').mouseleave(function() { $(this).children('div.pop').hide() })

		$('.pop').mouseleave(function(){
			$(this).hide();
		});
	});
}

function activeCommentForm(_submit_url,_label_1, _start_text, _pretext, _label_text_area) {

	$(function() {
		/* time picker initialisation*/
		activeCommentFormDatePicker(_pretext, _start_text);
		var _link_holder = $('#when_selector');
		_link_holder.find('a.selected').click(function(_ev){
			_stop(_ev)
			_link_holder.toggleClass('active');
			$('#bad_date').fadeOut();}).end().click(function(_ev) {_ev.preventDefault();_ev.stopPropagation();}
		);

		$(document).click(function() {
			_link_holder.removeClass('active');
		});

		/* comment subject*/
		$('#comment_title').smart_input($.extend(_def_style, {label: _label_1}));
		$('#comment_title').focus(function(){
			$('#bad_subject').fadeOut();
		});


		/* comment body*/
		$('#comment_text').smart_input($.extend(_def_style, {label: _label_text_area}));
		$('#comment_text').focus(function(){
			$('#bad_text').fadeOut();
		});


		/* comment rating*/
		var _rating_container = $('#active_comment_form .add_rait').find('a');
		_rating_container.click(function(_ev){
			_stop(_ev);
			var className = $(this).attr('class'),
				markId = className.replace('r', '');

			$('#bad_mark').fadeOut();

			$('#comment_mark').attr('value', markId);
			$('#active_comment_form i.give_rating').attr('class', 'give_rating select'+markId);
		});

		_rating_container.hover(function(){
			var className = $(this).attr('class');
			var markId = className.replace('r', '');
			$('#active_comment_form i.give_rating').attr('class', 'give_rating select'+markId);
		},
		function(){
			var markId = $('#comment_mark').attr('value');
			if(markId)	{
				$('#active_comment_form i.give_rating').attr('class', 'give_rating select'+markId);
			}
			else {
				$('#active_comment_form i.give_rating').attr('class', 'give_rating');
			}
		});



		$('#comment_submit').click(function(_ev){
			_ev.preventDefault();
			_ev.stopPropagation();


			if(!$('#tour_year').val() || !$('#tour_month').val()){
				$.bubble({
					obj: $('#when_selector'),
					body: 'Укажите дату поездки'
				});
				return false;
			}

			if(!$('#comment_mark').val())	{
				$.bubble({
					obj: _rating_container,
					body: 'Оцените достопримечательность'
				});
				return false;
			}

			if(!$('#comment_title').attr('value')) {
				$.bubble({
					obj: $('#comment_title_smart'),
					body: 'Озаглавьте ваш отзыв'
				});
				return false;
			}

			if(!$('#comment_text').val()){
				$.bubble({
					obj: $('#comment_text_smart'),
					body: 'Опишите хотя бы немного ваши впечатления'
				});
				return false;
			}

			$('#active_comment_form').sleep();

			$.ajax({
				data: {
					commentable_model: $('#active_comment_form').attr('commentable_model'),
					commentable_id: $('#active_comment_form').attr('commentable_id'),
					mark: $('#comment_mark').val(),
					text: $('#comment_text').val(),
					title: $('#comment_title').val(),
					tour_month: $('#tour_month').val(),
					tour_year: $('#tour_year').val()
				},
				url: _submit_url ,
				cache: false,
				type: 'POST',
				success: function(_res) {
					var cont = $('<div>');
					$('#active_comments').prepend($(cont));
					$(cont).hide();
					$(cont).append(_res);
					$(cont).slideDown(function() {
						$.scrollTo($('#active_comments'), 'normal');
					});

					$('#comment_title').val('');
					$('#comment_text').val('');
					$('#comment_mark').val('');
					$('#tour_month').val('');
					$('#tour_year').attr('value', '');
					$('#active_comment_form i.give_rating').attr('class', 'give_rating');
					$('#when_selector a.selected strong').html(_start_text);

					$('#active_comment_form').slideUp();
					$('#add_post').slideDown();
				},
				complete: function () {
					$('#active_comment_form').wakeup();
				},
				error: function() {
					alert('Извините, произошла ошибка, попробуйте позже.');
				}
			});
		});
	});
}

function activeCommentFormLoged_01() {

	$(function() {
		$('#add_post, #top_add_post, #middle_add_post').click(function(_ev){
			_stop(_ev);
			$('#active_comment_form').show();
			if ($(_ev.target).attr('id')=='top_add_post') {
				$('#add_post').hide();
			}
			$.scrollTo($('#active_comment_form'),0);
		});
	});
}

function activeCommentFormGuest_01(_form_reload_url,_label_1, _start_text, _pretext,_login_hint) {

	$(function() {
		$('#add_post, #top_add_post, #middle_add_post').authBind('click', function(_ev){
			_stop(_ev);
			var _el = $(this);
			_el.sleep();
			$.ajax({
				url: _form_reload_url,
				type: 'GET',
				data: {commentable_model: $('#active_comment_form').attr('commentable_model')},
				success: function (_res) {
					$('#active_comment_form').html(_res);
					$('#add_post').hide();
					$('#active_comment_form').slideDown();
					if ($(_ev.target).attr('id')=='top_add_post') $.scrollTo($('#active_comment_form'),0);
				},
				complete: function () {_el.wakeup()}
			});

		},_login_hint);
	});
}

function activeCommentFormDatePicker(_pretext, _start_text) {

	$('#review-visit-calendar').month_calendar({
		onSelect: function(_date) {
			var _year = _date.getFullYear(), _month = _date.getMonth() + 1, _day = _date.getDate(),
				_label = _pretext + _monthLabelsRP[_month - 1] + ' ' + _year;

			ys = new String(_year);
			ms = new String(_month);

			if ( ms.length == 1 ) ms = "0" + ms;

			$('#tour_month').val(ms);
			$('#tour_year').val(ys);

			$(this).closest('div.select').find('a.selected').find('strong').html(_label);

			$('#when_selector').removeClass('active');
		},
		minDate:  '1990-01-01',
		disabledClass: 'none'
	});
}

function activeCommentsDetails_01() {

	$(function() {

		$('a[rel="active_photos"]').lightBox({
			fixedNavigation: true,
			imageLoading:	 '/images/lightbox-ico-loading.gif',
			imageBtnPrev:	 '/images/lightbox-btn-prev.gif',
			imageBtnNext:	 '/images/lightbox-btn-next.gif',
			imageBtnClose:	 '/images/lightbox-btn-close.gif',
			imageBlank:		 '/images/lightbox-blank.gif',
			txtImage:		 'Фото',
			txtOf:			 'из'
		});
	});
}

/** @APPROVED */
function formatUrlHash( _h ) {

	return _h.replace(/^.+?#/g,'').replace(/^#?\/?|\/?$/g, '');
}

/** @APPROVED */
function setUrlHash( _hash ) {

	_hash = formatUrlHash(_hash);
	_hash = _hash.replace(/^\/?|\/?(\?)|\/?$/g, '/$1');

	if ( typeof window.location.hash !== 'undefined' ) {
		window.location.hash = _hash;
	} else {
		location.hash = _hash;
	}

	return true;
}

/** @APPROVED */
function getUrlHash() {

	var _h = window.location.hash || location.hash;

	return formatUrlHash(_h);
}

/** @APPROVED */
function contacts_managers_js_01() {

	$(function() {
		$('#managers img').each(function(){
			$(this).mouseenter(function(){

				function clean_up(div) {
					$(div).css('z-index', 1);
					var img = $(div).find('img');
					$(img).animate({
						width: '69px',
						height: '69px',
						left: '0',
						top: '0'
					}, 100, function(){
						$(div).remove();
					});
				}

				if($('div.manager_popup').length != 0)
				{
					$('div.manager_popup').each(function(){
						clean_up($(this));
					});
				}

				popup($(this));

				function popup(img_original) {

					var div = $('<div class="manager_popup" style="position: absolute; z-index: 1001;" />');
					var img = $('<img src="'+$(img_original).attr('src')+'" style="border: 2px solid #fff; width: 69px; height: 69px; position: relative; left: 0; top: 0;" />');

					$(div).append($(img));
					$(img_original).before($(div));

					$(img).animate({
						width: '118px',
						height: '118px',
						left: '-17px',
						top: '-17px'
					}, 150);

					$(div).mouseleave(function(){
						clean_up($(this));
					});
				}
			});
		});
	});
}

/** @APPROVED */
function news_filter_001() {
	$(function() {
		var _holder = $('#news-filter');
		_holder.find('a.selected.roll-up').click(function(_ev) {
			_stop(_ev);
			_holder.addClass('active');
		}).end().find('a.selected.roll-back').click(function(_ev) {
			_stop(_ev);
			_holder.removeClass('active');
		}).end().find('ul li a').click(function(_ev) {
			$(this).closest('ul').sleep();
		});
		$(document).click(function(_ev) {
			if (!$(_ev.target).closest('#news-filter').length) {
				_holder.removeClass('active');
			}
		});
	});
}

/** @APPROVED */
function vacancy_filter_001() {
	$(function() {
		var _holder = $('#vacancy-filter');
		_holder.find('a.selected.roll-up').click(function(_ev) {
			_stop(_ev)
			_holder.addClass('active');
		}).end().find('a.selected.roll-back').click(function(_ev) {
			_stop(_ev)
			_holder.removeClass('active');
		}).end().find('ul li a').click(function(_ev) {
			$(this).closest('ul').sleep();
		});
		$(document).click(function(_ev) {
			if (!$(_ev.target).closest('#vacancy-filter').length) {
				_holder.removeClass('active');
			}
		});
	});
}

/** @APPROVED */
function vacancy_form_001(_param_01, _name_label, _email_label, _other_contacts_label, _text_label, _name_error, _email_error, _text_error) {
	$(function() {
		var _form = $('#respondvacancy-form'),
		_name = $('#respondvacancy_name'),
		_email = $('#respondvacancy_email'),
		_additional = $('#respondvacancy_additional'),
		_details = $('#respondvacancy_details'),
		_file = $('#respondvacancy_attachment');


		$('#send_resume').click(function(_ev) {
			_stop(_ev);
			_form.fadeIn('slow');
		});

		_name.smart_input($.extend(_def_style, {label: _name_label}));

		_email.smart_input($.extend(_def_style, {label: _email_label}));

		_additional.smart_input($.extend(_def_style, {label: _other_contacts_label}));

		_details.smart_input($.extend(_def_style, {label: _text_label}));

		$('#respondvacancy-submit-button').click(function(_ev) {

			_stop(_ev);

			_name.prevAll('p.error').remove();
			if (!_name.val()) {
				$('<p>').addClass('error').text(_name_error).insertBefore(_name).show();
				return;
			}

			_email.prevAll('p.error').remove();
			if (!_email.val()) {
				$('<p>').addClass('error').text(_email_error).insertBefore(_email).show();
				return;
			}

			_file.prevAll('p.error').remove();

			if (!(_details.val() || _file.val())) {
				$('<p>').addClass('error').text(_text_error).insertBefore(_file).show();
				return;
			}

			_form.attr('action', _param_01).sleep().submit();
		});
	});
}

/** @APPROVED */
function contacts_office_success_001() {

	$(function(){
		var _link_holder = $('#office_selector');

		_link_holder.find('a.selected').click(function(){_link_holder.toggleClass('active');}).end().click(function(_ev) {_ev.stopPropagation();});

		$(document).click(function() {
			_link_holder.removeClass('active');
		})
	});
}

/** @APPROVED */
function team_success_001() {

	$(function(){
		var _link_holder = $('#team_city_selector');

		_link_holder.find('a.selected').click(function(){_link_holder.toggleClass('active');}).end().click(function(_ev) {_ev.stopPropagation();});

		$(document).click(function() {
			_link_holder.removeClass('active');
		})
	});
}

/** @APPROVED */
function contacts_office_description_success_001(lng,lat,placemark_name,placemark_descr,marker_image, map_type)
{
	function contacts_yandex_map_init() {
		if (!window.YMaps) return
		
		var map = new YMaps.Map(YMaps.jQuery("#o_map_yandex")[0]);
		map.setCenter(new YMaps.GeoPoint(lng,lat), 14);

		var s = new YMaps.Style();
		s.iconStyle = new YMaps.IconStyle();
		s.iconStyle.href = marker_image;
		s.iconStyle.size = new YMaps.Point(56, 50);
		s.iconStyle.offset = new YMaps.Point(-28, -50);

		var placemark = new YMaps.Placemark(new YMaps.GeoPoint(lng, lat),{
			style:s
		});
		placemark.name = placemark_name;
		placemark.description = placemark_descr;
		map.addOverlay(placemark);

		var typeControl = new YMaps.TypeControl([YMaps.MapType.MAP, YMaps.MapType.SATELLITE, YMaps.MapType.HYBRID], [1,2]);
		map.addControl(typeControl);
		map.addControl(new YMaps.ToolBar());
		map.addControl(new YMaps.Zoom());
		map.addControl(new YMaps.ScaleLine());
		if(map_type=='satellite'){
			map.setType(YMaps.MapType.SATELLITE);
		}
	}

	function contacts_google_map_init() {
		if (!window.google || !window.google.maps) return
		
		if(map_type=='satellite'){
			var mapType = google.maps.MapTypeId.SATELLITE;
		}else{
			var mapType= google.maps.MapTypeId.ROADMAP;
		}
		var latlng = new google.maps.LatLng(lat,lng),
		myOptions = {
			zoom: 14,
			center: latlng,
			mapTypeId: mapType
		},
		map = new google.maps.Map(document.getElementById("o_map_google"), myOptions),
		marker = new google.maps.Marker({
			position: latlng,
			map: map,
			title: placemark_name+' '+placemark_descr,
			icon:  marker_image
		});
	}

	$(function(){
		$('a.map_switcher').click(function(){

			if(!$(this).hasClass('map_type_active')) {

				$('#o_map .o_map').hide();

				if ($(this).attr('id') == 'map_type_yandex') {

					$('#o_map_yandex').show();
				} else if($(this).attr('id') == 'map_type_google') {

					$('#o_map_google').show();
				} else {

					$('#o_map_schema').show();
				}

				if(!$(this).hasClass('clicked')) {

					$(this).addClass('clicked');

					if($(this).attr('id') == 'map_type_yandex') {
						contacts_yandex_map_init();
					} else if($(this).attr('id') == 'map_type_google') {

						contacts_google_map_init();
					}
				}

				$('.map_type_active').toggleClass('map_type').toggleClass('map_type_active');

				$(this).toggleClass('map_type').toggleClass('map_type_active');
			}

			return false;
		});
	});
}

/** @APPROVED */
function popular_countries_001() {

	$(function(){
		$('#popular_country_block').find('li').hover(function(){$(this).addClass('hover')}, function(){$(this).removeClass('hover')});
	})
}

/** @APPROVED */
function bhead_js_001(_param_01, maindomain) {

	$(function() {
		$('#login-link').click(function(_e) {
			_stop(_e);
			var href = this.href
			if (href.length && href.search('http') == 0) {
				window.location=renderAuthHash(href)
			} else {
				$.stupidModal('login', {positioning: 'top', executeHandler:'authComplete'});
			}
		});

		$('#register-link').click(function(_ev) {
			_stop(_ev);

			$.stupidModal('register', {positioning: 'top'});
		});

		var _dd = $('#drop_down-city-list'), _form = $('#b-smallchoiser-form'), _select_city_link=$('#select-city-link');

		_select_city_link.click(function(_ev){
			_stop(_ev);
			$(this).parent().addClass('active');
		});

		$('#deselect-city-link').click(function(_ev){
			_stop(_ev);
			_select_city_link.parent().removeClass('active');
		});

		$(document).click(function(_ev){
			if (!$(_ev.target).closest('#drop_down-city-list').length) {
				$('#select-city-link').parent().removeClass('active');
			}
		});

		function reloadForCity() {
			// replace special GET-parameter
			var loc = window.location.toString()
			var t = loc.replace(/\?my_city=[a-z]+$/i, '')
			window.location = t.length != loc.length ? t : loc.replace(/my_city=[a-z]+/i, '')	
			window.location.reload()
		}

		$('#b-smallchoiser-ul li').click(function(_ev) {
			_ev.preventDefault();
			var _c_id = $(this).attr('c');
			$('#b-smallchoiser-input', _form).val(_c_id);

			if (_c_id!==undefined) {
				$('#b-smallchoiser-form').sleep();

				function post_user_city() {
					$.ajax({
						url: _param_01,
						type: "GET",
						data: {uniq: Math.random(), c: _c_id},
						complete: function() {
							reloadForCity();
						},
						success: function() {
							reloadForCity();
						},
						error: function() {
							$('#b-smallchoiser').wakeup();
						}
					});
				}

				// set user vid
				setUserVid(post_user_city);
			}
		});

		$("#menu_main li").hover(
			function () {$(this).addClass("hover");},
			function () {$(this).removeClass("hover");}
		);

		$('.drop_down li').hover(
			function () {$(this).addClass("hover");},
			function () {$(this).removeClass("hover");}
		);

	});
}

/** @APPROVED */
function review_card_01(_pretext, _monthLabels) {
	$(function() {
		var _dropdowns = $("#review_info .select");

		_dropdowns.click(
			function (_ev) {
				_stop(_ev);
				var _el = $(this);

				if (_el.hasClass('active')) {
					_el.removeClass('active');
				} else {
					_dropdowns.removeClass('active');
					$(this).addClass("active");
				}
			}
		);

		$(document).click(function(_ev) {if (!$(_ev.target).closest('#review_info .select').length) {_dropdowns.removeClass('active')}});

		$('.review_info .select.duration ul, .review_info .select.goal ul, .review_info .select.follower ul').each(function () {
			$(this).find('li').click(function() {

				var _name = $(this).text(), _val = $(this).attr('val'), parent = $(this).closest('div.select');

				parent.find('a.selected strong').html(_name).end().find('input:hidden').val(_val).end().removeClass('hover');
			});
		});

		$('#review-visit-calendar').month_calendar({
			onSelect: function(_date) {
				var _year = _date.getFullYear(), _month = _date.getMonth() + 1, _day = _date.getDate(),
					_label = _pretext + _monthLabels[_month - 1] + ' ' + _year;

				ys = new String(_year);
				ms = new String(_month);
				ds = new String(_day);
				if ( ms.length == 1 ) ms = "0" + ms;
				if ( ds.length == 1 ) ds = "0" + ds;

				_value = ys + "-" + ms + "-" + ds;

				$(this).closest('div.select').find('a.selected').find('strong').html(_label);
				$('#event-date').val(_value);

				$('#bag_date').fadeOut();
			},
			currentDate: $('#event-date').val(),
			minDate:  '1990-01-01',
			disabledClass: 'none'
		});
	});
}

/** @APPROVED */
function add_review_form_js(_param_01, _param_02, _dest_label, _service_label, _food_label, _territor_label, _beach_label, _animation_label, _room_label, _price_label) {

	$(function(){

		var _avg_element = $('#span_average_rating'),
		_avg_image = $('i', _avg_element.parent()),
		_form = $('#add-review-text-form'),
		_items = $('.marks-mark-input:input', _form);

		var _recalculate_avg = function() {

			var cnt = 0, sum = 0;

			_items.each(function(index, element) {
				var _val = parseInt($(element).val(), 10);
				if (_val > 0) {
					sum = sum + parseInt(_val);
					cnt++;
				}
			});
			var result = cnt ? sum / cnt : 0;

			result = Math.round(result * 100) / 100;

			_avg_element.text(result);

			var mark = Math.floor(result),
			    diff = Math.abs(result - mark),
			    pos = 80 * (5 - mark);
			if (diff < 0.125) {
				pos = pos + 0;
			} else if (diff < 0.375) {
				pos = pos - 20;
			} else if (diff < 0.625) {
				pos = pos - 40;
			} else if (diff < 0.99) {
				pos = pos - 60;
			}
			_avg_image.css('background-position', '0 -'+pos+'px');
		}

		$('.give_rating', _form).review_markable({
			averageMark: '#add-review-mark-overall-mark-label',
			onUpdate: _recalculate_avg
		});

		var _mark_fields = {
			'#marks-comment-dest': _dest_label,
			'#marks-comment-service': _service_label,
			'#marks-comment-food': _food_label,
			'#marks-comment-territor': _territor_label,
			'#marks-comment-beach': _beach_label,
			'#marks-comment-animation': _animation_label,
			'#marks-comment-room': _room_label,
			'#marks-comment-price': _price_label
		};

		$.each(_mark_fields, function(_id, _label) {
			$(_id).smart_input($.extend(_def_style, {label: _label}));
		});


		$('#marks-username').click(function() {
			$('#bag_name').fadeOut();
		});

		$('#review_subject, #review_text').click(function() {
			$('#bag_story').fadeOut();
		});

		var cleaner = function(btn){
			var li_parent = $(btn).parent();
			$(li_parent).find('input.marks-comment-input').attr('value', '');
			$(li_parent).find('i.give_rating').attr('class', 'give_rating');
			$(li_parent).find('div').css('display', 'none');
		};

		$('a.marks-field-clear').click(function(_ev){
			_stop(_ev);
			cleaner($(this));
		});

		var _form_submit = function(_ev) {

			_stop(_ev);

			var _e = $('#add-review-text-form'),
			_photo_ids = [], _video_ids = [],
			_username_input = $('#marks-username'),
			_username = _username_input.val(),
			_review_id = $('#review_text_review').val(),
			_review_subject = $('#review_subject').val(),
			_review_text = $('#review_text').val(),
			data = {},
			marks= {},
			_avg_mark_element = $('#span_average_rating'),
			_normal_speed = 'normal',
			_offset = {top: -200};

			if (_username_input.length && !_username) {

				$.scrollTo($('#bag_name_anchor'), _normal_speed,{offset: _offset, onAfter: function() {$('#bag_name').show()}});

				return false;

			} else if (!$('#event-date').val()) {

				$.scrollTo($('#bag_date_anchor'), _normal_speed,{offset: _offset, onAfter: function() {$('#bag_date').show()}});

				return false;

			} else if (_avg_mark_element.text() == '0') {

				$('#help').hide();
				$.scrollTo($('#bag_rait_anchor'), _normal_speed,{offset: _offset, onAfter: function() {$('#bag_rait').show()}});

				return false;

			} else if (!_review_text && !_review_subject) {

				$.scrollTo($('#bag_story_anchor'), _normal_speed,{offset: _offset, onAfter: function() {$('#bag_story').show()}});

				return false;
			}

			_e.sleep();

			$('#vote_hotel-div li').each(function(){
				var type = $(this).find('.marks-field-input').val(),
				comment= $(this).find('.marks-comment-input').not('[name=""]').val(),
				mark= $(this).find('.marks-mark-input').val();
				if (type && (comment || mark)) {
					marks[type]={
						comment: comment,
						mark: mark
					}
				}
			});

			$('.file', $('#upload-user-foto-container')).each(function(_i, _el) {
				var _item_id = $(_el).attr('item_id');
				if (_item_id) {
					_photo_ids.push(_item_id);
				}
			});

			$('.file', $('#upload-user-video-container')).each(function(_i, _el) {
				var _item_id = $(_el).attr('item_id');
				if (_item_id) {
					_video_ids.push(_item_id);
				}
			});


			data['review_text'] = _review_text;
			data['review_subject'] = _review_subject;

			data['cotraveler[departure_date]'] = $('#event-date').val();
			data['cotraveler[followers]'] = $('#event-follower').val();
			data['cotraveler[goal]'] = $('#event-goal').val();
			data['cotraveler[id]'] = $('#event-id').val();

			data['photos'] = _photo_ids.join(',');
			data['videos'] = _video_ids.join(',');

			data['username'] = _username;

			data['dog_id'] = $('#review_text_dog_id').val();
			data['desktop_id'] = $('#review_text_desktop_id').val();

			if (_review_id) {
				data['review_id'] = _review_id;
			}

			data['marks'] = marks;

			function post_form_review() {
				$.ajax({
					url: _param_01,
					type: 'POST',
					data: data,
					success: function(_data) {
						if (_data && _data.error !== undefined) {
							modal_error(_data.error);
							_e.wakeup();
							return false;
						}
						window.location.href = _param_02;
					}
				});
			}

			// set user vid
			setUserVid(post_form_review);
		}

		if ($('.assessment div:visible').length == 0) {
			$('.help').show();
		}

		$('a.save_review_new').click(_form_submit);
	});
}

/** @APPROVED */
function add_review_media_002(_param_01, _param_02, _param_03, _param_04, _param_05, _confirm_unload_page, _confirm_del_img, _defEditFotoTitle, _defEditFotoTags, _authBeforeFotoUpload, _confirm_del_video, _authBeforeVideoUpload, _fotoUploadedLabel, _videoUploadedLabel) {

	$(function() {

		var _foto_container = $('#upload-user-foto-container'),

		_foto_upl = null,

		_foto_upl_additional = null,

		_add_foto_init_obj = {
			'upload_url': _param_01,
			'file_post_name': 'file',
			'file_types': '*.jpg;*.jpeg;*.JPG;*.JPEG;*.Jpeg;*.Jpg;*.png;*.gif;*.PNG;*.GIF;*.Png;*.Gif',
			'button_placeholder_id': 'add_foto_review',
			'button_image_url': '/images/2.7.4/button/add_review_photo.png',
			'button_width': 121,
			'button_height': 118,
			'post_params': {'extravars': _param_02},
			'button_action': SWFUpload.BUTTON_ACTION.SELECT_FILES,
			'file_queue_limit': 0,
			'upload_start_handler': function(_f) {
				$('#media-waitnig-div').wakeup();
				var _card = $('<div class="file" id="' + _f.id + '"><div></div></div>').insertBefore(_foto_container.children(':last'));
				_foto_container.find('#' + _f.id).children('div').sleep();
				try {
					_initAdditionalFotoUploader();
				} catch (e) {}
				var _foto_count = $('.file', _foto_container).length,
				_label = _fotoUploadedLabel.replace('%n', _foto_count);
				_foto_container.find('h2').eq(0).html(_label);
			},
			'file_dialog_complete_handler': function(_cnt) {
				if (_cnt) {
					$('#media-waitnig-div').sleep();
					$.authJacket(
						function() {
							_foto_upl.refreshCookies();
							_foto_container.show();
							_foto_upl.startUpload();
						},
						undefined,
						_authBeforeFotoUpload
					);
				}
			},
			'upload_success_handler': function(_f, _d) {

				var _card = _foto_container.find('#' + _f.id);

				new JSONRequest({
					method: 'reloadReviewMedia',
					params: [_param_05, _param_03, 'foto'],
					success: function(_res) {
						try {
							if (_res.item !== undefined) {
								$(_res.item).insertAfter(_card);
								_card.children('div').wakeup().end().remove();
							}
						} catch (e) {}
					}
				});
			},
			'upload_complete_handler': function(_f) {

				if (_f) {

					this.startUpload();
				}
			}
		},

		_foto_upl = init_uploader(_add_foto_init_obj, true),

		_initAdditionalFotoUploader = function() {
			_foto_upl_additional = init_uploader($.extend(_add_foto_init_obj, {
				'button_placeholder_id': 'add_more_photo',
				'button_width': 196,
				'button_height': 249,
				'button_image_url': '/images/2.7.4/button/add_more_review_photo.png',
				'file_dialog_complete_handler': function(_cnt) {
					if (_cnt) {
						$.authJacket(
							function() {
								_foto_upl_additional.refreshCookies();
								_foto_upl_additional.startUpload();
							},
							undefined,
							_authBeforeFotoUpload
						);
					}
				}
			}), true);
		};
		if(!DetectFlashVer(9, 0, 0))
		{
			$('#add_review_files').css('display', 'none');
			$('#add_review_title').css('margin-left', '0');
			$('#add_review_text').css('margin-left', '0');
		}
		var _foto_container_card_manager_init = {
			'card': 'div.file',
			'img': 'a.wrap_img',
			'remove': 'a.delite',
			'editTitle': 'a.edit_title',
			'editTitleDiv': 'div.edit_title_div',
			'editTitleSave': 'a.edit_title_div_save',
			'defaultEditTitleLabel': _defEditFotoTitle,
			'defaultEditTagsLabel': _defEditFotoTags,
			'editTags': 'a.edit_tags',
			'editTagsDiv': 'div.edit_tags_div',
			'editTagsSave': 'a.edit_tags_div_save',
			'onTitleSave': function(_v, _p) {

				new JSONRequest({
					'params': [{
						'item_type': 'foto',
						'item_id': this.attr('item_id'),
						'data_type': 'title',
						'data': _v
					}],
					'method': 'editMediaData',
					'success': function() {}
				});

				_p();
			},
			'onTagsSave': function(_v, _p) {

				new JSONRequest({
					'params': [{
						'item_type': 'foto',
						'item_id': this.attr('item_id'),
						'data_type': 'tags',
						'data': _v
					}],
					'method': 'editMediaData',
					'success': function() {}
				});

				_p();
			},
			'onCardRemove': function(_r) {

				if (confirm(_confirm_del_img)) {
					var _item_id = this.attr('item_id');
					JSONRequest({
						params:[_item_id, _param_03],
						method: 'removeUserFoto',
						success: function(_res) {
						}
					});
					_r();
				}
			}
		};

		_foto_container.cardManager(_foto_container_card_manager_init);

		$(document).keydown(function(_ev) {

			if (_ev.keyCode == 27) {

				if (_foto_upl) {

					_foto_upl.stopUpload();
				}

				if (_foto_upl_additional) {

					_foto_upl_additional.stopUpload();
				}
			}
		});

		var _video_container = $('#upload-user-video-container'),

		_reloadSlotAndProceed = function() {
			var self = this;
			new JSONRequest({
				method: 'getFarmSlot',
				success: function(_res) {
					if (_res ==  undefined) {return};
					try {
						self.addPostParam('video[server_id]', _res.result['server_id']);
						self.addPostParam('video[user_id]', _res.result['user_id']);
						self.setUploadURL('http://' + _res.result['upload_url'] + '/upload?X-Progress-ID=' + _res.result['slot_id']);
					} catch (e) {
						throw e;
						return;
					}
					_video_container.show();
					self.startUpload();
				}
			});
		},

		_add_video_init_obj = {
			'upload_url': '',
			'file_post_name': 'video[file]',
			'file_types': '*.mov;*.avi;*.mpeg;*.flv;*.mp4;*.wmv',
			'button_placeholder_id': 'add_video_review',
			'button_image_url': '/images/2.7.4/button/add_review_video.png',
			'button_width': 121,
			'button_height': 118,
			'post_params': {'video[extra_vars]': _param_02},
			'button_action': SWFUpload.BUTTON_ACTION.SELECT_FILES,
			'file_queue_limit': 0,
			'file_dialog_complete_handler': function(_cnt) {
				if (_cnt) {
					$('#media-waitnig-div').sleep();
					var self = this;
					$.authJacket(function() {
						self.refreshCookies();
						_reloadSlotAndProceed.call(self);
						},
						undefined,
						_authBeforeVideoUpload
					);
				}
			},
			'upload_success_handler': function(_f, _d) {

				var _card = _video_container.find('#' + _f.id);

				new JSONRequest({
					method: 'reloadReviewMedia',
					params: [_param_05, _param_03, 'single_video'],
					success: function(_res) {
						try {
							if (_res.item !== undefined) {
								$(_res.item).insertAfter(_card);
								_card.remove();
							}
						} catch (e) {throw e}
					}
				});
			},
			'upload_start_handler': function(_f) {
				$('#media-waitnig-div').wakeup();
				var _card = $('<div class="file" id="' + _f.id + '"></div>').insertBefore(_video_container.children(':last'));
				try {
					_initAdditionalVideoUploader();
				} catch (e) {}
				var _video_count = $('.file', _video_container).length,
				_label = _videoUploadedLabel.replace('%n', _video_count);
				_video_container.find('h2').eq(0).html(_label);
			},
			'upload_complete_handler': function(_f) {
				if (_f) {
					_reloadSlotAndProceed.call(this);
				}
			},
			'upload_progress_handler': function(_f, _upld, _ttl) {var _percent = _ttl ? Math.round(100 * _upld / _ttl) : 0;$('#' + _f.id).html('<span style="font-size: 62px; color: #B9B9B9;">' + _percent + '%<span>')}
		},

		_video_upl = init_uploader(_add_video_init_obj);

		_initAdditionalVideoUploader = function() {
			_video_upl_additional = init_uploader($.extend(_add_video_init_obj, {
				'button_placeholder_id': 'add_more_video',
				'button_width': 196,
				'button_height': 249,
				'button_image_url': '/images/2.7.4/button/add_more_review_video.png'
			}));
		};

		_video_container.cardManager($.extend(_foto_container_card_manager_init, {
			'onTitleSave': function(_v, _p) {

				new JSONRequest({
					'params': [{
						'item_type': 'video',
						'item_id': this.attr('item_id'),
						'data_type': 'title',
						'data': _v
					}],
					'method': 'editMediaData',
					'success': function() {}
				});

				_p();
			},
			'onTagsSave': function(_v, _p) {

				new JSONRequest({
					'params': [{
						'item_type': 'video',
						'item_id': this.attr('item_id'),
						'data_type': 'tags',
						'data': _v
					}],
					'method': 'editMediaData',
					'success': function() {}
				});

				_p();
			},
			'onCardRemove': function(_r) {

				if (confirm(_confirm_del_img)) {
					var _item_id = this.attr('item_id');
					JSONRequest({
						params:[_item_id, _param_03],
						method: 'removeUserVideo',
						success: function(_res) {
						}
					});
					_r();
				}
			}
		}));
	});
};

/** @APPROVED */
function add_review_text_edit_js_01(_short_label, _full_label) {

	$(function() {
		$('#review_subject').smart_input({
			label: _short_label,
			filledCss: {color: _black_color},
			emptyCss: {color: _lightgrey_color}
		});

		$('#review_text').smart_input({
			label: _full_label,
			filledCss: {color: _black_color},
			emptyCss: {color: _lightgrey_color}
		});

		var _form = $('#add-review-text-form');
		_form.silent_submit({
			url: _form.attr('action'),
			container: '#add-review-text-form-holder'
		});
	});
}

/** @APPROVED */
function b_all_photo_js(_param_02, _param_03, _param_05, _auth_first) {

	if (_param_05.button_image_url !== undefined) {

		var _i = new Image();
		_i.src = _param_05.button_image_url;
	}

	$(function(){

		var _holder = $('#b-all-photo');

		if (DetectFlashVer(9, 0, 0)) {
			
			var _onFileDialogComplete = function(_cnt) {
					if (_cnt) {
						$.authJacket(function() {
							_upl.refreshCookies();
							_upl.startUpload();
						},
						undefined,
						_auth_first
						);
					}
					modal_error(_message);
				}
			
			var _onUploadSuccess = function(_f, _d){
					var progress = new FileProgress(_f, this.customSettings.progressTarget);
					progress.setComplete();
					progress.setStatus("Complete.");
					progress.toggleCancel(false);			

					onUploadPhotoSuccess(_f, _d, _param_03, callback, progress)
				}
			
			_param_05.upload_success_handler		= _onUploadSuccess;
			_param_05.file_dialog_complete_handler	= _onFileDialogComplete;
			_param_05.upload_error_handler			= onUploadPhotoError;
			_param_05.upload_complete_handler		= onUploadPhotoComplete;
			
			var _upl = init_uploader( _param_05, true )
		} else {

			replaceFlashUploader(_param_05['upload_url'], 'b-emptybox__profilecomm-addphoto', _param_03, _param_05['post_params']['extravars'], _param_02, 'b-all-photo', _auth_first);
		}

		var callback = function() {
			$.ajax({
				url: _param_02,
				cache: false,
				complete: function() {
					_holder.wakeup()
				},
				success: function(_data) {
					_holder.html(_data);
					$('#show_user_foto_only').trigger('click');
				}
			});
		};

		var _addCommentForm = $('#add_comment');

		$('#scroll-to-add-comment').click(function(_ev) {
			_ev.preventDefault();
			$.scrollTo(_addCommentForm, 300);
			_addCommentForm.find('textarea').focus();
		});

		$('.switch_photo_view').click(function(_ev) {
			_ev.preventDefault();

			var _filter = $(".all_photo .select .check").attr('filter');

			if ($('.photo_blog_view').length > 0) {
				window.location.href = $(this).attr('href') + '#' + _filter;
			} else {
				window.location.href = $(this).attr('href') + '?filter=' + _filter;
			}
		});
	})
}

/** @APPROVED */
function b_all_photo_js_marks(_thanks_your_mark) {

	$(function() {
		var _links = $('.give1, .give2, .give3, .give4, .give5'),
			_state = null, _state_html = null,
			_help = $('.give_help'),
			_i = '<i></i>';

		_links.hover(function(_ev) {

			if (_help && _help.is(':visible')) {
				_help.fadeOut();
			}

			var _target = $(this),
				_r = _target.parent().find('.raitings');

			_state = _r.attr('class');
			_state_html = _r.html();
			_r.html(_i + _target.attr('mark'));
			_r.removeClass().addClass('raitings r'+_target.attr('mark')+'0');
		},
		function(_ev) {
			var _target = $(this),_r = _target.parent().find('.raitings');

			_r.removeClass().addClass(_state);
			_r.html(_state_html);
		});

		_links.click(function(_ev) {
			_ev.preventDefault();_ev.stopPropagation();

			var _target = $(_ev.target),
				_r = _target.parent().find('.raitings'),
				_foto_id = _r.parent().attr('foto_id'),
				_mark = _target.attr('mark'),
				_info = _r.siblings().filter('.rating_info');

			_state = _r.attr('class');

			_info.html(_thanks_your_mark + _mark);
			_r.html(_i);

			new JSONRequest({
				method: 'markFoto',
				params: [ _foto_id, _mark ],
				success: function(_res) {

					_r.removeClass().addClass('raitings r'+_res.result.style);
					_r.html(_i + _res.result.rating);

					_state = _r.attr('class');
					_state_html = _r.html();
				}
			});
		});
	});
}

/** @APPROVED */
function b_all_video_js_01(_param_01, _param_03, _weel_done, _unknown_format, _smthng_broken, _evrthng_broken, _please_install_flash) {

	var _holder = $('#multimedia_hotel'),
	_progressbar = null;

	if (_param_01.button_image_url !== undefined) {

		var _i = new Image();
		_i.src = _param_01.button_image_url;
	}

	$(function() {
		if(!DetectFlashVer(9, 0, 0) && _param_01.button_width > 160)
		{
			$('#'+ _param_01.button_placeholder_id).html(_please_install_flash);
		}
		else
		{
			var _upl = init_uploader(_param_01);
			_upl = bind_video_uploader(_upl);

			_upl.uploadComplete = function(_f, _d) {
				$(document).modalbox('close');
//				$(document).modalbox('setCallback',{
//					postClose: modal_success(_well_done)
//				});

			}

			_upl.uploadError = function(_f, _ec, _em) {

				if (_em == 406) {

					modal_error(_unknown_format);
				} else if (_em == 500) {

					modal_error(_smthng_broken);
				} else if (_em == 404) {

					modal_error(_evrthng_broken);
				}
			}
		}

	var _addCommentForm = $('#add_comment');
	$('#scroll-to-add-comment').click(function(_ev) {
		_ev.preventDefault();
		$.scrollTo(_addCommentForm, 300);
		_addCommentForm.find('textarea').focus();
		});
	});
}

/** @APPROVED */
function b_photo_js_01(_param_01, _param_02, _param_03, _param_04, holder, img, _auth_first, dimx, dimy) {

	var _img = new Image();
	_img.src = _param_04 + '/i/fresh/new_photo_big.png';

	if (img) {

		_img.src = _param_04 + img;
	}

	if (!holder) {

		holder = 'b-emptybox__profilecomm-addphoto';
	}

	var $holder = $('#'+ holder);

	if (!dimx) {

		dimx = 144;
	}

	if (!dimy) {

		dimy = 115;
	}

	$(function() {

		if ($holder.length) {
			var _holder = $('#hotel_photo');
			
			var _onUploadSuccess = function(_f, _d){
					var progress = new FileProgress(_f, this.customSettings.progressTarget);
					progress.setComplete();
					progress.setStatus("Complete.");
					progress.toggleCancel(false);

					onUploadPhotoSuccess(_f, _d, _param_03, null, progress)
				};
				
			var _onFileDialogComplete = function(_cnt) {
				if (_cnt) {
						$.authJacket(function() {
							_upl.refreshCookies();
							_upl.startUpload();
						},
						undefined,
						_auth_first
						);
					}
				};			
			
			if (DetectFlashVer(9, 0, 0))
			{
				var _upl = init_uploader({
					'upload_url':					_param_01,
					'post_params':					_param_02 ? {'extravars': _param_02} : null,
					'button_image_url':				_img.src,
					'button_placeholder_id':		holder,
					'button_width':					dimx,
					'button_height':				dimy,
					'upload_complete_handler':		onUploadPhotoComplete,
					'upload_error_handler':			onUploadPhotoError,
					'upload_success_handler':		_onUploadSuccess,
					'file_dialog_complete_handler': _onFileDialogComplete
					
				}, true);
			}
			else
			{
				eval('var ex_vars = ' + _param_02);
				var deflink = '/hotels/'+ ex_vars.hotel_id+'/pics/';
				$holder.replaceWith('<a href="'+($holder.attr('href').length ? $holder.attr('href') : deflink)+'" style="display:inline-block;"><div style="background-image: url('+img+'); width: '+ dimx +'px; height: '+ dimy +'px; display:inline-block; font-size:1px;" /></a>');
			}
		}
	})
}

/** @APPROVED */
function replaceFlashUploader(form_action, holder, ajax_url, extravars, callback_url, callback_holder, _auth_first) {

	var ajxform = $('<form action="'+ form_action +'" method="post" target="upload_'+ holder +'" enctype="multipart/form-data"></form>'),
	iframe = $('<iframe name="upload_'+ holder +'" src="" style="display: none;"></iframe>'),
	_upload = $('<input name="file" type="file" class="preudo_ajax_upload" />'),
	_sbmt = $('<input id="upload_'+ holder +'" name="sbmt" type="submit" style="display: none;" />'),
	_native = $('<input type="hidden" value="1" name="native" />'),
	ajxurl = $('<input type="hidden" value="'+ ajax_url +'" name="ajxurl" />'),
	extravars = $('<input type=\'hidden\' value=\''+ extravars +'\' name=\'extravars\' />');

	if (callback_url != undefined) {

		var callback = $('<input type="hidden" value="'+ callback_url +'" name="callback_url" />'),
		callback_holder = $('<input type="hidden" value="'+ callback_holder +'" name="callback_holder" />');
		$(ajxform).append(callback).append(callback_holder);
	}

	$('#' + holder).append(ajxform);

	$(ajxform).append(_upload).append(_native).append(ajxurl).append(extravars).append(_sbmt).append(iframe);

	$(_upload).change(function(_e) {
		var form = $(this).parent().parent();
		$.authJacket(
			function() {
				$('#upload_'+ holder).trigger("click");
			},
			undefined,
			_auth_first
		);
	});

	$(_upload).customFile();
}

/** @APPROVED */
function onUploadPhotoError(_file, _err_code, _err_message, progress)
{
	if (!progress) {
		var progress = new FileProgress(_file, this.customSettings.progressTarget);
		progress.setError();
		progress.toggleCancel(false);		
	}

	switch (_err_code) {
		case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
				progress.setStatus("Cancelled");
				progress.setCancelled();
				break;
		default:
				progress.setStatus("Error");
				modal_error('Ошибка при сохранении фото ' + (_file && _file.name) + ':' + _err_message);
	}
}

function onUploadPhotoComplete(_file) {
	if (this.getStats().files_queued === 0) {
		if (uploadPhotoCallbackStorage.length > 1) {
			window.location.reload();
		} else {
			(uploadPhotoCallbackStorage.pop())()
		}
	}
}

var uploadPhotoCallbackStorage = []
/** @APPROVED */
function onUploadPhotoSuccess(_f, _d, ajxurl, call_back, _progress_obj)
{
	$(function(){

		try
		{
			eval('var _resp = ' + _d);

			if (typeof(_resp) == 'object')
			{
				if (_resp.foto_id)
				{
					if(_resp.ajxurl != undefined)
					{
						ajxurl = _resp.ajxurl;
					}

					!$('#modal_popup').length && $(document).modalbox({});

					if(_resp.callback_url != undefined)
					{
						var _holder = $('#'+_resp.callback_holder);
						var onCloseHandler = function() {
								$.ajax({
									url: _resp.callback_url,
									cache: false,
									complete: function() {
										_holder.wakeup()
									},
									success: function(_data) {
										_holder.html(_data);
										$('#show_user_foto_only').trigger('click');
									}
								});
							}
					} else {
						var onCloseHandler = function() {
								window.location.reload(true);
							}
					}
						
					var callbackItem = function() {
						$(document).modalbox('setCallback',
						{
							postClose: onCloseHandler
						}).modalbox('open',
						{
							ajax_url: ajxurl + _resp.foto_id + '/',
							popup_class: 'popup add_file_popup'
						});
					}
					// remember callback
					uploadPhotoCallbackStorage.push(callbackItem)
				}
				else if(_resp.error !== '')
				{
					onUploadPhotoError(_f, null, _resp.error, _progress_obj);
				}
			}
		}
		catch (e)
		{
			window.console && console.log(e)
		}
	});
}

/** @APPROVED */
function b_sideusers_js_01(_param_01, _tmpl) {

	$(function(){

		$('div.right_column ul.tabs li a[name]').click(function(){
			var $me = $(this);
			var target = $me.attr('name');

			var tabs = $('li', $me.parent().parent());
			tabs.removeClass('active');
			$me.parent().addClass('active');

			for (var i=0; i<tabs.length;i++) {
				var tab = $('a', tabs[i]);
				var box = $('#'+tab.attr('name'));

				if (tab.attr('name')==target) {
					box.show();
				} else {
					box.hide();
				}
			}
			return false;
		});

		$('#b-sideusers__ctrls-metoo, #b-bigbtn_gofirst2').authBind('click', function(_ev) {

			_ev.preventDefault();
			_ev.stopPropagation();

			$.modal({
				'loadUrl': _param_01,
				'template': _tmpl,
				placeInCenter: true,
				noScroll: true
			});
		});
	});
}

/** @APPROVED */
function cotraveler_card_edit_js_01(_param_01) {

	$(function(){
		$('#edit-cotraveler-card-form').silent_submit({
			url: _param_01
		});
	});
}

/** @APPROVED */
function cotraveler_card_static_js_01(_param_01, _param_02, _param_03, _param_04) {

	$(function() {
		$('#edit-cotraveler-card-link').click(function(_ev) {
			_ev.preventDefault();
			$.ajax({
				url: _param_01,
				type: 'POST',
				success: function(_r) {
					$('#user-cotraveler-card-holder').html(_r).wakeup();
				},
				beforeSend: function() {
					$('#user-cotraveler-card-holder').sleep();
				}
			});
		});
		$('#edit-review-text-link').attr('hidden_href', _param_02);
		$('#add-review-text-form').attr('action', _param_03);
		$('input.marks-review-input').val(_param_04);
	});
}

/** @APPROVED */
function foto_init_js_js_01(_param_01, _param_02, _param_03) {

	var _FotoFormTokens = _param_01;

	function showComments(_i) {
		var comments_block = _foto_comments.hide().eq(_i);

		if (comments_block.find('#comments_wrapper div').length > 0) {
			comments_block.show();

			$('h2.new-comment').show();
			$('h2.first-comment').hide();
		} else {
			$('h2.new-comment').hide();
			$('h2.first-comment').show();
		}
		initializeCommentForm(_FotoFormTokens, _i);
	}

	function showAuthor(_i) {
		var author_block=_foto_author;
		author_block.children().filter(':visible').hide();
		author_block.children().filter('[pic_id='+_i+']').show();
	}

	$(function() {

		initializeCommentForm(_FotoFormTokens, _param_02);
		_foto_comments = $('div.comments_js');
		_foto_author = $('#photo_author');
		showComments(_param_02);
		showAuthor(_param_02);

		var _img = $('div.wrap_img');
		var _img_object = _img.find('img');
		_img_object.load(function() {_img.fadeTo('slow', 1)});

		$('#fotoslider').fotoslider({
			scrollbar: 'div.scroll',
			owner: _img,
			frame: $('#foto-frame'),
			nextArrow: '#next-button',
			prevArrow: '#prev-button',
			onSelect: function(_i) {
				var _a = this, _hidden_href = _a.attr('hidden_href');
				if (getUrlHash() !== _a.attr('urlhash')) {
					setUrlHash('/');
				}
				showAuthor(_i);
				showComments(_i);_img_object.attr('src', _hidden_href);
				var _next_pic = _a.next('a');
				if (_next_pic.length) {
					var _next_pic_preloader = new Image();
					_next_pic_preloader.src = _next_pic.attr('hidden_href');
				}
			},
			startStep: _param_02
		});

		var _transformContent = function(_li) {
			var _count = $('#fotoslider').find('div').children('a').filter(':visible').length;
			$('#foto-counter').html(_count);
		}

		var _show_first_visible_pic = function() {
			var _elements = $('#fotoslider').find('div').children('a:visible');
			var _margin = parseInt(_elements.eq('0').css('margin-right'), 10) + parseInt(_elements.eq('0').css('margin-left'), 10);
			var _width = 775 + 120 * _elements.length// - _margin;
			$('#foto-counter').html(_elements.length);
			$('#sliderback').css('width', _width);
			_elements.eq(0).trigger('click');
			var discrete_step = (_elements.length - 1) ? 1 / (_elements.length - 1)  : null;
			$('div.scroll').scrollbar('updateDiscreteStep', discrete_step);
		}

		$(".all_photo .select").click(
			function (_ev) {
				_stop(_ev);
				var _el = $(this);

				if (_el.hasClass('active')) {
					_el.removeClass('active');
				} else {
					_el.addClass("active");
				}
			}
		);

		$(document).click(function(_ev) {if (!$(_ev.target).closest('.all_photo .select').length) {$(".all_photo .select").removeClass('active')}});


		$('#show_all_foto, #show_catalog_foto_only, #show_user_foto_only').click(function(_ev) {

			_stop(_ev);

			var _name = $(this).text(),
				_id = $(this).attr('id');

			var parent = $(this).closest('div.select');
			parent.find('a.selected').find('strong').html(_name);

			$(parent).removeClass('hover');
			$(parent).find('li').removeClass('check');
			$(this).addClass('check');

			$(".all_photo .select").removeClass('active');

			if (_id == 'show_all_foto') {
				$('#fotoslider').find('a.pic-user, a.pic-catalog').show();
				_transformContent($(this));
				_show_first_visible_pic();
			} else if (_id == 'show_user_foto_only') {
				var _li = $('#fotoslider').find('div').children('a');
				_li.filter('.pic-user').show();
				_li.filter('.pic-catalog').hide();
				_transformContent($(this));
				_show_first_visible_pic();
			} else if (_id == 'show_catalog_foto_only') {
				var _li = $('#fotoslider').find('div').children('a');
				_li.filter('.pic-user').hide();
				_li.filter('.pic-catalog').show();
				_transformContent($(this));
				_show_first_visible_pic();
			}
		});

		var hash = window.location.hash;

		if (hash == '#user') {
			$('#show_user_foto_only').click();
		} else if (hash == '#catalog') {
			$('#show_catalog_foto_only').click();
		} else if (hash.indexOf('&comment') > 0) {
			$('#scroll-to-add-comment').click();
			window.location.hash = window.location.hash.replace('&comment', '');
		}

		media_slider_history_bind();

		$('.wrap_img img').css('cursor', 'pointer');
		$('.wrap_img img').click(function() {
			$('#next-button').click();
		});
	});
}

/** @APPROVED */
function media_slider_history_bind() {

	$.History.bind(function(_hash) {
		if (_hash && _hash.match(/\w+/)) {
			var _li = $('#fotoslider').find('a[urlhash=' + _hash + ']');
			if (_li.length) {
				if (!_li.filter(':visible').length) {
					$('#show_all_foto').trigger('click');
				}
				_li.trigger('click');
			}
		}
	});
}

function media_listing_history_bind() {
	$.History.bind(function(_hash) {
		if (_hash && _hash.match(/\w+/)) {
			var _el = $('#hash_' + _hash);
			if (_el.length) {
				$.scrollTo(_el, 700);
			}
		}
	})
}

/** @APPROVED */
function b_main_video_js_01(video_url, video_thmb, video_id, youtube_id, _install_flash) {
	$(function() {
		if (DetectFlashVer(9, 0, 0)) {
			if (video_url) {
				var s1 = new SWFObject('/js/mediaplayer/player.swf','player','590','444','9');
				s1.addParam('allowfullscreen','true');
				s1.addParam('allowscriptaccess','always');
				s1.addParam('autostart','false');
				s1.addParam('wmode', 'opaque');
				s1.addVariable('id', 'player');
				s1.addVariable('title', '');
				s1.addVariable('file', video_url);
				s1.addVariable('image', video_thmb);
				s1.addVariable('resizing', 'true');
				s1.write('preview');

			} else if (youtube_id) {
				var s1 = new SWFObject('http://www.youtube.com/v/'+youtube_id+'?enablejsapi=1&playerapiid=ytplayer','player','590','444','9');
				s1.addParam('allowfullscreen','true');
				s1.addParam('allowscriptaccess','always');
				s1.addParam('wmode', 'opaque');
				s1.addVariable('id', 'player');
				s1.addVariable('resizing', 'true');
				s1.write('preview');
			}
		}
		else
		{
			$('#preview').html(_install_flash);
		}
	});
}

/** @APPROVED */
function video_init_js_js_01(_param_01, _param_02, _param_03, _param_04, _param_05, _param_06, _install_flash) {

	var _VideoFormTokens = _param_01;
	var _cm = 'postHotelVideoComment';
	var _def_url = _param_02;
	var _def_thmb = _param_03;
	var _def_video_id = _param_04;

	function initializeVideo(_i) {

		var _li = $('#sliderback').find('a'),
		_a = _li.eq(_i),
		_url = _a.attr('video_url'),
		_youtube_id = _a.attr('youtube_id'),
		_thmb = _a.attr('video_thmb'),
		_video_id = _a.attr('video_id');
		$('#preview').fadeTo(0, 600, function() {

			$(this).html('');
			if (!_url && !_youtube_id) {
				_url = _def_url;
				_thmb = _def_thmb;
				_video_id = _def_video_id;
			}

			if (DetectFlashVer(9, 0, 0)) {

				if (_url) {
					var s1 = new SWFObject('/js/mediaplayer/player.swf','player','712','444','9');
					s1.addParam('allowfullscreen','true');
					s1.addParam('allowscriptaccess','always');
					s1.addParam('autostart','false');
					s1.addParam('wmode', 'opaque');
					s1.addVariable('id', 'player');
					s1.addVariable('title', '');
					s1.addVariable('file', _url);
					s1.addVariable('image', _thmb);
					s1.addVariable('resizing', 'true');
					s1.write('preview');

					$('#download-video-button').show();
				} else if (_youtube_id) {
					var s1 = new SWFObject("http://www.youtube.com/v/"+_youtube_id+"?enablejsapi=1&playerapiid=ytplayer",'player','712','444','9');
					s1.addParam('allowfullscreen','true');
					s1.addParam('allowscriptaccess','always');
					s1.addParam('wmode', 'opaque');
					s1.addVariable('id', 'player');
					s1.addVariable('resizing', 'true');
					s1.write('preview');

					$('#download-video-button').hide();
				}

			} else {

				$('#preview').html(_install_flash);
			}

			$('#download-video-button').attr('href', _url);
			$('#add-to-blog-video-button').unbind('click').click(function(_ev){
				_ev.preventDefault();
				if (!_video_id) {
					_video_id=_youtube_id;
				}

				if (!$('#modal_popup').length) $(document).modalbox();
				$(document).modalbox("open", {
					ajax_url: '/getVideoEmbedTags/' + _video_id + '/',
					popup_class: 'popup add_file_popup'
				});
			});

			showAuthor(_i);
			showComments(_i);
		});
	}

	function showComments(_i) {
		var comments_block = _foto_comments.hide().eq(_i);

		if (comments_block.find('#comments_wrapper div').length > 0) {
			comments_block.show();

			$('h2.new-comment').show();
			$('h2.first-comment').hide();
		} else {
			$('h2.new-comment').hide();
			$('h2.first-comment').show();
		}
		initializeCommentForm(_VideoFormTokens, _i);
	}

	function showAuthor(_i) {
		var author_block=_video_author;
		author_block.children().filter(':visible').hide();
		author_block.children().filter('[video_id='+_i+']').show();
	}

	var _transformContent = function(_li) {
		var _cl = $('.all_video ul').find('li');
		_cl.each(function(_i, _el)
		{
			$(_el).removeClass('check');
		});
		$(_li).addClass('check');

		var _count = $('#sliderback').children('a').filter(':visible').length;
		$('#foto-counter').html(_count);
		$('.all_video .selected_current').html($(_li).children('a').html());
	}

	var _show_first_visible_pic = function() {
		var _elements = $('#sliderback').children('a:visible');
		var _margin = parseInt(_elements.eq('0').css('margin-right'), 10) + parseInt(_elements.eq('0').css('margin-left'), 10);
		var _width = 775 + 120 * _elements.length// - _margin;
		$('#foto-counter').html(_elements.length);
		$('#sliderback').css('width', _width);
		_elements.eq(0).trigger('click');
		var discrete_step = (_elements.length - 1) ? 1 / (_elements.length - 1)  : null;
		$('div.scroll').scrollbar('updateDiscreteStep', discrete_step);
	}

	$(".all_video .select").click(
			function (_ev) {
				_stop(_ev);
				var _el = $(this);

				if (_el.hasClass('active')) {
					_el.removeClass('active');
				} else {
					_el.addClass("active");
				}
			}
		);

	$(document).click(function() {
		$(".all_video .select").removeClass('active');
	});

	$('#show_catalog_foto_only').click(function(_ev) {
		_ev.preventDefault();_ev.stopPropagation();
		var _li = $('#sliderback').children('a');
		_li.filter('.video-user').hide();
		_li.filter('.video-catalog').show();
		_transformContent($(this));
		_show_first_visible_pic();
	});

	$('#show_user_foto_only').click(function(_ev) {
		_ev.preventDefault();_ev.stopPropagation();
		var _li = $('#sliderback').children('a');
		_li.filter('.video-user').show();
		_li.filter('.video-catalog').hide();
		_transformContent($(this));
		_show_first_visible_pic();
	});

	$('#show_all_foto').click(function(_ev) {
		_ev.preventDefault();_ev.stopPropagation();
		$('#sliderback').find('a.video-user, a.video-catalog').show();
		_transformContent($(this));
		_show_first_visible_pic();
	});

	$(function() {

		_foto_comments = $('div.comments_js');
		_video_author = $('div#video_author');

		$('#fotoslider').fotoslider({
			scrollbar: 'div.scroll',
			owner: $('#preview'),
			frame: $('#foto-frame'),
			nextArrow: '#next-button',
			prevArrow: '#prev-button',
			onSelect: function(_i) {
				var _a = this, _hidden_href = _a.attr('hidden_href');
				if (getUrlHash() !== _a.attr('urlhash')) {
					setUrlHash('/');
				}
				initializeVideo(_i);
			}
		});

		initializeVideo(_param_06);
		media_slider_history_bind();
	});
}

/** @APPROVED */
function startUpload(_empty_file_alert) {

	if (!$('#file').val())
    {
        alert(_empty_file_alert);
        return false;
    }
    $('.holder-right').sleep();
    var uuid = getUniqId();
    $('#uploadform').attr('action', '/my/uploadImage/?X-Progress-ID=' + uuid);
};

/** @APPROVED */
function getUniqId()
{
    var uuid = "";
    for (i = 0; i < 32; i++)
    {
        uuid += Math.floor(Math.random() * 16).toString(16);
    }
    return uuid;
};

/** @APPROVED */
function personal_images_success_js_01(_param_01, _confirm_remove, _empty_file_alert) {

	var image = undefined;
    var user_id = _param_01;


    $('#uploadform').submit(function() {return startUpload(_empty_file_alert)});


    $(".setactive_button").live('click', function (e) {
	if( (!$.browser.msie && e.button == 0) || ($.browser.msie && e.button == 1) ) {
        var image_src = undefined;
        $('.holder-left').sleep();
        $(".avatars-gallery-element").children().children().children().filter('input').attr('checked', 0);
        $(this).children().filter('input').attr('checked', 1);
        var image_id = $(this).attr('id').replace(/setactive_/g, '');
        var element = $(this);

        $.ajax({
            type: "POST",
            url: "/my/setActive/",
            data: "user_id="+user_id+"&image="+image_id,
            success: function(msg){
                image_src =$(element).parent().parent().children().children().filter('img').attr('src').replace('/small/', '/medium/');
                $("#big_avatar").attr('src', image_src);
                $('.holder-left').wakeup();
            }
          });
	}
    });

    $(".delete_button").live('click', function (e) {
	if( (!$.browser.msie && e.button == 0) || ($.browser.msie && e.button == 1) ) {
	if ( !confirm(_confirm_remove) ) {return false;}

        var image_src = undefined;
        $('.holder-right').sleep();
        $(".avatars-gallery-element").children().children().children().filter('input').attr('checked', 0);
        $(this).children().filter('input').attr('checked', 1);
        var image_id = $(this).attr('id').replace(/delete_/g, '');
        image_src = $(this).parent().parent().children().children().filter('img').attr('src').replace('/small/', '/medium/');
        var element = $(this);

        $.ajax({
            type: "POST",
            url: "/my/deleteAvatar/",
            data: "user_id="+user_id+"&image="+image_id,
            success: function(msg){
                $(element).parent().parent().remove();
                image_src = $(element).parent().parent().children().children().filter('img').attr('src').replace('/small/', '/medium/');
                $('.holder-right').wakeup();
            },
            error: function(msg){
                modal_error(msg);
                $('.holder-right').wakeup();
            }
        });


        if ( $("#big_avatar").attr('src') == image_src )
        {
	    $('.holder-left').sleep();
	    var last_image_id = $('.delete_button:last').attr('id').replace(/delete_/g, '');
	    if (last_image_id)
	    {
		$.ajax({
		    type: "POST",
		    url: "/my/setActive/",
		    data: "user_id="+user_id+"&image="+last_image_id,
		    success: function(msg){
			if ($('.avatars-gallery-element-image:last').size())
			{
			    image_src =$('.avatars-gallery-element-image:last').children().filter('img').attr('src').replace('/small/', '/medium/');
			    $("#big_avatar").attr('src', image_src);
			}
			else
			{
			    $("#big_avatar").attr('src', '/img/nofoto.gif');
			}
		    }
		});
	    }
	    {
		$("#big_avatar").attr('src', '/img/nofoto.gif');
		$('.holder-left').wakeup();
	    }
        }

	}

    });
}

/** @APPROVED */
function review_success_js_01() {

	$(function(){

		  $('#btn-submit-addreview').click(function(){
		    $('#frm-addreview').submit();
		    return false;
		  });
	});
}

/** @APPROVED */
function hotel_info_bind_why_love_01()
{
	$('#reason_love').hideOnClckOutside($('#why_love'));
	$('#reason_love').click(function(){return false;});
}

/** @APPROVED */
function hotel_info_01(hotel_id, _yes_text, _no_text, _link, _added, _removed, _auth_first, _add_text, _remove_text) {

	$(function() {
		hotel_info_favorite_click(hotel_id, undefined, undefined, undefined, undefined, _yes_text, _no_text, _link, _added, _removed, _auth_first, _add_text, _remove_text);
		//hotel_info_favorite_click(id, holder, clicker, _param_01, already_login, _yes_text, _no_text, _link, _added, _removed, _auth_first, _add_text, _remove_text);

		$('#reason_love').click(function() {
			$(this).hide();
		});
		hotel_info_bind_why_love_01();

		$('#add_vk').click(function (_ev) {
			new JSONRequest({
				method: 'logVkFavorite',
				params: [hotel_id]
			});
		});
	})
}

/** @APPROVED */
function search_params_selected_001() {
	$(function(){
		$('#params_selected').find('a').mouseenter(function() {
			$('#params_selected').addClass('sp_param_clear');
		}).mouseleave(function() {
			$('#params_selected').removeClass('sp_param_clear');
		});
	});
}

/** @APPROVED */
function search_results_sorting_001() {
	$(function(){
		$('#send_love').hideOnClckOutside($('#show_favs'));
		$('#show_favs').click(function(){$('#send_love input').focus().select();});
	});
}

$.fn.extend({
	'favoriteBtnHover': function (add_text, remove_text) {
		$(this).hover(
			function() {
				var text = $(this).hasClass('favorited') ? remove_text : add_text;
				$(this).parent().children('.hint').html(text).show();
			},
			function() {
				$(this).parent().children('.hint').html('').hide();
			}
		);
			
		return this
	}
})

$.fn.extend({
	'favoriteBtnClick': function (_html, _text, _link, _type) {
		
		$(this).each(function() {
			
			var $self = $(this)
			var self_tag = this.tagName
			var $parent = $self.parent()
			var favorite_id = $parent.attr('id').match(/\d+$/)

			if (!favorite_id) return;

			var _yes_html = (_html && _html.yes) ? _html.yes : null;
			var _no_html = (_html && _html.no) ? _html.no : null;

			var _yes_text = (_text && _text.yes) ? _text.yes : null;
			var _no_text = (_text && _text.no) ? _text.no : null;
			var _added_text = (_text && _text.added) ? _text.added : null;
			var _removed_text = (_text && _text.removed) ? _text.removed : null;
			var _auth_text = (_text && _text.auth) ? _text.auth : null;

			$self.authBind('click', function(_ev) {
				_stop(_ev);
				// shows if user not authorized and can't see his real stats
				var isAnonymous = $self.hasClass('anonym')
				$self.sleep();

				new JSONRequest({
					method: 'toggleFavoriteHotel',
					params: [ favorite_id[0], isAnonymous ],
					success: function(_res) {

						if (_res && _res.active !== undefined) {

							$parent.html( _res.active == 1 ? _yes_html : _no_html );

	//						if (_type == 'list')
	//						{
								var $self_new = $parent.find(self_tag)
									.favoriteBtnHover(_yes_text, _no_text)
									.favoriteBtnClick(_html, _text, _link, _type)
								
								var $hint = $parent.find('.hint').html( $self_new.hasClass('favorited') ? _added_text : _removed_text ).show()
								setTimeout(function(){$hint.hide()}, 2000)
	//						}
	//						else
	//						{
	//							hotel_info_bind_why_love_01();
	//							hotel_info_favorite_click(hotel_id, holder, clicker, _param_01, already_login, _yes_html, _no_html, _link, _added, _removed, _auth_first, _add_text, _remove_text);
	//						}

							$('#top_strip_line').trigger('favoriteHotelToggle');
						}
					}
				});
			}, _auth_text);
			
		})
		
		return this
	}
})

$.fn.extend({
	'profileFavoriteBtnClick': function () {
		
		$(this).each(function() {
			
			var $self = $(this),
				favorite_id = $self.parent().attr('id').match(/\d+$/)

			if (!favorite_id) return;

			$self.bind('click', function(_ev) {
				_stop(_ev);
				profile_favorite_hotels_update(favorite_id[0])
			});
		})
		
		return this
	}
})

function profile_favorite_hotels_update(hotel_id)
{
	var $cont = $('#profile-hotels-list'),
		updateUrl = $cont.data('updateUrl'),
		getParams = $cont.data('getParams'),
		data = {}

	// prepare GET params
	for (var k in getParams) {
		data[k] = getParams[k]
	}
		
	data.hotel_id = hotel_id
	
	if (updateUrl)
	{
		$.ajax({
			beforeStart: function() { $cont.sleep(); },
			complete: function() { $cont.wakeup(); },
			url: updateUrl,
			data: data,
			success: function(_res) {
				if (_res && !_res.error) {
					$('#top_strip_line').trigger('favoriteHotelToggle');
					$cont.replaceWith(_res);
				}
			}
		});
	}
}

function profile_favorite_hotels_init(_remove_text, _getParams)
{
	$('#profile-hotels-list').find('.add_hotel_to_favorite')
		.favoriteBtnHover(null, _remove_text)
		.profileFavoriteBtnClick()
	// after login refresh delete links if profile owner
	$('body').bind('authComplete', function(){
		profile_favorite_hotels_update()
	})
}

/** @APPROVED */
function search_results_001(_templateName, _added, _removed, _auth_first, _add_text, _remove_text, _type, _isAnonymous) {
	
	this.readTemplate = $.Widget.prototype.readTemplate
	var self = this
	
	$(function() {
		// read template
		self.readTemplate(_templateName)

		var _yes_html = self.template.item
		var _no_html = self.template.noitem
		var _yes_text = self.template.remove
		var _no_text = self.template.add
		var _link = self.template.tolist

		$.getJSON('http://' + document.domain + '/ajax/userservice/?cmd=islogged', function(){
			
			var btns = $('#hotel_search_result').find('.add_hotel_to_favorite')
				.favoriteBtnHover(_add_text, _remove_text)
				.favoriteBtnClick({'yes': _yes_html, 'no': _no_html}, {'yes': _add_text, 'no': _remove_text, 'added': _added, 'removed': _removed, 'auth': _auth_first}, _link, _type)
			// to prevent caching special classes, add them with js	
			_isAnonymous && btns.addClass('anonym')

		});
	});
}

function search_results_tour_init()
{
	var $allSelect = $('#hotel-select-all');
	var $checkBoxes = $('div.hotel-checkbox').children('input')
	
	$allSelect.click(function() {
		if ($(this).attr('checked')) {
			$checkBoxes.attr('checked', true)
		} else {
			$checkBoxes.attr('checked', false)
		}
	})
	
	$checkBoxes.click(function() {
		if ($(this).attr('checked')) {
			if ($checkBoxes.length == $checkBoxes.filter(':checked').length && !$allSelect.attr('checked')) {
				$allSelect.attr('checked', true)
			}
		} else {
			if ($allSelect.attr('checked')) {
				$allSelect.attr('checked', false)
			}
		}
	})
	
	$('#find-tour-list').click(function() {
		var ids = []
		var c = $checkBoxes.filter(':checked').each(function() {
			ids.push(this.value)
		})
		
		if (ids.length) {
			if (ids.length < 2) {
				var loc = c.closest('li.hotel-block').find('div.hotel-search').children('a').attr('href')
				loc.length && (window.location = loc)
			} else {
				var url = $(this).attr('data-url')
				if (url) {
					var loc = url.replace('%ids%', ids.join(','))
					if (!loc.length) return
					// hack for ie 6
					setTimeout(function(){
						window.location = loc
					}, 0)
				}
			}
		}
	})
	
	$('div.hot-tour, div.hotel-best').find('a').hover(function(){
		$(this).siblings('div.hint').show()
	}, function(){
		$(this).siblings('div.hint').hide()
	})
}

/** @APPROVED */
function hotel_search_index_guest() {
	$(function(){
		$('#login_pliz a').authBind('click', function(_ev) {
			window.location.reload(true);
		});
	});
}

/** @APPROVED */
function hotel_info_favorite_click(hotel_id, holder, clicker, _param_01, already_login, _yes_html, _no_html, _link, _added, _removed, _auth_first, _add_text, _remove_text) {

	var _clicker = $('#toggle-favorite-hotel-link'), _holder = $('#favorite_buttons');

	if(clicker){_clicker = clicker;}
	if(holder){_holder = holder;}

	if (_param_01 !== undefined) {

		if(_param_01.yes_html){_yes_html = _param_01.yes_html;}
		if(_param_01.no_html){_no_html = _param_01.no_html;}
	}

	$(_clicker).authBind('click', function(_ev) {
		_stop(_ev);
		var _button = $(this).sleep();
		var _block = $(_holder);
		// shows if user not authorized and can't see his real stats
		var isAnonymous = $(this).hasClass('anonym')
		
		if (_param_01 !== undefined)
		{
			if(already_login == 0)
			{
				$('#hotelsearch_settings').append(_link);
			}
		}

		new JSONRequest({
			method: 'toggleFavoriteHotel',
			params: [ hotel_id, isAnonymous ],
			success: function(_res) {

				if (_res && _res.active !== undefined) {

					if (_res.active == 1) {
					_block.html(_yes_html);
					} else {

						_block.html(_no_html);
					}

					if(_param_01)
					{
						var clicker = $(holder).find('a');
						hotel_info_favorite_click(hotel_id, holder, clicker, _param_01, already_login, _yes_html, _no_html, _link, _added, _removed, _auth_first, _add_text, _remove_text);
						search_results_001_hover_binder(holder, _add_text, _remove_text);
						if(!$(clicker).hasClass('favorited'))
						{
							$(holder).find('span').html(_removed);
							$(holder).find('span').attr('class', 'red_span');
						}
						else
						{
							$(holder).find('span').html(_added);
							$(holder).find('span').attr('class', 'green_span');
						}
					}
					else
					{
						hotel_info_bind_why_love_01();
						hotel_info_favorite_click(hotel_id, holder, clicker, _param_01, already_login, _yes_html, _no_html, _link, _added, _removed, _auth_first, _add_text, _remove_text);
					}
					
					$('#top_strip_line').trigger('favoriteHotelToggle');
				}
			}
		});
		},
		_auth_first
	);
}

/** @APPROVED */
function search_results_001_hover_binder(holder, _add, _remove)
{
	$(function() {
		$(holder).find('a').hover(
			function() {
				if(!$(this).hasClass('favorited')) {
					var text = _add;
					var class_name = 'green_span';
				} else {
					var text = _remove;
					var class_name = 'red_span';
				}

				$(holder).children('span').html(text).attr('class', class_name).show();
			},
			function() {
				$(holder).children('span').html('').hide();
			}
		);
	});
}

/** @APPROVED */
function choose_city_01(_param_01, _param_02) {
	$(function() {

		$('#select_city a.city_link, #select_city a.close').click(function(_e) {

			_e.preventDefault();
			_e.stopPropagation();

			$('#select_city').hide('slow');

			var _element = $(this),
			_obj = null;

			if (_element.filter('.close').length) {
				_obj = {'data': {'c': _param_02}};
			} else {
				_obj = {
					'data': {'c': _element.attr('c')},
					'complete': function() {window.location.href = window.location.href;},
					'success': function() {window.location.reload(false);}
				};
			}

			_obj = $.extend({'url': _param_01, 'type': "GET", 'cache': true}, _obj);

		    $.ajax(_obj);
		});

		$('#select_city a.selected').click(function(_e) {
			_e.preventDefault();
			_e.stopPropagation();
			$('#select_city div.o_fix').show();
		});

		$('#select_city div.drop_down a.selected').click(function(_e) {
			_e.preventDefault();
			_e.stopPropagation();
			$('#select_city div.o_fix').hide();
		});

	});
}

/** @APPROVED */
function review_media_01() {
	$('a[rel="review_photos"]').lightBox({
		fixedNavigation: true,
		imageLoading:	 '/images/lightbox-ico-loading.gif',
		imageBtnPrev:	 '/images/lightbox-btn-prev.gif',
		imageBtnNext:	 '/images/lightbox-btn-next.gif',
		imageBtnClose:	 '/images/lightbox-btn-close.gif',
		imageBlank:		 '/images/lightbox-blank.gif',
		txtImage:		 'Фото',
		txtOf:			 'из'
	});
}

/** @APPROVED */
function change_state(checkbox) {
	var label = $(checkbox).siblings('label');

	if ($(label).attr('class') == 'checked-tag') {
		$(label).removeClass('checked-tag');
	} else {
		$(label).addClass('checked-tag');
	}
}

/** @APPROVED */
function perl_user_article_form(form_action) {

	$('#user-article-form-submit').authBind('click', function(_ev) {
		$('#add-user-article-form').attr('action', form_action);
		$('#add-user-article-form').submit();
	});
}

/** @APPROVED */
function login_form_001(param_01, param_02, _email_label, _passwd_label) {
	$(function() {

		$('#popup-login-form').bind('closeLoginForm', function(){
			$.stupidModal('close');
		})
		
	});
}

/** @APPROVED */
function register_form_001(param_01, _name_label, _email_label, _passwd_label, _duplicate_passwd_label) {

	$(function() {
		
		var silent = '';
		if (param_01) {
			silent = '?silent=1';
		}

		$('#ui-modal-register-form').silent_submit({
			url: '/user/register/' + silent,
			container: '#modal_container_reg',
			sleepContainer: '#popup_register .popup-inner-wrap'
		});

	});
}

/** @APPROVED */
function recovery_form_001(param_01, _label) {

	$(function() {
		var silent = '';
		if (param_01) {
			silent = '?silent=1';
		}

		$('#ui-modal-recovery-form').silent_submit({
			url: '/user/recovery/' + silent,
			container: '#modal_container_rec',
			sleepContainer: '#popup_recovery .popup-inner-wrap'
		});

	});
}

/** @APPROVED */
function js_iframe_001() {

	$.modal('close', {
	      complete: function() {

  	          if (typeof(expecting_callback) == 'function') {
	              expecting_callback();
	          }
	      }
	  });
}

/** @APPROVED  */
function remove_review(element, review_id, _label, url) {

	if (!confirm(_label)) {
		return;
	}

	JSONRequest({
		params:[review_id],
		method: 'deleteHotelReview',
		success: function(_res) {

			if (url) {

				window.location.href = url;
			} else {

				$(element).closest('div.box').slideUp();
			}
		}
	});

	return false;
}

/** @APPROVED */
function remove_comment(element, comment_id, _confirm, _error, url) {

	var answer = confirm(_confirm);

	if (!answer){
		return;
	}


	if (url) {
		window.location.href = url;
	} else {
		$(element).parent().parent().slideUp('normal');
	}

	JSONRequest({
		params:[comment_id],
		method: 'deleteComment',
		success: function(_res) {
			if (!_res.success) {
				alert(_error);
			}
		}
	});

	return false;
}

/** @APPROVED */
function remove_photo(element,foto_id,index, _err) {
	var _hash='';
	var _sleepy_element = $(element).closest('div.active');
	_sleepy_element.sleep();

	JSONRequest({
		params:[foto_id],
		method: 'deleteHotelUserFoto',
		success: function(_res) {
			if (!_res.success) {
				_sleepy_element.wakeup();
				alert(_err + _res.error + '(' + _res.error_code + ')' );
				return;
			}
		}
	});

	var _pr=$('a.pic-user').filter('[index='+index+']');
	_pr.fadeTo('fast',0.10);
	_pr.attr('hidden_href','/i/fresh/tourstanok/no-photo.png');
	$('#photo_author').find('[pic_id='+index+']').remove();

    var _prev_pr=_pr.next('a.pic-user');
	if (!_prev_pr.length) {
		_prev_pr=_pr.prev('a.pic-user');
	}

	if (_prev_pr.length) {
		_hash=_prev_pr.attr('urlhash');
	}

	var _url=String(window.location).replace(/#.*$/,'#'+_hash+'/');
	_sleepy_element.wakeup();
	window.location = _url;
	return false;
}

/** @APPROVED */
function remove_photo_list(element, foto_id, _err) {
	var _hash='';
	var _sleepy_element = $(element).closest('tr');
	_sleepy_element.sleep();

	JSONRequest({
		params:[foto_id],
		method: 'deleteHotelUserFoto',
		success: function(_res) {
			if (!_res.success) {
				_sleepy_element.wakeup();
				alert(_err + _res.error + '(' + _res.error_code + ')' );
				return;
			}
		}
	});

	_sleepy_element.wakeup();
	_sleepy_element.slideUp();

	if ($(element).closest('table').find('tr:visible').length == 1) {
		window.location.reload();
	}

	return false;
}

/** @APPROVED */
function remove_video(element,video_id,index, _err, _blank) {
	var _hash='';
	var _sleepy_element = $(element).closest('div.active');
	_sleepy_element.sleep();


	JSONRequest({
		params:[video_id],
		method: 'deleteHotelUserVideo',
		success: function(_res) {
			if (!_res.success) {
				_sleepy_element.wakeup();
				alert(_err + _res.error + '(' + _res.error_code + ')' );
				return;
			}
		}
	});

	var _pr=$('[index='+index+']');
	_pr.fadeTo('fast',0.10);
	_pr.attr('video_url','/i/fresh/tourstanok/no-photo.png');
	$('#video_author').find('[video_id='+index+']').html('<span style="color:red">' + _blank + '</span>');

    var _prev_pr=_pr.next('div#fotoslider a');
	if (!_prev_pr.length) {
		_prev_pr=_pr.prev('div#fotoslider a');
	}

	if (_prev_pr.length) {
		_hash=_prev_pr.attr('urlhash');
	}

	var _url=String(window.location).replace(/#.*$/,'#'+_hash+'/');
	_sleepy_element.wakeup();
	window.location = _url;
	return false;
}

/** @APPROVED */
function please_register(_referer, _duplicate) {

	$(function() {

		$.authJacket(function(){window.location.reload(true);}, undefined, _duplicate);
	});
}

/** @APPROVED */
function b_all_reviews_admin(_template) {

	$(function() {
		$('.post2').each(function (index, value) {
			var _block = _template
				_id = 0;

			_id = $('.pop', value).attr('id').substr(11);

			_block = _block.replace("$review_id", _id).replace("%24review_id", _id);

			$('.post_end', value).before(_block);
		});
	});
}

/** @APPROVED */
function b_all_photo_admin(_template) {

	$(function() {
		$('#comments_wrapper .box').each(function (index, value) {

			var _block = _template, _id = 0;

			_id = $(value).attr('comment_id');
			_block = _block.replace("$comment_id", _id);

			$('p', value).after(_block);
		});
	});
}

/** @APPROVED */
function b_all_video_admin(_template) {

	$(function() {
		$('.b-feed-comments .comment_item').each(function (index, value) {

			var _block = _template, _id = 0;

			_id = $(value).attr('comment_id');
			_block = _block.replace("$comment_id", _id);

			$('p', value).after(_block);
		});
	});
}

/** @APPROVED */
function modal_success(_message, callback, options) {
	var _options = options || {}
	_options.message = _message

	$(document).modalbox('close');
//	if (!$('#modal_popup').length) $(document).modalbox();
//	$(document).modalbox('open',{
//		content: '<table class="com"><tr><td><img src="/images/2.5.4/yes.png" /></td><td>'+_message+'</td></tr></table>',
//		callbacks: {
//			postOpen: callback
//		}
//	});
	$.stupidModal('success', _options, callback);

	// postOpen execution
	if (typeof callback == 'function') callback();

	return true;
}

/** @APPROVED */
function modal_error(_message, options) {
	var _options = options || {}
	_options.message = _message
	
	$(document).modalbox('close');
	// if (!$('#modal_popup').length) $(document).modalbox();
	//$(document).modalbox('open',{
	//	content: '<table class="com"><tr><td><img src="/images/2.5.4/no.png" /></td><td>'+_message+'</td></tr></table>'
	//});
	$.stupidModal('error', _options);
	
	return true;
}

/** @APPROVED */
function modal_wait(_message) {
	if (!$('#modal_popup').length) $(document).modalbox();
	$(document).modalbox('open',{
		content: '<table class="com"><tr><td><img src="/images/2.5.4/POP_UPgif.gif" /></td><td>'+_message+'</td></tr></table>'
	});
	return true;
}

/** @APPROVED */
function replace_legacy_auth(_id, _hint, _url) {
	var _link = $(_id);
	if (_link.length) {
		_link.authBind('click', function(_ev) {
			_ev.preventDefault();
			_ev.stopPropagation();
			if (_url == undefined) {
				_url = _link.attr('href');
			}
			if (_url) {
				document.location = _url;
				modal_wait('Выполняется вход на сайт');
			}
		}, _hint);
	}
}

/** @APPROVED */
function replace_legacy_register(_id) {
	var _link = $(_id);
	if (_link.length) {
		_link.click(function(_ev) {
			_ev.preventDefault();
			_ev.stopPropagation();

			$.stupidModal('register');
		});
	}
}

/** @APPROVED */
function replace_legacy_forgot(_id) {
	var _link = $(_id);
	if (_link.length) {
		_link.click(function(_ev) {
			_ev.preventDefault();

			$.stupidModal('recovery');
		});
	}
}

/** @APPROVED */
function hotel_photo_list() {
	$(function() {

		var _dropdown_element = $(".all_photo .select");

		_dropdown_element.click(
			function (_ev) {
				_ev.preventDefault();_ev.stopPropagation();
				var _el = $(this);

				if (_el.hasClass('active')) {
					_el.removeClass('active');
				} else {
					_el.addClass("active");
				}
			}
		);

		$(document).click(function(_ev) {if (!$(_ev.target).closest('.all_photo .select').length) {_dropdown_element.removeClass('active')}});

		$('#show_all_foto, #show_catalog_foto_only, #show_user_foto_only').click(function(_ev) {

			_stop(_ev);

			var _name = $(this).text(),
				_id = $(this).attr('id'),
				_filter = $(this).attr('filter'),
				_url = window.location.href;

			var parent = $(this).closest('div.select');
			parent.find('a.selected').find('strong').html(_name);

			$(parent).removeClass('hover');
			$(parent).find('li').removeClass('check');
			$(this).addClass('check');
			_dropdown_element.removeClass('active');

			_url = _url.replace(/page=[0-9]+&/g, '')
				// replace hash
				.replace(/#[0-9a-z]+/, '')
				// replace page num
				.replace(/\/(\d+)\/(\d+)\//, '/$1/');

			if (_url.indexOf('filter') > 0) {
				_url = _url.replace(/filter=[a-z]+/g, 'filter='+_filter);
			} else if (_url.indexOf('?') > 0) {
				_url += '&filter='+_filter ;
			} else {
				_url += '?filter='+_filter;
			}

			// hack for ie6
			setTimeout(function(){
				window.location.href = _url;
			}, 0)
		});

		media_listing_history_bind();

		$('table.photo_blog_view').find('img').click(function(_ev) {
			$('.give_help').hide();
			var _td = $(this).closest('td'),
			_next_td = _td.parent().next().children('td').eq(0).filter('.big_big_big_photo');

			if (_td.is('.big_big_big_photo')) {
				_td.parent().hide().prev().show();
			} else {
				if (_next_td.length)
					_td.parent().hide().next().show();
			}
		})
	});
}

/** @APPROVED */
function regions_content_left_01(_param_01, _param_02, _search_region_label) {
	$(function() {

		var _visible_cnt = $('#regions_list .box').length;

		$('#regions_search').smart_input($.extend(_def_style, {label: _search_region_label}));

		$('#regions_search').keyup(function(_ev) {
			var _search_str = $('#regions_search').val().toLowerCase(),
				_re = new RegExp(_search_str, "gi");

			if (!_search_str) {
				$('#regions_list .box:hidden').slideDown();
				_visible_cnt = $('#regions_list .box').length;
				return;
			}

			$('#regions_list .box').each(function(index, element) {
				var _region_name = $("a.region", element).text().toLowerCase();

				if (_re.exec(_region_name)) {
					if ($(element).is(':hidden')) {
						$(element).slideDown();
						_visible_cnt++;
					}
				} else {
					if ($(element).is(':visible')) {
						$(element).slideUp();
						_visible_cnt--;
					}
				}
			});

			if (_visible_cnt == 0 && $('#not_found').is(':hidden')) {
				$('#not_found').slideDown();
			} else if (_visible_cnt > 0 && $('#not_found').is(':visible'))  {
				$('#not_found').slideUp();
			}
		});

		$('.sorting').click(function(_ev) {
			_ev.preventDefault();_ev.stopPropagation();

			var _target = $(_ev.target),
				_sorting = _target.attr('sorting_type');

			if (!_sorting) {
				return;
			}

			_target.siblings('a').removeClass('active');
			_target.addClass('active');

			$('#regions_list').sleep();

			$.ajax({
				url: _param_01,
				type: "GET",
				data: {sorting: _sorting, country: _param_02},
				success: function(_data) {

					$('#regions_list').html(_data);
					$('#regions_list').wakeup();
				},
				error: function() {
					$('#regions_list').wakeup();
				}
			});
		});
	});
}

/** @APPROVED */
function search_form_alphabet() {
	$(function() {
		$('.switch_lang a').click(function(_ev) {
			_ev.preventDefault();_ev.stopPropagation();

			var target = $(_ev.target);

			if (target.parent().hasClass("eng")) {
				$(".switch_lang.eng").hide();
				$(".switch_lang.rus").show();

				$(".letters.eng").hide();
				$(".letters.rus").show();
			} else {
				$(".switch_lang.rus").hide();
				$(".switch_lang.eng").show();

				$(".letters.rus").hide();
				$(".letters.eng").show();
			}
		});
	});
}

/** @APPROVED */
function hotels_search_form(_label) {
	$(function() {

		$('#search_name').smart_input($.extend(_def_style, {label: _label}));

		$("#hotelsearch").find('a').click(function(_ev){
			_ev.preventDefault()
			if ($('#search_name').val()) {
				$('#error_empty_name').hide();
				$('#hotelsearch input[name=]').remove();
				$('#hotelsearch').submit();
			} else if ($('#error_no_hotels').length == 0) {
				$('#error_empty_name').show();
			}
		});


		$("#hotelsearch input").keydown(function(_ev) {

			$('#error_empty_name').hide();

			if (_ev.keyCode == '13' && $('#search_name').val()) {
				$('#hotelsearch input[name=]').remove();
				$("#hotelsearch").submit();
			} else if (_ev.keyCode == '13' && $('#error_no_hotels').length == 0) {
				$('#error_empty_name').show();
			}
		});
	});
}

/** @APPROVED */
// deprecated 5 Oct 2011
function region_weather_01() {
	$(function(){
		var _link_holder = $('#weather_region_selector');
		_link_holder.find('a.selected').click(function(){_link_holder.toggleClass('active');}).end().click(function(_ev) {_ev.stopPropagation();});
		$(document).click(function() {
			_link_holder.removeClass('active');
		})
	});
}

function region_selector_01() {
	$(function(){
		var _link_holder = $('#region_selector');
		_link_holder.find('a.selected').click(function(){_link_holder.toggleClass('active');}).end().click(function(_ev) {_ev.stopPropagation();});
		$(document).click(function() {
			_link_holder.removeClass('active');
		})
	});
}

/** @APPROVED */
function region_weather_02() {
	$('#weather_switch').find('li').click(function() {
		$('#weather_switch').find('li').removeClass('active');
		$(this).addClass('active');
		var _day = $(this).find('a').attr('day');
		$('#weather_map').simple_map('switchDay', {day: _day});
	});
}

/** @APPROVED */
function review_comments_js_01(_tokens, confirm_text) {

	initializeCommentForm(_tokens, 0);
	_foto_comments = $('div.response_comments');
	$(_foto_comments).find('a.delete_comment').each(function(){
		$(this).click(function(){
			remove_comment($(this), $(this).attr('comment_id'), confirm_text);
			return false;
		});
	});
	$('#add_comment_button').click(function(_ev) {
		_ev.preventDefault();
		_ev.stopPropagation();
		$.scrollTo($('#add_comment'), 'normal');
		$('#foto_comment_text').focus();
	});
}

/** @APPROVED */
function main_page_foto_01(_param_01) {
	$(function() {
		$('.country_photo a.add').authBind('click', function(_ev) {
			_stop(_ev);

			window.location.href = _param_01;
		}, 'Чтобы добавить фотографию, войдите на сайт.');
	});
}

/** @APPROVED */
function main_page_region_01(_hide, _show) {
	$(function() {
		var is_shown = false;

		$('.section_more.regions_list').click(function(_ev) {

			var target = $(_ev.target);

			if (!is_shown) {
				target.text(_hide);
				is_shown = true;

				$('#regions_list_other').slideDown();
			} else {
				target.text(_show);
				is_shown = false;

				$('#regions_list_other').slideUp();
			}
		});

		$('.regions_list li').hover(
			function(_ev) {
				$(this).addClass("hover");
			},
			function(_ev) {
				$(this).removeClass("hover");
			}
		);
	});
}

/** @APPROVED */
function regions_content_right_01(_param_01, _param_02, _label) {
    $(function() {

        var _visible_cnt = $('#regions_list .box').length;

        $('#regions_search').smart_input($.extend(_def_style, {label: _label}));

        $('#regions_search').keyup(function(_ev) {
            var _search_str = $('#regions_search').val().toLowerCase(),
                _re = new RegExp(_search_str, "gi");

            if (!_search_str) {
                $('#regions_list .box:hidden').slideDown();
                _visible_cnt = $('#regions_list .box').length;

                $('#not_found').slideUp();
                $('#error_not_found').hide();

                $('.sort').slideDown();

                return;
            }

            $('#regions_list .box').each(function(index, element) {
                var _region_name = $("a.region", element).text().toLowerCase();

                if (_re.exec(_region_name)) {
                    if ($(element).is(':hidden')) {
                        $(element).slideDown();
                        _visible_cnt++;
                    }
                } else {
                    if ($(element).is(':visible')) {
                        $(element).slideUp();
                        _visible_cnt--;
                    }
                }
            });

            if (_visible_cnt == 0 && $('#not_found').is(':hidden')) {
                $('#not_found').slideDown();
                $('#error_not_found').show();

                $('.sort').slideUp();
            } else if (_visible_cnt > 0 && $('#not_found').is(':visible'))  {
                $('#not_found').slideUp();
                $('#error_not_found').hide();

                $('.sort').slideDown();
            }
        });

        $('.sort').click(function(_ev) {
            _stop(_ev);

            var _target = $(_ev.target),
                _sorting = _target.attr('sorting_type');

            if (!_sorting) {
                return;
            }

            _target.siblings('a').removeClass('up').removeClass('down');

            var _type = _target.attr("class");
            if (_type) {
                _type = (_type == 'up') ? "down" : "up" ;
            } else {
                _type = _target.attr("default_sorting");
            }

            _target.removeClass('up').removeClass('down')
            _target.addClass(_type);

            $('#regions_list').sleep();

            $.ajax({
                url: _param_01,
                type: "GET",
                data: {sorting: _sorting, type: _type, country: _param_02},
                success: function(_data) {

                    $('#regions_list').html(_data);
                    $('#regions_list').wakeup();
                },
                error: function() {
                    $('#regions_list').wakeup();
                }
            });
        });
    });
}

/** @APPROVED */
function user_video_tags_01(_param_01, _error) {

	$(function() {

		var _fieldset = $('#add-user-video-tags-form');
		$('#modal-submit-link').click(function(_e) {_e.preventDefault();$('#add-user-video-tags-form').submit()});

		$('#add-user-video-tags-form').submit(function(_e) {
			_e.preventDefault();
			var title = $('div.name input', _fieldset).val();
		    var result = '';
		    var htmlOutput = '';
			$(':checkbox', _fieldset).each(function () {
				if (this.checked) {

					result += (result.length > 0) ? ',' : '';
					result += this.value;

					var label = $(this).siblings('label');
					htmlOutput += (htmlOutput.length > 0) ? ', ' : '';
					htmlOutput += $(label).text();
				}
			});

			var video_id = $('#add-user-video-tags-form').attr('el_id');
			_fieldset.sleep();

			$.post(
				_param_01 + video_id + "/",
				{tags: result, title: title},
				function() {
					_fieldset.wakeup();
					changed_photo = $('#video_item_'+video_id+' ul');
					$(changed_photo).html(htmlOutput);
					$(document).modalbox('close');
				}
			);

			changed_video = $('#vido_item_'+video_id+' span');
			$(changed_video).html(htmlOutput);
		  }
		);
		$('#modal-delete-link').click(function(_e) {
			$('#modal-delete-link').sleep();
			JSONRequest({
				params:[$('#add-user-video-tags-form').attr('el_id')],
				method: 'deleteHotelUserVideo',
				success: function(_res) {
					$(document).modalbox('setCallback',{preClose: undefined})
					if (!_res.success) {
						alert(_error + _res.error + '(' + _res.error_code + ')');
					} else {
						$(document).modalbox('close');
					}
				}
			});
		});
	});
}

function user_photo_tags_01(_param_01, _param_02, _param_03, _error) {
    $(function() {
        var _fieldset = $('#add-user-foto-tags-form');
        $('#modal-submit-link').click(function(_e) {_e.preventDefault();$('#add-user-foto-tags-form').submit()});

        $('#add-user-foto-tags-form').submit(function(_e) {

           _stop(_e);

           $('#add-user-foto-tags-form').sleep();

           var title = $('div.name input', _fieldset).val(), result = '', htmlOutput = '';

           $('input:checkbox', _fieldset).each(function () {
                if (this.checked) {

                    result += (result.length > 0) ? ',' : '';
                    result += this.value;

                    var label = $(this).siblings('label');
                    htmlOutput += (htmlOutput.length > 0) ? ', ' : '';
                    htmlOutput += $(label).text();
                }
            });

            var photo_id = $('#add-user-foto-tags-form').attr('el_id');
            $.post(
                    _param_01 + photo_id + "/",
                    {tags: result, title: title},
                    function(_hash) {

                        if (_param_03) {
                            window.location.href = _param_02 + "#" + _hash;
                        }

                        $('#add-user-foto-tags-form').wakeup();
                        $(document).modalbox('close')
                    }
            );

            changed_photo = $('#item_'+photo_id+' span');
            $(changed_photo).html(htmlOutput);
          }
        );
        $('#modal-delete-link').click(function(_e) {
            $('#modal-delete-link').sleep();
            JSONRequest({
                params:[$('#add-user-foto-tags-form').attr('el_id')],
                method: 'deleteHotelUserFoto',
                success: function(_res) {
                    if (!_res.success) {
                        modal_error(_error + _res.error + '(' + _res.error_code + ')');
                    } else {
                        $(document).modalbox('close');
                    }
                }
            });
        });
    });
}

$.fn.extend({
	'profileDeletePhoto': function() {
		
		$(this).click(function(ev){
			ev.preventDefault();
			
			var self = this
			var $block = $(self).closest('div.photo-info').parent();			
			
			if (confirm('Вы действительно хотите удалить эту фотографию?')) {
				$.ajax({
					url: self.href,
					beforeSend: function() {$block.sleep()},
					complete: function() {$block.wakeup()},
					success: function(res) {
						if (res && res.success) {
							window.location.reload()
						} else {
							modal_error('Возникла ошибка. Позже попробуйте снова.')
						}
					}
				})
			}
		})		
	}
})

function init_faq(){
	$('#client_faq a').click(
		function(){
			$(this).parent().parent().toggleClass('active');
		}
	);
	$.History.bind(function(hash){
		if (hash) {
			$('dl:has(#'+hash+')').toggleClass('active');
			$.scrollTo($('#'+hash),{
				offset: -100,
				duration: 800
			});
		}
	});
}

function init_isic_page() {
	$('#iytc_container').find('a').not('.mini_contact a').click(function(){
		$('#isic_container').removeClass('active');
		$('#itic_container').removeClass('active');
		$('#iytc_container').toggleClass('active')
		return false;

	});
	$('#isic_container').find('a').not('.mini_contact a').click(function(){
		$('#iytc_container').removeClass('active');
		$('#itic_container').removeClass('active');
		$('#isic_container').toggleClass('active');
		return false;


	});
	$('#itic_container').find('a').not('.mini_contact a').click(function(){
		$('#isic_container').removeClass('active');
		$('#iytc_container').removeClass('active');
		$('#itic_container').toggleClass('active')
		return false;


	});
}

function client_contracts_001() {
	_getVal = function(_li) {return _li.attr('val')},
	_getLabel = function(_li) {return _li.children('a').html()},
	_setLabel = function(_label) {
		var _links;
		if (_links = this.options.getLinks.call(this)) _links.children('span').html(_label);
		this.options.getParent.call(this).find('span.container-hidden').html(_label);
	};
	var _widgetPrice = $('#filter-contracts-city').formWidgetCollapsable({name: 'contracts_office', value: $('#contracts_office').val(), getValue: _getVal, getLabel: _getLabel, setLabel: _setLabel});

}
function searchRequestSimpleFormInit(){

	// if params from pick have been passed, then we could use it as default values
	if($.hash() && $.hash().length > 10) {
		var hash = parseSerializedHash($.hash())
		if(hash.city) $('#search_request_simple_city').val(hash.city)
	}

	$("#search_request_simple").submit(function(){
		if (validateSearchRequestSimpleForm()){
			var $f = $(this)
			$('#main-content-container').sleep({'shroud_css':{'z-index':200}});
			data_form = $f.serializeArray();
			$.post("/search_request_create/", data_form,
			function(html) {				
				if ($(html).find('div.request-order-complete').length)
					$('#main-content-container').html(html)
				else
					$f.closest('div.request-form').html(html);
				
			   	$('#request-explanation').hide();
			   	$('#main-content-container').wakeup();
			});
		}
		return false;
	});
	$("#search-request-simple-submit").click(function(){
		$('#search_request_simple').submit();
		return false;
	});
}

function parseSerializedHash(hash) {
	var res = {}
	$(hash.split('&')).each(function() {
		var split = this.split('=')
		res[split[0]] = split[1]
	})

	return res
}

/*
rooms = {
	id: [adultsNum, childrenNum]
}
*/

function searchRequestFormInit(rooms){
	initSearchRequestDateWidget('from');
	initSearchRequestDateWidget('to');
	var default_valut = true,
	country_valut = eval('(' + $('#search_request_country_valut').val() + ')');
	$('#search_request_country_valut').val(0);
	$('#search_request_tour_valut').val(country_valut[$('#search_request_country').val()]);
	$('#search_request_country').change( function (){
		if (default_valut){
			$('#search_request_tour_valut').val(country_valut[$('#search_request_country').val()]);
		}
	});
	$("#search_request_tour_valut").one("change", function(){
	  default_valut = false;
	});
	$('#search_request').submit(function(){
		if (validateSearchRequestForm()){
			var $f = $(this)
			$('#main-content-container').sleep({'shroud_css':{'z-index':200}});
			data_form = $f.serializeArray();
			$.post("/search_request_create/", data_form,
			function(html) {
			   	if ($(html).find('div.request-order-complete').length)
					$('#main-content-container').html(html)
				else
					$f.closest('div.request-form').html(html);
				
			   	$('#request-explanation').hide();
			   	$('#main-content-container').wakeup();
			});
		}
		return false;
	});
	$('#search_request_total_kids').change(function(){
		renderChildAge();
	});
	renderChildAge();
	/*$("#search_request input").keypress(function(_ev) { if (_ev.keyCode == 13) { $(this).submit() } });	*/
	$("#search-request-submit").click(function(){
		$('#search_request').submit();
		return false;
	});
	function renderChildAge(){
		var total_kids = $('#search_request_total_kids').val();
		$('.child-age').each(function(i){
			if(i<total_kids){
				$(this).attr('class', 'el-select select-min child-age');
			}else{
				$(this).attr('class', 'el-select select-min child-age hidden');
			}
		});
	}

	// if params from pick have been passed, then we could use it as default values
	if($.hash() && $.hash().length > 5) {
		var hash = parseSerializedHash($.hash())
		var i = 0

		if(hash.country) {
			$('#search_request_country').val(hash.country).trigger('change')
		}

		var stars = {
			// search_star_id: rate
			1: 2,
			2: 3,
			3: 4,
			4: 5
		}

		if(hash.stars && stars[hash.stars]) {

			var minStars = stars[hash.stars], maxStars = stars[hash.stars]
			if(hash.starsBetter) maxStars = 5

			for(i = minStars; i <= maxStars; i++) {
				$('#search_request_hotel_rate_'+i+'_').attr('checked', 'checked')
			}

		}

		if(hash.departureFrom) {
			$('#date-from').val(parseDate(hash.departureFrom)).trigger('select')
		}

		if(hash.departureTo) {
			$('#date-to').val(parseDate(hash.departureTo)).trigger('select')
		}

		if(hash.durationFrom) {
			$('#search_request_days_from').val(hash.durationFrom);
		}

		if(hash.durationTo) {
			$('#search_request_days_to').val(hash.durationTo);
		}

		var adults = 0, children = 0

		if(hash.room && rooms[hash.room]) {
			var r = rooms[hash.room]
			var adults = +r[0], children = +r[1]
			$('#search_request_total_adults').val(adults)
			$('#search_request_total_kids').val(children).trigger('change')
			for(i = 1; i <= children; i++) {
				if(hash['child'+i]) {
					$('#search_request_child_age' + i).val(hash['child'+i])
				}

			}
		}

		if(hash.city) {
			$('#search_request_city').val(hash.city)
		}

		if((adults+children) > 0 && (hash.priceFrom || hash.priceTo)) {
			$('#search_request_tour_valut').val(1) // USD
			// цена может быть указана и за человека, что будет отражено в хеше
			var priceMult = hash.priceType == 'person' ? (adults + children) : 1

			if(hash.priceFrom) {
				$('#search_request_price_from').val((+hash.priceFrom) * priceMult)
			}
			if(hash.priceTo) {
				$('#search_request_price_to').val((+hash.priceTo) * priceMult)
			}
		}

	}

}

// parse date like m.d.Y
function parseDate(str) {
	if(str instanceof Date) return str
	if(typeof(str) != 'string') return null
	var parts = str.split(/\./g)

	var ret = new Date(parts[2], parts[1] - 1, parts[0])
	if(!ret || !ret.getTime || !ret.getTime()) return false

	return ret
}

Date.prototype.toYMD = Date_toYMD;
function Date_toYMD() {
    var year, month, day;
    year = String(this.getFullYear());
    month = String(this.getMonth() + 1);
    if (month.length == 1) {
        month = "0" + month;
    }
    day = String(this.getDate());
    if (day.length == 1) {
        day = "0" + day;
    }
    return year + "-" + month + "-" + day;
}
function initSearchRequestDateWidget(orient){
	// needs to be refactored to use tourCalendar widget instead
	var day_label = ['воскресенье', 'понедельник', 'вторник', 'среда', 'четверг', 'пятнитца', 'суббота'];
	var month_label = [ 'января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря' ];

	var _today_date = new Date();
	var _max_date = new Date();
	_max_date.setFullYear(_max_date.getFullYear() + 1);
	var date_value =  new Date($('#search_request_date_'+orient).val());

	$('#date-'+orient).newCalendar({
	    minDate: _today_date,
	    maxDate: _max_date,
	    template: 'calendar',
	    value: date_value
	});

	$('#date-'+orient+'-btn').click(function(){
		if(orient == 'from'){
			$('#date-to').newCalendar('close');
		}else{
			$('#date-from').newCalendar('close');
		}
		if(!$('#date-'+orient).newCalendar('isOpen')){
			$('#date-'+orient).newCalendar('open');
		}else{
			$('#date-'+orient).newCalendar('close');
		}
		return false
	});

	$('#date-'+orient).bind('select', function(){
		redrawSearchRequestDateLabel(orient);
		if($('#date-from').val()>$('#date-to').val()){
			if(orient == 'from'){
				$('#date-to').newCalendar('setValue', $('#date-from').val());
				redrawSearchRequestDateLabel('to');
			}else{
				$('#date-from').newCalendar('setValue', $('#date-to').val());
				redrawSearchRequestDateLabel('from');
			}
		}
		// кто-то вешается на событие ещё и, гад такой, открывает календарь
		// мне лень сейчас это выяснять, но выяснить всё же придется
		setTimeout(function() {
			$('#date-'+orient).newCalendar('close')
		}, 100)
	});

	redrawSearchRequestDateLabel(orient);

	function redrawSearchRequestDateLabel(orient){
		var date = $('#date-'+orient).val();
		
		if(date.getDay()==0 || date.getDay()==6){
			$('.cal-'+orient).attr('class', 'cal cal-'+orient+' cal-weekend');
		}else{
			$('.cal-'+orient).attr('class', 'cal cal-'+orient);
		}
		$('#date-'+orient+'-btn .day').text(day_label[date.getDay()]);
		$('#date-'+orient+'-btn p:last').text(date.getDate()+' '+month_label[date.getMonth()]);
		$('#search_request_date_'+orient).val(date.toYMD());
		if(orient=='from'){
			$('#search_request_date_begin').val(date.toYMD());
		}
	}
}

function validateSearchRequestSimpleForm()
{
	var email_re = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
	var phone_re = /^[0-9\-\s\(\)\+]+$/;
	var client_more = $('#search_request_simple_client_more').val();
	var client_phone = $('#search_request_simple_client_phone').val();
	var client_email = $('#search_request_simple_client_email').val();
	var client_name = $('#search_request_simple_client_name').val();

	if (client_more==null || $.trim(client_more)=="")
	{
	  $.bubble({obj: $('#search_request_simple_client_more'), type: 'error', body: 'Введите пожелания к туру'});
	  return false;
	}
	if ( (client_phone==null || $.trim(client_phone)=="") && (client_email==null || $.trim(client_email)=="") )
	{
	  $.bubble({obj: $('#search_request_simple_client_phone'), type: 'error', body: 'Введите телефон ...'});
	  $.bubble({obj: $('#search-request-simple-submit'), pos: 'tr', type: 'error', body: '... или email'});
	  return false;
	}
	if (client_phone!=null && $.trim(client_phone)!="" && !phone_re.test(client_phone))
	{
	  $.bubble({obj: $('#search_request_simple_client_phone'), type: 'error', body: 'Неверный формат телефона'});
	  return false;
	}
	if (client_email!=null && $.trim(client_email)!="" && !email_re.test(client_email))
	{
	  $.bubble({obj: $('#search_request_simple_client_email'), type: 'error', body: 'Неверный формат email'});
	  return false;
	}
	if ( client_name==null || $.trim(client_name)=="" )
	{
	  $.bubble({obj: $('#search_request_simple_client_name'), type: 'error', body: 'Введите ваше имя'});
	  return false;
	}
	return true;
}
function validateSearchRequestForm()
{
	var email_re = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
	var phone_re = /^[0-9\-\s\(\)\+]+$/;
	var p_int_re = /^[1-9]+[0-9]*$/;
	var client_phone = $('#search_request_client_phone').val();
	var client_email = $('#search_request_client_email').val();
	var client_name = $('#search_request_client_name').val();
	var price_from = $.trim($('#search_request_price_from').val());
	var price_to = $.trim($('#search_request_price_to').val());
	if (price_from && !p_int_re.test(price_from))
	{
	  $.bubble({obj: $('#search_request_price_from'), type: 'error', body: 'Неверный формат цены'});
	  return false;
	}
	if (price_to && !p_int_re.test(price_to))
	{
	  $.bubble({obj: $('#search_request_price_to'), type: 'error', body: 'Неверный формат цены'});
	  return false;
	}
	if ( (client_phone==null || $.trim(client_phone)=="") && (client_email==null || $.trim(client_email)=="") )
	{
	  $.bubble({obj: $('#search_request_client_phone'), type: 'error', body: 'Введите телефон ...'});
	  $.bubble({obj: $('#search-request-submit'), pos: 'tr', type: 'error', body: '... или email'});
	  return false;
	}
	if (client_phone!=null && $.trim(client_phone)!="" && !phone_re.test(client_phone))
	{
	  $.bubble({obj: $('#search_request_client_phone'), type: 'error', body: 'Неверный формат телефона'});
	  return false;
	}
	if (client_email!=null && $.trim(client_email)!="" && !email_re.test(client_email))
	{
	  $.bubble({obj: $('#search_request_client_email'), type: 'error', body: 'Неверный формат email'});
	  return false;
	}
	if ( client_name==null || $.trim(client_name)=="" )
	{
	  $.bubble({obj: $('#search_request_client_name'), type: 'error', body: 'Введите ваше имя'});
	  return false;
	}

	return true;
}

function lottery_countdown_001(start_time, url) {
	$('#lottery-timer').click(function(){
		location.href = url;

	});
	var time=start_time,
	update = function () {


		if (time>0) {
			format(time);
			setTimeout(update,1000);
			time=time-1;
		} else {
			$('.lottery-timer').hide();
		}
	},
	pad = function(time){
		var str = '' + (typeof time != 'undefined' && time ? time : '');
		while (str.length < 2) {
			str = '0' + str;
		}

		return str;
	},
	format = function (local_time) {
		var d=86400;
		var days;
		if (time>d) {
			days=Math.floor(time/d).toString();
			local_time=local_time-days*d;
		}
		var hours;
		var minutes;
		$.each([3600,60],function(i,val) {
			if(val == 3600){
				hours = Math.floor(local_time/val);
			} else {
				minutes = Math.floor(local_time/val);
			}
			local_time=local_time-Math.floor(local_time/val)*val;
		});
		$('#lot_days').html(pad(days));
		$('#lot_hours').html(pad(hours));
		$('#lot_mins').html(pad(minutes));
		$('#lot_secs').html(pad(local_time));
	}
	update();
}

function default_countdown(start_time, url, options) {
	$(options['timer-container']).click(function(){
		location.href = url;

	});
	var time=start_time,
	update = function () {


		if (time>0) {
			format(time);
			setTimeout(update,1000);
			time=time-1;
		} else {
			//$(options['timer-container']).hide();
		}
	},
	pad = function(time){
		var str = '' + time;
		while (str.length < 2) {
			str = '0' + str;
		}

		return str;
	},
	format = function (local_time) {
		var d=86400;
		var days = 0;
		if (time>d) {
			days=Math.floor(time/d);
			local_time=local_time-days*d;
		}
		var hours = 0;
		var minutes = 0;
		$.each([3600,60],function(i,val) {
			if(val == 3600){
				hours = Math.floor(local_time/val);
			} else {
				minutes = Math.floor(local_time/val);
			}
			local_time=local_time-Math.floor(local_time/val)*val;
		});
		$(options['days']).html(pad(days.toString()));
		$(options['hours']).html(pad(hours));
		$(options['minutes']).html(pad(minutes));
		$(options['seconds']).html(pad(local_time));
	}
	update();
}

function loadClientForm(_url, _params) {
	$.ajax({
		url: _url,
		data: _params,
		success: function(data) {
			$('#form_container').html(data);
		}
	})
}

function init_clients_auth_form(opt, url, redirect_url) {
	// detect selected value
    if (!opt.office_list.selected && window.LAST_SEARCH_PARAMS) {
        params = parseSerializedHash(window.LAST_SEARCH_PARAMS);
        if ('city' in params) opt.office_list.selected = params['city'];
    }

	$('#clients-select-city').tourSelectList({
		template: 'tourSelectList',
		opts: opt.office_list.options,
		value: opt.office_list.selected
	}).bind('select', function(e,value) {
		$('#contract_office').val(value)
	});
	
	$('#open').click(
		function(){
			$('#example_agreement').show();
			$('#open').toggleClass('close-example');
			$('#close').toggleClass('close-example');
			return false;
		}
		);
	$('#close').click(
		function(){
			$('#example_agreement').hide();
			$('#open').toggleClass('close-example');
			$('#close').toggleClass('close-example');
			return false;
		}
		);
//	$('#contract_client_login').smart_input($.extend(_def_style, {
//		label: 'номер договора'
//	}));
//	$('#contract_client_password').smart_input($.extend(_def_style, {
//		label: 'пароль'
//	}));
	$('#contract_client_pass').show_password('#show_client_password');

	$('#contracts_form').submit(
		function(_ev){
			_ev.preventDefault();

			data_form = $(this).serializeArray();
			for (key in data_form){
				if (data_form[key].value.length == 0) {
					$('#error').html('Заполните все поля');
					return false;
				}
			}

			function post_contract_form() {
				$.ajax({
					type: 'POST',
					url: url,
					data: data_form,
					success: function(data){
						if(data.code == 1){
							// to prevent login/password remembering
							// $('#contracts_form').attr('action', redirect_url);
							// $('#contracts_form').submit();
							window.location.reload();
						} else {
							$('#error').html(data.error);
						}
					},
					dataType: "json"
				});
			}

			// set user vid
			setUserVid(post_contract_form);
			return false;
		}
	).keydown(function(ev){
		ev.keyCode == 13 && $(this).submit()
	});
		
	$('#contract_submit').click(function(ev){
		ev.preventDefault();
		$('#contracts_form').trigger('submit');
	})

}

function init_client_logout(id, url, redirect_url){
	var counter = 0;
	$('#'+id).click(
		function(){
			var data = {};
			data.logout = 1;
			$.ajax({
				type: 'POST',
				url: url,
				data: data,
				success: function(data){
					if(data.code == 1){
						location.href = redirect_url;
					}
				},
				error: function(data){
					if(counter < 5){
						$('#'+id).trigger('click');
						counter++;
					}
				},
				dataType: "json"
			});
		}
		);
}

function init_client_card_login_form(url) {
	//$('#card_client_login').smart_input($.extend(_def_style, {label: 'номер карты'}));
	//$('#card_client_password').smart_input($.extend(_def_style, {label: 'пароль'}));
	$('#cards_form').submit(
		function(_ev){
			_ev.preventDefault();

			data_form = $('#cards_form').serializeArray();
			for (key in data_form){
				if(data_form[key].value.length == 0) {
					$('#error').html('Заполните все поля');
					return false;
				}
			}

			function post_card_form() {
				$.ajax({
					type: 'POST',
					url: url,
					data: data_form,
					success: function(data){
						if(data.code == 1){
							// $('#cards_form').attr('action', url);
							// $('#cards_form').submit();
							window.location.reload();
						} else {
							$('#error').html(data.error);
						}
					},
					dataType: "json"
				});
			}

			// set user vid
			setUserVid(post_card_form);
			return false;
		}
	).keydown(function(ev){
		ev.keyCode == 13 && $(this).submit()
	});
//	$('#card_client_login').keypress(function(e) {
//		if(e.keyCode == 13){
//			e.preventDefault();
//			$('#card_submit').trigger('click');
//		}
//		if(e.keyCode == 8 && $(this).val().length == 0){
//			$('#card_seria').focus();
//		}
//	});
//	$('#card_client_password').keypress(function(e) {
//		if(e.keyCode == 13){
//			e.preventDefault();
//			$('#card_submit').trigger('click');
//		}
//	});

	$('#card_submit').click(function(ev){
		ev.preventDefault();
		$('#cards_form').trigger('submit');
	})

	$('#card_seria').keydown(function(ev){
		if ($(this).val().length >=2 && (ev.keyCode != 8 && ev.keyCode != 46 && ev.keyCode != 9)){ // Backspace, Delete, Tab
			if($(this).val().length > 2){
				$('#card_client_login').val($(this).val().substr(2));
				$(this).val($(this).val().substr(0, 2));
			}
			$('#card_client_login').focus();
		}
	});
	$('#card_client_login').keydown(function(ev){
		if ($(this).val().length >=6 && (ev.keyCode != 8 && ev.keyCode != 46 && ev.keyCode != 9)){
			$('#card_client_pass').focus();
		}
		if((ev.keyCode == 8 || ev.keyCode == 46) && $(this).val().length == 0){
			$('#card_seria').focus();
		}		
	});

	$('#card_client_pass').show_password('#show_client_password');
}

// show_password
$.fn.extend({
	'show_password': function (trigger) {
		var ob = this;

		function triggerPass(checkbox) {
			if (checkbox.checked) {
				$('#' + ob.inputClone).val( $(ob).hide().val() ).show();
			} else {
				$(ob).val( $('#' + ob.inputClone).hide().val() ).show()
			}
		}

		this.inputClone = $(this).attr('id') + '_clone';
		$(this).after($('<input type="text" />').attr({'class': $(this).attr('class'), 'value': $(this).val(), 'id': this.inputClone})
		.change(function(){
			$(ob).val( $(this).val() );
		}))
		.change(function(){
			$('#' + ob.inputClone).val( $(this).val() );
		});

		trigger = $(trigger);
		triggerPass(trigger);

		trigger.click(function(){
			triggerPass(this);
		});
	}
});

(function($) {
	$.stupidModalStorage = [];
	$.stupidModal = function(type, options, callback){
		this.baseClass = 'modal_form_popup';
		this.callbacks = [];
		var self = this;
		var popup = null;
		
		options = options || [];
		// prepare options
		options.executeHandler = typeof options.executeHandler == 'undefined' ? null : options.executeHandler;
		options.positioning = typeof options.positioning == 'undefined' ? null : options.positioning;
		options.message = typeof options.message == 'undefined' ? null : options.message;

		this.executeAll = function() {
			while ($.stupidModalStorage.length) {
				var fn = $.stupidModalStorage.shift();
				try {
					fn();
				} catch (err) {
					window.console && console.log(err);
				}
			}			
		}
		
		this.setCloseTimeout = function() {
			window.popupTimeOut = setTimeout(function(){
				$.stupidModal('close');
			}, 3000)
		}
		
		this.clearCloseTimeout = function() {
			window.popupTimeOut && clearTimeout(window.popupTimeOut);
		}
		
		var lastPopup = $('#popup_set').children('div.popup2:visible').hide()
		

		if (type == 'close') {
			// $('#modal_tint_').hide();
			this.clearCloseTimeout()
			// execute callbacks
			if (lastPopup.attr('id') != 'popup_login') {
				self.executeAll()
			}
			if (lastPopup.attr('id') == 'popup_register_success') {
				// reload without get parameters
				var host = window.ROOT_HOST ? ROOT_HOST : window.location.host;
				window.location = 'http://' + host;
			}
		} else if (type == 'quit') {
			// clear callbacks
			$.stupidModalStorage = []
		} else {
			
			// Accumulating callbacks
			if (typeof(callback) == 'function') {
				$.stupidModalStorage.push(callback);
			}			
			
			if (options.executeHandler) {
				// ... and executing them
				$('body').bind(options.executeHandler, function(e){
					self.executeAll()
					$('body').unbind(e.type)
				});
			}
			
			// $('#modal_tint_').show();

			if (type == 'login') {
				// authComplete
				// Show popup window
				popup = $('#popup_login').show()
			} else if (type == 'register') {
				// Show popup window
				popup = $('#popup_register').show()
			} else if (type == 'recovery') {
				// Show popup window
				popup = $('#popup_recovery').show()				
			} else if (type == 'regsuccess') {
				// Show popup window
				popup = $('#popup_register_success').show()
			} else if (type == 'error') {
				popup = $('#popup_notification_error').find('span.text_place_holder').html( !options.message ? '' : options.message ).end().show()
				this.setCloseTimeout()
			} else {
				popup = $('#popup_notification_success').find('span.text_place_holder').html( !options.message ? '' : options.message ).end().show()
				this.setCloseTimeout()
			}
			
			if (!options.positioning || (options.positioning != 'top' && options.positioning != 'related')) {
				popup.css("top", (($(window).height() - popup.outerHeight()) / 2) + $(window).scrollTop() + "px")
			} else if (options.positioning == 'related') {
				popup.css("top", lastPopup.css("top"))
			} else {
				popup.css("top", "80px")
			}
			popup.find('form').find('input[value=""]:visible').filter(':first').focus();
		}
	}
	$(function() {
		var hash = window.location.hash
		if (hash && hash.search("auth") == 1) {
			var bmatch = hash.match(/backurl=(.+)/)
			// if we have backurl perform reload to this url
			$.stupidModal('login', {positioning:'top', executeHandler:'authComplete'}, (bmatch && bmatch.length > 1 ? function(){
				var url = bmatch[1].split('?redirect=')
				window.location= url.length > 1 ? url[0] + '?redirect=' + encodeURIComponent(url[1]) : url
			} : null))
		}
		
		$('#popup_set').find('a.close-popup').click(function(ev){
			ev.preventDefault();
			$.stupidModal('close');
		}).end().live('keydown', function(ev){
			if (ev.keyCode == 27) $.stupidModal('quit');
		});
		
		$(document).keydown(function(ev){
			if (ev.keyCode == 27) $.stupidModal('quit');
		})
		
		$('#popup_set').find('.ui_submit_btn').live('click', function(ev){
			ev.preventDefault();
			$(this).closest('form').submit();
		}).end().find('.ui_register_link').live('click', function(ev){
			ev.preventDefault();
			$.stupidModal('register', {positioning: 'related'});
		}).end().find('.ui_login_link').live('click', function(ev){
			ev.preventDefault();
			var href = this.href
			if (href.length && href.search('http') == 0) {
				window.location=renderAuthHash(href)
			} else {			
				$.stupidModal('login', {positioning: 'related', executeHandler:'authComplete'});
			}
		}).end().find('.ui_forgot_link').live('click', function(ev){
			ev.preventDefault();
			$.stupidModal('recovery', {positioning: 'related'});
		})
		
		$('#vk_social_auth').socialAuthInitVk(
			'vk_email_wrapper',
			'Были ли Вы уже зарегистрированы на нашем сайте?',
			'При авторизации возникла ошибка'
		)
		
		// $('#mru_social_auth').socialAuthInitMru()
		
		$('#fb_social_auth').socialAuthInitFb()
		
		$('#top_strip_line').live('favoriteHotelToggle', function(){
			$.ajax({
				url: '/hotel/reloadHeaderFavorite/',
				success: function(data) {
					if (data) {
						$('#fav_hotels_count').html(data);
					}
				}
			})
		}).live('refreshReviews', function(){
			$.ajax({
				url: '/profile/reloadHeaderReviews/',
				success: function(data) {
					if (data) {
						$('#top_reviews_count').html(data);
					}
				}
			})
		})
		
		$('body').bind('authComplete', function(){
			init_header_widgets();
			// render user city
			renderUserCity();
			// refresh data for visitor
			init_hotel_history();
			init_search_history();
		})
		
	})
	
})(jQuery);

$.fn.extend({
	'socialAuthInitVk': function(related_id, confirm_msg, error_msg) {
		var $self = $(this)
		var api = $self.attr('data-api')
		
		// Social login
		$('head').append('<script type="text/javascript" src="http://userapi.com/js/api/openapi.js?34"></script>');
		var waitVk = setInterval(function(){
			if (window.VK) {
				clearInterval(waitVk)
				try {
					VK.init({apiId:api})
				} catch (e) {
					window.console && console.log(e)
				}
			}
		}, 50)

		var clk = 0;
		
		$(this).live('click', function(ev){
			ev.preventDefault();
			var $related = $('#'+related_id)
			if (clk++ % 2 == 0) {
				if (window.VK) {
					VK.Widgets.Auth(related_id, {width: "200px",
						onAuth: function(data) {
							if (data) {
								$related.sleep()
								$.ajax({
									url: $self.attr('data-auth'),
									data: {auth: data},
									complete: function() {$related.wakeup();},
									success: function(resp) {
										if (resp.success) {
											Auth.loginOk(resp.data)
										} else if (resp.error) {
											$related.html(error_msg || resp.message)
										} else {
											$related.html(resp)
										}
									}
								})
							}
						}
					});
				}
				
				$related.removeClass('hidden')
			} else {
				$related.addClass('hidden').html('')
			}
				
		})		
	}
})

$('head').append('<script type="text/javascript" src="http://cdn.connect.mail.ru/js/loader.js"></script>')

$.fn.extend({
	'socialAuthInitMru': function() {		
		
		var $self = $(this)
		var $mru_btn = $self.find('.mrc__connectButton')
		var _appId = $self.attr('data-api')
		console.log(_appId)
		var _privateKey = $self.attr('data-private')
		console.log(_privateKey)
		
		function initMru() {
			// этот вызов обязателен, он осуществляет непосредственную загрузку
			// кода библиотеки; рекомендуем всю работу с API вести внутри callback'а
			mailru.loader.require('api', function() {
				
				console.log('1')
				// инициализируем внутренние переменные
				// не забудьте поменять на ваши значения app_id и private_key
				mailru.connect.init(_appId, _privateKey);
				// регистрируем обработчики событий,
				// которые будут вызываться при логине и логауте
				mailru.events.listen(mailru.connect.events.login, function(session){
					// window.location.reload();
					console.log('MailRu:')
					console.log(session)
				});
				mailru.events.listen(mailru.connect.events.logout, function(){
					// window.location.reload();
					console.log('MailRu logout')
				});
				// проверка статуса логина, в result callback'a приходит
				// вся информация о сессии (см. следующий раздел)
				mailru.connect.getLoginStatus(function(result) {
					if (result.is_app_user != 1) {
						// пользователь не залогинен, надо показать ему кнопку логина

						// вешаем кнопку логина (пример для jquery)
						// $('<a class="mrc__connectButton">вход@mail.ru</a>').appendTo('body');
						// эта функция превращает только что вставленный элемент в
						// стандартную кнопку Mail.Ru
						console.log(2)
						mailru.connect.initButton();
					} else {
						// все ок, можно работать
						console.log(3)
						// получаем полную информацию о текущем пользователе
						mailru.common.users.getInfo(function(result){
							console.log('getInfo mailru')
							console.log(result)
						});
					}
				});
			});		
		}
		
		var waitMru = setInterval(function(){
			if (window.mailru && mailru.loader) {
				clearInterval(waitMru)
				initMru()
			}
		}, 50)		
	}
})

$.fn.extend({
	'socialAuthInitFb': function() {
		var $self = $(this)
		var $wnd = $('#popup_login')
		$self.click(function(ev) {
			ev.preventDefault()
			if ($wnd.filter(':visible').length) {
				// Checl if user loged in
				FB.getLoginStatus(function(response) {
					$wnd.sleep()
					if (!response.authResponse) {
						FB.login(function(loginResponse) {
								processResponse(loginResponse);
							}, {scope:'email'});
					} else
						processResponse(response);

				});
			}
		})
		
		function processResponse(response){
			$wnd.wakeup()
			// if we get user data
			if (response.authResponse) {
				if(response.authResponse['userID']){
					FB.api('/me', function(userData) {
						var data = {}
						for(var i in userData){
							data[i] = userData[i];
						}
						$.ajax({
							url: $self.attr('data-auth'),
							data: {auth: data},
							beforeSend: function() {$wnd.sleep()},
							complete: function() {$wnd.wakeup()},
							success: function(resp) {
								try {
									if (resp && resp.success) {
										Auth.loginOk(resp.data)
									} else if (resp && resp.error) {
										$.stupidModal('error', {message: /*error_msg || */resp.message})
									} else {
										window.console & console.log(resp)
									}
								} catch(e) {
									window.console & console.log(e)
									$.stupidModal('error', {message: 'Возникла ошибка'});
								}
							}
						})
					});			
				} else {
					$.stupidModal('error', {message: 'Возникла ошибка'});
				}
			} else if (!response.status) {
				$.stupidModal('error', {message: 'Возникла ошибка'});
			}
		}		
	}
})

$.fn.extend({
	'socialAuthEmailSender': function(related_id, error_wrap, mes_empty, mes_error) {
		var $self = $(this)
		var $error = $(error_wrap)
		var $related = $(related_id)
		
		$(this).submit(function(ev){
			ev.preventDefault()
			var checked = true
			$self.find('input:visible').filter('.required').each(function(){
				 if (!$(this).val().length) checked = false;
			})
			if (checked) {
				$related.sleep()
				$.ajax({
					url: $self.attr('action'),
					data: $self.serialize(),
					complete: function() {$related.wakeup()},
					success: function(resp) {
						if (resp.success) {
							Auth.loginOk(resp.data)
						} else if (resp.error) {
							$related.html(mes_error || resp.message)
						} else {
							$related.html(resp)
						}
					}
				})
			} else {
				$error.html(mes_empty);
			}
		})
	}	
})

function renderAuthHash(href) {
	var loc = window.location
	// if (href.search('#')) href.replace('#', '#auth&'); else href += '#auth';
	return href + '#auth&backurl=' + loc
}

function renderUserCity() {
	if (window.cityVariants) {
		this.trmplate = null
		this.readTemplate = $.Widget.prototype.readTemplate

		this.readTemplate('userCityName')
		if (this.template) {
			var current = window.USER_CITY ? USER_CITY : '1';
			var variant =  cityVariants['_'+current];
			var html = this.template.text
			$('#contact_city_wrapper').html(html.replace(/%city_link%/g, variant.URL).replace('%city_name%', variant.NAME).replace('%phone%', variant.PHONE))
			// to setup current city
			$('#b-smallchoiser-ul').find('li').each(function(){
				if ($(this).attr('c') == current) $(this).addClass('current');
				else $(this).removeClass('current');
			})
		}
	}
}

function contacts_index_001(center,zoom,coords,marker_image) {
	$(function () {
		var map = new YMaps.Map(YMaps.jQuery("#o_map_yandex")[0]);
		map.setCenter(new YMaps.GeoPoint(center.lng,center.lat), zoom);

		var s = new YMaps.Style();
		s.iconStyle = new YMaps.IconStyle();
		s.iconStyle.href = marker_image;
		s.iconStyle.size = new YMaps.Point(56, 50);
		s.iconStyle.offset = new YMaps.Point(-28, -50);


		$.each(coords, function(){
			var coord=this;
			var placemark = new YMaps.Placemark(new YMaps.GeoPoint(this.lng,this.lat), {style: s, hasBalloon: false});

			YMaps.Events.observe(placemark, placemark.Events.Click, function () {
				window.location.href=coord.url;
			});

			map.addOverlay(placemark);
		});



		var typeControl = new YMaps.TypeControl([YMaps.MapType.MAP, YMaps.MapType.SATELLITE, YMaps.MapType.HYBRID], [1,2]);
		map.addControl(typeControl);
		map.addControl(new YMaps.ToolBar());
		map.addControl(new YMaps.Zoom());
		map.addControl(new YMaps.ScaleLine());

	});
};


function contacts_sms_init(phone_label, phone_error, type_error, phone_mask_error) {
	var phone_number = $('#phone_number');
	var _phone_regexp = /^\+?[\d\-\s\(\)]{7,14}/;
	var type = $('#message_type');
	var _valid = false;
	var _errors = null;
	var _process = false;

	$('#ui-modal-sms-form').appendTo($('#modal_popup_sms').find('#modal_container'));

	$('#send_sms_btn').click(function(event){
		event.preventDefault();
		$('#modal_popup_sms').parent().removeClass('hidden')
			.find('#form_content').show()
			.siblings().hide();
	});

	$('.modal_close_button').live('click', function(event){
		event.preventDefault();
		$('#modal_popup_sms').parent().addClass('hidden');
	});
	// 'Номер вашего телефона'
	phone_number.smart_input({label: phone_label, onFocus: hide_error});

	type.find('input').click(hide_error);

	$('#modal-submit-link').click(function(event){
		event.preventDefault();
		$(this).closest('form').submit();
	});

	$('#ui-modal-sms-form').submit(function(event){
		event.preventDefault();
		if (!_valid) {
			if (phone_number.val().match(_phone_regexp)) {
				_valid = true;

				if (!type.find('input:checked').length) {
					_valid = false;
					_errors = $('#message_type_error');
					create_error(_errors, type_error);
				}
			}
			else {
				_errors = $('#phone_error');
				create_error(_errors, phone_error);
			}
		}
		if (_valid) {
			var _form = $(this).sleep();

			function post_contacts_sms_data() {
				$.ajax({
					data: _form.serialize(),
					type: 'POST',
					url: _form.attr('action'),
					beforeSend: function() { _process = true },
					complete: function() {
						_process = false
						_form.wakeup();
					},
					success: function(res) {
						_process = true
						
						if (res && !res.error) {
							_form.append(res)
								.find('#form_content').hide();
						} else {
							_valid = false;
							_errors = $('#phone_error');
							create_error(_errors, phone_mask_error);
							res.phone && phone_number.val(res.phone)
						}
					}
				});
			}

			// set user vid
			!_process && setUserVid(post_contacts_sms_data);
		}
	});

	function hide_error() {
		if (_errors) {
			_errors.fadeOut();
		}
	}

	function create_error(error_element, text) {
		error_element.html(text);
		error_element.fadeIn();
	}
}

function init_profile_fn() {
	
	function ajaxReviewRemove(ob, withReload) {
		
		var withReload = withReload || false;
		
		var rel = $(ob).attr('data-rel');
		var cont = $(ob).closest('.review_block');
		if (rel) {
			var self = ob;
			$.ajax({
				beforeSend: function() {cont.sleep()},
				complete: function() {cont.wakeup()},
				url: '/profile/review/delete/',
				data: 'data='+rel,
				type: 'GET',
				success: function(data) {
					if (data.success) {
						if (withReload && data.reload) {
							window.location.reload()
						} else {
							if (data.count) {
								var h = $('#review_count_block')
								if (h.length) {
									var t = jQuery.trim(h.text())
									h.html(h.html().replace(t, t.replace(/\d+/, data.count)))
								}
							}
							$(self).closest('.review_block').wakeup().remove()
							// update link with count of reviews in header
							$('#top_strip_line').trigger('refreshReviews')
						}
					}
				}
			})
		}		
		
	}
	
	$('a.profile_remove_review').live('click', function(ev){
		ev.preventDefault();
		
		if (!confirm('Вы действительно хотите удалить этот отзыв/комментарий?')) return;
		
		ajaxReviewRemove(this, true);
	})
	
	$('a.profile_remove_comment').live('click', function(ev){
		ev.preventDefault();
		
		if (!confirm('Вы действительно хотите удалить этот комментарий?')) return;
		
		ajaxReviewRemove(this);
	})
	
	$('a.profile_remove_review_r').live('click', function(ev){
		if (!confirm('Вы действительно хотите удалить этот отзыв?')) return false;
	})
}

function init_header_widgets() {
	$('#search_history_box').searchHistorySelectList({
		template: 'historySelectList',
		opts: window.SEARCH_HISTORY ? window.SEARCH_HISTORY : {},
		dataSource: ROOT_HOST + '/auth/search_history.php',
		bodyTemplate: 'bodyTours'
	})

	$('#hotel_history_box').hotelHistorySelectList({
		template: 'historySelectList',
		opts: window.HOTELS_HISTORY ? HOTELS_HISTORY : {},
		dataSource: ROOT_HOST + '/auth/hotel_history.php',
		bodyTemplate: 'bodyHotels'
	})

	$('a.hotel-history-clear').live('click', function(_ev){
		_ev.preventDefault();
		var tab = $('#hotel_history_box').hotelHistorySelectList('close');
		
		$.ajax({
			url: this.href,
			beforeSend: function() { tab.sleep() },
			complete: function() { tab.wakeup() },
			success: function(res) {
				if (res && res.success) {
					init_hotel_history()
					var w = $('#hotel-history-wrapper')

					if (w.length) {
						$.ajax({
							url: w.attr('data-update'),
							beforeSend: function() { w.sleep() },
							complete: function() { w.wakeup() },
							success: function(res) {
								res && w.wakeup() && w.replaceWith(res)
							}
						})
					}
				}
			}
		})
	})
	
	$('a.tour-history-clear').live('click', function(_ev){
		_ev.preventDefault();
		var tab = $('#search_history_box').searchHistorySelectList('close');
		
		$.ajax({
			url: this.href,
			beforeSend: function() { tab.sleep() },
			complete: function() { tab.wakeup() },			
			success: function(res) {
				if (res && res.success) {
					init_search_history()
					var w = $('#tour-history-wrapper')

					if (w.length) {
						$.ajax({
							url: w.attr('data-update'),
							beforeSend: function() { w.sleep() },
							complete: function() { w.wakeup() },
							success: function(res) {
								res && w.wakeup() && w.replaceWith(res)
							}
						})
					}
				}
			}
		})
	})	
}

function init_anonym_hotel_history(id) {
	setUserVid(function(){
		$.ajax({
			url: '/hotel/'+id+'/addHistory/',
			success: function() {
				init_hotel_history();
			}
		})
	})
}

function init_hotel_history() {
	$('#hotel_history_box').hotelHistorySelectList('refreshOpts');
}

function init_search_history() {
	$('#search_history_box').searchHistorySelectList('refreshOpts');
}

function reset_hotel_history(data) {
	$('#hotel_history_box').hotelHistorySelectList('resetOpts', data)
}

function reset_search_history(data) {
	$('#search_history_box').searchHistorySelectList('resetOpts', data)
}

function refreshSessionVars() {
	$.ajax({
		url: 'http://'+ROOT_HOST+'/auth/user_city.php',
		dataType: 'jsonp'
	})
}



function refreshSessionCity(city, set_city_url) {
//	$.ajax({
//		url: 'http://'+ROOT_HOST+'/auth/user_city.php?city_id='+city,
//		dataType: 'jsonp'
//	})
	// Redeclare global variable
	window.USER_CITY = city
	// Set user visitor and its city
	setUserVid(function(){
		$.ajax({
			url: set_city_url,
			type: "GET",
			data: {uniq: Math.random(), c: city}
		})
	})
}

function init_share_links()
{
	var appended_fb = false;
	var appended_vk = false;
	send_ajax = function(type)
	{
		new JSONRequest({
			params:[type, $('input#what-are-you-doing').attr('value')],
			method: 'share',
			success: function() {
			}
		});
	}

	waitFB = function() {
		if (typeof(FB) == 'undefined') {
			window.setTimeout(waitFB, 100); // Рекурсия каждые 100 миллисекунд, пока не загрузиться Facebook
		}
		else
		{

			FB.init({
				appId:'162154090517671',
				cookie:true,
				status:true,
				xfbml:true
			});
			FB.ui(
			{
				method: 'feed',
				name: 'Itour',
				link: 'http://obnovlenie.ru',
				picture: 'http://obnovlenie.ru/images/2.7.4/v9b056.logo-obnovlenie.png',
				message: $('input#what-are-you-doing').attr('value')
			},
			function(response) {
				if (response && response.post_id) {
					send_ajax('fb');
				}
			}
			);
		}
	}

	waitVK = function() {
		if (typeof VK == 'undefined') {
			window.setTimeout(waitVK, 100); // Рекурсия каждые 100 миллисекунд, пока не загрузиться VK
		} else {
			try {
				VK.init({
					apiId: 2381640,
					api_id: 2381640
				});
				VK.Auth.login(function(response) {
					if (response.authResponse) {
						VK.Api.call('wall.post', {
							'message' : $('input#what-are-you-doing').attr('value')
						}, function(response) {
								send_ajax('vk');
						});
					}
				}, 8192);
			} catch(e) {
				window.console && console.log(e)
			}
		}
	}

	// Vontakte

	$('#vk-button').click(function(){
		if(appended_vk == false){
			$('head').append('<script type="text/javascript" src="http://vkontakte.ru/js/api/openapi.js"></script>');
			appended_vk = true;
		}
		waitVK(); // Ждем инициализации скрипта
	});

	// Twitter

	$('#twi-button').click(function(){
		window.open('http://twitter.com/share?original_referer='+encodeURIComponent('http://obnovlenie.ru')+'&source=tweetbutton&text='+encodeURIComponent($('input#what-are-you-doing').attr('value'))+'&url='+encodeURIComponent('http://obnovlenie.ru'), 'Tweet', 'width = 500, height = 300, status = 0, toolbar = 0, location = 0,menubar = 0, directories = 0');
		send_ajax('twi');
	});

	// Facebook

	$('#fb-button').click(function(){
		if(appended_fb == false){
			$('head').append('<script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script>');
			appended_fb = true;

		}
		waitFB(); // Ждем инициализации скрипта

	});

}

function init_hotels_sorting_links(sortNames, sortLinks, value)
{
	$.widget("ui.tourSelectSortingList", $.ui.tourSelectList, {
		getValueAsText: function(value) {
			return 'Сортировать по ' + this.opts[value]
		}	
	})

	$('#sorting_selector').tourSelectSortingList({
		template: 'tourSelectList',
		opts: sortNames,
		value: value
	}).bind('select', function(){
		var $self = $(this)
		// set visitor
		setUserVid(function(){
			window.location = sortLinks[$self.val()]
		})
	})	
}

function init_hotels_country_filter(sortNames, sortLinks, value)
{
	$('#country_selector').tourSelectList({
		template: 'tourSelectList',
		opts: sortNames,
		value: value
	}).bind('select', function(){
		var $self = $(this)
		// set visitor
		setUserVid(function(){
			window.location = sortLinks[$self.val()]
		})
	})	
}

function init_hotels_perpage_links(selector) {
	var $selector = selector instanceof jQuery ? selector : $(selector);
	
	$selector.find('a').click(function(ev){
		ev.preventDefault()
		var self = this
		setUserVid(function(){
			if (self.href)
				window.location = self.href
		})
	})
}

function init_gplusone_btn(settings)
{
	// set on document ready
	$().ready(function() {
		var po = document.createElement('script');po.type = 'text/javascript';po.async = true;
		po.src = 'https://apis.google.com/js/plusone.js';
		var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(po, s);
// code to render btn without <g:plusone>
//		var wait = setInterval(function(){
//			if (window.gapi && gapi.plusone) {
//				clearInterval(wait)
//				$('.gplusone-placeholder').each(function(){
//					var rnd_id = 'plusone_' + Math.random(100, 1000)
//					$(this).attr('id', rnd_id)
//					gapi.plusone.render(rnd_id, settings)
//				})
//			}
//		}, 10)
	})
}

// Init namespace
var User = {}

User.registrationSuccess = function(userId) {
	if (userId) {
		// modify link to user profile
		var h = $('#popup_register_success').find('a.btn')
		h.attr('href', h.attr('data-url').replace('userId', userId))
		// show popup
		$.stupidModal('regsuccess');
	}
}
