/*------------------------------------------------------------------------ Solidres - Hotel booking extension for Joomla ------------------------------------------------------------------------ @Author Solidres Team @Website https://www.solidres.com @Copyright Copyright (C) 2013 - 2019 Solidres. All Rights Reserved. @License GNU General Public License version 3, or later ------------------------------------------------------------------------*/ Solidres.options={data:{},get:function(key,def){return typeof this.data[key.toUpperCase()]!=="undefined"?this.data[key.toUpperCase()]:def},load:function(object){for(var key in object){this.data[key.toUpperCase()]=object[key]}return this}};Solidres.sprintf=function(str){var counter=1;var args=arguments;return str.replace(/%s/g,function(){return args[counter++]})};function isAtLeastOneRoomSelected(){var numberRoomTypeSelected=0;Solidres.jQuery(".reservation_room_select").each(function(){var el=Solidres.jQuery(this);if(el.is(":checked")&&!el.prop("disabled")){numberRoomTypeSelected++;return}});if(numberRoomTypeSelected>0){Solidres.jQuery('#sr-reservation-form-room button[type="submit"]').removeAttr("disabled")}else{Solidres.jQuery('#sr-reservation-form-room button[type="submit"]').attr("disabled","disabled")}}function ajaxProgressMedia(iframe){var $=Solidres.jQuery;if(iframe){var targetId=window.parent.Solidres.options.get("targetId"),token=window.parent.Solidres.options.get("token"),uriBase=window.parent.Solidres.options.get("uriBase"),target=window.parent.Solidres.options.get("target"),mediaList=$("#item-form",window.parent.document).find('input[name="jform[mediaId][]"]')}else{var targetId=Solidres.options.get("targetId"),token=Solidres.options.get("token"),uriBase=Solidres.options.get("uriBase"),target=Solidres.options.get("target"),mediaList=$("#item-form").find('input[name="jform[mediaId][]"]')}if(mediaList.length&&targetId&&targetId>0&&token){var mediaKeys=[];mediaList.each(function(){mediaKeys.push($(this).val())});$.ajax({url:uriBase+"index.php?option=com_solidres&task=media.ajaxProgressMedia&format=json",type:"post",dataType:"json",data:{targetId:targetId,mediaKeys:mediaKeys,target:target,token:token},success:function(response){console.log(response)}})}}Solidres.jQuery(function($){$("#solidres").on("click",".reservation-navigate-back",function(){$(".reservation-tab").removeClass("active");$(".reservation-single-step-holder").removeClass("nodisplay").addClass("nodisplay");var self=$(this);var currentstep=self.data("step");var prevstep=self.data("prevstep");var active=$("."+prevstep).removeClass("nodisplay");active.find("button[type=submit]").removeAttr("disabled");$(".reservation-tab-"+prevstep).addClass("active").removeClass("complete");$(".reservation-tab-"+prevstep+" span.badge").removeClass("badge-success").addClass("badge-info");$(".reservation-tab-"+currentstep+" span.badge").removeClass("badge-info")});$(".confirmation").on("click","#termsandconditions",function(){var self=$(this),submitBtn=$(".confirmation").find("button[type=submit]");if(self.is(":checked")){submitBtn.removeAttr("disabled")}else{submitBtn.attr("disabled","disabled")}});$("#media-select-all").click(function(){$(".media-checkbox").prop("checked",true)});$("#media-deselect-all").click(function(){$(".media-checkbox").prop("checked",false)});if($(".media-sortable").length){$(".media-sortable").sortable({placeholder:"media-sortable-placeholder",update:function(event,ui){ajaxProgressMedia(false)}});$(".media-sortable").disableSelection()}var loadFormContents=function(){var q=$("#medialibraryform #mediasearch");var btn=$("#media-toggle");$.ajax({url:Solidres.options.get("BaseURI")+"index.php?option=com_solidres&task=medialist.show&format=json",data:{start:$("#media-content").data("pageNavStart")?$("#media-content").data("pageNavStart"):0,limit:5,q:q.val(),viewMode:btn.data("viewMode")},dataType:"json",success:function(response){if(response.success){$("#medialibrary").html($(response.data).find("#medialibrary").html());$("#medialibraryform .pagination").html($(response.data).find("#medialibraryform .pagination").html())}else{alert(response.message)}}})};$("#solidres").on("click","#media-library-delete",function(e){var form=$("#medialibraryform");$.ajax({url:Solidres.options.get("BaseURI")+"index.php?option=com_solidres&task=media.delete&format=json",data:form.serialize(),type:"post",dataType:"json",success:function(response){if(response.success){$("#media-lib-wrap").html($(response.data).find("#media-lib-wrap").html());$("#medialibraryform .pagination").html($(response.data).find("#medialibraryform .pagination").html())}else{alert(response.success)}}})});$("#solidres").on("submit","#medialibraryform",function(e){e.preventDefault();loadFormContents()});$("#solidres").on("click","#medialibraryform .pagination ul>li>a",function(e){e.preventDefault();var start=$(this).attr("data-start");if(start){$("#media-content").data("pageNavStart",start);$("#medialibraryform .pagination ul>li").removeClass("active");$(this).parent().addClass("active");loadFormContents()}else{$("#media-content").data("pageNavStart",0)}});$("#solidres").on("reset","form#medialibraryform",function(){setTimeout(loadFormContents,100)});$("#solidres").on("click","#media-library-insert",function(e){e.preventDefault();$("#medialibrary input:checked").each(function(){if(window.parent!==null){var wrap=$(this).parents(".media-lib-items");var media=wrap.hasClass("list")?$(this).parents("tr:eq(0)").find(".media-file"):$(this).parents(".media-lib-item:eq(0)").find(".media-file");var mediaCssID=media.attr("id");var mediaName=media.attr("title");if($("#"+mediaCssID,window.parent.document).length==0){var a=$("
  • ");var b=media.clone();var c=$("",{type:"hidden",name:"jform[mediaId][]",value:mediaCssID.substring(9)});var d=$("
  • "}child_age_holder.find("ul").empty().append(html)});var submitReservationForm=function(form){var self=$(form),url=self.attr("action"),formHolder=self.parent(".reservation-single-step-holder"),submitBtn=self.find("button[type=submit]"),currentStep=submitBtn.data("step");submitBtn.attr("disabled","disabled");submitBtn.html(' '+Joomla.JText._("SR_PROCESSING"));if($("div.wizard").length>0){$("html, body").animate({scrollTop:$("div.wizard").offset().top},700)}$.post(url,self.serialize(),function(data){if(data.status==1){$.ajax({type:"GET",cache:false,url:Solidres.options.get("BaseURI")+"index.php?option=com_solidres&task=reservation"+(Solidres.context=="backend"?"base":"")+".progress&next_step="+data.next_step,success:function(response){formHolder.addClass("nodisplay");submitBtn.removeClass("nodisplay");submitBtn.html(' '+Joomla.JText._("SR_NEXT"));var next=$("."+data.next_step);next.removeClass("nodisplay").empty().append(response);if(typeof $.fn.popover==="function"){next.find(".popover_payment_methods, .hasPopover").popover({trigger:"hover",html:true})}else if(typeof $.fn.webuiPopover==="function"){next.find(".popover_payment_methods, .hasPopover").webuiPopover({trigger:"hover",placement:"auto-bottom",html:true})}if(data.next=="payment"){$.metadata.setType("attr","validate")}location.hash="#form";$(".reservation-tab").removeClass("active");$(".reservation-tab-"+currentStep).addClass("complete");$(".reservation-tab-"+currentStep+" span.badge").removeClass("badge-info").addClass("badge-success");$(".reservation-tab-"+data.next_step).addClass("active");$(".reservation-tab-"+data.next_step+" span.badge").addClass("badge-info");var next_form=next.find("form.sr-reservation-form");if(next_form.attr("id")=="sr-reservation-form-guest"){next_form.validate({rules:{"jform[customer_email]":{required:true,email:true},"jform[customer_email2]":{equalTo:'[name="jform[customer_email]"]'},"jform[payment_method]":{required:true},"jform[customer_password]":{require:false,minlength:8},"jform[customer_username]":{required:false,remote:{url:Solidres.options.get("BaseURI")+"index.php?option=com_solidres&task=user.check&format=json",type:"POST",data:{username:function(){return $("#username").val()}}}}},messages:{"jform[customer_username]":{remote:Joomla.JText._("SR_USERNAME_EXISTS")}}});next_form.find("input.payment_method_radio:checked").trigger("click");if(typeof onSolidresAfterSubmitReservationForm==="function"){onSolidresAfterSubmitReservationForm()}}else{next_form.validate()}if(next.hasClass("confirmation")||next.hasClass("guestinfo")){$(".toggle_room_confirmation").click(function(){$("#rc_"+$(this).data("target")+(next.hasClass("confirmation")?"_confirmation":"_guestinfo")).toggle()})}}})}},"json")};$("#solidres").on("submit","form.sr-reservation-form",function(event){event.preventDefault();submitReservationForm(this)});$("#solidres").on("submit","form#sr-reservation-form-confirmation",function(event){$(this).find("button[type='submit']").prop("disabled",true)});$(".roomtype-reserve-exclusive").click(function(){var self=$(this);var tariffid=self.data("tariffid");var rtid=self.data("rtid");$(".tariff-box .exclusive-hidden").prop("disabled",true);$(".tariff-box .exclusive-hidden-"+rtid+"-"+tariffid).prop("disabled",false);$(".roomtype-quantity-selection.quantity_"+rtid).val("0");$(".roomtype-quantity-selection.quantity_"+rtid).trigger("change");submitReservationForm(document.getElementById("sr-reservation-form-room"))});$.fn.srRoomType=function(params){params=$.extend({},params);var bindDeleteRoomRowEvent=function(){$(".delete-room-row").unbind().click(function(){removeRoomRow(this)})};bindDeleteRoomRowEvent();removeRoomRow=function(delBtn){var thisDelBtn=$(delBtn),nextSpan=thisDelBtn.next(),btnId=thisDelBtn.attr("id");nextSpan.addClass("ajax-loading");if(btnId!=null){roomId=btnId.substring(16);$.ajax({url:Solidres.options.get("BaseURI")+"index.php?option=com_solidres&task=roomtype"+(Solidres.context=="frontend"?"frontend":"")+".checkRoomReservation&tmpl=component&format=json&id="+roomId,context:document.body,dataType:"JSON",success:function(rs){nextSpan.removeClass("ajax-loading");if(!rs){nextSpan.addClass("delete-room-row-error");nextSpan.html(Joomla.JText._("SR_FIELD_ROOM_CAN_NOT_DELETE_ROOM")+' Yes | No');$(".tier-room").on("click",".room-confirm-delete",function(){$.ajax({url:Solidres.options.get("BaseURI")+"index.php?option=com_solidres&task=roomtype"+(Solidres.context=="frontend"?"frontend":"")+".removeRoomPermanently&tmpl=component&format=json&id="+roomId,context:document.body,dataType:"JSON",success:function(rs){if(!rs){}else{thisDelBtn.parent().parent().remove()}}})});$(".tier-room").on("click",".room-cancel-delete",function(){nextSpan.html("")})}else{thisDelBtn.parent().parent().remove()}}})}else{thisDelBtn.parent().parent().remove()}},initRoomRow=function(){var rowIdRoom=params.rowIdRoom,currentId="tier-room-"+rowIdRoom,htmlStr="";$("#room_tbl tbody").append('');var a=$("#"+currentId);htmlStr+='';htmlStr+='';htmlStr+='';a.append(htmlStr);bindDeleteRoomRowEvent()};$("#new-room-tier").click(function(event){event.preventDefault();initRoomRow();params.rowIdRoom++});return this};$("#jform_reservation_asset_id").change(function(event){$.ajax({url:Solidres.options.get("BaseURI")+"index.php?option=com_solidres&format=json&task=coupons"+(Solidres.context=="frontend"?"frontend":"")+".find&id="+$(this).val(),success:function(html){$("#coupon-selection-holder").empty().html(html)}});$.ajax({url:Solidres.options.get("BaseURI")+"index.php?option=com_solidres&format=json&task=extras"+(Solidres.context=="frontend"?"frontend":"")+".find&id="+$(this).val(),success:function(html){$("#extra-selection-holder").empty().html(html)}})});$("#solidres").on("change",".occupancy_max_constraint",function(){var self=$(this);var max=self.data("max");var min=self.data("min");var roomtypeid=self.data("roomtypeid");var leftover=0;var totalSelectable=0;var roomindex=self.data("roomindex");var roomid=self.data("roomid");var tariffid=self.attr("data-tariffid");if(Solidres.context=="frontend"){var target=roomindex+"_"+tariffid+"_"+roomtypeid}else{var target=roomid+"_"+tariffid+"_"+roomtypeid}if(max>0){$(".occupancy_max_constraint_"+target).each(function(){var s=$(this);var val=parseInt(s.val());if(val>0){leftover+=val}});totalSelectable=max-leftover;$(".occupancy_max_constraint_"+target).each(function(){var s=$(this);var val=parseInt(s.val());var from=0;if(val>0){from=val+totalSelectable}else{from=totalSelectable}disableOptions(s,from)})}if(min>0){var totalAdultChildNumber=0;$(".occupancy_max_constraint_"+target).each(function(){var s=$(this);var val=parseInt(s.val());if(val>0){totalAdultChildNumber+=val}});if(totalAdultChildNumberfrom){$(this).attr("disabled","disabled")}else{$(this).removeAttr("disabled")}})}$("#solidres").on("click",".reservation_room_select",function(){var self=$(this);var room_selection_details=$("#room_selection_details_"+self.val());var priceTable=$("#room"+self.val()+" dl dt table");var span=$("#room"+self.val()+" dl dt label span");if(self.is(":checked")){room_selection_details.show();priceTable.show();span.addClass("label-success");room_selection_details.children("select.tariff_selection").removeAttr("disabled");room_selection_details.children("input.guest_fullname").removeAttr("disabled");room_selection_details.children("select.adults_number").removeAttr("disabled");room_selection_details.children("select.children_number").removeAttr("disabled");$("#room_selection_details_"+self.val()+" .extras_row_roomtypeform").each(function(){var li=$(this);var chk=li.children("input:checkbox");if(chk.is(":checked")){var sel=li.children("select");sel.removeAttr("disabled")}})}else{room_selection_details.hide();priceTable.hide();span.removeClass("label-success");room_selection_details.children("select.tariff_selection").attr("disabled","disabled");room_selection_details.children("input.guest_fullname").attr("disabled","disabled");room_selection_details.children("select.adults_number").attr("disabled","disabled");room_selection_details.children("select.children_number").attr("disabled","disabled");room_selection_details.find("input:hidden").attr("disabled","disabled");room_selection_details.find(".extras_row_roomtypeform select").attr("disabled","disabled")}isAtLeastOneRoomSelected()});$("#solidres").on("click",".room input:checkbox, .guestinfo input:checkbox",function(){var self=$(this);if(self.is(":checked")){$("#"+self.data("target")).removeAttr("disabled");$("#"+self.data("target")).trigger("change")}else{$("#"+self.data("target")).attr("disabled","disabled");$("#"+self.data("target")).trigger("change")}});$("#solidres").on("click",".guestinfo input#processonlinepayment",function(){var self=$(this);if(self.is(":checked")){$("."+self.data("target")).show()}else{$("."+self.data("target")).hide()}});$("#solidres").on("change",".tariff_selection",function(){var self=$(this);if(self.val()==""){$("a.tariff_breakdown_"+self.data("roomid")).hide();$("span.tariff_breakdown_"+self.data("roomid")).text("0");return false}var parent=self.parents(".room_selection_wrapper");var input=parent.find('.room_selection_details input[type="text"]');var checkboxes=parent.find('.room_selection_details input[type="checkbox"]');var select=parent.find(".room_selection_details select").not(self);var spans=parent.find("dt span");var breakdown_trigger=parent.find("dt a.toggle_breakdown");var breakdown_holder=parent.find("dt span.breakdown");var extra_wrapper=parent.find(".extras_row_roomtypeform");var extra_input_hidden=parent.find('.extras_row_roomtypeform input[type="hidden"]');var adjoining_layer=self.find(":selected").data("adjoininglayer");input.attr("name",input.attr("name").replace(/^(jform\[room_types\])(\[[0-9]+\])(\[[-?0-9a-z]*\])(.*)$/,"$1$2["+self.val()+"]$4"));if(extra_input_hidden.length>0){extra_input_hidden.attr("name",extra_input_hidden.attr("name").replace(/^(jform\[room_types\])(\[[0-9]+\])(\[[0-9a-z]*\])(.*)$/,"$1$2["+self.val()+"]$4"))}select.each(function(){var self_sel=$(this);self_sel.attr("name",self_sel.attr("name").replace(/^(jform\[room_types\])(\[[0-9]+\])(\[[-?0-9a-z]*\])(.*)$/,"$1$2["+self.val()+"]$4"));self_sel.attr("data-tariffid",self.val());if(self_sel.attr("data-identity")){self_sel.attr("data-identity",self_sel.attr("data-identity").replace(/^([0-9]+)(_)([-?0-9a-z]*)(_)(.*)$/,"$1$2"+self.val()+"$4$5"))}self_sel.attr("data-adjoininglayer",adjoining_layer);if(self_sel.hasClass("extra_quantity")){self_sel.attr("id",self_sel.attr("id").replace(/^([-?0-9a-z]+)(_)([0-9]+)(_)([-?0-9a-z]*)(_)([-?0-9a-z]*)(_)(.*)$/,"$1$2$3$4"+self.val()+"$6$7$8$9"))}});checkboxes.each(function(){$(this).removeAttr("disabled");if($(this).attr("data-target")){$(this).attr("data-target",$(this).attr("data-target").replace(/^([a-z]+)(_)([0-9]+)(_)([-?0-9a-z]*)(_)(.*)$/,"$1$2$3$4"+self.val()+"$6$7"))}});breakdown_trigger.attr("data-target",breakdown_trigger.data("target").replace(/^([0-9]+)(_)([0-9a-z]*)(_)(.*)$/,"$1$2"+self.val()+"$4$5"));breakdown_holder.attr("id",breakdown_holder.attr("id").replace(/^([a-z]+)(_)([0-9]+)(_)([-?0-9a-z]*)(_)(.*)$/,"$1$2$3$4"+self.val()+"$6$7"));spans.each(function(){var self_spa=$(this);self_spa.attr("class",self_spa.attr("class").replace(/^([a-z]+)(_)([0-9]+)(_)([-?0-9a-z]*)(_)(.*)$/,"$1$2$3$4"+self.val()+"$6$7"))});if(self.val()!=""){$(".tariff_breakdown_"+self.data("roomid")).show()}else{$(".tariff_breakdown_"+self.data("roomid")).hide()}if(extra_wrapper.length){extra_wrapper.attr("id",extra_wrapper.attr("id").replace(/^([a-z]+)(_)([a-z]+)(_)([a-z]+)(_)([0-9]+)(_)([-?0-9a-z]*)(_)(.*)$/,"$1$2$3$4$5$6$7$8"+self.val()+"$10$11"))}$("#room"+self.data("roomid")+" .adults_number.trigger_tariff_calculating").trigger("change")});$("#solidres").on("change paste keyup","#sr-reservation-form-confirmation .total_price_tax_excl_single_line",function(){var sum=0;$.each($(".total_price_tax_excl_single_line"),function(){sum+=parseFloat($(this).val()!=""?$(this).val():0)});$(".total_price_tax_excl").text(sum);updateGrandTotal()});$("#solidres").on("change paste keyup","#sr-reservation-form-confirmation .room_price_tax_amount_single_line",function(){var sum=0;$.each($(".room_price_tax_amount_single_line"),function(){sum+=parseFloat($(this).val()!=""?$(this).val():0)});$(".tax_amount").val(sum);updateGrandTotal()});$("#solidres").on("change paste keyup","#sr-reservation-form-confirmation .tax_amount",function(){updateGrandTotal()});$("#solidres").on("change paste keyup","#sr-reservation-form-confirmation .extra_price_single_line",function(){var sum=0;$.each($(".extra_price_single_line"),function(){sum+=parseFloat($(this).val()!=""?$(this).val():0)});$(".total_extra_price").text(sum);updateGrandTotal()});$("#solidres").on("change paste keyup","#sr-reservation-form-confirmation .extra_tax_single_line",function(){var sum=0;$.each($(".extra_tax_single_line"),function(){sum+=parseFloat($(this).val()!=""?$(this).val():0)});$(".total_extra_tax").text(sum);updateGrandTotal()});function updateGrandTotal(){sum=0;$.each($(".grand_total_sub"),function(){if($(this).text()){sum+=parseFloat($(this).text())}if($(this).val()){sum+=parseFloat($(this).val())}});$(".grand_total").text(sum)}$(".toggle_child_ages").click(function(){$(this).next("ul").toggle()});if($("#sr-upload-content").length){$("#sr-upload-content").slideUp("fast");$(document).on("click","#media-upload",function(){$("#sr-upload-content").slideToggle()})}$(document).on("click","[data-media-id]",function(e){if(e.target.nodeName!=="INPUT"&&e.target.nodeName!=="LABEL"){var checkbox=$(this).find("input.media-checkbox");checkbox.prop("checked",!checkbox.prop("checked"))}});$("#solidres").on("click","#media-toggle",function(){var btn=$(this);var media=btn.parents("#media-content").find("#media-lib-wrap");if(media.length){btn.html('');var viewMode=btn.data("viewMode")==="list"?"grid":"list";media.html('
    ');btn.data("viewMode",viewMode);loadFormContents()}});$(".res-payment-method-id").click(function(){$("#res-payment-method-txn-id-"+$(this).data("target")).toggle()});$("#reservationnote-form").submit(function(e){e.preventDefault();var form=$(this),url=form.attr("action"),submitBtn=form.find("button[type=submit]"),processingIndicator=form.find("div.processing");submitBtn.attr("disabled","disabled");submitBtn.addClass("nodisplay");processingIndicator.removeClass("nodisplay");processingIndicator.addClass("active");$.post(url,form.serialize(),function(data){if(data.status){submitBtn.removeClass("nodisplay");submitBtn.removeAttr("disabled","disabled");processingIndicator.addClass("nodisplay");processingIndicator.removeClass("active");$(".reservation-note-holder").append($('

    '+data.created_date+" by "+data.created_by_username+"

    "+"

    "+Joomla.JText._("SR_RESERVATION_NOTE_NOTIFY_CUSTOMER")+": "+data.notify_customer+" | "+""+Joomla.JText._("SR_RESERVATION_NOTE_DISPLAY_IN_FRONTEND")+": "+data.visible_in_frontend+"

    "+"

    "+data.text+"

    "));form.children("textarea").val("");form.find('input[type="checkbox"]').prop("checked",false)}},"json")})});Solidres.placeHolder=function(container,action){var $=Solidres.jQuery;if(container){container=$(container)}else{container=$("#solidres")}var placeHolders=container.find("[sr-placeholder-item]");var placeHolder=container.find(".sr-placeholder-wrap");if(placeHolders.length){if(action==="show"){var el;placeHolders.html(function(){return'
    '+$(this).html()+"
    "}).find(".sr-placeholder").each(function(){el=$(this);if(el.find(">img").length){el.css({position:"relative",textAlign:"center",display:"block",padding:"25px 0",marginBottom:5}).html('')}else{el.html(function(){return'
    '+$(this).html()+"
    "})}});container.find(".sr-placeholder-hidden").hide()}}else{if(!placeHolder.length){placeHolder=$('");container.append(placeHolder)}if(action==="show"){container.html(placeHolder.show())}else if(action==="hide"){placeHolder.hide()}}};