function initPopups() {

    /**
     * Lovescanner helpers
     */
    window.lsHelper = new function() {
	var self = this;

	self.getRandomizedUrl = function(url) {
	    var currentUrl = url.replace(/#.*/, '').replace(/.?rnd\=\d+/g, '');
	    var separator = currentUrl.match(/\?/) ? '&' : '?';
	    return currentUrl + separator + 'rnd=' + (Math.random() + '').replace('.', '');
	};

	self.pageRefresh = function(timeout, url) {
	    var _pageRefresh = function() {
		document.location.href = self.getRandomizedUrl(url ? url : document.location.href);
	    };
	    if (timeout) {
		setTimeout(_pageRefresh, timeout);
	    } else {
		_pageRefresh();
	    }
	};


	self.setFormFieldError = function(formFieldElement, isError, message) {
	    try {
		var elementContainer = formFieldElement.parents('.form-item');
		if (!elementContainer  || elementContainer.length == 0) {
		    var elementContainer = formFieldElement.parents('.unit');
		    if (isError) {
			elementContainer.find('.green_alert').hide();
			elementContainer.find('.red_alert').show();
			elementContainer.find('input').addClass('field-error');
			if (message) {
			    if ($.isArray(message)) {
				message = message[0];
			    }
			    elementContainer.find('.alert_text').html(message).show();
			}
		    } else {
			elementContainer.find('.red_alert').hide();
			elementContainer.find('.green_alert').show();
			elementContainer.find('.alert_text').hide();
			elementContainer.find('input.field-error').removeClass('field-error');
		    }
		} else {
		    var formMessage = elementContainer.find('.form-message');
		    var formTooltip = elementContainer.find('.form-tooltip');
		    if (isError) {
			formTooltip.hide();
			formMessage.removeClass('form-ok').addClass('form-error').show();
			if (message) {
			    if ($.isArray(message)) {
				message = message[0];
			    }
			    formMessage.html(message);
			}
		    } else {
			formTooltip.show();
			formMessage.removeClass('form-error').addClass('form-ok').hide();
		    }
		}
	    } catch (exc) {
		_exc(exc);
	    }
	};

	self.setFormError = function(formElement, isError, message) {
	    try {
		if (isError && message) {
		    formElement.find('.error').html(message);
		} else {
		    formElement.find('.error').html('&nbsp;');
		}
	    } catch (exc) {
		_exc(exc);
	    }
	};

    };


    /**
     * Lovescanner popup
     */
    window.lsPopup = new function() {
	var self = this;

	self._element = [];
	self._container = [];
	self._wrapper = [];
	self._contentWrapper = [];
	self._content = [];
	self._blocker = [];
	self._hideTimeout = null;
	//self._iframe = [];

	self._options = null;

	var options = {
	    'lovescanner': {
		lsPopupWidth: 572,
		lsPopupChildWidthOffset: 22,
		theme: 'default',
		animationTime: 700,
		closeButtonShown:true
	    },
	    'sexscanner': {
		lsPopupWidth: 500,
		lsPopupChildWidthOffset: 50,
		animationTime: 700,
		closeButtonShown:true
	    },
	    'lovebook' : {
		lsPopupWidth: 530,
		lsPopupChildWidthOffset: 0,
		theme: 'default',
		lsPopupWidthShrinked:340,
		lsPopupChildWidthOffsetShrinked:0,
		animationTime: 100,
		closeButtonShown:true
	    },
	    'topdatingsitesuk': {
		lsPopupWidth: 572,
		lsPopupChildWidthOffset: 22,
		theme: 'default',
		animationTime: 700,
		closeButtonShown:true
	    },
	    'topdatingsitesusa': {
		lsPopupWidth: 572,
		lsPopupChildWidthOffset: 22,
		theme: 'default',
		animationTime: 700,
		closeButtonShown:true
	    }
	};
	self._defaultOptions = $.extend({}, options[window.theme.getName()]);

	self.loadUrl = function(url, callback, options) {
	    self._options = options;

        if(options && typeof options.closeButtonShown != 'undefined')
            self._defaultOptions.closeButtonShown = options.closeButtonShown;

        self.loadStart();

	self.show();
        if(self._defaultOptions.closeButtonShown)
            self.showCloseButton();

	    if (self._isImage(url)) {
		self._loadImage(url, callback);
	    } else {
		$.ajax({
		    url: url,
		    context: this,
		    success: $.isFunction(callback) ? callback : self._processAjaxResponse,
		    error: self.loadFinish
		});
	    }
	};

	self.submitForm = function(form, callback) {
	    self.loadStart();
	    self.show();
	    $(form).ajaxSubmit({
		success: $.isFunction(callback) ? callback : self._processAjaxResponse,
		error: self.loadFinish
	    });
	};

	self.show = function(options) {
	    if(options) self._options = options;

	    if (self._hideTimeout !== null) {
		window.clearTimeout(self._hideTimeout);
		self._hideTimeout = null;
	    }
	    if (self._element.is(":visible")) {
		return;
	    }
	    self._element.show();

	    self._blocker.show();

	    if ($.browser.msie && parseFloat($.browser.version) < 7) {
		$('select').css({
		    visibility: 'hidden'
		});
	    }
	};

	self.hide = function(hideTimeout) {
        if(self._options && self._options.display == 'modal') {
            return;
        }
	    if (self._hideTimeout !== null) {
		window.clearTimeout(self._hideTimeout);
		self._hideTimeout = null;
	    }
	    if (hideTimeout > 0) {
		self._hideTimeout = window.setTimeout(self.hide, hideTimeout);
		return;
	    }

	    if (!self._element.is(":visible")) {
		return;
	    }
	    if ($.browser.msie && parseFloat($.browser.version) == 8) {
		self._container.hide();
		self._element.hide();
		self._blocker.hide();
	    } else {
		self._container.fadeOut(400, function () {
		    self._element.hide();
		    self._blocker.hide();

		    if ($.browser.msie && parseFloat($.browser.version) < 7) {
			$('select').css({
			    visibility: 'visible'
			});
		    }
		});
	    }
	    self._shrinked = false;
	};

	self.shrink = function(){
	    if (self._shrinked)
		return;

	    self._wrapperOrigW = self._wrapper.css('width');
	    self._elementOrigW = self._element.css('width');
	    self._contentWrapperOrigW = self._contentWrapper.css('width');

	    var lsPopupWidthShr = self._defaultOptions.lsPopupWidthShrinked;
	    var theme = self._defaultOptions.theme;
	    if (self._options) {
		if (self._options.width) {
		    lsPopupWidthShr = self._options.width;
		}
		if (self._options.theme) {
		    theme = self._options.theme;
		}
	    }
	    self.setTheme(theme);

	    var lsPopupMarginLeft = -parseInt(lsPopupWidthShr / 2);
	    self._element.css({
		'width': lsPopupWidthShr + 'px',
		'margin-left': lsPopupMarginLeft + 'px'
	    });
	    self._wrapper.css({
		'width': lsPopupWidthShr - self._defaultOptions.lsPopupChildWidthOffset
	    });
	    self._contentWrapper.css({
		'width': lsPopupWidthShr - self._defaultOptions.lsPopupChildWidthOffsetShrinked
	    });

	    self._shrinked = true;
	};

	self.restoreOrigin = function(){
	    if(!self._shrinked)
		return;
	    var lsPopupWidth = self._defaultOptions.lsPopupWidth;
	    var theme = self._defaultOptions.theme;
	    if (self._options) {
		if (self._options.width) {
		    lsPopupWidth = self._options.width;
		}
		if (self._options.theme) {
		    theme = self._options.theme;
		}
	    }
	    self.setTheme(theme);

	    var lsPopupMarginLeft = -parseInt(lsPopupWidth / 2);
	    self._element.css({
		'width': lsPopupWidth + 'px',
		'margin-left': lsPopupMarginLeft + 'px'
	    });
	    self._wrapper.css({
		'width': lsPopupWidth - self._defaultOptions.lsPopupChildWidthOffset
	    });
	    self._contentWrapper.css({
		'width': lsPopupWidth - self._defaultOptions.lsPopupChildWidthOffsetShrinked
	    });
	    self._shrinked = false;
	}

	self.update = function(text, options) {
	    self.show(options);
	    self._processResponse(text);
	};


	self.loadStart = function () {
	    if (self._element.is(":visible")) {
		self._wrapper.css({
		    'height': self._wrapper.height()
		});
		self._element.addClass('lsPopup-loadingOpened');
	    } else {
		self._element.addClass('lsPopup-loading');
	    }
	    self.hideCloseButton();
	};

	self.loadFinish = function () {
	    self._wrapper.css({
		'height': 'auto'
	    });
	    self._element.removeClass('lsPopup-loading lsPopup-loadingOpened');
	    if (!self._container.is(":visible")) {
		if ($.browser.msie && parseFloat($.browser.version) == 8) {
		    self._container.show();
		} else {
		    self._container.fadeIn(self._defaultOptions.animationTime);
		}
	    }
        if(self._defaultOptions.closeButtonShown)
            self.showCloseButton();
	}; //alert($.browser.msie + '   '+ $.browser.version + '  ' + (parseFloat($.browser.version) == 8));

	self.hideCloseButton = function() {
	    self._element.find('.lsPopup-close').hide();
	};

	self.showCloseButton = function() {
	    self._element.find('.lsPopup-close').show();
	};

	self.setTheme = function(name) {
	    if (self._element.length != 0 && name) {
		var theme = 'lsPopupTheme-' + name;
		var elementClass = self._element.attr('class').replace(/lsPopupTheme-(\S+)/, theme);
		self._element.attr('class', elementClass);
	    }
	};

	self._build = function() {
	    if (self._element.length == 0) {
		self._element = $('#lsPopup');
		if (self._element.length == 0) {
		    var theme = self._defaultOptions.theme ? 'lsPopupTheme-' + self._defaultOptions.theme : '';
		    var html = '';
		    html += '<div id="lsPopup" class="lsPopup ' + theme + '" style="display: none; top: 20px;">';
		    html += '    <div class="lsPopup-loader"></div>';
		    html += '    <div class="lsPopup-popupContainer" style="display: none;">';
		    html += '        <div class="lsPopup-wrapper">';
		    html += '            <div class="lsPopup-contentWrapper">';
		    html += '                <div class="lsPopup-content"></div>';
		    html += '            </div>';
		    html += '            <div class="lsPopup-corners"><b class="tl"></b><b class="tr"></b><b class="bl"></b><b class="br"></b></div>';
		    html += '        </div>';
		    //html += '        <iframe id="lsPopup-iframe" name="lsPopup-iframe" class="lsPopup-iframe" src="" />';
		    html += '        <a class="lsPopup-close lsPopup-closeButton" href="javascript:void(0)"></a>';
		    html += '    </div>';
		    html += '</div>';
		    $('body').append(html);
		    self._element = $('#lsPopup');
		}

		self._wrapper = self._element.find('.lsPopup-wrapper');
		self._contentWrapper = self._element.find('.lsPopup-contentWrapper');
		self._content = self._element.find('.lsPopup-content');
		self._container = self._element.find('.lsPopup-popupContainer');
		//self._iframe = self._element.find('.lsPopup-iframe');
		//self._iframe.load(self._processIframeResponse);
		self._element.delegate('.lsPopup-closeButton', 'click', self.hide);
	    }

	    if (self._blocker.length == 0) {
		self._blocker = $('#lsPopup-blocker');
		if (self._blocker.length == 0) {
		    $('body').append('<div id="lsPopup-blocker" class="lsPopup-blocker" style="display: none;"></div>');
		    self._blocker = $('#lsPopup-blocker');
		    self._blocker.click(function() {
			self.hide();
		    });
		}
	    }
	};

	self._processAjaxResponse = function(responseText, result, ajaxObject) {
	    self._processResponse(responseText);
	};

	self._processIframeResponse = function() {
	    var responseText = '';
	    try {
		responseText = self._iframe.get(0).contentWindow.document.body.innerHTML;
	    } catch (exc) {
		_exc(exc);
	    }
	    self._processResponse(responseText);
	};

	self._processResponse = function(responseText) {
	    self._content.html(responseText);

	    var currentHeight;
	    if (self._container.is(":visible")) {
		currentHeight = self._element.height();
	    } else {
		self._container.show();
		currentHeight = self._element.height();
		self._container.hide();
	    }

	    if ($(window).height() >= currentHeight) {
		self._element.css({
		    'top': '50%',
		    'margin-top': -(currentHeight / 2)
		});
		self._wrapper.css({
		    'height': 'auto'
		});
		self._element.removeClass('lsPopup-absolute').addClass('lsPopup-fixed');
	    } else {
		self._element.css({
		    'top': $(window).scrollTop(),
		    'margin-top': 0
		});
		self._wrapper.css({
		    'height': 'auto'
		});
		self._element.removeClass('lsPopup-fixed').addClass('lsPopup-absolute');
	    }

	    var lsPopupWidth = self._defaultOptions.lsPopupWidth;
	    var theme = self._defaultOptions.theme;
	    if (self._options) {
		if (self._options.width) {
		    lsPopupWidth = self._options.width;
		}
		if (self._options.theme) {
		    theme = self._options.theme;
		}
	    }
	    self.setTheme(theme);

	    var lsPopupMarginLeft = -parseInt(lsPopupWidth / 2);
	    self._element.css({
		'width': lsPopupWidth + 'px',
		'margin-left': lsPopupMarginLeft + 'px'
	    });
	    self._wrapper.css({
		'width': lsPopupWidth - self._defaultOptions.lsPopupChildWidthOffset
	    });
	    self._contentWrapper.css({
		'width': lsPopupWidth - self._defaultOptions.lsPopupChildWidthOffset
	    });
        if(self._options && self._options.display == 'modal'){
            self._options = null;
            self._options = {display: 'modal'};
        } else {
            self._options = null;
        }

	    self.loadFinish();
	};

	self._isImage = function(url) {
	    var ret = /\.(gif|jpe?g|png)$/.test(url);
	    return ret;
	};

	self._loadImage = function(url, callback) {
	    var contentHtml = '<img src="" alt="Loading image..." class="lsPopup-contentImage" />';
	    self._wrapper.empty().html(contentHtml);

	    var loadHandler = function(imageElement) {
		if (!imageElement.complete) {
		    setTimeout(function() {
			loadHandler(imageElement)
		    }, 200);
		    return;
		}
		// proxy image for ie6
		var image = new Image();
		image.src = imageElement.src;
		//
		var dims = {
		    w: image.width,
		    h: image.height
		};
		var limits = {
		    w: 800,
		    h: 600
		};
		if (dims.w > limits.w || dims.h > limits.h) {
		    new UserpicResizer('img.lsPopup-contentImage', limits.w, limits.h);
		    dims = limits
		}
		self._element.css({
		    position: 'absolute',
		    left: '50%',
		    top: '50%',
		    width: dims.w + 24,
		    marginLeft: -dims.w/2,
		    marginTop: -dims.h/2 + $(window).scrollTop()
		});
		self._wrapper.css({
		    width: dims.w,
		    height: dims.h
		});
		self.loadFinish();
		if ($.isFunction(callback)) {
		    callback();
		}
	    };

	    var $img = self._wrapper.find('img.lsPopup-contentImage');
	    $img.load(function() {
		loadHandler($img[0])
	    });
	    $img.attr({
		src: url
	    });
	};

	////////////

	self._build();

    if(self._defaultOptions.closeButtonShown)
        self.showCloseButton();

	$('body').keypress(function(event) {
	    if (event.keyCode == 27) {
		self.hide();
	    }
	});
    };


    /**
     * Lovescanner tab widget
     */
    window.lsTabs = new function() {
	var self = this;

	self.refresh = function() {
	    $('.lsTabs').each(function(index, item) {
		var element = $(item);
		try {
		    var config = $.parseJSON(element.find('.json').first().text());
		    var tab = $('#' + config.tab + '_tab');
		    tab.click();
		} catch (exc) {
		    _exc(exc);
		}
	    });
	};

	$('body').delegate('.lsTabs .lsTabs-tab', 'click', function() {
	    try {
		var newTab = $(this);
		var newBlockName = newTab.attr('id').replace('_tab', '');
		var newBlock = $('#' + newBlockName + '_block');

		var container = $(newTab.parents('.lsTabs'));

		var oldTab = $(container.find('.lsTabs-tab.active'));
		var oldBlockName = oldTab.attr('id').replace('_tab', '');
		var oldBlock = $('#' + oldBlockName + '_block');

		oldTab.removeClass('active');
		if (oldBlock) {
		    oldBlock.hide();
		}

		newTab.addClass('active');
		if (newBlock) {
		    newBlock.show();
		}
	    } catch (exc) {
		_exc(exc);
	    }
	});

	self.refresh();
    };


    /**
     * Lovescanner multicheckbox widget
     */
    window.lsMultiCheckbox = new function() {
	var self = this;
	$('body').delegate('.lsMultiCheckbox .lsMultiCheckbox-all:checkbox', 'click', function() {
	    try {
		var multiCheckboxAll = $(this);
		var element = multiCheckboxAll.parents('.lsMultiCheckbox');
		element.find('.lsMultiCheckbox-item:checkbox').each(function(index, item) {
		    item.checked = (multiCheckboxAll.is(':checked'));
		});
	    } catch (exc) {
		_exc(exc);
	    }
	});
	$('body').delegate('.lsMultiCheckbox .lsMultiCheckbox-item:checkbox', 'click', function() {
	    try {
		var multiCheckboxItem = $(this);
		var element = multiCheckboxItem.parents('.lsMultiCheckbox');
		var multiCheckboxAll = element.find('.lsMultiCheckbox-all:checkbox');
		multiCheckboxAll.get(0).checked = (element.has('.lsMultiCheckbox-item:checkbox:not(:checked)').length == 0);
	    } catch (exc) {
		_exc(exc);
	    }
	});
    };

    /* Fix IE8 bug, form is not submitted by ENTER */
    if ($.browser.msie && $.browser.version == 8) {
	//$('body').delegate('.popupQuickRegistration input, .popupRecommend input, .popupFindFriends input', 'keydown', function(event) {
	$('body').delegate('.popup input', 'keydown', function(event) {
	    if (event.keyCode == 13) {
		event.stopPropagation();
		event.preventDefault();
		var form = $(event.target).parents('form').get(0);
		if (form && form.onsubmit) {
		    form.onsubmit();
		}
	    }
	});
    }

    $('body').unbind('submitInviterGetEmails');
    $('body').bind('submitInviterGetEmails', function(event) {
	var self = this;
	event.preventDefault();
	event.stopPropagation();
	self.formElement = $(event.target);
	self.isValid = function() {
	    self.formElement.find('.red_alert').hide();
	    self.formElement.find('.alert_text').hide();
	    self.formElement.find('.green_alert').show();
	    self.formElement.find('.form-message').hide();
	    self.formElement.find('.form-tooltip').show();

	    var email = self.formElement.find("[name='email']");
	    var emailValue = email.val();
	    var pass = self.formElement.find("[name='pass']");
	    var passValue = pass.val();
	    var type = self.formElement.find("[name='type']");
	    var typeValue = type.val();

	    var isValid = true;
	    if (typeValue == 'email') {
		if (!emailValue) {
		    lsHelper.setFormFieldError(email, true, __('Please, type your email'));
		    isValid = false;
		} else if (!/^([a-z0-9][a-z0-9_\-\.\+]*)@([a-z0-9][a-z0-9\.\-]{0,63}\.([a-z]{2,4}))$/i.test(emailValue)) {
		    lsHelper.setFormFieldError(email, true, __('Please, type a valid email'));
		    isValid = false;
		} else if (!(/@(.+)$/i.exec(emailValue)[1] in siteConfig.get('allowedEmailDomains'))) {
		    lsHelper.setFormFieldError(email, true, __('Unsupported email'));
		    isValid = false;
		}
	    } else if (!emailValue) {
		lsHelper.setFormFieldError(email, true, __('Please, type your login / email'));
		isValid = false;
	    }
	    if (!passValue) {
		lsHelper.setFormFieldError(pass, true, __('Please, type your password'));
		isValid = false;
	    }
	    return isValid;
	};

	if (!self.isValid()) {
	    return false;
	}

	lsPopup.submitForm(self.formElement, function(responseText) {
	    var json = false;
	    try {
		json = $.parseJSON(responseText);
	    } catch (exc) {
		_exc(exc);
	    }

	    var resultElement = false;
	    if (json) {
		switch (json.result) {
		    case 'all-invited':
			resultElement = $('#inviterOk');
			break;

		    case false:
			if (typeof(json.error) == 'object') {
			    var key;
			    for (key in json.error) {
				lsHelper.setFormFieldError(self.formElement.find("[name='" + key + "']"), true, json.error[key]);
			    }
			} else {
			    lsHelper.setFormFieldError(self.formElement.find("[name='email']"), true, json.error);
			}

			lsPopup.loadFinish();
			break;

		    default:
			try {
			    var config = $.parseJSON(self.formElement.find('.json').first().text());
			    lsPopup.loadUrl(config.url, function(responseText) {
				$('#inviter_block').hide();
				$('#inviter_contacts_block').html(responseText);
				$('#inviter_contacts_block').show();

				lsPopup.loadFinish();
			    });
			    return;
			} catch (exc) {
			    resultElement = $('#recommendFail');
			    _exc(exc);
			}
			break;
		}
	    } else { // any undefined problem
		resultElement = $('#recommendFail');
	    }

	    if (resultElement) {
		lsPopup.loadFinish();
		$('.popup:visible').hide();
		resultElement.show();
	    }


	});

    });

    $('body').unbind('submitInviterPostInvites');
    $('body').bind('submitInviterPostInvites', function(event) {
	var self = this;
	event.preventDefault();
	event.stopPropagation();
	self.formElement = $(event.target);

	self.isValid = function() {
	    var isValid = true;
	    if (self.formElement.has('input[name="checkbox"]:checkbox:checked').length > 0) {
		lsHelper.setFormError(self.formElement, false);
	    } else {
		lsHelper.setFormError(self.formElement, true, __('Please select at least one recipient!'));
		isValid = false;
	    }
	    return isValid;
	};

	if (!self.isValid()) {
	    return false;
	}

	lsPopup.submitForm(self.formElement, function(responseText) {
	    var json = false;
	    try {
		json = $.parseJSON(responseText);
	    } catch (exc) {
		_exc(exc);
	    }
	    var resultElement = (json && json.result) ? $('#inviterOk') : $('#inviterFail');

	    lsPopup.loadFinish();
	    $('.popup:visible').hide();
	    resultElement.show();
	});
    });


    $('body').unbind('submitRecommend');
    $('body').bind('submitRecommend', function(event) {
	var self = this;
	event.preventDefault();
	event.stopPropagation();
	self.formElement = $(event.target);

	self.isValid = function() {
	    var isValid = true;

	    self.formElement.find('.red_alert').hide();
	    self.formElement.find('.green_alert').show();
	    self.formElement.find('.form-message').hide();
	    self.formElement.find('.form-tooltip').show();
	    self.formElement.find('input.field-error').removeClass('field-error');

	    var fromEmail = self.formElement.find("[name='data[Recommend][from_email]']");
	    var fromName = self.formElement.find("[name='data[Recommend][from_name]']");
	    var toEmail = self.formElement.find("[name='data[Recommend][to_email]']");

	    if (!fromEmail.val()) {
		lsHelper.setFormFieldError(fromEmail, true);
		isValid = false;
	    }
	    if (!fromName.val()) {
		lsHelper.setFormFieldError(fromName, true);
		isValid = false;
	    }
	    if (!toEmail.val()) {
		lsHelper.setFormFieldError(toEmail, true);
		isValid = false;
	    }

	    return isValid;
	};

	if (!self.isValid()) {
	    return false;
	}

	lsPopup.submitForm(self.formElement, function(responseText) {
	    var json = false;
	    try {
		json = $.parseJSON(responseText);
	    } catch (exc) {
		_exc(exc);
	    }
	    var resultElement = false;
	    if (json) {
		if (json.result) {
		    resultElement = $('#recommendOk');
		} else {

		    if (json.error == 'user unsubscribed') {
			resultElement = $('#recommendFail');
		    } else {
			if (typeof(json.error) == 'object') {
			    var key;
			    for (key in json.error) {
				lsHelper.setFormFieldError(self.formElement.find("[name='data[Recommend][" + key + "]']"), true);
			    }
			}
		    }

		}
	    } else { // problem with mail sending (exception or smth like that)
		resultElement = $('#recommendFail');
	    }

	    lsPopup.loadFinish();
	    if (resultElement) {
		$('.popup:visible').hide();
		resultElement.show();
	    }

	});

    });

    $('body').unbind('submitQuickRegistration');
    $('body').bind('submitQuickRegistration', function(event) {
	var self = this;
	event.preventDefault();
	event.stopPropagation();
	self.formElement = $(event.target);

	self.isValid = function() {
	    var isValid = true;
	    self.formElement.find('.red_alert').hide();
	    self.formElement.find('.alert_text').hide();
	    self.formElement.find('.green_alert').show();
	    self.formElement.find('.form-message').hide();
	    self.formElement.find('.form-tooltip').show();
	    self.formElement.find('input.field-error').removeClass('field-error');

	    // clear default value from city fields
	    try {
		var cityPlaceholder = siteConfig.getParam('autocomplete').placeholder,
		cityField = self.formElement.find('input[name*=city]');
		if (cityField.val() == cityPlaceholder) {
		    cityField.val('');
		}
	    } catch (exc) {
		_exc(exc);
	    }

	    return isValid;
	};

	if (!self.isValid()) {
	    return false;
	}

	lsPopup.submitForm(self.formElement, function(responseText) {
	    var json = false;
	    try {
		json = $.parseJSON(responseText);
	    } catch (exc) {
		_exc(exc);
	    }

	    var resultElement = false;
	    if (json) {
		if (json.status == 'error') {
		    if (json.data && typeof(json.data.fields) == 'object') {
			var key;
			for (key in json.data.fields) {
			    if(window.theme.getName() == 'lovebook' && key == 'password') {
				json.data.fields[key] = __('Please enter password');
			    }
			    lsHelper.setFormFieldError(self.formElement.find("[name='data[User][" + key + "]']"), true, json.data.fields[key]);
			}
		    }
		} else if (json.status == 'success') {
		    lsHelper.pageRefresh(300, siteConfig.getParam('baseUrl') + 'users/registered');
		    return;
		}

	    }
	    lsPopup.loadFinish();
	    lsPopup.hideCloseButton();
	});
    });

    $('body').unbind('submitQuickRegisterWithMyspace');
    $('body').bind('submitQuickRegisterWithMyspace', function(event) {
	var self = this;
	event.preventDefault();
	event.stopPropagation();
	self.formElement = $(event.target);

	self.isValid = function() {
	    var isValid = true;
	    self.formElement.find('.red_alert').hide();
	    self.formElement.find('.alert_text').hide();
	    self.formElement.find('.green_alert').show();
	    self.formElement.find('.form-message').hide();
	    self.formElement.find('.form-tooltip').show();
	    return isValid;
	};

	if (!self.isValid()) {
	    return false;
	}

	lsPopup.submitForm(self.formElement, function(responseText) {
	    var json = false;
	    try {
		json = $.parseJSON(responseText);
	    } catch (exc) {
		_exc(exc);
	    }

	    if (json) {
		if (json.status == 'error') {
		    if (json.errors && typeof(json.errors) == 'object') {
			var key;
			for (key in json.errors) {
			    try {
				lsHelper.setFormFieldError(self.formElement.find("[name='data[User][" + key + "]']"), true, json.errors[key]);
			    } catch (exc) {
				_exc(exc);
			    }
			}
		    }
		} else if (json.status == 'success') {
		    lsHelper.pageRefresh(300);
		}
	    }
	    lsPopup.loadFinish();

	});
    });


    $('body').unbind('submitResetPassword');
    $('body').bind('submitResetPassword', function(event) {
	var self = this;
	event.preventDefault();
	event.stopPropagation();
	self.formElement = $(event.target);

	self.isValid = function() {
	    var isValid = true;
	    self.formElement.find('.red_alert').hide();
	    self.formElement.find('.alert_text').hide();
	    self.formElement.find('.green_alert').show();
	    self.formElement.find('.form-message').hide();
	    self.formElement.find('.form-tooltip').show();

	    var email = self.formElement.find("[name='data[User][email]']");

	    if (siteConfig.getParam('loggedIn')) {
		lsHelper.setFormFieldError(email, true, __('You are already logged in'));
		isValid = false;
		lsHelper.pageRefresh(2000);
	    } else {
		var emailValue = email.val();
		if (!emailValue) {
		    lsHelper.setFormFieldError(email, true, __('Please, type your email'));
		    isValid = false;
		} else if (!/^([a-z0-9][a-z0-9_\-\.\+]*)@([a-z0-9][a-z0-9\.\-]{0,63}\.([a-z]{2,4}))$/i.test(emailValue)) {
		    lsHelper.setFormFieldError(email, true, __('Please, type a valid email'));
		    isValid = false;
		}
	    }


	    return isValid;
	};

	if (!self.isValid()) {
	    return false;
	}

	lsPopup.submitForm(self.formElement, function(responseText) {
	    var json = false;
	    try {
		json = $.parseJSON(responseText);
	    } catch (exc) {
		_exc(exc);
	    }

	    if (json) {

		if (json.status == 'error') {
		    if (json.errors && typeof(json.errors) == 'object') {
			var key;
			for (key in json.errors) {
			    try {
				lsHelper.setFormFieldError(self.formElement.find("[name='data[User][" + key + "]']"), true, json.errors[key]);
			    } catch (exc) {
				_exc(exc);
			    }
			}
		    }
		} else if (json.status == 'success') {
		    lsPopup.loadFinish();
		    $('.popup:visible').hide();
		    $('#quickResetPasswordOk').show();
		}
	    }
	    lsPopup.loadFinish();

	});
    });



    $('body').unbind('submitQuickLogin');
    $('body').bind('submitQuickLogin', function(event) {
	var self = this;
	event.preventDefault();
	event.stopPropagation();
	self.formElement = $(event.target);

	self.isValid = function() {
	    var isValid = true;
	    self.formElement.find('.red_alert').hide();
	    self.formElement.find('.alert_text').hide();
	    self.formElement.find('.green_alert').show();
	    self.formElement.find('.form-message').hide();
	    self.formElement.find('.form-tooltip').show();


	    return isValid;
	};

	if (!self.isValid()) {
	    return false;
	}

	lsPopup.submitForm(self.formElement, function(responseText) {
	    var json = false;
	    try {
		json = $.parseJSON(responseText);
	    } catch (exc) {
		_exc(exc);
	    }
	    if (json) {
		if (json.status == 'error') {
		    lsHelper.setFormFieldError(self.formElement.find("[name='data[User][email]']"), true);
		    lsHelper.setFormFieldError(self.formElement.find("[name='data[User][password]']"), true, json.data.message);
		} else if (json.status == 'success') {
		    lsHelper.pageRefresh(500);
		    return;
		}
	    }
	    lsPopup.loadFinish();
	});
    });


    $('body').unbind('submitProfileComplain');
    $('body').bind('submitProfileComplain', function(event) {
	var self = this;
	event.preventDefault();
	event.stopPropagation();
	self.formElement = $(event.target);

	self.isValid = function() {
	    var isValid = true;
	    self.formElement.find('.form-message').hide();
	    self.formElement.find('.form-tooltip').show();
	    var reasonElement = self.formElement.find("[name='data[Profile][complain]']");
	    if (reasonElement && reasonElement.val().length < 1) {
		lsHelper.setFormFieldError(reasonElement, true);
		isValid = false;
	    }
	    return isValid;
	};

	if (!self.isValid()) {
	    return false;
	}

	lsPopup.submitForm(self.formElement, function(responseText) {
	    $('#profileComplain').hide();
	    $('#profileComplainOk').show();
	    lsPopup.loadFinish();
	});
    });


    $('body').delegate('.externalCampaign-join', 'click', function(event) {
	var joinButton = $(this);
	event.stopPropagation();
	var element = joinButton.parents('.externalCampaign');
	try {
	    var config = $.parseJSON(element.find('.json').first().text());
	} catch (exc) {
	    lsPopup.hide();
	    _exc(exc);
	    return;
	}

	var loader = $(element.find('.externalCampaign-loader'));
	var content = $(element.find('.externalCampaign-content'));
	var progressElement = $(loader.find('.count'));
	var progressCounter = 0;
	var progressInterval = null;
	progressElement.html(progressCounter++);
	var secondsPerStep = 3;
	var countStep = 0;

	var loadingStart = function() {
	    loader.show();
	    content.hide();
	    progressInterval = setInterval(function() {
		if (progressCounter <= 99) {
		    progressElement.html(progressCounter++);
		}
	    //                    if (progressCounter == 99) {
	    //                        progressCounter = 70 + Math.round(Math.random() * 20);
	    //                    }

	    }, countStep / 100 * 1000);
	};

	var loadingFinish = function() {
	    loader.hide();
	    content.show();
	    if (progressInterval != null) {
		clearInterval(progressInterval);
	    }
	};


	if (config.isApi) {
	    countStep += secondsPerStep; //registration process
	    event.preventDefault();
	    lsPopup.loadUrl(joinButton.attr('href'));
	} else {
	    countStep += secondsPerStep / 3; //success
	    countStep += secondsPerStep; //tracking in seconds
	    countStep += config.countStep * secondsPerStep; //steps in seconds

	    try {
		var stepUrl = $.parseJSON(joinButton.parent().find('.json').text());
		joinButton.data('stepUrl', stepUrl);
	    } catch (exc) {
		loadingFinish();
		lsPopup.hide();
		_exc(exc);
		return;
	    }

	    var finish = function() {
		progressCounter = Math.round((countStep - secondsPerStep / 3) / countStep * 100);
		lsPopup.loadUrl('/externalcampaign/result/' + config.ident + '?popup=1');
	    };

	    var registrationIframe = element.find('.externalCampaign-registrationIframe');

	    var loadNextLink = function() {
		var stepUrl = joinButton.data('stepUrl');
		var currentLink = stepUrl.shift();
		if (!!currentLink) {
		    joinButton.data('stepUrl', stepUrl);
		    registrationIframe.attr('src', currentLink);
		} else {
		    finish();
		}
	    };

	    registrationIframe.unbind('load');
	    registrationIframe.load(function() {
		progressCounter = Math.round(secondsPerStep / countStep * 100);

		registrationIframe.unbind('load');

		var currentStep = 1;
		registrationIframe.load(function(event) {
		    progressCounter = Math.round((secondsPerStep + secondsPerStep * currentStep++) / countStep * 100);

		    // load registration form, step X
		    //console.log('load registration form, step ' + (currentStep++));
		    //alert('load registration form, step ' + (currentStep++));
		    try {
			window.frames[this.name].formSubmit();
		    } catch (exc) {
			loadNextLink();
		    }

		});
		loadNextLink();

	    });

	    loadNextLink();
	}

	loadingStart();
    });


    window.tb_show_old = window.tb_show;
    window.tb_show = function(caption, url, imageGroup, params, callback) {
	if (url) {
	    lsPopup.loadUrl(url, function(responseText) {
		lsPopup.update(responseText);
		if (callback) {
		    callback();
		}
	    });
	} else {
	    window.tb_show_old(caption, url, imageGroup, params, callback);
	}
    };

};