"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+='
';
if (item.hasOwnProperty("rate")) {
result_html+='
From $'+parseFloat(item.rate.from)+'
';
}
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+='';
//TXA
//TXA
result_html+='
';
$('[dewid-control="search-result"]').append(result_html);
});
//Button Click Events
//Add page numbers
if (_self.filters.sort=="RAND" || (_self.filters.sort===undefined && _self.default_sort=="RAND")) {
$('[dewid-control="next-page"]').each(function(){
var page_url = location.pathname+'?'+decodeURIComponent($.param(_self.query_params));
var shuffle_page='Shuffle';
$(this).html(shuffle_page);
});
$('[dewid-control="prev-page"]').each(function(){
$(this).html("");
});
}
else {
//Find Page Container, create if none.
var p_size = api_params["size"] ? api_params["size"] : _self.page_size;
var total_pages = Math.ceil(total / p_size);
var page_url = location.pathname+'?'+decodeURIComponent($.param(_self.query_params));
//Get Current page
var current_page=(_self.query_params.pg=== undefined) ? 1: parseInt(_self.query_params.pg);
_echo("current: "+current_page);
if ($('[dewid-control="search-pages"]').length <= 0) {
$('').appendTo('[dewid-control="search-result"]');
}
$('[dewid-control="search-pages"]').addClass("dewid-pages");
$('[dewid-control="search-pages"]').empty();
var page_label;
//Calculate Current Page with ranges.
var page_lim=$('[dewid-control="search-pages"]').attr("dewid-page-limit");
var page_min=1;
var page_max=total_pages;
if (!isNaN(page_lim) && page_lim!=0) {
page_lim=Math.floor(page_lim/2);
page_max=current_page+page_lim;
page_min=current_page-page_lim;
if (page_max >= total_pages) {
page_max=total_pages;
page_min=total_pages-page_lim*2;
}
if (page_min <=1) {
page_min=1;
}
}
_echo("Creating page from "+page_min+" - "+page_max);
//Build Pages
$('[dewid-control="result-total"]').text(total);
//Build first page (page 1).
$('[dewid-control="first-page"]').each(function() {
var page_label=$(this).attr("dewid-page-label");
page_label=(page_label==undefined)?"First Page":page_label;
var first_page=build_page_item(page_url, 1, _self.use_get, false, page_label);
$(this).html(first_page);
});
$('[dewid-control="last-page"]').each(function(){
var page_label=$(this).attr("dewid-page-label");
page_label=(page_label==undefined)?"Last Page":page_label;
var last_page=build_page_item(page_url, total_pages, _self.use_get, false, page_label);
$(this).html(last_page);
});
//Add front trail (prev page)
//Build next page.
$('[dewid-control="prev-page"]').each(function(){
var page_label=$(this).attr("dewid-page-label");
page_label=(page_label==undefined)?"Prev":page_label;
var page_num = current_page-1;
var prev_page="";
if (page_num >= 1) {
$(this).addClass("page-hide");
// page_num=1;
var prev_page=build_page_item(page_url, page_num, _self.use_get, false, page_label);
}
$(this).html(prev_page);
});
$('[dewid-control="next-page"]').each(function(){
var page_label=$(this).attr("dewid-page-label");
page_label=(page_label==undefined)?"Next":page_label;
_echo("Current page in next"+current_page);
var page_num=current_page+1;
var next_page="";
if (page_num <= total_pages) {
$(this).addClass("page-hide");
// page_num=total_pages;
next_page=build_page_item(page_url, page_num, _self.use_get, false, page_label);
}
_echo("Page Num "+page_num+" and total "+total_pages);
$(this).html(next_page);
});
if (page_min != 1) {
var page_container=document.createElement("div");
page_container.className="dewid-page front-trail";
var page_link=build_page_item(page_url, page_min-1, _self.use_get, false, "...");
page_container.appendChild(page_link);
$('[dewid-control="search-pages"]').append(page_container);
}
_echo(page_max);
for (var i=page_min; i <= page_max; i++) {
var page_container=document.createElement("div");
page_container.className="dewid-page";
var page_link;
if (i==current_page) {
page_link = build_page_item(page_url, i, _self.use_get, true);
}
else {
page_link = build_page_item(page_url, i, _self.use_get);
}
page_container.appendChild(page_link);
$('[dewid-control="search-pages"]').append(page_container);
}
//Add back trail (next page)
if (page_max != total_pages) {
var page_container=document.createElement("div");
page_container.className="dewid-page back-trail";
var page_link=build_page_item(page_url, page_max+1, _self.use_get, false, "...");
page_container.appendChild(page_link);
$('[dewid-control="search-pages"]').append(page_container);
}
}
$("#dewid-load-icon").remove();
//Start Lazy Load
$('.img-lazy').lazy({
effect:'fadeIn',
effectTime:300,
afterLoad: function() {
$('.loading-icon').remove();
},
onError: function(element) {
// console.log("Not Found");
element.addClass("not-found");
}
});
},
error: function(response) {
// console.log(response);
$("#dewid-load-icon").remove();
}
})
}
}
/*** WIDGET HELPER ***/
SearchWidget.prototype._update_param=function(key,val,append) {
if (!isFunctionA($)) {
var $=jQuery.noConflict();
}
var _self=this;
_echo("Finding "+key);
_echo(val);
// delete _self.query_params["pg"];
// delete _self.filters["pg"];
if (val=="" || val===undefined) {
delete _self.query_params[key];
delete _self.filters[key];
}
else {
var select_vals=val.split(",");
//Check if limits are set.
if (_self.hasOwnProperty("limit_"+key) && _self["limit_"+key] !=null) {
var limits = _self["limit_"+key].split(",");
for (var l in select_vals) {
//IF selected values aren't in the limits, then remove.
if (limits.indexOf(select_vals[l]) < 0) {
select_vals.splice(l, 1);
}
val = select_vals.join(",");
}
}
_self.query_params[key]=val;
//TODO
switch (key) {
case "categories":
case "states":
case "regions":
case "areas":
case "localities":
case "subtypes":
if (append && append != "false") {
if (_self.filters[key] !==undefined) {
_self.filters[key].concat(select_vals);
}
else {
_self.filters[key]=select_vals;
}
}
else {
_self.filters[key]=select_vals;
}
break;
default:
_self.filters[key]=val;
break;
}
}
if (_self.use_get && _self.use_get != "false") {
//Remove empty before push
for (var k in _self.query_params) {
if (k == undefined || k=="undefined" || k=="") {
delete _self.query_params[k];
}
else if (_self.query_params[k]=="" || _self.query_params[k]=="undefined" || _self.query_params[k]==undefined) {
delete _self.query_params[k];
}
}
window.history.pushState('', '', '?'+decodeURIComponent($.param(_self.query_params)));
}
}
SearchWidget.prototype._build_filters=function (filter, build_type) {
if (!isFunctionA($)) {
var $=jQuery.noConflict();
}
var _self=this;
var _element=$("[dewid-filters='"+filter+"']");
var _build_type=build_type===undefined ? "SELECT" : build_type;
_echo(_build_type);
var params={
api_key:api_key
};
switch (filter) {
case "categories":
params.types="CATEGORY";
if (_self.limit_categories !== undefined && _self.limit_categories !== null) {
params.ids=_self.limit_categories;
}
$.ajax({
url: api_url+"v2/taxonomy/data/",
method: "GET",
data: params,
success: function(res) {
_element.empty();
_element.append('');
if (_build_type=="SELECT") {
build_select(_element.get(0), res);
}
if (_self.filters[filter] !== undefined && _self.filters[filter] !== null) {
for (var i in _self.filters[filter]) {
_element.val(_self.filters[filter][i]);
}
}
}
});
break;
case "states":
params.types="STATE";
params.fields="id,name";
if (_self.limit_states !== undefined && _self.limit_states !== null) {
params.ids=_self.limit_states;
}
$.ajax({
url: api_url+"v2/locations/data/",
method: "GET",
data: params,
success: function(res) {
_element.empty();
_element.append('');
if (_build_type=="SELECT") {
build_select(_element.get(0), res);
}
if (_self.filters[filter] !== undefined) {
for (var i in _self.filters[filter]) {
_element.val(_self.filters[filter][i]);
}
}
}
});
break;
case "areas":
params.types="AREA";
params.fields="name";
params.sort="name";
if (_self.limit_areas !== undefined && _self.limit_areas !== null) {
params.ids=_self.limit_areas;
}
//STATE
if (_self.filters.states !== undefined) {
params.states=_self.filters.states.join(",");
}
//REGION
if (_self.filters.regions !== undefined) {
params.regions=_self.filters.regions.join(",").replace("+", " ");
}
$.ajax({
url: api_url+"v2/locations/data/",
method: "GET",
data: params,
success: function(res) {
_element.empty();
_element.append('');
if (_build_type=="SELECT") {
build_select(_element.get(0), res, {"text":"name", "value":"name"});
}
if (_self.filters[filter] !== undefined) {
for (var i in _self.filters[filter]) {
_element.val(_self.filters[filter][i]);
}
if (_element.val() == undefined) {
_self._update_param(filter, "");
_element.val("");
}
}
}
});
break;
case "regions":
params.types="REGION";
params.fields="name";
params.sort="name";
if (_self.limit_regions !== undefined && _self.limit_regions !== null) {
params.ids=_self.limit_regions;
}
//STATE
if (_self.filters.states !== undefined) {
params.states=_self.filters.states.join(",");
}
$.ajax({
url: api_url+"v2/locations/data/",
method: "GET",
data: params,
success: function(res) {
_element.empty();
_element.append('');
if (_build_type=="SELECT") {
build_select(_element.get(0), res, {"text":"name", "value":"name"});
}
if (_self.filters[filter] !== undefined) {
for (var i in _self.filters[filter]) {
_element.val(_self.filters[filter][i]);
}
if (_element.val() == undefined) {
_self._update_param(filter, "");
_element.val("");
}
}
}
});
break;
case "localities":
params.types="LOCALITY";
params.fields="name";
params.sort="name";
//REQUIRES STATE
if (_self.filters.states == undefined && _self.filters.regions == undefined) {
_element.empty();
_element.append('');
}
else {
//LOCALITIES
if (_self.limit_localities !== undefined && _self.limit_localities !== null) {
params.names=_self.limit_localities;
// console.log(params.name);
}
//REGION
if (_self.filters.regions !== undefined) {
params.regions=_self.filters.regions.join(",").replace("+", " ");
}
//AREA
if (_self.filters.areas !== undefined) {
params.areas=_self.filters.areas.join(",").replace("+", " ");
}
if (_self.filters.states !==undefined) {
params.states=_self.filters.states.join(",");
}
$.ajax({
url: api_url+"v2/locations/data/",
method: "GET",
data: params,
success: function(res) {
_echo("Got Response for location: "+api_url+"v2/locations/data/");
_echo(params);
_echo(res);
_element.empty();
if (_build_type=="SELECT") {
_element.append('');
build_select(_element.get(0), res, {"text":"name", "value":"name"});
}
if (_self.filters[filter] !== undefined) {
for (var i in _self.filters[filter]) {
_element.val(_self.filters[filter][i]);
}
}
if (_element.val() == undefined) {
_self._update_param(filter, "");
_element.val("");
}
}
});
}
break;
case "subtypes":
params.types="CATEGORY";
if (_self.filters.categories !== undefined) {
params.ids=_self.filters.categories.join(",");
params.showsub="true";
$.ajax({
url: api_url+"v2/taxonomy/data/",
method: "GET",
data: params,
success: function(res) {
_element.empty();
//TODO: GROUPING (FUTURE)
var subtypes=[];
for (var cat in res) {
for (var sub in res[cat].subtypes) {
subtypes.push(res[cat].subtypes[sub]);
}
}
if (_build_type=="SELECT") {
_element.append('');
build_select(_element.get(0), subtypes);
}
else {
if (build_checkbox(_element.get(0), subtypes, filter)) {
//Set checked
if (_self.filters.subtypes !== undefined) {
if (!set_checked(filter, _self.filters.subtypes)) {
_self._update_param(filter, "");
}
}
//TODO:Think about other was to bind events for consistency.
_element.find(":checkbox").change(function(e){
var checked_values=get_checked(filter);
_self._update_param(filter, checked_values.join(","));
});
}
}
}
});
}
else {
_element.empty();
_element.append('');
}
break;
case "sort":
_echo("Sort = "+_self.filters.sort);
var available_sorts=[
{
"name":"Sort Alphabetical (A-Z)",
"id":"name"
},
{
"name":"Sort Alphabetical (Z-A)",
"id":"-name"
},
{
"name":"Randomize",
"id":"RAND"
}
];
if (_self.filters.categories !=undefined && _self.filters.categories.indexOf("ACCOMM") >=0) {
available_sorts=available_sorts.concat([
{
"name":"Sort by price (lowest - highest)",
"id":"rate.from"
},
{
"name":"Sort by price (highest - lowest)",
"id":"-rate.from"
}
]);
}
if (_self.filters.categories !=undefined && _self.filters.categories.indexOf("EVENT") >=0) {
available_sorts=available_sorts.concat([
{
"name":"Date (Latest)",
"id":"latest_date"
}
]);
}
_element.empty();
if (_build_type=="SELECT") {
build_select(_element.get(0), available_sorts);
}
if (_self.filters[filter]!==undefined) {
_element.val(_self.filters[filter]);
}
if (_element.val() == undefined) {
_self._update_param(filter, _self.default_sort);
_element.val(_self.default_sort);
}
break;
//TXA
case "date_to":
if (_build_type=="INPUT") {
if (_self.filters.categories==undefined || _self.filters.categories == "ACCOMM") {
_element.hide();
}
else {
_element.show();
}
}
break;
case "nights":
if (_build_type=="INPUT") {
if (_self.filters.categories==undefined || _self.filters.categories !="ACCOMM") {
_element.hide();
}
else {
_element.show();
}
}
break;
//TXA
}
}
/*** HELPER FUNCTIONS ***/
function get_checked(cb_name) {
var checkboxes=document.getElementsByName(cb_name);
var checked=[];
for (var cb in checkboxes) {
if (checkboxes[cb].checked) {
checked.push(checkboxes[cb].value);
}
}
return checked;
}
function set_checked(cb_name, checked_list) {
var checkboxes=document.getElementsByName(cb_name);
var has_matches=false;
for (var cb in checkboxes) {
if (checked_list.indexOf(checkboxes[cb].value) >=0) {
checkboxes[cb].checked=true;
has_matches=true;
}
else if (checkboxes[cb].tagName=="input"){
checkboxes[cb].checked=false;
}
}
return has_matches;
}
function build_page_item(page_url, number, use_get, is_active, page_label) {
var page_link = document.createElement("a");
//page_link.id="pg-"+number;
if (use_get==true || use_get=="true") {
if (page_url.indexOf("pg=") == -1) {
page_url+="&pg="+number;
}
else {
var url_parts = page_url.split("&pg=");
page_url=url_parts[0];
var second_part=url_parts[1].split("&");
if (second_part.length > 1) {
second_part.shift();
page_url+="&"+second_part.join("&");
}
page_url+="&pg="+number;
//page_url = page_url.replace(/pg=.{1}/, "pg="+i);
}
page_link.href=page_url;
}
page_link.className="dewid-page";
if (is_active==true) {
page_link.className=page_link.className+" active-page";
}
page_link.text=(page_label !==undefined)?page_label:number;
return page_link;
}
function build_checkbox(container_dom, response_array, group_name, mapper, columns) {
if (response_array) {
if (!mapper) {
mapper={
"value": "id",
"text": "name"
}
}
columns = (columns == undefined) ? 3 : columns;
var counter=0;
var total_count=response_array.length;
var row_size=Math.ceil(total_count / columns);
var curr_column;
for (var index in response_array) {
var value = response_array[index];
var cb_container = document.createElement("div");
cb_container.className="dewid-cb-items";
var cb = document.createElement("input");
if (group_name !==undefined) {
cb.name=group_name;
}
cb.setAttribute("type", "checkbox");
cb.value=value[mapper["value"]];
cb.className="form-control";
cb_container.appendChild(cb);
//Create Label
var cb_label = document.createElement("label");
cb_label.htmlFor="subtypes";
cb_label.appendChild(document.createTextNode(value[mapper["text"]]))
cb_container.appendChild(cb_label);
if (index%row_size == 0) {
curr_column=document.createElement("div");
curr_column.className="dewid-cb-columns";
container_dom.appendChild(curr_column);
}
curr_column.appendChild(cb_container);
};
return true;
}
else {
return false;
}
}
function build_select(select_dom, response_array, mapper) {
if (response_array) {
if (!mapper) {
mapper={
"value": "id",
"text": "name"
}
}
for (var index in response_array) {
var value = response_array[index];
var dom_option = document.createElement("option");
dom_option.value = value[mapper["value"]];
dom_option.text = value[mapper["text"]];
select_dom.add(dom_option);
};
return true;
}
else {
return false;
}
}
function build_badges(badge_keys, listing) {
if (badge_keys !==undefined && badge_keys!="") {
var keys=badge_keys.split(",");
//console.log(listing);
var badge_string='
';
for (var i in keys) {
var key=keys[i].toLowerCase()+'s';
if (listing[key]!==undefined) {
for (var j in listing[key]) {
var badge=listing[key][j];
badge_string+='';
}
}
}
badge_string+="
";
return badge_string;
}
else {
return "";
}
}
function getDetail(url, estate_id) {
goToUrl(url, {"id":estate_id});
}
function formStars(starRating) {
if (starRating=="" || starRating=="NA") {
return '
'+starRating+'
';
}
else {
starRating = parseFloat(starRating);
var ratingString="";
ratingString='
';
var i = 0;
while (i < Math.floor(starRating)) {
ratingString+='star';
i++;
}
if (starRating % 1 !=0) {
ratingString+='star_half';
i++;
}
while (i < 5) {
ratingString+='star_border';
i++;
}
ratingString+='
';
return ratingString;
}
}
function formatDate(date, format_string) {
var date_string = format_string;
var shortMonths = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var shortDay = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
var longDay = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
date_string = date_string.replace("dddd", longDay[date.getDay()]);
date_string = date_string.replace("ddd", shortDay[date.getDay()]);
date_string = date_string.replace("dd", date.getDate());
date_string = date_string.replace("dth", date.getDate()+getOrdinal(date.getDate()));
date_string = date_string.replace("mmmm", months[date.getMonth()]);
date_string = date_string.replace("mmm", shortMonths[date.getMonth()]);
date_string = date_string.replace("mm", date.getMonth()+1);
date_string = date_string.replace("yyyy", date.getFullYear());
date_string = date_string.replace("yy", date.getFullYear()%100);
return date_string;
}
function getOrdinal(ordNumber) {
var ordinal = ["th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th"];
ordNumber = ordNumber%100;
switch (ordNumber) {
case 11:
case 12:
case 13: return "th";
default: return ordinal[ordNumber%10];
}
}
//Search functions
function goToUrl(url, parameters) {
var urlParts = url.split("?");
var urlString = urlParts[0];
var existingParams = urlParts[1];
if (existingParams !== undefined && existingParams != "") {
urlString += existingParams + "&"+ jQuery.param(parameters);
}
else {
urlString += "?"+jQuery.param(parameters);
}
location.href=urlString;
}
function getQueryParameters(str) {
var queryDoc=document.location.search.replace(/(^\?)/,'').split("&").map(function(n){return n = n.split("="),this[n[0]] = n[1],this}.bind({}))[0];
//console.log(queryDoc);
if (str === undefined) {
//console.log("No String");
return queryDoc;
}
else {
//console.log("ID: "+str);
return queryDoc[str];
}
}
function isFunctionA(object) {
return object && getClass.call(object) == '[object Function]';
}
function array_intersect(array1, array2) {
var intersectArray=[];
for (var x in array1) {
if (array2.indexOf(array1[x]) >= 0) {
intersectArray.push(array1[x]);
}
}
return intersectArray;
}
//Truncate string by length (of characters) and append replacement
function truncate_string(text, length, replacement) {
if (length === undefined) {
length = 300;
}
if (replacement === undefined) {
replacement = "...";
}
return text.substring(0, length)+replacement;
}/*** SYSTEM FUNCTIONS ***/
function _init() {
var _func_queue=[];
//Load jQuery if missing.
if (window.jQuery===undefined) {
_func_queue.push(
{
"type":"script",
"name":"jQuery",
"url": "https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"
});
}
_func_queue=_func_queue.concat(
[{
"type":"script",
"name":"LazyLoad",
"url": "https://api.dataestate.net/assets/js/jquery.lazy.min.js"
},
{
"type":"style",
"name":"Custom Font",
"url":"https://fonts.googleapis.com/css?family=Open+Sans:300,600,300italic,600italic|Source+Sans+Pro:400,600,400italic,600italic"
},
{
"type":"style",
"name":"Material Icons",
"url": "https://fonts.googleapis.com/icon?family=Material+Icons"
},
//TODO: PHP
{
"type":"style",
"name":"widget stylesheet",
"url":"https://api.dataestate.net/assets/css/de-widget-2.css"
},
{
"type":"internal",
"name":"Main",
"method":"main",
"params":[]
}]);
_exec_func(_func_queue);
}
function _exec_func(func_queue) {
if (func_queue.length > 0) {
var func_obj=func_queue.shift();
_echo("Loading "+func_obj.type+": "+func_obj.name);
switch(func_obj.type) {
case "script":
_loadScript(func_obj.url, _exec_func, [func_queue]);
break;
case "style":
_loadCSS(func_obj.url, _exec_func, [func_queue]);
break;
case "internal":
window[func_obj.method].apply(func_obj.params);
break;
default:
break;
}
}
else {
_echo("End");
}
}
function _echo(message) {
if (_mode=="DEV") {
console.log(message);
}
}
/***** LOAD SCRIPT *****/
function _loadScript(url, callback, callback_params) {
var script = document.createElement("script")
script.type = "text/javascript";
script.async = true;
if (script.readyState) { //IE
script.onreadystatechange = function () {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
if (callback !== undefined) {
callback.apply(callback_params);
}
}
};
}
else { //Others
script.onload = function () {
if (callback !== undefined) {
callback.apply(this, callback_params);
}
};
}
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);
}
/***** LOAD SCRIPT END *****/
/***** LOAD CSS *****/
function _loadCSS(url, callback, callback_params) {
var lnk = document.createElement("link");
lnk.type="text/css";
lnk.rel="stylesheet";
if (lnk.readyState) {
lnk.onreadystatechange = function() {
if (lnk.readyState == "loaded" || lnk.readyState == "complete") {
lnk.onreadystatechange = null;
if (callback !== undefined) {
callback.apply(callback_params);
}
}
}
}
else {
lnk.onload = function() {
if (callback !== undefined) {
callback.apply(this, callback_params);
}
}
}
lnk.href=url;
document.getElementsByTagName("head")[0].appendChild(lnk);
}
/***** LOAD CSS End*****/