/*------------------------------------------------ / 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