function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) { var R = 6371; // Radius of the earth in km var dLat = deg2rad(lat2-lat1); // deg2rad below var dLon = deg2rad(lon2-lon1); var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.sin(dLon/2) * Math.sin(dLon/2) ; var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); var d = R * c; // Distance in km return d; } function deg2rad(deg) { return deg * (Math.PI/180) } function get_by_tag(tags){ $('.orderlist-div').toggleClass('d-none',true); $('.li-tags').toggleClass('active', false ); $('.li-subtags').toggleClass('active', false ).toggleClass('d-none',true); var tag_class=''; tags.forEach( function(v,i){ tag_class+='.tag-'+v; $('.li-tag-'+v).toggleClass('active',true); $('.li-subtag-of-'+v).toggleClass('d-none', false); } ); $(tag_class).toggleClass('d-none',false); var p=['tag','subtag','lat','long']; var tag=tags[0]; var subtag=tags[1]; var lat=undefined; var long=undefined; var param=[]; p.forEach( function(v){ if( eval(v) != undefined ){ var pp=eval(v); } else { var pp=getQueryVariable(v); } if( pp != undefined ) param.push(v + '='+pp); } ); ChangeUrl( '', (( param != '' ) ? '?' : '' )+param.join('&') ); } function get_distances_tags(){ var url_string = window.location.href; var url = new URL(url_string); var lat = url.searchParams.get('lat'); var long = url.searchParams.get('long'); var tag = url.searchParams.get('tag'); var subtag = url.searchParams.get('subtag'); get_by_tag([ tag, subtag ]); if( lat == null || long == null ){ lat=-100; } var calc_distance=false; if( lat >= -90 && lat <= 90 && long >=-180 && long <= 180 ){ calc_distance=true; } $.each( $('.distance'), function(i,v){ var geo=$( $(v).context.previousElementSibling ).text(); var llat=geo.split(/,/g)[0]; var llong=geo.split(/,/g)[1]; var lcountry=geo.split(/,/g)[2]; $(v).html('<span class="feather-icon icon-map-pin"></span> ' + lcountry + ' ' + (( calc_distance ) ? '( ' + Math.round( getDistanceFromLatLonInKm (lat, long, llat, llong ) )+'km ) ' : '' ) ); } ); } function formInput(obj){ if( $(obj).hasClass('form-decimals') ){ $(obj).toggleClass('is-invalid', ! $.isNumeric( $(obj).val() ) ); } } function createYml(){ var yml=''; $.each( $('.order-form'), function(i,v){ if( v.id == 'price-reference' ){ yml+=v.id + ':\n\t- [ ' + $(v).val().replace(/(?:\r\n|\r|\n)/g, '<br>') + ' ]\n'; } else { yml+=v.id + ': ' + $(v).val().replace(/(?:\r\n|\r|\n)/g, '<br>') + '\n'; } } ); $('#order-yml').val(yml); } function importYml(){ var yml=$('#order-yml').val(); var error=''; $('#order-yml').toggleClass('is-invalid',false); var lastf=''; yml.split('\n').forEach( function(v,i){ if( v == '' ) return; if( v.split(/-/g)[0].trim() == '' || v.split(/-/g)[0].trim() == '\t' ){ $('#'+lastf).val( v.split(/-/g)[1].replace(/\[|\]| /g,'').trim() ); return; } var p=v.split(':')[0].trim(); var v=v.split(':').slice(1).join(':').trim(); if( $('#'+p).length == 1 ){ if( $('#'+p)[0].localName == 'select' ){ if( p == 'price-reference' ){ lastf=p; return; } else if( $('#'+p).val(v).val() != v ){ error+='#'+p+' value ['+v+'] not exists in the list!'; } } } else { error+='#'+p+' not found in form!'; } if( error != ''){ alert( 'error: \n'+error ); error=''; $('#order-yml').toggleClass('is-invalid',true); } else { $('#'+p).val(v.replace(/\<br\>/ig,'\n')); } } ); } function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i=0;i<vars.length;i++) { var pair = vars[i].split("="); if(pair[0] == variable){return pair[1];} } } function ChangeUrl(page, query ) { console.log( query ); if (typeof (history.replaceState) != "undefined") { var obj = { Page: page, Url: query }; history.replaceState(obj, obj.Page, obj.Url); } else { alert("Browser does not support HTML5."); } }