/*------------------------------------------------
/ Design for Webmaster.spb.ru
/ Date : 2010
------------------------------------------------*/
var preloadAjaxLoaderImage=new Image(); preloadAjaxLoaderImage.src="/a0/ru/images/ajax-loader.gif";
/*
* Функция находит в строке символ # и возвращает подстроку начинающуюся с этого символа.
* Если найти не удалось, возвращается false.
* Подходит для разбора URI.
*/
function getAnchor(href)
{
var p=href.indexOf("#");
if (p==-1) return false;
return href.substr(p+1);
}
/*
* Класс для AJAX отправки данных формы
*/
function AjaxSubmit (formDOMelement)
{
var self=this;
this.form=formDOMelement;
this.revoke_submit=0;
this.errstr={
"error": "Ошибка сервера!",
"timeout": "Ошибка сервера: превышен лимит ожидания!",
"parsererror": "Ошибка сервера: неверные данные!",
"notmodified": "Не изменен" // хотя это не ошибка
};
this.submit=function()
{
if (this.revoke_submit++)
return false;
// скрываем сообщения об ошибках (пользователь повторно нажал submit)
$(".ajax_block",self.form).removeClass("warningBlock");
$(".ajax_message",self.form).text("").slideUp();
$(".ajax_loader",self.form).show();
$.ajax({
url: this.form.elements['action'].value,
type: (this.form.method.toUpperCase()=="POST" ? "POST" : "GET"),
data: $(this.form).serialize(),
dataType: "json",
timeout: 10000,
success: self.success,
error: self.error
});
};
this.success=function(data,textStatus)
{
self.revoke_submit=0;
$(".ajax_loader",self.form).hide();
if (data["status"] == "ok")
{
$(self.form).trigger("on_ajax_submit_success",data); // запустить обработчик события на успешное выполнение AJAX запроса
}
if (typeof data["err"] == "object") // вывод сообщений полученных из AJAX
{
for (var k in data["err"])
{
if (k.match(/^[a-z0-9_]+$/))
{
$(".ajax_block_"+k,self.form).addClass("warningBlock"); // выделяем красным цветом input (ошибочно заполненное поле)
$(".ajax_message_"+k,self.form).html(data["err"][k]).slideDown(); // текст с описание ошибок
}
}
}
};
this.error=function (XMLHttpRequest, textStatus, errorThrown)
{
self.revoke_submit=0;
$(".ajax_loader",self.form).hide();
alert(self.errstr[textStatus]);
};
// init obj
this.submit();
}
/*
* Класс для CAPTCHA
*/
function CaptchaRefresh ($image, $input)
{
var self=this;
this.image=$image; // captcha image
this.input=$input; // keycode hidden input
this.errstr={
"error": "Ошибка сервера!",
"timeout": "Ошибка сервера: превышен лимит ожидания!",
"parsererror": "Ошибка сервера: неверные данные!",
"notmodified": "Не изменен" // хотя это не ошибка
};
this.submit=function ()
{
$.ajax({
url: "/a0/ru/ajax/captcha_refresh.thtml",
type: "GET",
dataType: "json",
timeout: 10000,
success: self.success,
error: self.error
});
};
this.success=function (data,textStatus)
{
self.image.attr("src",data["src"]);
self.input.attr("value",data["keycode"]);
};
this.error=function (XMLHttpRequest, textStatus, errorThrown)
{
alert(self.errstr[textStatus]);
};
// init obj
this.submit();
}
/*
* Приводит AJAX форму в рабочее состояние.
* Скрывает сообщения об ошибках, обновляет CAPTCHA.
*/
function InitForm (formDOM)
{
$(".ajax_block",formDOM).removeClass("warningBlock");
$(".ajax_message",formDOM).text("").hide();
$(".ajax_loader",formDOM).hide();
$(".captchaBlock a",formDOM).click();
}
/*
* Очистка формы от данных, и выставляет значения по умолчанию для полей .hideTextForm
*/
function ClaerForm (formDOM)
{
$("input",formDOM).each(function(){
var type=$(this).attr("type");
if (type=="text" || type=="password")
$(this).val("").inputValue();
});
}
/*
* Показать popup
*/
function ShowPopup (popup_selector,auto_placing)
{
var $popup=$(popup_selector);
if (auto_placing) // не определены координаты вывода
{
var relative=$(".body").get(0);
var relativeOffsetY=0;
while(relative){
relativeOffsetY+=relative.offsetTop;
relative=relative.offsetParent;
}
var windowHeight=$(window).height();
var scrollTop=$(window).scrollTop();
$popup.css("position-top","-10000px").show();
var popupHeight=$popup.outerHeight();
$popup.hide();
var top=windowHeight / 2 + scrollTop - relativeOffsetY - popupHeight / 2;
$popup.css({"left":"335px", "top":top+"px"});
}
HidePopup(); // если из одного popup вызывается другой, первый закрывается
InitForm($("form:first",$popup).get(0));
$(".popupLayer").show(); // слой закрывающий весь документ под popup
$popup.fadeIn("fast");
}
/*
* Спрятать все popup
*/
function HidePopup (f)
{
$('.popupLayer').hide();
$('.popupBox:visible').each(function(){
var $popup=$(this);
var $captcha_block=$('.captchaBlock',this);
$popup.fadeOut("fast",f);
$('img',$captcha_block).attr("src","/a0/ru/images/blank.gif"); //скрываем CAPTCHA, чтобы в следующий раз пользователь увидел другую CAPTCHA
$('input',$captcha_block).attr("value","");
});
}
/*
* Переводит число в вид удобный для чтения, например: 1 234 567 890
* Пример использования:
*/
function hrnum(value)
{
var a=value.toString().replace(/[^0-9]+/g,"").split("").reverse();
var b=new Array();
for (var i=0,j=a.length; i=0)
{
addCompareSubmit($(this).parent('label'));
this.checked=true;
}
else
this.checked=false;
}); // init checkbox in FF
// список комментариев о банке
var $comment_link=$("#js_comment_sign a"); // ссылки: Любые, Положительные, Нейтральные, Отрицательные
if ($comment_link.length) // если не найдены нет смысла выполнять следующий код
{
var $comments=$("#js_comment_list .js_comment");
$comment_link.click(function(){
$comment_link.removeClass("active");
$(this).addClass("active");
var found=this.href.match(/(\d)$/);
if (found)
{
if (found[1]==1) $comments.hide().filter('.positive').show(); // Положительные
else if (found[1]==2) $comments.hide().filter('.neutral').show(); // Нейтральные
else if (found[1]==3) $comments.hide().filter('.negative').show(); // Отрицательные
else $comments.show(); // Любые
}
return false;
});
}
// список банков: сортировка По алфавиту, По рейтингу ЦБ РФ, По рейтингу участников
var $bank_sort_link=$("#js_bank_list_sort_link a");
if ($bank_sort_link.length) // если не найдены нет смысла выполнять следующий код
{
var $bank_conteiner=$("#js_bank_list");
var $bank_list=$(".colLine, .partBlock",$bank_conteiner);
var teaserMap = {};
var banks = [];
$bank_list.each(function(i){
if(!$(this).hasClass('partBlock'))
{
banks.push(this);
return true;
}
$('script',this).remove();
//alert($(this).html());
teaserMap[i]=this;
});
$bank_list = $(banks);
$bank_sort_link.click(function() // выбор типа кредита
{
$bank_sort_link.parent().removeClass("active");
$(this).parent().addClass("active");
var found=this.href.match(/(\d)$/);
if (found && $bank_list.length > 1) // имеет смысл сортировать, только если банков в списке > 1
{
var a=[];
if (found[1]==0) // Сортируем по алфавиту
{
$bank_list.each(function(){
var name=$('.col01 a',this).text();
a.push([ name, this ]);
});
a.sort(function(a,b){
return ((a[0] < b[0]) ? -1 : ((a[0] > b[0]) ? 1 : 0));
});
}
else // Сортируем по рейтингу
{
var selector=((found[1]==1) ? '.col07' : '.js_user_rating'); // По рейтингу ЦБ РФ или По рейтингу участников
$bank_list.each(function(){
var rating=parseInt($(selector,this).text());
a.push([ rating, this ]);
});
a.sort(function(a,b){
return a[0]-b[0];
});
}
var teaserInsert = {};
if(!$.browser.msie)
$bank_conteiner.html('');
var c=0;
for (var i=0,j=a.length; i');
$('#openid_account_input').html(tmpl);
$('#openid_account').slideDown();
$('#openid_loader').hide();
}
else
{
$('#openid_account').hide();
$('#openid_loader').slideDown();
$openid_form.submit();
}
return false;
});
$openid_form.bind("on_ajax_submit_success", function(event,data){
var info=data["info"];
$(".ajax_loader",this).show(); // form context
document.location.href=info["check_url"];
});
}
// личные настройки
var $settings_form=$("#js_settings_form");
if ($settings_form.length)
{
$settings_form.bind("on_ajax_submit_success", function(event,data){
var info=data["info"];
$settings_form.hide();
if (info["new_email"]) $("#js_settings_done_email").html(info["new_email"]);
$("#js_settings_done").show();
});
// new email
$('.switchBlock01 .dashedLink, .switchBlock02 .dashedLink').click(function(){
$('.switchBlock01, .switchBlock02').toggleClass('hideBlock showBlock');
//$('input[name="email_readonly"]',$settings_form).val( $('input[name="email"]',$settings_form).val() );
return false;
});
// new password
$('.switchBlock03 .dashedLink, .switchBlock04 .dashedLink').click(function(){
$('.switchBlock03, .switchBlock04').toggleClass('hideBlock showBlock');
return false;
});
}
$('.addToCompareOpener').click(function(){
var p = document.getElementById('popup_add_to_compare');
if(!p)
return false;
var args = [];
eval('var args = ' + $('').html($(this).attr('rel')).val() + ';');
if(args.length < 9)
return false;
var form = $('form',p).get(0);
if(!form)
return false;
form.elements.type.value = args[0];
form.elements.uid.value = args[1];
form.elements.currency.value = args[2];
$('.js_disable_by_type',form).show().find('input,textarea,select').attr('disabled',false);
$('.js_disable_by_type_' + args[0],form).hide().find('input,textarea,select').attr('disabled',true);
ShowPopup(p,"enable_auto_placing");
$('.compareAmount',form).html(args[3]);
$('.comparePeriod',form).html(args[4]);
if(args[5])
{
$('.compareRate',form).html(args[5]);
$('.compareRateLabel',form).show();
}
else
$('.compareRateLabel',form).hide();
form.elements.sum.value = args[6];
$(form.elements.sum).trigger('keyup');
if(args[0]=='7') // ипотека
{
$('#popupMortgageYearInput',form).val(args[7]);
$('.mortgagePeriod',form).val(args[7]/12);
}
else
{
$('.periodInput',form).val(args[7]);
}
form.elements.initial.value = args[8]/100;
if(args[9])
$('.pageTitle03',form).show().html(args[9]);
else
$('.pageTitle03',form).hide();
return false;
});
$('#popup_add_to_compare form').submit(function(){
$.ajax({
'url':'/a0/ru/ajax/compare_add_uid.thtml',
'cache':false,
'type':'POST',
'dataType':'json',
'data':$(this).serialize(),
'success':function(f){
return function(data, textStatus, jqXHR){
if(data.status=='err')
{
if(data.err.not_found)
alert('Введенные Вами данные не отвечают условиям кредита');
if(data.err.error)
alert('Ошибка добавления в сравнение. Повторите попытку позже');
return;
}
else
{
HidePopup();
f.reset();
location.href=data.info.url;
}
}
}(this),
'error':function(jqXHR, textStatus, errorThrown){
alert('Ошибка передачи данных! Повторите попытку позже');
}
});
return false;
});
/* pager */
/*
function pagerWidth() {
pagerWidth=$('.pager ul').width();
$('.pager ul').css('width', pagerWidth + 'px');
}
pagerWidth();
if ($('.scroll-pane').find('li').length > 10) {
$('.scroll-pane').addClass('pagerFixedWidth');
}
$('.scroll-pane').jScrollPane();
*/
var $mistake_report_popup = $('#popup_mistake_report');
if($mistake_report_popup.size())
{
$('.mistakeReportLink').click(function(){
ShowPopup($mistake_report_popup.get(0),"enable_auto_placing");
});
$('form',$mistake_report_popup).bind('on_ajax_submit_success',function(){
$(this).hide();
this.reset();
var $s = $($(this).attr('action')).show();
//$(this.action).show();
setTimeout(function(form,success){
return function() {
HidePopup(function(){
$(form).show();
$(success).hide();
});
}
}(this,$s.get(0)), 2300);
});
}
$('.compareBack a').click(function(){
history.back();
return false;
});
}); // onload