var HOST_CORE='http://core.turtella'; if (typeof String.prototype.startsWith != 'function') { // see below for better implementation! String.prototype.startsWith = function (str){ return this.indexOf(str) == 0; }; } if (typeof String.prototype.endsWith != 'function') { String.prototype.endsWith = function (str){ return this.slice(-str.length) == str; }; } var divClick = function(e) { var a = $(this).find('a'); if (e.ctrlKey) { window.open(a.attr('href'), a.attr('href')+Math.random()); } else { if (a.attr('target')!=undefined) { window.open(a.attr('href'), a.attr('href')+Math.random()); } else { window.location=a.attr('href'); } } e.preventDefault(); }; function isValidUrl(url){ var RegExp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/; if(RegExp.test(url)){ return true; }else{ return false; } } var bPop = {opacity: 0.6, speed: 10, zIndex: 100}; var ajx = { request: function(params) { jQuery.ajax({ data: params.data, error: function(data, status, request) { if (params.error!=undefined) { params.error(data, status, request); } else { ajx.defaultError(data, status, request); } }, success: function(data, status, request) { if (data.length>=4 && data.substring(0,4)=='err:') { ajx.displayErrorMessage(data.substring(4)); } else { params.success(data, status, request); } }, type: 'POST', url: params.url }); }, requestS: function(params) { var data = $.ajax({ data: params.data, type: "POST", async: false, url: params.url }).responseText; return data; }, defaultError: function(data, status, request) { // alert('СиÑ�темнаÑ� ошибка'); }, displayErrorMessage: function(msg) { // alert(msg); } } $(document).keydown(function(event){ if (event == null) { // ie keycode = window.event.keyCode; } else { // mozilla keycode = event.which; } if(keycode == 27){ // escape, close box, esc ttl.unpop(); } }); var ttl = new Object(); ttl.getAdminEmail = function() { $('#link_email').html('turtella.links'+ '@' + 'gmail.' + 'com'); }; ttl.init = function() { var searchStr = "Поиск по всему сайту..."; $('body') .on('submit', '#searchForm', function(evt) { var val = $(searchControl).val(); if (val=='' || val==searchStr) { evt.preventDefault(); }}) .on('focus', '#searchControl', function() { var el = $(this); if (el.val()==searchStr) { el.val(''); };}) .on('blur', '#searchControl', function() { var el = $(this); if (el.val()=='') { el.val(searchStr); };}) .on('mouseover', '#lMnuBlock .item, #lMnuBlock .subitem', function() {$(this).addClass('selected')}) .on('mouseout', '#lMnuBlock .item, #lMnuBlock .subitem', function() {$(this).removeClass('selected')}) .on('click', '#lMnuBlock .item, #lMnuBlock .subitem', divClick) .on('click', '#lMnuBlock #allSubMenuItems', function() {var block = $(this).closest('.items'); block.find('.subPopular').hide(); block.find('.subAll').show()}) .on('click', '#vk-icon', ttl.loginVk) .on('click', '#ok-icon', ttl.loginOk) .on('click', '#mm-icon', ttl.loginMM) .on('click', '#fb-icon', ttl.loginFB) .on('click', '#srchButton', function() {$('#searchForm').submit();}) .on('click', '#uEnter', ttl.enter) .on('click', '#uRegistration', ttl.openRegistration); $(window).scroll(function(){ var el = $('#fixedAd'); if (el.length) { var objectTop = $('#scrollLimit').position().top; var windowScrollTop = $(window).scrollTop(); if (windowScrollTop > objectTop) { if (!el.hasClass('rightAd')) el.addClass('rightAd'); } else { if (el.hasClass('rightAd')) el.removeClass('rightAd'); } } }); var h = $('#container').height(); $('#left-panel').height(h); $('#right-panel').height(h); if (typeof initPage !='undefined') initPage(); $('#tourRequestAdv').click(divClick); setTimeout(ttl.showHExtra, 400); setTimeout(ttl.showVExtra, 600); }; ttl.showVExtra = function() { if ($('#extraV').length) { var exclude = false; if ($('#exOriginal').length) return; var ch = $('#mTable').height(); var rh = $('#rightBlock').height(); var height = ch-rh; if (height>200) { var url = "/alt/v/turtella/ttl-v/"+height+"/"+$('#extraV').attr('location')+"/?callback=?" $.getJSON(url, function(json){ $('#extraV').replaceWith(json.content); }); } } } ttl.showHExtra = function() { if ($('#extraHz').length) { var height = $('#extraHz').height(); if (height==0) { var url = "/alt/h/turtella/ttl-h/?callback=?" $.getJSON(url, function(json){ $('#extraHz').replaceWith(json.content); }); } } } ttl.moveRightAd= function(eventTime) { ttl.adMoveInProgress = 1; setTimeout(function(){ ttl.rightAdv.animate({top: ttl.window.scrollTop() + "px"}, 1000, 'swing'); ttl.adMoveInProgress = 0; }, 500); }; ttl.showAllPlaces=function() { $('#popularPlaces').hide(); $('#allPlaces').show(); } ttl.showPopularPlaces=function() { $('#allPlaces').hide(); $('#popularPlaces').show(); } $.blockUI.defaults.applyPlatformOpacityRules = false; ttl.popAllowed = true; ttl.unpopAllowed = false; ttl.popMain = undefined; ttl.popContent = undefined; ttl.pop = function (id) { if (ttl.popAllowed) { ttl.popAllowed = false; if (ttl.popMain == undefined) ttl.popMain = $('#popMain'); var popupWnd = $('#'+id); ttl.popContent = popupWnd; // put content into popup window $('#popContainer').append(ttl.popContent); ttl.popMain.remove().appendTo("body"); var w = ttl.popMain.width(); var h = ttl.popMain.height(); var scrollTop = $(window).scrollTop(); $.blockUI({message: ttl.popMain, css: { top: scrollTop+($(window).height()-h)/2+'px', left: ($(window).width()-w)/2+'px', width: w+'px', height: h+'px', border: 0, cursor: 'default'} ,centerY: ($.browser.msie && parseInt($.browser.version) === 6) ? false : true ? false : true, fadeIn: 0 }); $('.blockUI.blockPage').css('position','absolute'); ttl.unpopAllowed = true; } } ttl.popUpdate = function (id) { ttl.popContent.remove().appendTo("#hiddenPanel"); ttl.popContent = $('#'+id); // put content into popup window $('#popContainer').append(ttl.popContent); var w = ttl.popMain.width(); var h = ttl.popMain.height(); var scrollTop = $(window).scrollTop(); ttl.popMain.css('top', scrollTop+($(window).height()-h)/2+'px').css('left',($(window).width()-w)/2+'px').css('width',w+'px').css('height',h+'px'); } ttl.unpop = function(doAfter) { if (ttl.unpopAllowed) { ttl.unpopAllowed = false; ttl.popContent.attr('src',''); $.unblockUI({ onUnblock: function(){ if (ttl.popContent != undefined) { ttl.popContent.remove().appendTo("#hiddenPanel"); } ttl.popMain.remove().appendTo("#hiddenPanel"); ttl.popAllowed = true; if (doAfter!=undefined) doAfter(); }, fadeOut: 0 }); } } ttl.ID = 0; ttl.nextNumber = function() { ttl.ID++; return ttl.ID; } ttl.checkEmail = function(val) { if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(val)) { return true; } else { return false; } } ttl.checkDate = function(val) { if (/^[0|1|2|3]\d\/[0|1]\d\/[1|2][9|0]\d\d$/.test(val)) { return true; } else { return false; } } ttl.updateSecondLevel = function() { var id = $('#level1').val(); $("select[id$=level2] > option").each(function(index) { if ($(this).val()!=0) $(this).remove(); }); if (id != 0) { ajx.request({ data: {parent: id}, success: function(data, status, request) { var options = $.parseJSON(data); var d = $("#level2"); $.each(options, function() { d.append($("").val(this.value).text(this.label)); }); ttl.updateThirdLevel(); }, error: function(data, status, request) { }, url: '/ajax/getSecondLevel' }); } } ttl.updateSecondLevel4Reviews = function() { var id = $('#level1').val(); $("select[id$=level2] > option").each(function(index) { if ($(this).val()!=0) $(this).remove(); }); if (id != 0) { ajx.request({ data: {parent: id}, success: function(data, status, request) { var options = $.parseJSON(data); var d = $("#level2"); $.each(options, function() { d.append($("").val(this.value).text(this.label)); }); ttl.updateThirdLevel(); }, error: function(data, status, request) { }, url: '/ajax/getSecondLevel4Reviews' }); } } ttl.updateThirdLevel = function() { var id = $('#level2').val(); $("select[id$=hotel] > option").each(function(index) { if ($(this).val()!=0) $(this).remove(); }); if (id != 0) { ajx.request({ data: {parent: id}, success: function(data, status, request) { var options = $.parseJSON(data); var d = $("#hotel"); $.each(options, function() { d.append($("").val(this.value).text(this.label)); }); }, error: function(data, status, request) { }, url: '/ajax/getThirdLevel' }); } } ttl.storyAutoSave = function() { var arr = {level1: $('#level1').val(), level2: $('#level2').val(), storyName: $('#storyName').val(), storyText: $('#storyText').val(), notify: $('#notify').is(':checked')?'on':''}; $('textarea[name^="photo_text_"]').each(function(index) { arr[$(this).attr('name')]=$(this).val(); }); ajx.request({ data: arr, success: function(data, status, request) {}, error: function(data, status, request) {}, url: '/ajax/storyAutoSave' }); } var btn = new Object(); btn.btnMap = []; btn.btnDisable = function(id) { if (btn.btnMap[id] == undefined || btn.btnMap[id] == 1) { btn.btnMap[id]=0; $('#btn'+id).addClass('btnDisabled'); $('#btn'+id).attr('title','Заполните обязательные поля') } } btn.btnEnable = function(id) { if (btn.btnMap[id] == 0) { btn.btnMap[id]=1; $('#btn'+id).removeClass('btnDisabled'); $('#btn'+id).attr('title','') } }; btn.btnClick = function(id) { if (btn.btnMap[id] == undefined || btn.btnMap[id] == 1) { if ('register'==id) { reg.register(); } else if ('updatePassword'==id) { $('#changePasswordForm').submit(); } else if ('updateUsrInfo'==id) { $('#changeInfoForm').submit(); } else if ('editStory'==id) { window.location='/story/s'+$('#storyId').attr('val')+'/'; } else if ('editReview'==id) { window.location='/newReview/'; } else if ('submitStory'==id) { $('#submitStory').submit(); } else if ('submitReview'==id) { $('#submitReview').submit(); } else if ('sendPassword'==id) { reg.sendPasswordSubmit(); // } else if ('storyPreview'==id) { // story.validate(); } else if ('saveStory'==id) { story.validateAndSave(); } else if ('reviewSubmit'==id) { review.submit(); } else if ('commentSubmit'==id) { comment.validate('regular'); } else if ('fcommentSubmit'==id) { comment.validate('fake'); } else if ('questionSubmit'==id) { question.validate('regular'); } else if ('fquestionSubmit'==id) { question.validate('fake'); } else if ('answerSubmit'==id) { answer.validate('regular'); } else if ('fanswerSubmit'==id) { answer.validate('fake'); } else if ('closeSubmitResultForm'==id) { ttl.unpop(); } else if ('submitResultForm'==id) { game.submitResultForm(); } else if ('reviewFilterSubmit'==id) { $('#reviewFilterForm').submit(); } else if ('login'==id) { ttl.loginSubmit(); } else if ('emailInputCancel'==id) { reg.emailInputCancel(); } else if ('emailInputSubmit'==id) { reg.emailInputSubmit(); } else if ('addUserEmailCancel'==id) { reg.addUserEmailCancel(); } else if ('addUserEmailSubmit'==id) { reg.addUserEmailSubmit(); } else if ('hideMsg'==id) { msg.hide(); } else if ('downloadImgBtn'==id) { ta.downloadImg(); } else if ('uploadImgBtn'==id) { $('#uploadImgForm').submit(); } else if ('downloadVideoBtn'==id) { ta.downloadVideo(); } else if ('addLinkBtn'==id) { ta.addLink(); } else if ('reviewAdded'==id) { review.goToNewReview(); } } }; var upd = new Object(); upd.isUserNameValid = true; upd.isPasswordValid = false; upd.isBDValid = true; upd.updatePassword = function() { btn.btnDisable('updatePassword'); $('#changePasswordForm').submit(); } upd.updateInfo = function() { btn.btnDisable('updateUsrInfo'); $('#changeInfoForm').submit(); } upd.validateUserName = function() { var val = $('#regUserName').val(); if (val=='') { upd.refreshUserNameField('error','Введите Ваше имя'); } else if (val.length<3) { upd.refreshUserNameField('error','Слишком короткое имя'); } else { upd.refreshUserNameField('success',''); } } upd.validatePassword = function() { var val1 = $('#regPassword1').val(); var val2 = $('#regPassword2').val(); if (val1=='') { upd.refreshPasswordField('error','Введите пароль'); } else if (val2=='') { upd.refreshPasswordField('error','Введите подтверждение пароля'); } else if (val1.length<=4) { upd.refreshPasswordField('error','Слишком короткий пароль'); } else if (val1 != val2) { upd.refreshPasswordField('error','Несоответствие значений'); } else { upd.refreshPasswordField('success',''); } } upd.validateBD = function() { var val = $('#regBD').val(); if (val=='') { upd.refreshBDField('clear',''); } else if (!ttl.checkDate(val)) { upd.refreshBDField('error','Неверный формат даты'); } else { upd.refreshBDField('success',''); } } upd.refreshUserNameField = function(type, message) { $('#userNameMsg').text(message); var icoEl = $('#userNameIco'); if (type=='success') { upd.isUserNameValid = true; icoEl.attr('class','icoAccept'); } else { upd.isUserNameValid = false; icoEl.attr('class','icoReject'); } upd.validateInfoForm(); } upd.refreshPasswordField = function(type, message) { $('#passwordMsg').text(message); var icoEl = $('#passwordIco'); if (type=='success') { upd.isPasswordValid = true; icoEl.attr('class','icoAccept'); } else { upd.isPasswordValid = false; icoEl.attr('class','icoReject'); } upd.validatePasswordForm(); } upd.refreshBDField = function(type, message) { $('#BDMsg').text(message); var icoEl = $('#BDIco'); if (type=='success') { upd.isBDValid = true; icoEl.attr('class','icoAccept'); } else if (type=='clear') { upd.isBDValid = true; icoEl.attr('class','icoBlank'); } else { upd.isBDValid = false; icoEl.attr('class','icoReject'); } upd.validateInfoForm(); } upd.validatePasswordForm = function() { if (upd.isPasswordValid) { btn.btnEnable('updatePassword'); } else { btn.btnDisable('updatePassword'); } } upd.validateInfoForm = function() { if (upd.isUserNameValid && upd.isBDValid) { btn.btnEnable('updateUsrInfo'); } else { btn.btnDisable('updateUsrInfo'); } } upd.refreshForms = function() { btn.btnDisable('updatePassword'); } var story = new Object(); story.titleMinLength=0; story.titleMaxLength=0; story.textMinLength=0; story.textMaxLength=0; story.init = function(titleMin, titleMax, textMin, textMax) { story.titleMinLength=titleMin; story.titleMaxLength=titleMax; story.textMinLength=textMin; story.textMaxLength=textMax; var $ta = $("#ta"); if ($ta.length!=0) { ta.init($ta); }; }; story.validateAndSave = function() { if ( $('#level1').val()>0 && $('#storyName').val().length>=story.titleMinLength && $('#storyName').val().length<=story.titleMaxLength && $('#ta').val().length>=story.textMinLength && $('#ta').val().length<=story.textMaxLength ) { ajx.request({ data: {storyId: $('#storyId').val(), level1: $('#level1').val(), level2: $('#level2').val(), storyName: $('#storyName').val(), storyText: $('#ta').val(), notify: $('#notify').attr('checked')}, success: function(data, status, request) { if (data.startsWith('OK:')) { window.location=data.substring(3); } else if (data=='ERR_CANT_EDIT') { msg.showErr('Ошибка', 'Вы более не можете редактировать данный рассказ.'); } else { msg.showErr('Ошибка', 'Рассказ не может быть сохранен.'); } }, error: function(data, status, request) { msg.showErr('Ошибка', 'Рассказ не может быть сохранен.'); }, url: '/ajax/saveStory' }); } else { $('#submitErr').show(); } }; var comment = new Object(); comment.MinLength=5; comment.MaxLength=1000; comment.showHiddenRows = function() { $('.commentHiddenRows').show(); }; comment.validate = function(type) { comment.showHiddenRows(); if (type=='regular') { if ($('#commentText').val().length>=comment.MinLength && $('#commentText').val().length<=comment.MaxLength) { $('#commentForm').submit(); } else { $('#submitErr').show(); ttl.init(); } } else { var isValid = true; $('#commentTextErr').hide(); $('#userNameErr').hide(); $('#capchaErr').hide(); $('#fuserEmailErr').hide(); // validate text if ($('#commentText').val().lengthcomment.MaxLength) { $('#commentTextErr').show(); isValid = false; } // validate user name if ($('#userName').val().length<3 || $('#userName').val().length>32) { $('#userNameErr').show(); isValid = false; } // validate capcha var captchaToken = grecaptcha.getResponse(); if(captchaToken=='') { $('#capchaErr').show(); isValid = false; } else { $('#captchaToken').val(captchaToken); } // validate email (optional) if($('#notify').attr('checked')==true) { if (!ttl.checkEmail($('#fuserEmail').val())) { $('#fuserEmailErr').show(); isValid = false; } } if (isValid) { $('#commentForm').submit(); } else { ttl.init(); } } } var question = new Object(); question.MinNameLength=10; question.MaxNameLength=250; question.MaxTextLength=2000; question.validate = function(type) { var isValid = true; $('#questionNameErr').hide(); $('#questionTextErr').hide(); $('#userNameErr').hide(); $('#capchaErr').hide(); $('#fuserEmailErr').hide(); // validate question name if ($('#questionName').val().lengthquestion.MaxNameLength) { $('#questionNameErr').show(); isValid = false; } // validate question text if ($('#questionText').val().length>question.MaxTextLength) { $('#questionTextErr').show(); isValid = false; } if (type=='fake' && $('#lu').html()!='1') { // user is not logged or was logged after page load // validate user name if ($('#userName').val().length<3 || $('#userName').val().length>32) { $('#userNameErr').show(); isValid = false; } var captchaToken = grecaptcha.getResponse(); if(captchaToken=='') { $('#capchaErr').show(); isValid = false; } else { $('#captchaToken').val(captchaToken); } // validate email (optional) if (!ttl.checkEmail($('#fuserEmail').val())) { $('#fuserEmailErr').show(); isValid = false; } } if (isValid) { $('#questionForm').submit(); } else { ttl.init(); } } var answer = new Object(); answer.MinLength=5; answer.MaxLength=10000; answer.showHiddenRows = function() { $('.answerHiddenRows').show(); } answer.validate = function(type) { answer.showHiddenRows(); if (type=='regular') { if ($('textarea[name="answerText"]').val().length>=answer.MinLength && $('textarea[name="answerText"]').val().length<=answer.MaxLength) { $('#answerForm').submit(); } else { $('#submitErr').show(); ttl.init(); } } else { var isValid = true; $('#answerTextErr').hide(); $('#userNameErr').hide(); $('#capchaErr').hide(); $('#fuserEmailErr').hide(); // validate text if ($('#answerText').val().lengthanswer.MaxLength) { $('#answerTextErr').show(); isValid = false; } // validate user name if ($('#userName').val().length<3 || $('#userName').val().length>32) { $('#userNameErr').show(); isValid = false; } var captchaToken = grecaptcha.getResponse(); if(captchaToken=='') { $('#capchaErr').show(); isValid = false; } else { $('#captchaToken').val(captchaToken); } // validate email (optional) if($('#notify').attr('checked')==true) { if (!ttl.checkEmail($('#fuserEmail').val())) { $('#fuserEmailErr').show(); isValid = false; } } if (isValid) { $('#answerForm').submit(); } else { ttl.init(); } } } var review = new Object(); review.titleMinLength=0; review.titleMaxLength=0; review.textMinLength=0; review.textMaxLength=0; review.init = function(titleMin, titleMax, textMin, textMax) { review.titleMinLength=titleMin; review.titleMaxLength=titleMax; review.textMinLength=textMin; review.textMaxLength=textMax; var $ta = $("#ta"); if ($ta.length!=0) { ta.init($ta); }; } review.mark = function(mark) { for (i = 1; i <= 5; i++) { if (i<=mark) { $('#mark'+i).addClass('star-sel').removeClass('star'); } else { $('#mark'+i).addClass('star').removeClass('star-sel'); } } $('#mark').val(mark); } review.newReviewUrl = '/'; review.goToNewReview = function() { window.location = review.newReviewUrl; }; review.submit = function() { var validateVal = review.validateRegion() + review.validateHotel() + review.validateMark() + review.validateName() + review.validateText() + review.validateUserName(); if (validateVal>0) { $('#submitErr').show(); } else { var data = { level1: $('#level1').val(), level2: $('#level2').val(), hotel: $('#hotel').val(), location: $('#location').val(), territory: $('#territory').val(), room: $('#room').val(), service: $('#service').val(), food: $('#food').val(), beach: $('#beach').val(), fun: $('#fun').val(), children: $('#children').val(), month: $('#month').val(), year: $('#year').val(), reviewName: $('#reviewName').val(), reviewText: $('#ta').val(), userName: $('#userName').val(), userHotelName: $('#userHotelName').val(), userHotelType: $('#userHotelType').val(), notify: $('#notify').is(':checked')?'on':'off' }; ajx.request({ data: data, success: function(data, status, request) { if (data.startsWith('ERR')) { msg.showErr('Ошибка', 'Проверте правильность заполнения всех полей и попробуйте сохранить отзыв еще раз.'); } else if (data.startsWith('OK:')) { var url = data.substring(3); review.newReviewUrl = url; $('#reviewSaved').bPopup({opacity: 0.6, speed: 10, zIndex: 100, onClose: review.goToNewReview}); } }, error: function(data, status, request) { msg.showErr('Ошибка', 'Проверте правильность заполнения всех полей и попробуйте сохранить отзыв еще раз.'); }, url: '/ajax/submitReview' }); } } review.validateUserName = function() { var validateVal = 0; if ( $( "#userName" ).length ) { var len = $('#userName').val().length; if (len<3 || len>32) { $('#userNameTxt').addClass('txtRed'); validateVal = 1; } else { $('#userNameTxt').removeClass('txtRed'); } } return validateVal; } review.validateRegion = function() { var validateVal = 0; if ( $('#level1').val()==0 || $('#level2').val()==0 ) { $('#regionTxt').addClass('txtRed'); validateVal = 1; } else { $('#regionTxt').removeClass('txtRed'); } return validateVal; } review.validateHotel = function() { var validateVal = 0; if( $('#userHotel1').is(':visible') ) { if ( $('#userHotelName').val()=='' ) { $('#hotel2Txt').addClass('txtRed'); validateVal = 1; } else { $('#hotel1Txt').removeClass('txtRed'); $('#hotel2Txt').removeClass('txtRed'); } } else { if ( $('#hotel').val()==0 ) { $('#hotel1Txt').addClass('txtRed'); validateVal = 1; } else { $('#hotel1Txt').removeClass('txtRed'); $('#hotel2Txt').removeClass('txtRed'); } } return validateVal; } review.validateMark = function() { var validateVal = 0; var summ = 0; var count = 0; $(mrk.ids).each( function(index, id) { if (mrk.arr[id]>0) count++ } ); if (count==0) { $('#markTxt').addClass('txtRed'); validateVal = 1; } else { $('#markTxt').removeClass('txtRed'); } return validateVal; } review.validateName = function() { var validateVal = 0; if ( $('#reviewName').val().lengthreview.titleMaxLength ) { $('#nameTxt').addClass('txtRed'); validateVal = 1; } else { $('#nameTxt').removeClass('txtRed'); } return validateVal; } review.validateText = function() { var validateVal = 0; if ( $('#ta').val().lengthreview.textMaxLength ) { $('#textTxt').addClass('txtRed'); validateVal = 1; } else { $('#textTxt').removeClass('txtRed'); } return validateVal; } review.newHotel = function() { $('#hotel').val('0'); $('#userHotel1').show(); $('#userHotel2').show(); $('#userHotel3').show(); } review.hotelListener = function() { if ($('#hotel').val()!='0') { $('#userHotel1').hide(); $('#userHotel2').hide(); $('#userHotel3').hide(); $('#userHotelName').val(''); $('#userHotelType').val(''); } } review.hideHotelInfo = function() { $('#hInfo1').hide(); $('#hInfo2').hide(); $('#hInfo3').hide(); $('#hInfo4').hide(); $('#hInfo5').hide(); $('#hInfo6').hide(); } review.showHotelInfo = function() { $('#hInfoSmall').hide(); $('#hInfo1').show(); $('#hInfo2').show(); $('#hInfo3').show(); $('#hInfo4').show(); $('#hInfo5').show(); $('#hInfo6').show(); } var cal = new Object(); cal.time = 0; cal.el = null; cal.init = function(time) { cal.time = time; cal.el = $('#timer'); cal.update(); } cal.update = function() { if (cal.time>0) cal.time--; cal.el.text(cal.getStr()); setTimeout('cal.update();',1000); } cal.getStr = function() { var diffSec = cal.time; var days = Math.floor(diffSec / (60*60*24)); diffSec -= days * (60*60*24); var hours = Math.floor(diffSec / (60*60)); diffSec -= hours * (60*60); var minutes = Math.floor(diffSec / (60)); var seconds = diffSec - minutes*60; return '' + days + ' ' + cal.getDaysWord(days) + ' ' + hours + ' ' + cal.getHoursWord(hours) + ' ' + minutes + ' ' + cal.getMinutesWord(minutes) + ' ' + seconds + ' ' + cal.getSecondsWord(seconds); } cal.getDaysWord = function(count) { var word = ''; var number = 0; if (count>20) {number = count % 10;} else {number = count;} if (number==1) { word = 'день'; } else if (number>=2 && number<=4) { word = 'дня'; } else { word = 'дней'; } return word; } cal.getHoursWord = function(count) { var word = ''; var number = 0; if (count>20) {number = count % 10;} else {number = count;} if (number==1) { word = 'час'; } else if (number>=2 && number<=4) { word = 'часа'; } else { word = 'часов'; } return word; } cal.getMinutesWord = function(count) { var word = ''; var number = 0; if (count>20) {number = count % 10;} else {number = count;} if (number==1) { word = 'минута'; } else if (number>=2 && number<=4) { word = 'минуты'; } else { word = 'минут'; } return word; } cal.getSecondsWord = function(count) { var word = ''; var number = 0; if (count>20) {number = count % 10;} else {number = count;} if (number==1) { word = 'секунда'; } else if (number>=2 && number<=4) { word = 'секунды'; } else { word = 'секунд'; } return word; } var mrk = new Object(); mrk.arr = []; mrk.ids = []; mrk.init = function(id,val) { mrk.ids[mrk.ids.length]=id; mrk.setContolValue(id,val); $('#'+id+'-tbl').find('img').each( function(index, el) { $(el).hover( function(el) { mrk.markContol(id, index+1); }, function(el) { mrk.markContol(id, mrk.getContolValue(id)); } ) $(el).click( function() { mrk.setContolValue(id,index+1); mrk.markContol(id, index+1); } ); } ) } mrk.markContol = function(id, val) { $('#'+id+'-tbl').find('img').each( function(index, el) { if (index0) count++ summ+=mrk.arr[id]; } ); var mark = '0.0'; if (count>0) { mark = ''+Math.round((summ/count)*10)/10; if (mark.length==1) mark+='.0'; } $('#avgMark').text(mark); } var comments = new Object(); comments.notifySwitcher = function() { if($('#notify').attr('checked')==true) { $('#fuser_email').show(); } else { $('#fuser_email').hide(); $('#fuserEmailErr').hide(); $('#fuserEmail').val(''); }; } comments.subscribe = function(type,id) { $('#subscribePanel').hide(); $('#unsubscribePanel').show(); ajx.request({ data: {type: type, id: id}, success: function(data, status, request) { }, error: function(data, status, request) { }, url: '/ajax/subscribe' }); } comments.unsubscribe = function(type,id) { $('#unsubscribePanel').hide(); $('#subscribePanel').show(); ajx.request({ data: {type: type, id: id}, success: function(data, status, request) { }, error: function(data, status, request) { }, url: '/ajax/unsubscribe' }); } var qa = new Object(); qa.voteQ = function(id, vote) { $('#qpanel'+id).hide(); var newVal = $('#q'+id).text()*1; if (vote) newVal++; else newVal--; $('#q'+id).text(newVal); ajx.request({ data: {id: id, vote: vote}, success: function(data, status, request) { }, error: function(data, status, request) { }, url: '/ajax/voteQ' }); } /* qa.voteA = function(id, vote) { $('#qpanel'+id).hide(); var newVal = $('#q'+id).text()*1; if (vote) newVal++; else newVal--; $('#q'+id).text(newVal); ajx.request({ data: {id: id, vote: vote}, success: function(data, status, request) { }, error: function(data, status, request) { }, url: '/ajax/voteA' }); } */ qa.voteA = function(id) { var el = $('#v'+id); el.addClass('thanks').html('спасибо').parent().addClass('thanks'); ajx.request({ data: {id: id, vote: true}, success: function(data, status, request) { }, error: function(data, status, request) { }, url: '/ajax/voteA' }); } qa.nodeChanged = function() { window.location=$('#qaNode').val(); } var game = new Object(); game.submitResult = function() { $('#popTitle').text('Сохранение результатов игры'); ttl.pop('submitResultForm'); } game.validateForm = function() { // alert($('#gameResName').length); if ($('#gameResName').val().length>=3) { btn.btnEnable('submitResultForm'); } else { btn.btnDisable('submitResultForm'); } } game.submitResultForm = function() { btn.btnDisable('submitResultForm'); ttl.unpop(); var userName = $('#gameResName').val(); var location = $('#gameResLocation').val(); ajx.request({ data: {userName: userName, location: location}, success: function(data, status, request) { window.location='/gameResult/'; }, error: function(data, status, request) { window.location='/gameResult/'; }, url: '/ajax/submitGameResult' }); } var filter = new Object(); filter.elements = new Array();; filter.defaultValues = new Array();; filter.register = function(id, type, defaultValue, selectedValues) { filter.elements[id]=type; filter.defaultValues[id]=defaultValue; // bind listeners $('#'+id).find('[id^="'+id+'"]').each(function(index){ $(this).bind('click', function() { filter.select(id,$(this).attr('id').substring(id.length+1)); }) }); // select values if(selectedValues!=undefined) { for (var i = 0; i < selectedValues.length; i++) { filter.select(id, selectedValues[i]); } } else { filter.select(id, defaultValue); } } filter.select = function(id, value) { if (filter.elementExists(id, value)) { if ('single'==filter.elements[id]) { // is it already selected? if (!filter.getElement(id, value).hasClass('fltrSelected')) { // clear old elements $('#'+id).find('[id^="'+id+'"]').each(function(index){ $(this).removeClass('fltrSelected'); }); // select new element filter.getElement(id, value).addClass('fltrSelected'); // put new value in form $('#'+id+'Val').val(value); } } else { var elId = ''; var res = ''; var defaultSelected = false; var otherSelected = false; // force selecting def value if (value==filter.defaultValues[id] && !filter.getElement(id, value).hasClass('fltrSelected')) { // clear all elements $('#'+id).find('[id^="'+id+'"]').each(function(index){ $(this).removeClass('fltrSelected'); }); // select default value $('#'+id).find('#'+id+'_'+value).addClass('fltrSelected'); // put def value in form $('#'+id+'Val').val(value); // selecting other values } else { // reverse selected value if (filter.getElement(id, value).hasClass('fltrSelected')) { filter.getElement(id, value).removeClass('fltrSelected'); } else { filter.getElement(id, value).addClass('fltrSelected'); } // put new value in form $('#'+id).find('[id^="'+id+'"]').each(function(index){ if($(this).hasClass('fltrSelected')) { elId = $(this).attr('id'); if(elId==id+'_'+filter.defaultValues[id]) { defaultSelected = true; } else { otherSelected = true; } if (res.length>0) res+=','; res+=elId.substring(id.length+1); } }); $('#'+id+'Val').val(res); // select default value if new value is blank; deselect default value if something else selected if ((defaultSelected&&otherSelected) || (!defaultSelected&&!otherSelected)) { filter.select(id, filter.defaultValues[id]); } } } } } filter.elementExists = function(id, value) { if (filter.getElement(id, value).size()==1) { return true; } else { return false; } } filter.getElement = function(id, value) { return $('#'+id).find('#'+id+'_'+value); } ttl.openSocialWindow=function(url, width, height) { var h = 600; var w = 800; if (width!=undefined) w=width; if (height!=undefined) h=height; window.open(url,'social','height='+h+',width='+w+',location=0,menubar=0,resizable=0,scrollbars=1,status=0,toolbar=0,top='+Math.round(($(window).height()-h)/2)+',left='+Math.round(($(window).width()-w)/2)); } ///////////////////////////////////////////////////////////////////////////////// ttl.enter = function(url) { if (url!=undefined) { ttl.GO_URL=url; } else { ttl.GO_URL=''; } reg.init(); ttl.unpop(); $('#loginMsg').hide(); $('#popTitle').text('Вход на сайт'); ttl.pop('enter'); } ttl.openRegistration = function() { reg.init(); ttl.unpop(); $('#popTitle').text('Регистрация на сайте'); ttl.pop('registration'); } ttl.loginSubmit = function() { if ($('#loginEmail').val()!='' && $('#loginPassword').val()!='') { btn.btnDisable('login'); ajx.request({ data: {email: $('#loginEmail').val(), password: $('#loginPassword').val()}, success: function(data, status, request) { if (data.startsWith('NOT_FOUND:')) { $('#loginMsg').show().html("Пользователь с адресом '"+data.substring(10)+"' не найден."); } else if (data.startsWith('BAD_PASSWORD:')) { $('#loginMsg').show().html('Пожалуйста, проверьте правильность введенного пароля.'); } else if (data.startsWith('ADMIN')) { window.location='/admin/'; } else if (data.startsWith('PARTNER')) { window.location='/partner/'; } else if (data.startsWith('OK:')) { ttl.unpop(); $('#loginForm').html(data.substring(3)); reg.postLoginUIUpdate(); $('#lu').html('1'); } btn.btnEnable('login'); }, error: function(data, status, request) { }, url: '/ajax/login' }); } } ttl.loginVk = function() { ttl.openSocialWindow('http://oauth.vk.com/authorize?client_id=2228253&redirect_uri=http://turtella.ru/vklogin&response_type=code'); } ttl.loginOk = function() { ttl.openSocialWindow('http://www.odnoklassniki.ru/oauth/authorize?client_id=163724288&response_type=code&redirect_uri=http://turtella.ru/oklogin'); } ttl.loginFB = function() { ttl.openSocialWindow('https://www.facebook.com/dialog/oauth?client_id=470644452989304&redirect_uri=http://turtella.ru/fblogin&response_type=code', 1000, 710); } ttl.loginMM = function() { ttl.openSocialWindow('https://connect.mail.ru/oauth/authorize?client_id=701208&response_type=code&redirect_uri=http%3A%2F%2Fturtella.ru%2Fmmlogin'); } var reg = new Object(); reg.dispayErrMsg = function(msg) { $('#regMsg').show().html(msg); } reg.register = function() { $('#regMsg').hide(); $('#regLinks').hide(); var val = $('#regName').val(); if (val=='') { reg.dispayErrMsg('Пожалуйста, укажите Ваше имя'); return false; } else if (val.length<3) { reg.dispayErrMsg('Слишком короткое имя пользователя'); return false; } val = $('#regEmail').val(); if (val=='') { reg.dispayErrMsg('Пожалуйста, укажите Ваш e-mail адрес'); return false; } else { if (!ttl.checkEmail(val)) { reg.dispayErrMsg('Неверный формат e-mail адреса'); return false; } else { ajx.request({ data: {email: val}, success: function(data, status, request) { if ('exists'==data) { reg.dispayErrMsg('Пользователь с таким e-mail адресом уже существует.'); $('#regLinks').show(); return false; } btn.btnDisable('register'); ajx.request({ data: {email: $('#regEmail').val(), userName: $('#regName').val()}, success: function(data, status, request) { if (data=='ERROR') { btn.btnEnable('register'); reg.dispayErrMsg('Ошибка обработки данных'); btn.btnEnable('register'); return false; } else if (data.startsWith('OK:')) { ttl.unpop(); $('#loginForm').html(data.substring(3)); reg.postLoginUIUpdate(); $('#lu').html('1'); } }, error: function(data, status, request) { reg.dispayErrMsg('Ошибка обработки данных'); btn.btnEnable('register'); return false; }, url: '/ajax/register' }); // $('#registerForm').submit(); }, error: function(data, status, request) { reg.dispayErrMsg('Ошибка доступа к серверу'); return false; }, url: '/ajax/validateEmail' }); } } } reg.sendPassword = function(url, w, h) { reg.init(); ttl.unpop(); $('#sendPasswordMsg').hide(); $('#popTitle').text('Восстановление пароля'); ttl.pop('sendPasswordPanel'); } reg.sendPasswordSubmit = function() { if ($('#sendPassEmail').val()!='') { btn.btnDisable('sendPassword'); ajx.request({ data: {email: $('#sendPassEmail').val()}, success: function(data, status, request) { btn.btnEnable('sendPassword'); if (data.startsWith('NOT_FOUND:')) { $('#sendPasswordMsg').show().html("Пользователь с адресом '"+data.substring(10)+"' не найден."); } else if (data.startsWith('OK:')) { $('#sendPasswordMsg').show().html('Сообщение отправлено. Проверьте Вашу почту.'); } }, error: function(data, status, request) { }, url: '/ajax/sendPassword' }); } } reg.refreshLoggedUserBlock = function() { ajx.request({ success: function(data, status, request) { $('#userBlock').html(data); }, error: function(data, status, request) { }, url: '/ajax/refreshLoggedUserBlock' }); } reg.newUserInit = 0; reg.init = function() { if (reg.newUserInit==0) { reg.newUserInit=1; $('#hiddenPanel').append(reg.NEW_USER_WINDOWS); $('#hiddenPanel').append(reg.EMAIL_INPUT); } } reg.getButton = function(id, name) { return ''+ ''+name+''+ ''; } reg.SOCIAL = ''+ ''+ ' '+ ' ВКонтакте'+ ' '+ ' Одноклассники'+ ''+ ''+ ''+ ' '+ ' Мой Мир'+ ' '+ ' Facebook'+ ''+ ''; reg.NEW_USER_WINDOWS = ''+ ' '+ 'Войти:'+ 'Новый пользователь? Зарегистрируйтесь на нашем сайте или авторизуйтесь через одну из популярных социальных сетей.'+ ''+ ' '+ ' Ваш e-mail:'+ ' '+ ' '+ ' '+ ' Пароль:'+ ' '+ ' забыли пароль?'+ ' '+ ' '+ ' '+ ' '+ ' '+reg.getButton("login","войти")+''+ ' '+ ''+ ''+ ''+ ''+ 'Войти через социальную сеть:'+ 'Если Вы уже зарегистрированы в одной из социальных сетей, то Вы можете войти на наш сайт без регистрации всего за 10 секунд.'+ reg.SOCIAL + ''+ ''+ ''+ ''+ ''+ ''+ 'Новый пользователь:'+ 'На указанный Вами e-mail будет отправлен Ваш пароль, а также ссылка для подтверждения e-mail адреса.'+ ''+ ' '+ ' Как Вас зовут?'+ ' '+ ' '+ ' '+ ' Ваш e-mail:'+ ' '+ ' '+ ' '+ ' Войти / Напомнить пароль'+ ' '+ ' '+reg.getButton("register","регистрация")+''+ ' '+ ''+ ''+ ''+ ''+ 'Войти через социальную сеть:'+ 'Если Вы уже зарегистрированы в одной из социальных сетей, то Вы можете войти на наш сайт без регистрации всего за 10 секунд.'+ reg.SOCIAL + ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ' Ваш e-mail:'+ ' '+ ' '+reg.getButton("sendPassword","Отправить")+''+ ''+ ''+ ' '+ ''+ ''+ ' На указанный Вами адрес будет выслано письмо с инструкциями по восстановлению пароля.'+ ''+ ''+ ''+ ''; reg.EMAIL_INPUT = ''+ ''+ 'Добро пожаловать!'+ 'Приветствуем Вас в нашем туристическом клубе. Теперь Вам доступны все основные функции нашего портала: написание отзывов, рассказов, комментариев и прочее.'+ 'Хотите больше?'+ 'Вы можете получать уведомления о комментариях к Вашим рассказам и отзывам на электронную почту. Для этого нам нужно знать Ваш e-mail адрес. Он не будет доступен другим пользователям и Вы будете получать только те уведомления, на которые подпишетесь самостоятельно.'+ ''+ ' '+ ''+ ''+ ' Ваш e-mail:'+ ' '+ ''+ ''+ ' '+ ''+ ''+ ' '+ ' '+ ' '+reg.getButton("emailInputCancel","Нет, спасибо")+''+ ' '+reg.getButton("emailInputSubmit","Сохранить")+''+ ' '+ ''+ ''+ ''; ttl.GO_URL=''; ttl.go=function(url) { if ($('#lu').html()=='1') { window.location.href=url; } else { ttl.enter(url); } } reg.postLoginUIUpdate = function() { // page with comments if ($('#newCommentBlock').length) { var comment = $('#commentText').val(); ajx.request({ data: {type: $('#cType').val(), objectId: $('#cObjectId').val()}, success: function(data, status, request) { $('#newCommentBlock').html(data); $('#commentText').val(comment); }, error: function(data, status, request) { }, url: '/ajax/refreshCommentsBlock' }); } // new question page $('tr.newUserOnly').remove(); // answer block if ($('#newAnswerBlock').length) { var answer = $('#answerText').val(); ajx.request({ data: {questionId: $('#questionId').val()}, success: function(data, status, request) { $('#newAnswerBlock').html(data); $('#answerText').val(answer); }, error: function(data, status, request) { }, url: '/ajax/refreshAnswerBlock' }); } } window.registrationSuccess = function(newUser) { if (ttl.GO_URL=='') { reg.postLoginUIUpdate(); } $('#lu').html('1'); reg.refreshLoggedUserBlock(); ttl.unpop(); if (newUser) { reg.init(); $('#popTitle').text('Регистрация завершена'); ttl.pop('emailInput'); } else { if (ttl.GO_URL!='') { window.location=ttl.GO_URL; } } } window.registrationFail = function() { // do nothing } reg.emailInputSubmit = function() { val = $('#newUserEmail').val(); if (val=='') { $('#emailInputMsg').html('Пожалуйста, укажите Ваш e-mail адрес'); return; } else { if (!ttl.checkEmail(val)) { $('#emailInputMsg').html('Неверный формат e-mail адреса'); return; } else { ajx.request({ data: {email: val}, success: function(data, status, request) { if ('exists'==data) { $('#emailInputMsg').html('Данный e-mail адрес уже используется другой учетной записью'); return false; } btn.btnDisable('emailInputSubmit'); ajx.request({ data: {email: $('#newUserEmail').val()}, success: function(data, status, request) { if (data=='ERROR') { btn.btnEnable('emailInputSubmit'); $('#emailInputMsg').html('Ошибка обработки данных'); return false; } else if (data.startsWith('OK:')) { if (ttl.GO_URL!='') { window.location=ttl.GO_URL; } else { ttl.unpop(); $('#loginForm').html(data.substring(3)); } } else { btn.btnEnable('emailInputSubmit'); } }, error: function(data, status, request) { $('#emailInputMsg').html('Ошибка обработки данных'); btn.btnEnable('emailInputSubmit'); return false; }, url: '/ajax/updateUserEmail' }); }, error: function(data, status, request) { $('#emailInputMsg').html('Ошибка доступа к серверу'); return false; }, url: '/ajax/validateEmail' }); } } } reg.emailInputCancel = function() { if (ttl.GO_URL!='') { window.location=ttl.GO_URL; } else { ttl.unpop(); } } reg.addUserEmail = function() { $('#popTitle').text('Добавление e-mail адреса'); ttl.pop('addUserEmail'); } reg.addUserEmailSubmit = function() { val = $('#newUserEmail').val(); if (val=='') { $('#emailInputMsg').html('Пожалуйста, укажите Ваш e-mail адрес'); return; } else { if (!ttl.checkEmail(val)) { $('#emailInputMsg').html('Неверный формат e-mail адреса'); return; } else { ajx.request({ data: {email: val}, success: function(data, status, request) { if ('exists'==data) { $('#emailInputMsg').html('Данный e-mail адрес уже используется другой учетной записью'); return false; } btn.btnDisable('emailInputSubmit'); ajx.request({ data: {email: $('#newUserEmail').val()}, success: function(data, status, request) { if (data=='ERROR') { btn.btnEnable('emailInputSubmit'); $('#emailInputMsg').html('Ошибка обработки данных'); return false; } else if (data.startsWith('OK:')) { window.location='/profile/'; } else { btn.btnEnable('emailInputSubmit'); } }, error: function(data, status, request) { $('#emailInputMsg').html('Ошибка обработки данных'); btn.btnEnable('emailInputSubmit'); return false; }, url: '/ajax/updateUserEmail' }); }, error: function(data, status, request) { $('#emailInputMsg').html('Ошибка доступа к серверу'); return false; }, url: '/ajax/validateEmail' }); } } } reg.addUserEmailCancel = function() { ttl.unpop(); } var msg = new Object(); msg.showErr = function(title, txt, w) { msg.show('err',title,txt,w); }; msg.showInfo = function(title, txt, w) { msg.show('info',title,txt,w); }; msg.show = function(type, title, txt, w) { if (type=='err') { $('#msgPopTitle').attr('class','popTitleErr mb10'); } else { $('#msgPopTitle').attr('class','popTitleInfo mb10'); } if (w!=undefined && w>0) { $('#msgPopPanel').width(w); } $('#msgPopTitle').html(title); $('#msgPopTxt').html(txt); $('#msgPop').bPopup(bPop); }; msg.hide = function(title, txt, width, height) { $('#msgPop').bPopup().close(); }; function isValidEmail(email) { if (email==undefined) return false; return email.match(/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,5}/)!=null; };