"use strict"; var _mode="LIVE"; var api_url = "https://api.dataestate.net/"; var api_key = "911368429911"; var callback_str = "init"; (function() { _echo("Start"); /** Load required scripts **/ _init(); })(); function main() { //TODO window[callback_str](); } /*** SearchWidget Class ***/ //Requires jQuery var SearchWidget=function(widget_id, options) { if (!isFunctionA($)) { var $=jQuery.noConflict(); } var _self=this; var _defaults={ autoload: true, use_get: false, search_action:"self", limit_states:null, limit_categories:null, limit_regions:null, limit_areas:null, limit_localities:null, badges:"", detail_link:null, date_format: "dth mmm yy", page_size:18, page_limit:10, default_sort:"RAND", image_size:"original", enquire_link:null } this.id=widget_id; $.each(_defaults, function(key,value) { if (options !== undefined && options[key] !== undefined) { _self[key]=options[key]; } else { _self[key]=_defaults[key]; } }); this.filters={}; this.query_params={}; //SETUP GET IF ANY if (this.use_get && this.use_get != "false") { var params=getQueryParameters(); for (var k in params) { _self._update_param(k, decodeURIComponent(params[k])); } } this.render(); } SearchWidget.prototype.render = function() { //jQuery Protection if (!isFunctionA($)) { var $ = jQuery.noConflict(); } var _self=this; var _change_dependancies={ "states":["areas", "regions", "localities"], "categories":["subtypes", "sort", "date_to", "nights"], "regions":["areas", "localities"], "areas":["localities"] }; /** Essential - Keyword **/ if ($('[dewid-control="keyword"]').length <=0) { $(_self.id).append(''); } else { $('[dewid-control="keyword"]').addClass("dewid-keyword"); } if (_self.use_get && _self.use_get != "false") { if (_self.query_params.hasOwnProperty("keyword")) { $('[dewid-control="keyword"]').val(_self.query_params["keyword"].replace("+", " ")); } } $('[dewid-control="keyword"]').change(function(e) { _self._update_param("keyword", $(this).val()); }); /** Optional - Filters (Input) **/ $('input[dewid-filters]').each(function() { var filter = $(this).attr("dewid-filters"); if (_self.filters[filter] !== undefined) { $(this).val(_self.filters[filter]); } if ($(this).val() != "") { _self._update_param(filter, $(this).val()); } _self._build_filters(filter, "INPUT"); //TXA }); $('input[dewid-filters]').change(function(e) { var filter = $(this).attr("dewid-filters"); _self._update_param(filter, $(this).val()); }); /** Optional - Filters (Checkbox) **/ $('[dewid-filters][dewid-cb-group]').each(function() { var filter=$(this).attr("dewid-filters"); _echo("Checkbox: "+filter); if ($(this).children(":checkbox").length <=0) { _self._build_filters(filter, "checkbox"); } }); /** Optional - Filters (Select) **/ $('select[dewid-filters]').each(function() { var filter=$(this).attr("dewid-filters"); var default_val=$(this).attr("dewid-default"); //CREATE FILTERS if ($(this).children("option").length <=0) { _self._build_filters(filter); } //ADD EVENTS $(this).change(function(e) { _self._update_param(filter, $(this).val()); }); //ADD DEPEDANCY EVENTS if (_change_dependancies.hasOwnProperty(filter)) { $(this).change(function(e) { for (var x in _change_dependancies[filter]) { var filter_name = _change_dependancies[filter][x]; var tag_name = $('[dewid-filters="'+filter_name+'"]').prop("tagName"); _self._build_filters(filter_name, tag_name); //TODO: NEED to do something about checkbox. } }); } _echo($(this).val()); //Add default if (_self.filters.sort!==undefined) { $(this).val(_self.filters.sort); _self.default_sort=_self.filters.sort; } else if (default_val !== undefined) { $(this).val(default_val); _self.default_sort=default_val; //console.log("Default: "+default_val); } }); /** Optional - Hide Filter Button **/ $('button[dewid-toggle]').each(function(e) { var toggle_filter=$(this).attr("dewid-toggle"); $('[dewid-filters="'+toggle_filter+'"]').hide(); }); $('button[dewid-toggle]').click(function(){ //TODO: Make more generic var toggle_filter=$(this).attr("dewid-toggle"); var toggle_text=$(this).attr("dewid-toggle-text"); if (toggle_text) { $(this).attr("dewid-toggle-text", $(this).text()); $(this).text(toggle_text); } $('[dewid-filters="'+toggle_filter+'"]').toggle("fast"); }); /** Essential - Search Button **/ if ($('[dewid-control="search-btn"]').length <=0) { $(_self.id).append(''); } else { $('[dewid-control="search-btn"]').addClass("dewid-btn"); } $('[dewid-control="search-btn"]').click(function(e) { _self.search(); }); /** RESULT **/ if ($('[dewid-control="search-result"]').length <=0) { $(_self.id).parent().append('
') } if (this.autoload) { _echo($('select#dewid-sort').val()); this.search(); } } SearchWidget.prototype.search = function(destination) { //SET Javascript if (!isFunctionA($)) { var $ = jQuery.noConflict(); } _echo("Searching!"); _echo($('select#dewid-sort').val()); var _self = this; if (destination === undefined) { destination=this.search_action; } //INIT WITH GENERAL PARAMS var api_params={ "api_key":api_key, "fields":"id,name,description,hero_image,suburb,city,state_code,category,latest_date,attributes,tourismorgs,rate", "sort":this.default_sort, "size":this.page_size }; //SET LIMITATION ATTRIBUTES IF AVAILABLE if (typeof this.limit_states !== 'undefined' && this.limit_states != null) { api_params["states"]=this.limit_states; } if (typeof this.limit_areas !== 'undefined' && this.limit_areas !=null) { api_params["areas"]=this.limit_areas; } if (typeof this.limit_regions !== 'undefined' && this.limit_regions !=null) { api_params["regions"]=this.limit_regions; } if (typeof this.limit_localities !== 'undefined' && this.limit_localities !=null) { api_params["localities"]=this.limit_localities; } //PROCESS QUERY PARAMS (limits are applied when being added. ) $.each(this.query_params, function(qkey,qval) { api_params[qkey]=qval.replace("+", " "); _echo("Decoded: "+qval+" to "+qval.replace("+", " ")); }); _echo("Destination: "+destination); /*** VALIDATION **/ if (api_params["sort"]=="RAND") { delete api_params["pg"]; _self._update_param("pg",""); } var should_search=true; //TXA if (api_params.hasOwnProperty("categories") && api_params["categories"].indexOf("ACCOMM") >= 0) { _self._update_param("date_to", ""); delete api_params["date_to"]; if (api_params.hasOwnProperty("nights") && !api_params.hasOwnProperty("date_from")) { $('input[dewid-filters="nights"]').val(""); delete api_params["nights"]; _self._update_param("nights", ""); } else if (!api_params.hasOwnProperty("nights") && api_params.hasOwnProperty("date_from")) { api_params["nights"]=1; _self._update_param("nights",1); $('input[dewid-filters="nights"]').val(1); } if (api_params.hasOwnProperty("nights") || api_params.hasOwnProperty("date_from")) { var adult_count=api_params.hasOwnProperty("adults")?api_params["adults"]:0; var concession_count=api_params.hasOwnProperty("concession")?api_params["concession"]:0; var children_count=api_params.hasOwnProperty("children")?api_params["children"]:0; if ((adult_count+concession_count+children_count) <= 0) { alert("Please enter at least one guest for your search!"); should_search=false; } } if (api_params.hasOwnProperty("adults") || api_params.hasOwnProperty("children")) { if (!api_params.hasOwnProperty("nights") || !api_params.hasOwnProperty("date_from")) { alert("Please enter a start date, and number of nights"); should_search=false; } } } else { _self._update_param("nights", ""); delete api_params["nights"]; } //TXA if (destination=="self" && should_search) { $('[dewid-control="search-result"]').empty(); $('[dewid-control="search-result"]').append("
"); $.ajax({ url:api_url+"v2/estates/data/", method: "GET", data:api_params, success: function(response, status, xhr) { _echo("Params: "+api_url+"v2/estates/data/"); _echo(api_params); _echo("Response: "); _echo(response); var total = xhr.getResponseHeader('X-Total-Count'); _echo(total); $.each(response, function(i,item) { var image_path=""; var orientation="LANDSCAPE"; var alt_text=""; if (item.hasOwnProperty("hero_image")) { image_path=item.hero_image.path; var image_sizes=["thumb", "small", "medium", "large"]; if (image_sizes.indexOf(_self.image_size) >=0) { image_path=item.hero_image.sizes[_self.image_size].path; } alt_text=item.hero_image.hasOwnProperty("alt")?item.hero_image.alt:""; orientation=item.hero_image.orientation; } //Shorten Description var result_html = '
'; result_html+='
'; if (image_path!="") { result_html+=''; } result_html+='
'; result_html+="

"+item.name+"

"; if (item.hasOwnProperty("latest_date")) { var start_date = new Date(item.latest_date); result_html+='
'+item.latest_date.substr(0,10)+'
'; } if (item.hasOwnProperty("attributes")) { for (var a in item.attributes){ if (item.attributes[a].type_id=="RATING AAA") { result_html+=formStars(item.attributes[a].id); } } } //Badges var badge_string=build_badges(_self.badges, item); if (badge_string !="") { result_html+=badge_string; } result_html+="

"+truncate_string(item.description, 400)+"

"; result_html+="
"; result_html+='
'; result_html+='