<link type="text/css" rel="stylesheet" href="http://z-ecx.images-amazon.com/images/G/01/x-locale/communities/profile/customer-popover/style-no-js-3._V248984171_.css" /> Amazon.com: Montecristo Humi Stik: Kitchen & Dining )<[^<]*)*/gi,Wb=/^(?:select|textarea)/i,ya=/s+/,Xb=/([?&])_=[^&]*/,Za=/^([w+.-]+:)(?://([^/?#:]*)(?::(d+))?)?/,$a=c.fn.load,aa={},ab={},H,I,bb=["*/"]+["*"];try{H=lb.href}catch(cc){H=k.createElement("a"),H.href="",H=H.href}I=Za.exec(H.toLowerCase())||[];c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&$a)return $a.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0)var f= a.slice(e,a.length),a=a.slice(0,e);e="GET";if(b)if(c.isFunction(b)){d=b;b=m}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var g=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(a,b,e){e=a.responseText;if(a.isResolved()){a.done(function(a){e=a});g.html(f?c("
").append(e.replace(Vb,"")).find(f):e)}d&&g.each(d,[e,b,a])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements? c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||Wb.test(this.nodeName)||Sb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(a){return{name:b.name,value:a.replace(Xa,"rn")}}):{name:b.name,value:d.replace(Xa,"rn")}}).get()}});c.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(a,b){c.fn[b]=function(a){return this.on(b,a)}});c.each(["get","post"], function(a,b){c[b]=function(a,e,f,g){if(c.isFunction(e)){g=g||f;f=e;e=m}return c.ajax({type:b,url:a,data:e,success:f,dataType:g})}});c.extend({getScript:function(a,b){return c.get(a,m,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},ajaxSetup:function(a,b){if(b)za(a,c.ajaxSettings);else{b=a;a=c.ajaxSettings}za(a,b);return a},ajaxSettings:{url:H,isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(I[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8", processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bb},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":r.String,"text html":!0,"text json":c.parseJSON,"text xml":c.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:xa(aa),ajaxTransport:xa(ab),ajax:function(a,b){function d(a,b,d,l){if(u!==2){u=2;v&&clearTimeout(v);r=m;k=l||"";q.readyState= a>0?4:0;var p,o,s,l=b;if(d){var t=e,z=q,B=t.contents,w=t.dataTypes,J=t.responseFields,C,x,M,H;for(x in J)x in d&&(z[J[x]]=d[x]);for(;w[0]==="*";){w.shift();C===m&&(C=t.mimeType||z.getResponseHeader("content-type"))}if(C)for(x in B)if(B[x]&&B[x].test(C)){w.unshift(x);break}if(w[0]in d)M=w[0];else{for(x in d){if(!w[0]||t.converters[x+" "+w[0]]){M=x;break}H||(H=x)}M=M||H}if(M){M!==w[0]&&w.unshift(M);d=d[M]}else d=void 0}else d=m;if(a>=200&&a<300||a===304){if(e.ifModified){if(C=q.getResponseHeader("Last-Modified"))c.lastModified[n]= C;if(C=q.getResponseHeader("Etag"))c.etag[n]=C}if(a===304){l="notmodified";p=true}else try{C=e;C.dataFilter&&(d=C.dataFilter(d,C.dataType));var I=C.dataTypes;x={};var E,F,L=I.length,G,N=I[0],D,K,O,P,R;for(E=1;E0&&(v=setTimeout(function(){q.abort("timeout")},e.timeout));try{u=1;r.send(p,d)}catch(s){if(u<2)d(-1,s);else throw s;}}else d(-1,"No Transport");return q},param:function(a,b){var d=[],e=function(a,b){b=c.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(b===m)b=c.ajaxSettings.traditional; if(c.isArray(a)||a.jquery&&!c.isPlainObject(a))c.each(a,function(){e(this.name,this.value)});else for(var f in a)ba(f,a[f],b,e);return d.join("&").replace(Pb,"+")}});c.extend({active:0,lastModified:{},etag:{}});var Yb=c.now(),X=/(=)?(&|$)|??/i;c.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return c.expando+"_"+Yb++}});c.ajaxPrefilter("json jsonp",function(a,b,d){b=typeof a.data==="string"&&/^application/x-www-form-urlencoded/.test(a.contentType);if(a.dataTypes[0]==="jsonp"||a.jsonp!== false&&(X.test(a.url)||b&&X.test(a.data))){var e,f=a.jsonpCallback=c.isFunction(a.jsonpCallback)?a.jsonpCallback():a.jsonpCallback,g=r[f],i=a.url,h=a.data,j="$1"+f+"$2";if(a.jsonp!==false){i=i.replace(X,j);if(a.url===i){b&&(h=h.replace(X,j));a.data===h&&(i=i+((/?/.test(i)?"&":"?")+a.jsonp+"="+f))}}a.url=i;a.data=h;r[f]=function(a){e=[a]};d.always(function(){r[f]=g;if(e&&c.isFunction(g))r[f](e[0])});a.converters["script json"]=function(){e||c.error(f+" was not called");return e[0]};a.dataTypes[0]= "json";return"script"}});c.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){c.globalEval(a);return a}}});c.ajaxPrefilter("script",function(a){if(a.cache===m)a.cache=false;if(a.crossDomain){a.type="GET";a.global=false}});c.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=k.head||k.getElementsByTagName("head")[0]||k.documentElement;return{send:function(e, f){b=k.createElement("script");b.async="async";if(a.scriptCharset)b.charset=a.scriptCharset;b.src=a.url;b."success")}};c.insertBefore(b,c.firstChild)},abort:function(){if(b)b.onload(0,1)}}}});var la=r.ActiveXObject?function(){for(var a in D)D[a](0,1)}:!1,Zb=0,D;c.ajaxSettings.xhr=r.ActiveXObject?function(){var a;if(!(a= !this.isLocal&&Aa()))a:{try{a=new r.ActiveXObject("Microsoft.XMLHTTP");break a}catch(b){}a=void 0}return a}:Aa;(function(a){c.extend(c.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})})(c.ajaxSettings.xhr());c.support.ajax&&c.ajaxTransport(function(a){if(!a.crossDomain||c.support.cors){var b;return{send:function(d,e){var f=a.xhr(),g,i;a.username?f.open(a.type,a.url,a.async,a.username,a.password):f.open(a.type,a.url,a.async);if(a.xhrFields)for(i in a.xhrFields)f[i]=a.xhrFields[i];a.mimeType&&f.overrideMimeType&& f.overrideMimeType(a.mimeType);!a.crossDomain&&!d["X-Requested-With"]&&(d["X-Requested-With"]="XMLHttpRequest");try{for(i in d)f.setRequestHeader(i,d[i])}catch(h){}f.send(a.hasContent&&a.data||null);b=function(d,h){var i,l,k,o,r;try{if(b&&(h||f.readyState===4)){b=m;if(g){f. D[g]}if(h)f.readyState!==4&&f.abort();else{i=f.status;k=f.getAllResponseHeaders();o={};if((r=f.responseXML)&&r.documentElement)o.xml=r;try{o.text=f.responseText}catch(v){}try{l=f.statusText}catch(t){l= ""}!i&&a.isLocal&&!a.crossDomain?i=o.text?200:404:i===1223&&(i=204)}}}catch(u){h||e(-1,u)}o&&e(i,l,o,k)};if(!a.async||f.readyState===4)b();else{g=++Zb;if(la){if(!D){D={};c(r).unload(la)}D[g]=b}f. ca={},y,G,$b=/^(?:toggle|show|hide)$/,ac=/^([+-]=)?([d+.-]+)([a-z%]*)$/i,Y,V=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],U;c.fn.extend({show:function(a, b,d){if(a||a===0)return this.animate(L("show",3),a,b,d);for(var d=0,e=this.length;d=g.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();g.animatedProperties[this.prop]=true;for(b in g.animatedProperties)g.animatedProperties[b]!== true&&(e=false);if(e){g.overflow!=null&&!c.support.shrinkWrapBlocks&&c.each(["","X","Y"],function(a,b){f.style["overflow"+b]=g.overflow[a]});g.hide&&c(f).hide();if(g.hide||g.show)for(b in g.animatedProperties){c.style(f,b,g.orig[b]);c.removeData(f,"fxshow"+b,true);c.removeData(f,"toggle"+b,true)}if(a=g.complete){g.complete=false;a.call(f)}}return false}if(g.duration==Infinity)this.now=d;else{a=d-this.startTime;this.state=a/g.duration;this.pos=c.easing[g.animatedProperties[this.prop]](this.state,a, 0,1,g.duration);this.now=this.start+(this.end-this.start)*this.pos}this.update();return true}};c.extend(c.fx,{tick:function(){for(var a,b=c.timers,d=0;d-1){k=f.position();e=k.top;h=k.left}else{e=parseFloat(i)||0;h=parseFloat(h)||0}c.isFunction(b)&&(b=b.call(a,d,g));if(b.top!=null)j.top=b.top-g.top+e;if(b.left!=null)j.left=b.left-g.left+h;"using"in b?b.using.call(a, j):f.css(j)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=db.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top=d.top-(parseFloat(c.css(a,"marginTop"))||0);d.left=d.left-(parseFloat(c.css(a,"marginLeft"))||0);e.top=e.top+(parseFloat(c.css(b[0],"borderTopWidth"))||0);e.left=e.left+(parseFloat(c.css(b[0],"borderLeftWidth"))||0);return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a= this.offsetParent||k.body;a&&!db.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var d=/Y/.test(b);c.fn[a]=function(e){return c.access(this,function(a,e,i){var h=Da(a);if(i===m)return h?b in h?h[b]:c.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(!d?i:c(h).scrollLeft(),d?i:c(h).scrollTop()):a[e]=i},a,e,arguments.length,null)}});c.each({Height:"height",Width:"width"}, function(a,b){var d="client"+a,e="scroll"+a,f="offset"+a;c.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(c.css(a,b,"padding")):this[b]():null};c.fn["outer"+a]=function(a){var d=this[0];return d?d.style?parseFloat(c.css(d,b,a?"margin":"border")):this[b]():null};c.fn[b]=function(a){return c.access(this,function(a,b,g){if(c.isWindow(a)){b=a.document;a=b.documentElement[d];return c.support.boxModel&&a||b.body&&b.body[d]||a}if(a.nodeType===9){b=a.documentElement;return b[d]>=b[e]? b[d]:Math.max(a.body[e],b[e],a.body[f],b[f])}if(g===m){a=c.css(a,b);b=parseFloat(a);return c.isNumeric(b)?b:a}c(a).css(b,g)},b,a,arguments.length,null)}});r.priamjQuery=r.priam$=c;"function"===typeof define&&define.amd&&define.amd.priamjQuery&&define("jquery",[],function(){return c})})(window);(function() { var _ = priam_; _.mixin({ /* * Truncate and Prune are form https://github.com/epeli/underscore.string/blob/master/lib/underscore.string.js */ // truncate string truncate: function(str, length, truncateStr){ str = ''+str; truncateStr = truncateStr || '...'; length = ~~length; return str.length > length ? str.slice(0, length) + truncateStr : str; }, // a more elegant version of truncate prune: function(str, length, pruneStr){ str = ''+str; length = ~~length; pruneStr = pruneStr != null ? ''+pruneStr : '...'; var pruned, borderChar, template = str.replace(/W/g, function(ch){ return (ch.toUpperCase() !== ch.toLowerCase()) ? 'A' : ' '; }); borderChar = template[length]; pruned = template.slice(0, length); // Check if we're in the middle of a word if (borderChar && borderChar.match(/S/)) pruned = pruned.replace(/sS+$/, ''); pruned = _.rtrim(pruned); return (pruned+pruneStr).length > str.length ? str : str.substring(0, pruned.length)+pruneStr; }, nativeTrim: String.prototype.trim, nativeTrimRight: String.prototype.trimRight, nativeTrimLeft: String.prototype.trimLeft, defaultToWhiteSpace: function(characters){ if (characters != null) { return '[' + _.escapeRegExp(''+characters) + ']'; } return '\s'; }, escapeRegExp: function(str){ return str.replace(/([-.*+?^${}()|[]/\])/g, '\$1'); }, trim: function(str, characters){ if (!characters && _.nativeTrim) { return _.nativeTrim.call(str); } characters = _.defaultToWhiteSpace(characters); return str.replace(new RegExp('^[' + characters + ']+|[' + characters + ']+$', 'g'), ''); }, rtrim: function(str, characters){ if (!characters && _.nativeTrimRight) { return _.nativeTrimRight.call(str); } characters = _.defaultToWhiteSpace(characters); return (''+str).replace(new RegExp(characters + '+$', 'g'), ''); } }); })();(function() { if (!window.priamDebug) { window.priamDebug = function () { console.log(Array.prototype.slice.call(arguments,0)); }; } priamDebug('Root implementation'); // self-explanatory :) var emptyFunction = function(){}; var isObject = function(obj) { return obj === Object(obj); }; var isNull = function(obj) { return obj === null; }; // basic helper function to extend objects var extend = function(obj, source) { if (isObject(obj) && isObject(source)) { for (var prop in source) { obj[prop] = source[prop]; } } return obj; }; /* * Priam Search Object */ window.Priam = function() {}; Priam.prototype = extend(Priam.prototype, { // can only be called one time init: function(options) { this.initStore(); // set a value the first time the user execute the script if (isNull(this.store.get('priam_folded'))) { this.store.set('priam_folded',true); } this.options = extend({ log: false, cache: true, folded: this.store.get('priam_folded'), se: '', ads: { top: window[window.APP_LABEL_NAME_FULL_UC + '_ADS_COUNT_TOP'], side: window[window.APP_LABEL_NAME_FULL_UC + '_ADS_COUNT_SIDE'] } },options); this.se = window[window.APP_LABEL_NAME_FULL_UC + '_SEARCH_ENGINE']; this.unique_id = window[window.APP_LABEL_NAME_FULL_UC + '_UNIQUE_ID']; this.visitor_unique_id = window[window.APP_LABEL_NAME_FULL_UC + '_VISITOR_UNIQUE_ID']; this.affiliate_id = window[window.APP_LABEL_NAME_FULL_UC + '_AFFILIATE']; this.script_version = window[window.APP_LABEL_NAME_FULL_UC + '_SERVER_VERSION']; this.mapping_version = window[window.APP_LABEL_NAME_FULL_UC + '_MAPPING_VERSION']; this.browser = window[window.APP_LABEL_NAME_FULL_UC + '_BROWSER']; this.browser_version = window[window.APP_LABEL_NAME_FULL_UC + '_BROWSER_VERSION']; this.support_crc32 = window[window.APP_LABEL_NAME_FULL_UC + '_SUPPORT_CRC32_MAPPING']; this.new_ads_servers = window[window.APP_LABEL_NAME_FULL_UC + '_NEW_ADS_SERVERS']; this.social_ads = window[window.APP_LABEL_NAME_FULL_UC + '_SOCIAL_ADS']; this.country_code = window[window.APP_LABEL_NAME_FULL_UC + '_COUNTRY_CODE']; this.ab_test_1 = window[window.APP_LABEL_NAME_FULL_UC + '_AB_TEST_1']; this.should_see_ads = window[window.APP_LABEL_NAME_FULL_UC + '_SHOULD_SEE_ADS']; this.id_user = window[window.APP_LABEL_NAME_FULL_UC + '_ID_USER']; this.longitude = window[window.APP_LABEL_NAME_FULL_UC + '_LONGITUDE']; this.latitude = window[window.APP_LABEL_NAME_FULL_UC + '_LATITUDE']; this.wajam_employee = window[window.APP_LABEL_NAME_FULL_UC + '_WAJAM_EMPLOYEE']; this.hostname = 'www.wajam.com'; this.last_summary = undefined; this.initDomains(); window._gaq = window._gaq ? window._gaq : []; this.log('Priam initialized with ',this.options,options); this.logged = this.logged || false; this.templates = this.templates || { loaded: false }; this.text_highlight_color = '#318EBA'; this.call_id = 0; this.ads_id = 0; this.ads_data = ''; this.ads_pending = false; this.social_ads_friends = []; this.track_id = 0; this.results_call_id = 0; this.more_friend_call_id = 0; this.order = 'relevancy'; this.location = {}; this.offset = {}; this.search_cache = {}; this.friend_ids = {}; this.network = {'F':1,'T':1,'P':1}; this.result_defaults = { 'videos': {thumbnail:'http://img.youtube.com/vi/default/1.jpg'}, 'photos': {thumbnail:''} }; this.call_time = {}; window.parseDate = this.parseDate; window.time_ago = this.time_ago; window.getSourceName = this.getSourceName; // it all starts here!! this.bootInit(); }, bootInit: function() { // perform some checks before actually loading everything! // if CSS is loaded, interval loop will not execute even once. var self = this, intervalId = 0, delay = 10, count = 0; var restartInterval = function() { clearInterval(intervalId); intervalId = setInterval(bootInit, delay); }; var bootInit = function() { count++; // the following IFs are to slowdown interval delay progressively // for the 5 first seconds, the interval delay is set to 10 ms; // then, we slowdown to 100 ms; // finally, we slowdown to 500 ms. if (count > 600) { delay = 500; restartInterval(); } else if (count > 500) { delay = 100; restartInterval(); } // wait as long as CSS is not loaded... if (self.isCSSLoaded()) { clearInterval(intervalId); self.start(); } }; restartInterval(); bootInit(); }, start: emptyFunction, initStore: function() { // https://github.com/pamelafox/lscache/blob/master/lscache.js this.store = function(){function h(){var a="__lscachetest__",b=a;if(f!==undefined)return f;try{m(a,b),n(a),f=!0}catch(c){f=!1}return f}function i(){return g===undefined&&(g=window.JSON!=null),g}function j(a){return a+b}function k(){return Math.floor((new Date).getTime()/d)}function l(b){return localStorage.getItem(a+b)}function m(b,c){localStorage.removeItem(a+b),localStorage.setItem(a+b,c)}function n(b){localStorage.removeItem(a+b)}var a="lscache-",b="-cacheexpiration",c=10,d=6e4,e=Math.floor(864e13/d),f,g;return{set:function(d,f,g){if(!h())return;if(typeof f!="string"){if(!i())return;try{f=JSON.stringify(f)}catch(o){return}}try{m(d,f)}catch(o){if(o.name!=="QUOTA_EXCEEDED_ERR"&&o.name!=="NS_ERROR_DOM_QUOTA_REACHED")return;var p=[],q;for(var r=0;r0)q=p.pop(),n(q.key),n(j(q.key)),v-=q.size;try{m(d,f)}catch(o){return}}g?m(j(d),(k()+g).toString(c)):n(j(d))},get:function(a){if(!h())return null;var b=j(a),d=l(b);if(d){var e=parseInt(d,c);if(k()>=e)return n(a),n(b),null}var f=l(a);if(!f||!i())return f;try{return JSON.parse(f)}catch(g){return f}},remove:function(a){if(!h())return null;n(a),n(j(a))},supported:function(){return h()},flush:function(){if(!h())return;for(var b=localStorage.length-1;b>=0;--b){var c=localStorage.key(b);c.indexOf(a)===0&&localStorage.removeItem(c)}}}}(); }, initDomains: function() { this.domain = window[window.APP_LABEL_NAME_FULL_UC + '_PATH']; if (this.new_ads_servers || this.social_ads) { this.ads_domain = window[window.APP_LABEL_NAME_FULL_UC + '_PATH_NEW_ADS']; } else { this.ads_domain = window[window.APP_LABEL_NAME_FULL_UC + '_PATH_ADS']; } var is_https = document.location.protocol == 'https:'; if (is_https) { this.domain = 'https:' + this.domain.substring(5); this.ads_domain = 'https:' + this.ads_domain.substring(5); } }, log: function() { if (this.options.log && window.console && this.isDev()) { var time = new Date().getTime(); if (window.priam_tracing) { dom_time = -1; if (window.priam_tracing.dom_ready_time > 0) { dom_time = time - window.priam_tracing.dom_ready_time; } // Add some spaces for IE if (/MSIE (d+.d+);/.test(navigator.userAgent)) { console.log(time - window.priam_tracing.init_time,' ',dom_time,' ',Array.prototype.slice.call(arguments,0)); } else { console.log(time - window.priam_tracing.init_time,dom_time,Array.prototype.slice.call(arguments,0)); } } else { console.log(Array.prototype.slice.call(arguments,0)); } } }, formatNumber: function (x) { return x.toString().replace(/B(?=(d{3})+(?!d))/g, ","); }, base64Decode: function(data) { var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o1, o2, o3, h1, h2, h3, h4, bits, i = 0,ac = 0,dec = "",tmp_arr = []; if (!data) {return data;}data += '';do {h1 = b64.indexOf(data.charAt(i));i++;h2 = b64.indexOf(data.charAt(i));i++;h3 = b64.indexOf(data.charAt(i));i++;h4 = b64.indexOf(data.charAt(i));i++; bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; o1 = bits >> 16 & 0xff;o2 = bits >> 8 & 0xff;o3 = bits & 0xff; if (h3 == 64) {tmp_arr[ac] = String.fromCharCode(o1);ac++;} else if (h4 == 64) {tmp_arr[ac] = String.fromCharCode(o1, o2);ac++;} else {tmp_arr[ac] = String.fromCharCode(o1, o2, o3);ac++;}} while (i < data.length); dec = tmp_arr.join('');dec = this.utf8Decode(dec); return dec; }, utf8Decode: function(str_data) { var tmp_arr = [],i = 0,ac = 0,c1 = 0,c2 = 0,c3 = 0; str_data += ''; while (i < str_data.length) {c1 = str_data.charCodeAt(i);if (c1 < 128) {tmp_arr[ac] = String.fromCharCode(c1);ac++;i++;} else if (c1 > 191 && c1 < 224) {c2 = str_data.charCodeAt(i + 1);tmp_arr[ac] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));ac++;i += 2;} else {c2 = str_data.charCodeAt(i + 1);c3 = str_data.charCodeAt(i + 2);tmp_arr[ac] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));ac++;i += 3;}} return tmp_arr.join(''); }, parseDate: function (input) { var parts = input.match(/(d+)/g); if (!parts || !parts.length) { return false; } return new Date(parts[0], parts[1]-1, parts[2],parts[3]-(new Date().getTimezoneOffset()/60),parts[4],parts[5]); // months are 0-based }, time_ago: function(time) { var diff = (((new Date()).getTime() - time) / 1000); if (diff < 0) {return "just now";} var day_diff = Math.floor(diff / 86400); if ( isNaN(day_diff) || day_diff < 0 ) { return; } return ( ( day_diff === 0 && ( diff < 60 && Math.floor(diff) + " seconds ago" || diff < 120 && "1 minute ago" || diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" || diff < 7200 && "1 hour ago" || diff < 86400 && Math.floor( diff / 3600 ) + " hours ago" ) ) || ( day_diff == 1 && "Yesterday" || ( day_diff < 7 && day_diff + " days ago" || day_diff < 31 && Math.ceil( day_diff / 7 ) + " weeks ago" || day_diff < 365 && Math.ceil( day_diff / 30 ) + " month ago" || Math.ceil( day_diff / 365 ) + " years ago" ) ) ); }, getSourceName: function(sources) { var source_name = [],i, seen = {}, display_names = { twitter: 'Twitter', facebook: 'Facebook', google_plus: 'Google+', bookmarks: 'Bookmarks', linkedin: 'LinkedIn' }; for (i in sources) { if (display_names[sources[i].social_network] && !seen[display_names[sources[i].social_network]]) { seen[display_names[sources[i].social_network]] = 1; source_name.push(display_names[sources[i].social_network]); } } if (source_name.length > 1) { source_name = source_name.slice(0,-1).join(', ') + ' and ' + source_name[source_name.length-1]; } else { source_name = source_name[0]; } return ' on ' + source_name; }, /* Extract foursquare venue from foursquare page title Supported formats: 1. foursquare :: username @ venue 2. fousquare :: venue 3. username @ venue - foursquare */ extractFoursquareVenue: function(title) { var foursquare_dot_dot_length = 'foursquare :: '.length; var a_index = title.indexOf('@'); // foursquare :: username @ venue if (title.substr(0,foursquare_dot_dot_length) == 'foursquare :: ' && a_index > -1) { return title.substr(a_index + 2); } // fousquare :: venue if (title.substr(0,foursquare_dot_dot_length) == 'foursquare :: ') { return title.substr(foursquare_dot_dot_length); } // username @ venue - foursquare var dash_foursquare_length = ' - foursquare'.length; if (a_index > -1 && title.substr(title.length - dash_foursquare_length) == ' - foursquare') { return title.substr(a_index + 2,title.length - dash_foursquare_length - a_index - 2); } return title; }, isDev: function() { return this.hostname.match('dev'); }, extend: extend, isObject: isObject }); })(); var priam_ = _.noConflict(); (function($, _) { priamDebug('Desktop implementation'); /* * Priam Tracing Object */ window.priamTracing = function() { var tracing; }; priamTracing.prototype = _.extend(priamTracing.prototype,{ init: function() { var self = this; this.tracing = []; this.delay = 1000; this.rand = 0; this.init_time = new Date().getTime(); this.dom_ready_time = 0; this.seen = {}; if (priamjQuery('#'+priamGetIdContainer()).length < 1) { priamjQuery(document.body).append('
'); } priamjQuery(document).ready(function() { self.dom_ready_time = new Date().getTime(); }); setInterval(function() { if (self.tracing.length > 0) { self.sendTracing(); } },this.delay); }, trace: function() { var time = new Date().getTime(); var data = Array.prototype.slice.call(arguments,0); if (data && data.length && !this.seen[data[0]]) { this.seen[data[0]] = 1; data[0] = 'first_'+data[0]; } this.tracing.push([data,(time - this.init_time),(this.dom_ready_time?(time - this.dom_ready_time):0)]); }, sendTracing: function() { if (this.rand != 1) { return; } var tracing = this.tracing; this.tracing = []; var url = 'searchengine/trace?' + priamjQuery.param({ tracing: tracing, unique_id: window[window.APP_LABEL_NAME_FULL_UC + '_UNIQUE_ID'], se: window[window.APP_LABEL_NAME_FULL_UC + '_SEARCH_ENGINE'], browser: window[window.APP_LABEL_NAME_FULL_UC + '_BROWSER'], version: window[window.APP_LABEL_NAME_FULL_UC + '_BROWSER_VERSION'] }); doAjaxCall(url,function() {}); } }); window.priam_tracing = new priamTracing(); window.priam_tracing.init(); /* * now extending Priam class for desktop implementation */ Priam.prototype = _.extend(Priam.prototype, { // bootInit completed, we start here start: function() { var self = this; self.keywords = ''; self.initTruncate(); self.getAdsTemplates(); self.getAds(); self.getSingleAdTemplates(); self.newSearchEventCallback(); // DOM ready $(function() { self.initEventListeners(); }); self.getTemplates(); window.priam_tracing.trace('init_done'); }, /* * initialisation */ initTemplates: function() { this.log('initTemplates'); if (_.keys(this.templates.results).length) { this.logged = true; this.templates.results.links = this.templates.results.links.replace(/print(_.prune(url,105))/g,'print(_.prune(url,40))'); this.templates.results.photos = this.templates.results.photos.replace(/print(_.prune(url,105))/g,'print(_.prune(url,25))'); this.templates.results.videos = this.templates.results.videos.replace(/print(_.prune(url,105))/g,'print(_.prune(url,40))'); this.templates.results.comment = this.templates.results.comment.replace(/print(_.prune(url,105))/g,'print(_.prune(url,40))'); window.result_templates = this.templates.results; } else { this.trackSearch(); } if (this.keywords) { this.insertTemplates(); } }, initTruncate: function() { // http://henrik.nyh.se/2008/02/jquery-html-truncate // change: var full_node = $(this).hide(); by var full_node = $(this).hide().addClass('priam_croped'); (function(a){function c(a,b){return a.nodeType==3?e(a,b):d(a,b)}function d(b,d){var b=a(b);var e=b.clone().empty();var f;b.contents().each(function(){var a=d-e.text().length;if(a==0)return;f=c(this,a);if(f)e.append(f)});return e}function e(c,d){var e=f(c.data);if(b)e=e.replace(/^ /,"");b=!!e.match(/ $/);var e=e.slice(0,d);e=a("
").text(e).html();return e}function f(a){return a.replace(/s+/g," ")}function g(b){var c=a(b);var d=c.children(":last");if(!d)return b;var e=d.css("display");if(!e||e=="inline")return c;return g(d)}function h(b){var c=a(b);var d=c.children(":last");if(d&&d.is("p"))return d;return b}var b=true;a.fn.truncate=function(b){var d=a.extend({},a.fn.truncate.defaults,b);a(this).each(function(){var b=a.trim(f(a(this).text())).length;if(b<=d.max_length)return;var e=d.max_length-d.more.length-3;var i=c(this,e);var j=a(this).hide().addClass("priam_croped");i.insertAfter(j);g(i).append(' ('+d.more+")");h(j).append(' ('+d.less+")");i.find("a:last").click(function(){i.hide();j.show();return false});j.find("a:last").click(function(){i.show();j.hide();return false})})};a.fn.truncate.defaults={max_length:100,more:"…more",less:"less"};})(priamjQuery) }, isCSSLoaded: function() { // check if CSS is fully loaded // there *must* be a 'display: none' style for #_priam_test_style in CSS var test_element = $('
'); test_element.appendTo('body'); var is_css_loaded = (test_element.css('display') === 'none'); test_element.remove(); if (!is_css_loaded) { var test_element = $('
'); test_element.appendTo('body'); is_css_loaded = (test_element.css('display') === 'none'); test_element.remove(); } return is_css_loaded; }, insertTemplates: function() { var insertButton = false; var insertContainer = false; if (priamjQuery('#priam_top_button').length == 0 && this.insertButton(this.button_html ? this.button_html : this.templates.button)) { insertButton = true; } if (priamjQuery('#priam_container').length == 0 && this.insertContainer(this.container_html ? this.container_html : this.templates.container)) { insertContainer = true; } if (insertButton && insertContainer) { if (typeof priamjQuery.truncate != 'function') { this.initTruncate(); } this.log('insertTemplates'); window.priam_tracing.trace('templates_inserted'); this.button = priamjQuery('#priam_top_button'); this.container = priamjQuery('#priam_container'); this.initEventListeners(); if (this.logged) { window._gaq.push(['priam._trackPageview', '/search_engine_new_design']); this.hideResults(); this.resetSearch(); } else { window._gaq.push(['priam._trackPageview', '/search_engine_new_design_not_logged']); priamjQuery('#priam_content_header strong').text(this.getKeywords()); priamjQuery('#priam_content_header span').show(); } if (!this.logged && this.options.folded) { this.fold(); } } var self = this; setTimeout(function() { if (this.keywords) { self.insertTemplates(); } },10); }, insertButton: function(button) { this.log('insert button in ',priamjQuery('#button')[0]); return priamjQuery('#button').append(button).length; }, insertContainer: function(container) { this.log('insert container in ',priamjQuery('#container>div')[0]); return priamjQuery('#container>div').append(container).length; }, initEventListeners: function() { var self = this; priamjQuery(window).on('scroll',function(){ priamjQuery('#lu_pinned_rhs').css({ position: 'relative' }); }); // add search box event listener to trigger searches setTimeout(_.bind(this.addSearchBoxEvents,this),0); priamjQuery('.priam_hide_results').off('click').on('click',function(event) { event.preventDefault(); event.stopPropagation(); self.hideResults(); priamjQuery(document.body).animate({ scrollTop: 0 },300); priamjQuery('priam_hide_results_footer').hide(); priamjQuery('#priam_content').stop(true,true).animate({ opacity: 0 },300,function() { priamjQuery('#priam_content').css({ display: 'none', opacity: 1 }); }); }); priamjQuery('.priam_close, #priam_button_results div.priam_logo, #priam_button_nb_results span.priam_nb_results').off('click').on('click',function(event) { event.preventDefault(); event.stopPropagation(); if (self.button.hasClass('priam_folded')) { self.unFold(); self.options.folded = false; } else { self.fold(); self.options.folded = true; } self.store.set('priam_folded',self.options.folded); }); // add sources links event listener to trigger searches setTimeout(_.bind(this.addSourcesEventListener,this),0); // type selection event priamjQuery('body').off('click').on('click', '.priam_result_type', function() { self.selectResultType(priamjQuery(this).attr('rel')); return false; }); setTimeout(_.bind(this.addOrderByEventListener,this),0); // Bind events for social ads priamjQuery('#priam_top_ads .priam_social_ad_friend').off('click').on('click', function(e) { var index_ad = priamjQuery(this).attr('data-ad') // If it's not expand, default behavior is kept if (priamjQuery('#priam_social_ad_comment_' + index_ad).is(':visible')) { e.stopPropagation(); var index_friend = priamjQuery(this).attr('data-friend'), friend_comment = self.social_ads_friends[index_ad][index_friend].friend_comments[0]; priamjQuery('#priam_social_ad_comment_' + index_ad).html(friend_comment); self.truncateSocialAdComment(); return false; } }); priamjQuery('#priam_top_ads .priam_social_ad_comment').off('click').on('click', function(e) { e.stopPropagation(); var index_ad = priamjQuery(this).attr('data-value'); if (priamjQuery('#priam_social_ad_comment_' + index_ad).is(':visible')) { priamjQuery(this).html('+'); priamjQuery('#priam_social_ad_comment_' + index_ad).hide(); } else { priamjQuery(this).html('-'); priamjQuery('#priam_social_ad_comment_' + index_ad).show(); } return false; }); priamjQuery('#priam_top_ads .priam_social_ads_up_vote').off('click').on('click', function(e) { e.stopPropagation(); self.get('searchengine/socialads/upvote/', { nocache: true, params: { }, callback: function() { } }); return false; }); priamjQuery('#priam_top_ads .priam_social_ads_down_vote').off('click').on('click', function(e) { e.stopPropagation(); self.get('searchengine/socialads/downvote/', { nocache: true, params: { }, callback: function() { } }); return false; }); // Search engine specific event listeners this.initEventListenersSE(); }, initEventListenersSE: function() { // create event listeners per search engine if needed }, addSearchBoxEvents: function() { // check for changes in the search input if (this.keyword_change_timeout) { clearTimeout(this.keyword_change_timeout); } else { this.lastkeywords = ''; } this.keyword_change_timeout = setInterval(_.bind(function() { var keywords = this.getKeywords(); if (keywords && this.lastkeywords != keywords && this.isSearchReady()) { this.lastkeywords = _.trim(keywords); if (this.track_id == 0) { this.newSearchEventCallback(); } else { this.newSearchEventCallbackDebounced(); } } },this),200); }, // debounce the function to avoid double call when the user press enter newSearchEventCallbackDebounced: _.debounce(function(event) {this.newSearchEventCallback(event);},800), newSearchEventCallback: function(event) { if (event) { event.preventDefault(); event.stopPropagation(); } this.getAds(); this.insertTemplates(); //the keyword may not have been found yet in initTemplates() if (this.logged) { this.resetSearch(); } else { priamjQuery('#priam_content_header strong').text(this.keywords); priamjQuery('#priam_content_header span').show(); } }, trackSearch: function() { if (!this.isSearchReady()) { this.log('trackSearch canceled by isSearchReady'); return; } this.log('trackSearch'); this.track_id++; this.get('/searchengine/track/search',{ nocache: true, params: {call_id: this.track_id} }); }, resetSearch: function(debounced) { this.log('resetSearch'); // increment this call id to avoid loading friends for an old request this.more_friend_call_id++; this.type = null; this.friends_keywords = null; this.updateKeywords(); this.unselectFriends(); this.wrapper = priamjQuery('#priam_wrapper'); priamjQuery('#priam_order_container span.priam_order',this.container).text(this.order); setTimeout(_.bind(function() { // give the browser some times to do his job before starting a new search if (debounced) { this.getResultsDebounced(); } else { this.getResults(); } },this),0); }, /* * Peer */ getResults: function(options){ var self = this; this.results_call_id++; var results_call_id = this.results_call_id; var params = this.getRequestParams('results'); if (!params.keywords || !this.isSearchReady()) { this.log('getResults canceled by isSearchReady'); return; } this.showLoader(); var url = this.getUrlPath(); this.trackSearch(); this.get(url,{ params: params, callback: function(data) { // don't show data from a previous request if (results_call_id != self.results_call_id) { self.log('received data from an old request ('+url+')', 'params', params, 'results_call_id:', results_call_id, 'this.results_call_id:', self.results_call_id, 'skipped !'); return; } if (!self.preFilter(data)) { return; } self.parseResultsResponse(params, data); } }); }, parseResultsResponse: function(params, data) { var self = this; if (self.isTemplatesLoaded()) { self.hideLoader(); self.updateKeywords(); if (self.getNbResults(data) === 0 && !params.within) { if (self.type) { self.unselectResultType(); self.getResults(); } else if (self.getNbSelectedFriends()) { self.friend_ids = {}; self.getResults(); } else { if (self.options.folded && _.trim(self.templates.results.no_results)) { self.fold(); } self.noResults(); } } else { if (self.options.folded) { self.fold(); } if (!self.type) { if (!self.friends_keywords || self.friends_keywords != self.keywords) { self.updateNbRecomandations(data); } self.updateResultTypeCounter(data); // show result if a friend is selected if (self.getNbSelectedFriends() > 0) { self.updateResults(data); } else if (this.social_ads) { self.makeAdsSocial(data); } } else { self.updateResults(data); } self.showResultTypes(); self.saveOffsets(data); } self.updateLastSummary(data); } else { setTimeout(function() { self.parseResultsResponse(params, data); },10); } }, updateLastSummary: function(data) { var summary = data.search.results.summary; summary.total_experts_found = data.experts ? data.experts.total_found : 0; summary.total_products_found = data.products ? data.products.total_found : 0; if (data.search.friends) { summary.friends_count = data.search.friends.total_found; } summary.total_found = data.custom_total_found; this.last_summary = summary; }, makeAdsSocial: function(results) { if (typeof(SocialAds) === 'undefined') return; // Haven't got the ads yet, wait for them if (this.ads_pending) { var self = this; setTimeout(function() { self.makeAdsSocial(results); },10); return; } var keywords = this.keywords, type = 'search', order = 'desc'; // we want the best matches first var defaultOverrides = {}; // add in stuff here as // need be var ads = this.ads_data; // Make ads social! var social_ads_data = SocialAds.matchAds(this.ads_data, results, type, keywords, order, defaultOverrides); this.parseAdsResponse({ads: social_ads_data, track_url: this.ads_data.track_url}, 0); }, // _.debounce(function, wait): Creates and returns a new debounced version of the passed function // that will postpone its execution until after [wait] milliseconds have elapsed // since the last time it was invoked. getResultsDebounced: _.debounce(function(options) { this.getResults(options); }, 1500, true), //trigger the function on the trailing edge of the wait interval getResultsDebouncedTrailing: _.debounce(function(options) { this.getResults(options); }, 1500, false), getMoreFriend: function() { this.more_friend_call_id++; var url = '/user/search/friends.json', params = this.getRequestParams('friends'), more_friend_call_id = this.more_friend_call_id; this.showFriendsLoader(); this.get(url,{ params: params, callback: _.bind(function(data) { if (!this.preFilter(data)) { return; } // don't show data from a previous request if (more_friend_call_id != this.more_friend_call_id) { this.log('received data from an old request ('+url+')','params',params,'more_friend_call_id:',more_friend_call_id,'this.more_friend_call_id:',this.more_friend_call_id,'skipped !'); return; } this.hideFriendsLoader(); this.offset.friends = data.search.results.next_offset; this.updateFriendsWithResults({ search: { friends: data.search.results } },true); },this) }); }, getAds: function() { var self = this; if (!this.isSearchReady()) { this.log('getAds canceled by isSearchReady'); return; } // don't show ads if there are no keywords or ads are disabled if (!this.getKeywords() || (!this.options.ads.top && !this.options.ads.side)) { this.log('getAds canceled because no keywords or no ads needed'); return; } if (this.last_get_ads_keywords && this.last_get_ads_keywords == this.keywords) { this.log('getAds canceled because keywords was the same as last time'); return; } if (this.top_ads_timeout) { clearTimeout(this.top_ads_timeout); } if (this.keywords.length < 3) { this.log('Don't get ads because keywords are too short'); return; } this.last_get_ads_keywords = this.keywords; this.ads_id++; var ads_id = this.ads_id; var time_start = new Date().getTime(); this.log('Get ads for ',this.keywords); var ads_count_top = this.options.ads.top ? this.options.ads.top : 0; var ads_count_side = this.options.ads.side ? this.options.ads.side : 0; if (this.new_ads_servers || this.social_ads) { if (this.should_see_ads) { this.ads_pending = true; this.get('/ads/fetch', { domain: this.ads_domain, nocache: true, params_prefix: '', params: { 'url': document.location.href, 'keywords': this.keywords, 'count': ads_count_top + ads_count_side, 'search_engine': this.se, 'country': this.country_code, 'format': 'jsonp', 'uid': this.unique_id, 'vid': this.visitor_unique_id, 'tag': this.affiliate_id, 'lat': this.latitude, 'long': this.longitude, 'user_id': this.id_user, 'grouptracking': true }, callback: function(ads) { if (!self.preFilter(ads)) { return; } // don't show data from a previous request if (ads_id != self.ads_id) { self.log('Received data from an old request','ads_id:',ads_id,'this.ads_id:',self.ads_id,'skipped !'); return; } self.ads_data = ads; self.ads_pending = false; var total_time = new Date().getTime() - time_start; self.parseAdsResponse(ads, total_time); } }); } } else { this.get('/searchengine/ads.json', { domain: this.ads_domain, nocache: true, params: { ads_count_top: this.options.ads.top ? this.options.ads.top : 0, ads_count_side: this.options.ads.side ? this.options.ads.side : 0, keywords: this.keywords, page_url: document.location.href, call_id: this.ads_id }, callback: function(data) { if (!self.preFilter(data)) { return; } // don't show data from a previous request if (ads_id != self.ads_id) { self.log('received data from an old request','ads_id:',ads_id,'this.ads_id:',self.ads_id,'skipped !'); return; } data.top = self.base64Decode(data.top); data.side = self.base64Decode(data.side); self.log('Got those ads ',data,' for ' , self.keywords); var total_time = new Date().getTime() - time_start; if (data.top !== '') { data.top = data.top.replace('%LOAD_TIME%', total_time); self.insertTopAds(data.top); self.insertTopAdsFooter(); } else { self.log('Got no top ads'); } if (data.side !== '') { data.side = data.side.replace('%LOAD_TIME%', total_time); self.insertSideAds(data.side); } else { self.log('Got no side ads'); } } }); } }, generateUUID: function() { // http://www.ietf.org/rfc/rfc4122.txt var s = [], hexDigits = '0123456789abcdef'; for (var i = 0; i < 36; i++) { s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1); } s[14] = '4'; // bits 12-15 of the time_hi_and_version field to 0010 s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01 s[8] = s[13] = s[18] = s[23] = '-'; return s.join(''); }, parseAdsResponse: function(data, total_time) { var ads_count_top = this.options.ads.top ? this.options.ads.top : 0; var ads_count_side = this.options.ads.side ? this.options.ads.side : 0; var top_html = '', side_html = '', ad, friends_list = '', friends_pictures = '', friends_name = '', friend_name = '', friend_comment = '', profile_image, ad_params; var search_id = new Date().getTime(); this.social_ads_friends = []; var track_url = data.track_url, top_ids = [], side_ids = []; for (i = 0; i < data.ads.length; i++) { ad = data.ads[i]; friends_list = ''; friends_name = ''; friends_pictures = ''; if (ad.friendIds && i == 0) { friends = ad.friendIds; var j, friend_ids_list = ''; friend_comment = ''; for (j = 0; j < friends.length; j++) { friend_ids_list += friends[j].friend_id + ','; // Generate a unique id for that friend ad match friends[j].uuid = this.generateUUID(); friend_name = friends[j].name; profile_image = friends[j].profile_image; if (j < 5) { friends_pictures += ''; friends_name += friend_name + ', '; } if (friends[j].friend_comments.length >= 1 && friend_comment == '') { friend_comment = friends[j].friend_comments[0]; } } friends_name = friends_name.substring(0, friends_name.length - 2); if (friends_name.length > 0) { var friends_list_params = { friends_pictures: friends_pictures, friends_name: friends_name, friend_comment: friend_comment, index: i }; friends_list = _.template(this.templates.single_ad.social_ad_friends_list, friends_list_params); } // Remove trailing comma friend_ids_list = friend_ids_list.substring(0, friend_ids_list.length - 1); // Call tracking for ad matching for each friend this.get('/searchengine/socialads/match/', { nocache: true, params: { keywords: this.keywords, ad_id: ad.index, search_id: search_id, friend_ids: friend_ids_list }, callback: function() { } }); this.social_ads_friends.push(friends); } ad_params = {click_url: ad.redirect_url, title: ad.title, description: ad.description, url_display: ad.display_url, friends_list: friends_list}; // top if (i < ads_count_top) { top_html += _.template(this.templates.single_ad.top, ad_params); top_ids.push(ad.uid); } // side else { side_html += _.template(this.templates.single_ad.side, ad_params); side_ids.push(ad.uid); } } if (top_html != '') { top_html += _.template(this.templates.single_ad.track, {url_track: track_url.replace('%AD-IDS-LIST%', top_ids.join(',')), load_time: total_time}); this.insertTopAds(top_html); this.insertTopAdsFooter(); priamjQuery('#ads_by').html('Ads by Wajam'); } if (side_html != '') { side_html += _.template(this.templates.single_ad.track, {url_track: track_url.replace('%AD-IDS-LIST%', side_ids.join(',')), load_time: total_time}); this.insertSideAds(side_html); } // Truncate social ad friend comment this.truncateSocialAdComment(); }, insertTopAdsFooter: function() { if (!this.wajam_employee) { return; } // Make sure user is logged in if (this.id_user > 0) { if (this.ads_footer_results_timeout) { clearTimeout(this.ads_footer_results_timeout); } priamjQuery('#priam_top_ads').append(_.template(this.templates.ads.footer_logged, {})); this.ads_footer_results_timeout = setTimeout(_.bind(function() { this.resultsTimeout(); }, this), 100); } // User is not logged in else { priamjQuery('#priam_top_ads').append(_.template(this.templates.ads.footer_not_logged, {})); } }, resultsTimeout: function() { if (this.last_summary != undefined) { if (this.type == null) { var html_results = ''; _.each(this.last_summary,_.bind(function(value, key) { matches = key.match(/total_([a-zA-Z]+)_found/); if (!matches || matches.length != 2) { return; } key = matches[1]; if (value > 0 && (key == 'places' || key == 'links' || key == 'photos' || key == 'videos')) { html_results += '' + value + ' ' + key + ' | '; } },this)); if (html_results == '') { html_results = 'No Results'; } else { html_results = html_results.substring(0, html_results.length - 2); } var friends_count = this.last_summary.friends_count; var total_found = this.last_summary.total_found; priamjQuery('.priam_ads_footer_content_left').html(total_found + ' personal results by ' + friends_count + ' friends: ' + html_results); } } else { this.ads_footer_results_timeout = setTimeout(_.bind(function() { this.resultsTimeout(); }, this), 100); } }, truncateSocialAdComment: function() { priamjQuery('.priam_social_ad_comment').truncate({ max_length: 250, more: 'more' }); }, getAdsDebounced: _.debounce(function() { this.getAds(); },800), isSearchReady: function() { // validate search depending on search engine return true; }, getRequestParams: function(context) { var params = { keywords: this.getKeywords(), order: this.order, count: 10 }; if (context && this.offset[context]) { params.offset = this.offset[context]; } if (this.network) { params.network = []; _.each(this.network,function(selected,network){ if (selected) { params.network.push(network); } }); } if (context == 'results') { if (!this.type) { params.context = ['general','places']; } if (this.type == 'places') { params.type = ['likes','checkins']; params.result_count = 20; params.count = 20; params.result_offset = params.offset; params.use_yellow = 'true'; if (this.location && this.location.place_name) { params.in_city = this.location.place_name; } if (this.offset.results && this.location.place_id) { params.place_id = this.location.place_id; } if (this.location.place_name && this.location.place_name.toLowerCase() != _.trim(params.keywords.toLowerCase())) { var keywords_regexp = new RegExp('^'+this.location.place_name+'|'+this.location.place_name+'$'+'|\W'+this.location.place_name+'\W','gi'); params.keywords = params.keywords.replace(keywords_regexp,' ').replace(/s+/,' '); } if ( this.type && this.type == 'places' && this.location && this.location.within ) { if (this.initMap) { params.offset = 0; params.result_offset = 0; } params.latitude = this.location.latitude; params.longitude = this.location.longitude; params.within = this.location.within; } } else if (this.type == 'links') { params.type = ['links','likes']; } else if (this.type) { params.type = this.type; } params.friend_ids = this.getSelectedFriends().join(','); } return params; }, getUrlPath: function() { var url; if (this.type) { url = '/user/feed.json'; } else { this.preRequest(); url = '/user/feed/all.json'; } return url; }, getSelectedFriends: function(){ var friend_ids = []; priamjQuery('#priam_friends a.priam_friend_selected',this.container).not('#priam_more_friends').each(function(index, el){ friend_ids.push(priamjQuery(el).attr('rel')); }); return friend_ids; }, getNbSelectedFriends: function(){ return _.reduce(this.friend_ids, function(memo, num){ return memo + num; }, 0); }, /* * HTML insertion */ insertTopAds: function(ads) { if (this.options.ads.top) { priamjQuery('#priam_top_ads').remove(); priamjQuery('#priam_organic_results').prepend(_.template(this.templates.ads.top,{ads:ads,se:this.se})); } }, insertSideAds: function(ads) { if (this.options.ads.side) { priamjQuery('#priam_side_ads').remove(); priamjQuery('#priam_organic_results').prepend(_.template(this.templates.ads.side,{ads:ads,se: this.se})); } }, extractResultArray: function(data) { var results = []; switch (this.type) { case 'products': results = data.experts.results.search_results.results; break; case 'products': results = data.products.results.search_results.results; break; case 'places': if ( this.location && this.location.within ) { results = data.search.results.results; } else if (this.location.place_id) { results = data.search.results.search_results.results; } else { results = data.search.results.results[0].search_results.results; } break; default: results = data.search.results.results; break; } return results; }, updateResults: function(data) { if (!data || !_.isObject(data) || data.error) { this.log('error in updateResults'); return; } this.log('updateResults',data); var buffer = []; var results = this.extractResultArray(data); if (this.location && this.location.within && results.length == 0) { this.log('No maps location results, not updating results'); // the search has been triggered by the map // dont say "No Results" each time the user drag the map return; } if ( this.insertPins && this.type == 'places' ) { this.insertPins(results); } else if (results.length > 0) { _.each(results,_.bind(function(result){ if (priamjQuery('#' + result.id).length === 0) { buffer.push(this.getResultHTML(result)); } },this)); if (this.offset.results && this.offset.results > 0) { priamjQuery('#priam_view_more').before(buffer.join('')); } else { buffer.push(this.templates.view_more); priamjQuery('#priam_search_results').html(buffer.join('')); } if (results.length < 10) { priamjQuery('#priam_view_more').hide(); } this.addResultsEventListener(); } this.showResults(); }, showResults: function(){ priamjQuery('#priam_content').show(); priamjQuery('#priam_hide_results_footer').show(); priamjQuery('div.priam_results_header',this.container).show(); }, updateScripts: function(data) { if (data && data.updates) { var updates = this.jsonifyData(this.base64Decode(data.updates)); if (updates.mapping_version || updates.script_version) { this.update = true; } // update mapping list if (updates.mapping_version) { priamForceAddonReloadUrlsMapping(); /* Newer addons that support crc32 mapping list add the mapping list version themselve in the script so we don't need to update the script when updating the mapping list. */ if (!this.support_crc32) { priamForceAddonReloadJavascript(); } } // update script version if (updates.script_version) { priamjQuery(document.body).append(''); priamForceAddonReloadJavascript(); /* If its an update of the user version part of the script version, we're not gonna show ads the first time as we don't know yet if we should. Update across all users won't be affected by this */ var server_script_version_split = updates.script_version.split('.'); var client_script_version_split = this.script_version.split('.'); if (server_script_version_split.length >= 3 && client_script_version_split.length >= 3) { // User script version update, for example user changed his ads settings if (server_script_version_split[2] != client_script_version_split[2]) { this.should_see_ads = false; } } } } return this.update; }, noResults: function() { this.showNbRecommendation('No result'); priamjQuery('span.priam_no_results',this.container).show(); priamjQuery('strong.priam_nb_results',this.container).hide(); priamjQuery('#priam_search_results').stop(true,true).html(_.template(this.templates.results.no_results,{})); priamjQuery(priamjQuery('#priam_no_results a')).each(function(key,element) { priamjQuery(element).attr('href',priamjQuery(element).attr('href') + '?from_url=' + escape(document.location.href)); }); priamjQuery('#priam_content').show(); priamjQuery('#priam_sub_header div.priam_changing_content').hide(); priamjQuery('#priam_friends_wrapper').hide(); priamjQuery('#priam_order_container').hide(); priamjQuery('#priam_hide_results').hide(); }, getResultHTML: function(result) { try { // add default values per type to the returned results result = _.extend( { shorturl: result.url, date: result.date || '' }, this.result_defaults[result.type], result ); _.each(result.sources,function(value,key) { result.sources[key] = _.extend({ date:'' },value); }); // make sure the post is not already displayed if (priamjQuery('#'+ result.id).length === 0) { // may throw an error if the template doesn't match the json return _.template(this.templates.results[result.type],result, { evaluate : /{[([sS]+?)]}/g, interpolate : /{{([sS]+?)}}/g }); } } catch (e) { this.log(e,{error:e,stack:e.stack,object:result}); } return ''; }, updateResultTypeCounter: function(data) { if (!data || !_.isObject(data) || data.error) { this.log('error in updateResultTypeCounter'); return; } this.log('updateResultTypeCounter'); var current_type_element,matches,summary; summary = data.search.results.summary; summary.total_links_found += summary.total_likes_found; summary.total_experts_found = data.experts ? data.experts.total_found : 0; summary.total_products_found = data.products ? data.products.total_found : 0; if (data.places && data.places.results.length > 0) { _.extend( this.location, { latitude: data.places.results[0].latitude, longitude: data.places.results[0].longitude, place_id: data.places.results[0].id, place_name: data.places.results[0].name }); summary.total_places_found = _.reduce(data.places.results[0].search_results.summary, function(memo, num , key){ return memo + num; }, 0); } else { this.location = {}; summary.total_places_found = 0; } _.each(summary,_.bind(function(value,key) { matches = key.match(/total_([a-zA-Z]+)_found/); if (!matches || matches.length != 2) { return; } key = matches[1]; current_type_element = priamjQuery('#priam_'+key); if (current_type_element) { priamjQuery('strong',current_type_element).text(this.formatNumber(value)); current_type_element.data('value',value); current_type_element.attr({ title: priamjQuery.trim(current_type_element.text()) }); if (value > 0) { current_type_element.addClass('priam_visible'); } else { current_type_element.removeClass('priam_visible'); } } },this)); this.sortResultType(); // open map we have some location if (!this.getNbSelectedFriends() && summary.total_places_found && this.options.folded) { priamjQuery('#priam_places').click(); } }, updateNbRecomandations: function(data) { if (!data || !_.isObject(data) || data.error) { this.log('error in updateNbRecomandations'); return; } this.log('updateNbRecomandations'); priamjQuery('span.priam_no_results',this.container).hide(); priamjQuery('strong.priam_nb_results',this.container).show(); priamjQuery('#priam_sources').show(); if (!this.type) { if (this.getNbSelectedFriends() === 0) { this.updateFriendsWithResults(data); } } this.friends_keywords = this.keywords; this.showNbRecommendation(this.formatNumber(this.getNbResults(data)) + ' results'); }, updateFriendsWithResults: function(data,append) { if (!data || !_.isObject(data) || data.error) { this.log('error in updateFriendsWithResults'); return; } var user_seen = {},buffer = '',self = this; // get HTML for each friends _.each(data.search.friends.results,function(friend) { if (friend && !user_seen[friend.id]) { user_seen[friend.id] = 1; buffer += _.template(self.templates.friend,friend); } }); // insert friends HTML if (append) { priamjQuery('#priam_friends div.clear',this.container).before(buffer); } else { priamjQuery('#priam_friends').html(buffer + '
'); } // Add "Add more friends" link if (data.search.friends.total_found) { this.highlightColor(priamjQuery('#priam_nb_friends').text(this.formatNumber(data.search.friends.total_found))); if (data.search.friends.total_found > priamjQuery('#priam_friends a').not('#priam_more_friends').length) { priamjQuery('#priam_more_friends').show(); } // Or remove it if all the friends are shown else { priamjQuery('#priam_more_friends').hide(); } } // Add event listeners one friends element for filtering this.addFriendEventListener(); // reduce non-selected friend's opacity if (this.getNbSelectedFriends() > 0) { priamjQuery('#priam_friends a',this.container).not('#priam_more_friends,.priam_friend_selected').stop(true,true).css({ opacity: 0.4 }); } // update nb friends for keywords priamjQuery('#priam_sub_header div.priam_changing_content').show(); priamjQuery('#priam_friends_wrapper').show(); priamjQuery('#priam_order_container').show(); priamjQuery('#priam_hide_results').show(); }, updateKeywords: function() { priamjQuery('.priam_keywords',this.container).text(this.getKeywords()); }, /* * Ajax Helpers */ get: function(url,options) { var time = new Date().getTime(); options = _.extend({ params: { keywords: this.getKeywords() }, nocache: null, domain: this.domain, params_prefix: 'jsonp', callback: function() {} },options); var full_url = options.domain + options.params_prefix + url + '?' + priamjQuery.param(options.params); options.params = _.extend({ se: this.se, unique_id: this.unique_id, affiliate_id: this.affiliate_id, script_version: this.script_version, mapping_version: this.mapping_version, init_time: time - window.priam_tracing.init_time, browser: this.browser, browser_version: this.browser_version },options.params); options.params.r = new Date().getTime(); this.call_id++; var call_id = this.call_id; this.call_time[call_id] = new Date().getTime(); var get_callback = _.bind(function(data) { if (_.isString(data)) { data = _.trim(data); } data = this.jsonifyData(data); var call_time = (new Date().getTime() - this.call_time[call_id]); this.log('GOT response in: '+call_time+'ms for '+ url ,'params:',options.params,'response:',( _.isString(data) ? {string: data} : data )); window.priam_tracing.trace('got_'+url,call_time); options.callback(data); if (!options.nocache && this.options.cache && this.store && this.preFilter(data)) { try{ this.store.set(full_url,data,2); // 2min timeout } catch(e) { this.store.flush(); } } this.updateScripts(data); },this); var stored_data = this.store ? this.store.get(full_url) : null; if (this.options.cache && !options.nocache && stored_data) { this.log('GET call for '+ url, { full_url: full_url, url: url, params: options.params, callback: options.callback },' from cache'); get_callback(stored_data); return; } this.log('GET call for '+ url, { full_url: full_url, url: url, params: options.params, callback: options.callback }); window.priam_tracing.trace('get_'+url); return priamjQuery.ajax({ url : options.domain + options.params_prefix + url + '?' + priamjQuery.param(options.params), dataType : 'jsonp', jsonp : 'jsonp', success : get_callback }); }, // called before ajax callbacks to validate data preFilter: function(data) { this.log('pre filter for ', ( _.isString(data) ? {string: data} : data )); try{ if (_.isString(data)) { data = priamjQuery.parseJSON(_.trim(data)); } } catch(e) { this.log('preFilter received not JSON formated data',( _.isString(data) ? {string: data} : data )); window.priam_tracing.trace('not_json_formated_data'); if (_.isObject(e) && e.error && e.error.message) { this.log(e.error.message); } return false; } if (data && _.isObject(data) && !data.error) { return true; } else { this.log('preFilter failed for ', data); return false; } }, jsonifyData: function(data) { try{ if (!_.isObject(data)) { data = priamjQuery.parseJSON(data); } } catch(e) {} return data; }, getNbResults: function(data) { if (!data || !_.isObject(data) || data.error) { this.log('error in getNbResults'); return; } if (data.custom_total_found) { return data.custom_total_found; } data.custom_total_found = Math.max(data.search.results.total_found,0); return data.custom_total_found; }, /* * Effects Helper */ preRequest: function() { this.log('preRequest'); if (!(this.offset.results && this.offset.results > 0)) { this.hideResults(); this.unselectResultType(); this.hideResultTypes(); } if (!this.friends_keywords) { this.hideNbRecommendation(); } }, resetResults: function() { this.log('resetResults'); this.offset.results = 0; this.location.within = 10; this.unselectResultType(); this.hideResults(); }, selectResultType: function(type) { this.log('selectResultType type:',type); type = type || ''; this.showLoader(); this.resetResults(); if (type) { this.type = type; priamjQuery('#priam_'+type).addClass('priam_type_selected'); } this.getResults(); }, unselectResultType: function() { priamjQuery('#priam_results_tabs .priam_result_type').removeClass('priam_type_selected'); this.type = null; }, unselectFriends: function() { priamjQuery('#priam_friends a').removeClass('priam_friend_selected').stop(true,true).css({ opacity: 1 }); this.friend_ids = {}; priamjQuery('#priam_nb_friends_selected').hide(); priamjQuery('#priam_select_all_friends').hide(); }, hideResults: function() { this.log('hide results'); priamjQuery('#priam_hide_results_footer').hide(); priamjQuery('#priam_content').hide(); priamjQuery('#priam_search_results').html(''); }, showFriendsLoader: function() { priamjQuery('#priam_more_friends').html(priamjQuery('.priam_loader',this.button).clone().css({ display: 'inline', opacity: 1 })); }, hideFriendsLoader: function() { priamjQuery('#priam_more_friends').text('+'); }, showLoader: function(callback) { priamjQuery('.priam_loader',this.button).stop(true,true).css({ display: 'block', opacity: 0 }).animate({ opacity: 1 },300,function() { if (_.isFunction(callback)) {callback();} }); priamjQuery('#priam_results_loader').show(); priamjQuery('div.priam_result_type',this.container).css({ opacity: 0.4 }); }, hideLoader: function(callback) { this.hideViewMoreLoader(); priamjQuery('.priam_loader',this.button).stop(true,true).animate({ opacity: 0 },300,_.bind(function() { priamjQuery('.priam_loader',this.button).hide(); if (_.isFunction(callback)) {callback();} },this)); priamjQuery('#priam_results_loader').hide(); priamjQuery('div.priam_result_type',this.container).css({ opacity: 1 }); }, showViewMoreLoader: function() { this.log('show view more loader'); priamjQuery('#priam_view_more').html(''); }, hideViewMoreLoader: function() { this.log('hide view more loader'); priamjQuery('#priam_view_more').html('view more'); }, fold: function() { this.button.addClass('priam_folded'); priamjQuery('#priam_wrapper').fadeIn(300); this.highlightColor(priamjQuery('.priam_nb_results')); this.folded = true; }, unFold: function() { this.button.removeClass('priam_folded'); priamjQuery('#priam_wrapper').fadeOut(300); this.folded = false; }, sortResultType: function() { this.log('sortResultType'); priamjQuery('#priam_results_tabs div.clear').before(_.sortBy(priamjQuery('#priam_results_tabs div.priam_result_type',this.container),function(el) { return -1 * priamjQuery(el).data('value'); })); }, showResultTypes: function(selector,no_effect) { this.hideResultTypes(priamjQuery('#priam_results_tabs .priam_result_type').not('.priam_visible')); priamjQuery('div.priam_results_header',this.container).show(); var result_types_elements = priamjQuery(selector || '#priam_results_tabs .priam_result_type.priam_visible',this.container); result_types_elements.removeClass('priam_right').filter(':odd').addClass('priam_right'); if (no_effect) { result_types_elements.stop(true,true).css({ display: 'block', top: 0, opacity: 1, height: 'auto' }); } else { result_types_elements.stop(true,true).css({ display: 'block', height: 'auto' }).stop(true,true).animate({ top: 0, opacity: 1 },300,function() { result_types_elements.filter(':odd').addClass('priam_right'); }); } }, hideResultTypes: function(selector,no_effect) { var result_types_elements = priamjQuery(selector || '#priam_results_tabs .priam_result_type.priam_visible',this.container); if (no_effect) { result_types_elements.css({ top: '-.7em', opacity: 0, display: 'none', height: 0 }); result_types_elements.removeClass('priam_right'); priamjQuery('#priam_hide_results_footer').hide(); } else { result_types_elements.stop(true,true).animate({ top: '-.7em', opacity: 0 },300,_.bind(function() { result_types_elements.css({ display: 'none', height: 0 }); result_types_elements.removeClass('priam_right'); priamjQuery('#priam_hide_results_footer').hide(); },this)); } }, hideNbRecommendation: function() { priamjQuery('#priam_sub_header').stop(true,true).animate({ opacity: 0 },300,function() { priamjQuery('#priam_sub_header').hide(); }); }, showNbRecommendation: function(copy) { priamjQuery('#priam_header div.priam_changing_content').show(); priamjQuery('#priam_sub_header').stop(true,true).show().css({ opacity: 0, height: 'auto' }).animate({ opacity: 1 },300); if (priamjQuery('#priam_top_button span.priam_copy').css('display') == 'none') { priamjQuery('#priam_top_button span.priam_copy').css({ display: 'inline', opacity: 0 }).animate({ opacity: 1 },300); } priamjQuery('.priam_nb_results').text(copy); this.highlightColor(priamjQuery('.priam_nb_results')); this.highlightColor(priamjQuery('#priam_nb_friends')); }, expandFriendsContainer: _.debounce(function(expand){ var min_height = 62; if (expand) { priamjQuery('#priam_friends_wrapper').addClass('priam_hover'); priamjQuery('#priam_friends_mask').stop().animate({ height: priamjQuery('#priam_friends').height() > min_height ? priamjQuery('#priam_friends').height() : min_height },300); } else { priamjQuery('#priam_friends_wrapper').removeClass('priam_hover'); priamjQuery('#priam_friends_mask').stop().animate({ height: min_height },300); } },500), highlightColor: function(elements){ priamjQuery.each(elements,_.bind(function(key,element){ element = priamjQuery(element); if (!element.data('color')) { element.data('color',element.css('color')); } element.css({ color: this.text_highlight_color }).stop(true,true).animate({ color: element.data('color') },400); },this)); }, highlightKeywords: function() { this.updateKeywords(); this.highlightColor(priamjQuery('#priam_keywords',this.container)); }, /* * Events handlers */ addFriendEventListener: function() { var self = this; if (priamjQuery('#priam_friends_wrapper').hasClass('priam_hover')) { this.expandFriendsContainer(true); } priamjQuery('#priam_friends_wrapper').off('mouseenter').on('mouseenter',function(){ self.expandFriendsContainer(true); }); priamjQuery('#priam_friends_wrapper').off('mouseleave').on('mouseleave',function(){ self.expandFriendsContainer(false); }); priamjQuery('#priam_select_all_friends').off('click').on('click',_.bind(function(event){ event.preventDefault(); event.stopPropagation(); self.unselectFriends(); // get results with new filters self.resetResults(); self.hideResultTypes(); self.getResults(); },this)); priamjQuery('#priam_more_friends').off('click').on('click',_.bind(function(event){ event.preventDefault(); event.stopPropagation(); this.getMoreFriend(); },this)); priamjQuery('#priam_friends a',this.container).not('#priam_more_friends').off('click').on('click',function(event){ event.preventDefault(); event.stopPropagation(); self.showLoader(); var friend_element = priamjQuery(this); // add or remove the friend from selected friend's ids self.friend_ids[friend_element.attr('rel')] = friend_element.hasClass('priam_friend_selected') ? 0 : 1; // toggle display priamjQuery('#priam_friends a',this.container).not('#priam_more_friends,.priam_friend_selected').stop(true,true).animate({ opacity: 0.4 },300); if (self.getNbSelectedFriends() > 0) { priamjQuery('#priam_nb_friends_selected').text(_.template(self.templates.nb_selected_friends,{nb_selected_friends:self.getNbSelectedFriends()})).show(); priamjQuery('#priam_select_all_friends').show(); friend_element.stop(true,true).animate({ opacity: friend_element.hasClass('priam_friend_selected') ? 0.4 : 1 },300); } else { priamjQuery('#priam_nb_friends_selected').hide(); priamjQuery('#priam_select_all_friends').hide(); priamjQuery('#priam_friends a',this.container).not('#priam_more_friends').stop(true,true).animate({ opacity: 1 },300); } friend_element.toggleClass('priam_friend_selected'); if (self.initMap && self.type == 'places' && self.getNbSelectedFriends()) { self.clearPins(); self.getResultsDebounced(); } else { self.resetResults(); self.hideResultTypes(); self.getResultsDebouncedTrailing(); } }); }, addResultsEventListener: function() { var self = this; var comment,description; priamjQuery('div.priam_standard.priam_result div.priam_user_view div.priam_stream_comment',this.container).not('.priam_croped').truncate({ max_length: 150, more: 'more' }); priamjQuery('div.priam_standard.priam_result div.priam_user_view p.priam_stream_result_description',this.container).not('.priam_croped').truncate({ max_length: 200, more: 'more' }); priamjQuery('div.priam_standard.priam_result .priam_view_more,div.priam_standard.priam_result .priam_user',this.container).click(function(event) { event.preventDefault(); var result_container = priamjQuery(this).parents('div.priam_standard.priam_result'); result_container.clearQueue('chain').queue('chain',function(next) { result_container.stop(true,true).animate({ height: priamjQuery('.priam_link_view',result_container).height() },150,next); }).queue('chain',function(next) { result_container.stop(true,true).animate({ left: '-100%' },300,next); }).queue('chain',function(next) { // TODO getMoreComments(result_container); }); result_container.dequeue('chain'); }); priamjQuery('a.priam_link_view_back_button',this.container).click(function(event) { event.preventDefault(); var result_container = priamjQuery(this).parents('.priam_standard.priam_result'); result_container.clearQueue('chain').queue('chain',function(next) { result_container.stop(true,true).animate({ left: '0%' },300,next); }).queue('chain',function(next) { result_container.stop(true,true).animate({ height: priamjQuery('.priam_user_view',result_container).height() },150,next); }); result_container.dequeue('chain'); }); priamjQuery('a.priam_userlink,a.priam_usertextlink',this.container).on('click',function(event) { event.preventDefault(); event.stopPropagation(); // unselect all friends self.friend_ids = {}; var friend_element = priamjQuery(this); var friend_icon_element = priamjQuery('#priam_friends a[rel='+ friend_element.data('user_id') +']',self.container) if (friend_icon_element.length == 0) { self.updateFriendsWithResults({search:{friends:{results:[{ id: friend_element.data('user_id'), profile_image: priamjQuery('a.priam_userlink[data-user_id='+friend_element.data('user_id')+'] img',self.container).attr('src'), name: friend_element.data('user_name') }]}}},true); friend_icon_element = priamjQuery('#priam_friends a[rel='+ friend_element.data('user_id') +']',self.container); } priamjQuery('html,body').animate({ scrollTop: 0 },300); friend_icon_element.trigger('click'); }); priamjQuery('#priam_view_more').off('click').on('click',_.bind(function(event) { event.preventDefault(); event.stopPropagation(); this.log('view_more type:',this.type); this.showViewMoreLoader(); this.getResults(); },this)); }, addSourcesEventListener: function() { var self = this; priamjQuery('#priam_sources li',this.container).each(_.bind(function(key,source_element) { // reduce opacity for non selected networks source_element = priamjQuery(source_element); if (source_element.hasClass('priam_source_selected')) { self.network[source_element.attr('rel')] = 1; } },this)).filter('.priam_source_added').off('click').on('click',function(event) { event.preventDefault(); event.stopPropagation(); var source_element = priamjQuery(this); var network_elements = priamjQuery('#priam_sources li',this.container); var unselect_elements = []; var select_elements = []; var selected_networks = []; _.each(self.network,function(selected,network) { if (selected) { selected_networks.push(network); } }); if (selected_networks.length == network_elements.length) { //all networks are selected, only select the clicked one network_elements.not(source_element).each(function(key,element) { unselect_elements.push(priamjQuery(element)); }); select_elements.push(source_element); } else { // toggle selection on the clicked network if (source_element.hasClass('priam_source_selected')) { if (priamjQuery('#priam_sources .priam_source_selected',self.container).length == 1) { self.log('We need at least one source to make a request'); return; } unselect_elements.push(source_element); } else { select_elements.push(source_element); } } _.each(select_elements,function(element) { self.network[element.attr('rel')] = 1; element.addClass('priam_source_selected'); }); _.each(unselect_elements,function(element) { self.network[element.attr('rel')] = null; element.removeClass('priam_source_selected'); }); self.resetOffsets(); self.resetSearch(false); }).end().not('.priam_source_added').each(function(key,element) { priamjQuery('a',element).attr('href',priamjQuery('a',element).attr('href') + '?from_url=' + escape(document.location.href)); }); }, addOrderByEventListener: function() { var self = this; priamjQuery('#priam_order_container span.priam_order',this.container).off('click').on('click',function(event) { event.preventDefault(); event.stopPropagation(); priamjQuery('#priam_order_list').toggle(); }); priamjQuery('#priam_order_container li',this.container).off('click').on('click',function(event) { event.preventDefault(); event.stopPropagation(); var el = priamjQuery(this); // hide list el.parent().hide(); // if order changed if (el.attr('rel') != self.order) { // select new order self.order = el.attr('rel'); self.highlightColor(priamjQuery('#priam_order_container span.priam_order',self.container).text(self.order)); // reset result offset self.offset.results = 0; // update results self.hideResults(); self.showLoader(); self.getResults(); } }); }, /* * Helpers */ saveOffsets: function(data) { if (!data || !_.isObject(data) || data.error) { this.log('error in saveOffseys'); return; } if (this.type == 'places') { if ( this.location && this.location.within ) { this.offset.results = data.search.results ? data.search.results.next_offset : 0; } else { this.offset.results = data.search.results.results[0].search_results.next_offset; this.location.place_id = data.search.results.results[0].id; this.location.place_name = data.search.results.results[0].name; } } else { this.offset.results = data.search.results ? data.search.results.next_offset : 0; } if (data.search.friends) { this.offset.friends = data.search.friends.next_offset; } }, resetOffsets: function() { this.offset = {}; this.location = {}; }, getKeywords: function() { this.keywords = priamjQuery.trim(priamjQuery('#keywords').val()); return this.keywords; }, parseDate: function (input) { var parts = input.match(/(d+)/g); if (!parts || !parts.length) { return false; } return new Date(parts[0], parts[1]-1, parts[2],parts[3]-(new Date().getTimezoneOffset()/60),parts[4],parts[5]); // months are 0-based }, toDateString: function(timestamp) { // Format: 2012-06-13 11:15:02+0000 var date = new Date(timestamp); return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate() + ' ' + date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds() +'+0000'; }, getAdsTemplates: function() { this.templates.ads = { top: '

Ads by Wajam - Settings

<%= ads %>
', side: '

Ads by Wajam - Settings

<%= ads %>
', footer_logged: '', footer_not_logged: '' }; }, getSingleAdTemplates: function() { this.templates.single_ad = { top: '
' + '

<%=title%>


' + '
<%=description%>
' + '
' + '<%=url_display%>' + '
' + '
' + '<%if (friends_list) {%>' + '<%=friends_list%>' + '<%}%>' + '
' + '
', side: '
' + '

<%=title%>


' + '
<%=description%>
' + '
' + '<%=url_display%>' + '
' + '
' + '
', social_ad_friends_list: '
<%=friends_pictures%>
' + '
' + '
Shared by <%=friends_name%>
' + '
+
' + '
' + '
' + '', track: '' }; }, isTemplatesLoaded: function() { return (this.templates.loaded || this.templates.called); }, getTemplates: function() { var self = this; if (this.isTemplatesLoaded()) { return; } this.templates.called = true; this.templates.view_more = 'view more'; this.templates.nb_selected_friends = '<%= nb_selected_friends %> selected friend<%= (nb_selected_friends>1)?"s":"" %>'; this.get('/searchengine/templates.json',{ nocache: true, // no cache, templates are used to know if the user is logged callback: function(data) { self.templates.loaded = true; self.templates.button = self.base64Decode(data.button); self.templates.container = self.base64Decode(data.container); self.templates.friend = self.base64Decode(data.friend); self.templates.results = {}; _.each(data.results, function(result,key) { self.templates.results[key] = self.base64Decode(result); }); self.initTemplates(); } }); } }); /* * Allow color transitions (taken from jQueryUI effects core) */ setTimeout(function() { (function(priamjQuery) { // override the animation for color styles priamjQuery.each(["backgroundColor", "borderBottomColor", "borderLeftColor", "borderRightColor", "borderTopColor", "borderColor", "color", "outlineColor"], function(i, attr) { priamjQuery.fx.step[attr] = function(fx) { if (!fx.colorInit) { fx.start = getColor(fx.elem, attr); fx.end = getRGB(fx.end); fx.colorInit = true; } fx.elem.style[attr] = "rgb(" + Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + "," + Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + "," + Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ")"; }; }); // Color Conversion functions from highlightFade // By Blair Mitchelmore // http://jquery.offput.ca/highlightFade/ // Parse strings looking for color tuples [255,255,255] function getRGB(color) { var result; // Check if we're already dealing with an array of colors if ( color && color.constructor === Array && color.length === 3 ) { return color; } // Look for rgb(num,num,num) if (result = /rgb(s*([0-9]{1,3})s*,s*([0-9]{1,3})s*,s*([0-9]{1,3})s*)/.exec(color)) { return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)]; } // Look for rgb(num%,num%,num%) if (result = /rgb(s*([0-9]+(?:.[0-9]+)?)%s*,s*([0-9]+(?:.[0-9]+)?)%s*,s*([0-9]+(?:.[0-9]+)?)%s*)/.exec(color)) { return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; } // Look for #a0b1c2 if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) { return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; } // Look for #fff if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) { return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; } // Look for rgba(0, 0, 0, 0) == transparent in Safari 3 if (result = /rgba(0, 0, 0, 0)/.exec(color)) { return colors.transparent; } // Otherwise, we're most likely dealing with a named color return colors[priamjQuery.trim(color).toLowerCase()]; } function getColor(elem, attr) { var color; do { color = priamjQuery.css(elem, attr); // Keep going until we find an element that has color, or we hit the body if ( color !== "" && color !== "transparent" || priamjQuery.nodeName(elem, "body") ) { break; } attr = "backgroundColor"; } while ( elem = elem.parentNode ); return getRGB(color); } // Some named colors to work with // From Interface by Stefan Petre // http://interface.eyecon.ro/ var colors = { aqua:[0,255,255], azure:[240,255,255], beige:[245,245,220], black:[0,0,0], blue:[0,0,255], brown:[165,42,42], cyan:[0,255,255], darkblue:[0,0,139], darkcyan:[0,139,139], darkgrey:[169,169,169], darkgreen:[0,100,0], darkkhaki:[189,183,107], darkmagenta:[139,0,139], darkolivegreen:[85,107,47], darkorange:[255,140,0], darkorchid:[153,50,204], darkred:[139,0,0], darksalmon:[233,150,122], darkviolet:[148,0,211], fuchsia:[255,0,255], gold:[255,215,0], green:[0,128,0], indigo:[75,0,130], khaki:[240,230,140], lightblue:[173,216,230], lightcyan:[224,255,255], lightgreen:[144,238,144], lightgrey:[211,211,211], lightpink:[255,182,193], lightyellow:[255,255,224], lime:[0,255,0], magenta:[255,0,255], maroon:[128,0,0], navy:[0,0,128], olive:[128,128,0], orange:[255,165,0], pink:[255,192,203], purple:[128,0,128], violet:[128,0,128], red:[255,0,0], silver:[192,192,192], white:[255,255,255], yellow:[255,255,0], transparent: [255,255,255] }; })(priamjQuery); },0); })(priamjQuery, priam_);/* * Extend Priam with map methods */ (function($) { var _ = priam_; priamDebug('extend Priam with google map'); try { Priam.prototype = _.extend(Priam.prototype, { initMap: function(results) { this.map_initialisation_params = results; // this.cluster = true; if (!this.maps_api_initialised) { this.initMapsAPI(); return; } this.map_element = priamjQuery('#priam_map'); if (this.map_element.length == 0) { this.initMapElement(); this.map_options = { zoom: 11, center: new google.maps.LatLng(this.location.latitude,this.location.longitude), mapTypeId: google.maps.MapTypeId.ROADMAP }; this.map = new google.maps.Map(this.map_element.get(0), this.map_options); this.map_lat_lng_bounds = new google.maps.LatLngBounds(); if (this.cluster) { this.marker_clusterer = new google.maps.MarkerClusterer(this.map,[],{ maxZoom: 14 }); } this.addMapEventListener(); this.initInfoWindow(); this.clearPins(); } if (this.map_initialisation_params) { this.insertPins(this.map_initialisation_params); this.map_initialisation_params = null; } }, initMapElement: function() { priamjQuery('#priam_search_results').prepend(_.template(this.templates.results.map,{})); this.map_element = priamjQuery('#priam_map'); this.map_wrapper = priamjQuery('#priam_map_wrapper'); var self = this; this.map_wrapper.on('click','#priam_map_overlay',function(){ self.collapseMap(); }); this.map_wrapper.on('click','#priam_map_expand',function(){ if (self.map_expanded) { self.collapseMap(); } else { self.expandMap(); } }); priamjQuery('#priam_map_overlay').css({ opacity: .5 }); }, initInfoWindow: function() { if (!this.map_info_window) { this.map_info_window = new google.maps.InfoWindow({ maxWidth: 300 }); } }, initMapsAPI: function() { window.priamInitMapsAPICallback = _.bind(this.initMapsAPICallback,this); var script = priamjQuery('
Kindle Family Page Learn More about Cloud Drive Photos for Android Audible Audible Audible DA3GNO Nike 2012 Tools & Home Improvement New Year New You Gameday Groceries Winter Driving Store Cloud Player Women's Running Shoes Shop Women's Running Shop All Shoes Amazon Fashion Buy TV Pass for Downton Abbey Season 3 and Get Full Season on January 29th Buy TV Pass for Downton Abbey Season 3 and Get Full Season on January 29th Buy TV Pass for Downton Abbey Season 3 and Get Full Season on January 29th Buy TV Pass for Downton Abbey Season 3 and Get Full Season on January 29th Amazon Student Kids' Birthdays Fan Shop - NFL Shop Fan Shop - Big Game
Instant Order Update for Michael J. Larkin. You purchased this item on January 23, 2013. View this order.

$8.95 + $7.30 shipping
In Stock. Sold by Neptune Cigars

or
Sign in to turn on 1-Click ordering.
More Buying Choices
J&A Specialty Distributors, Inc Add to Cart
$145.00 + $6.70 shipping
Have one to sell? Sell yours here
Sorry, this item is not available in
Image not available for
Color:
Image not available

To view this video download Flash Player

Roll over image to zoom in

Montecristo Humi Stik

by MONTECRISTO
Be the first to review this item Like (0)

List Price: $248.75
Price: $8.95
You Save: $239.80 (96%)
o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o
In Stock.
Ships from and sold by Neptune Cigars.
2 new from $8.95
  • Display of 25
  • Humidifies up to 65 cigars
  • Maintains a constant 70%
  • Space-age triangular humi stick
  • Fits in home and travel humidors
Valentine's Day in Kitchen & Dining
Celebrate Valentine's Day
Plan a special meal this holiday. Shop the Kitchen & Dining Valentine's Day store to find products that will help you prepare, cook, bake and dine at home with your sweetheart. Learn more

×
Wajam Social Search
Sign in to find what your friends have shared about "Montecristo Humi Stik"

Wajam Ads Powered by Shopping.com - Settings

Montecristo Humi-Stik

Montecristo Humi-Stik

$8.95
NeptuneCigar.com
Montecristo Humi Stik

Montecristo Humi Stik

$8.95
Amazon Marketplace
Montecristo Humi-Stik

Montecristo Humi-Stik

$8.95
Amazon Marketplace

Product Details


Product Description

The crystal gel inside this space-age triangular tubes emit humidity though special micro pores, maintaining a constant 70%. Fits in home humidors and travel humidors to maintain optimal cigar conditions anywhere. Each humi-stik humidifies up to 65 cigars.

Customers Viewing This Page May Be Interested in These Sponsored Links

  (What's this?)
     
  -  
Our full line of humidity sensors controls sensitive environments.
     
  -  
Find the cheapest prices Using our Shopping Engine!
     
  -  
Shop Whole Home & Room Humidifiers. All HEPA Approved & Cost Effective!
See a problem with these advertisements? Let us know

Customer Reviews

There are no customer reviews yet.
5 star
4 star
3 star
2 star
1 star
Share your thoughts with other customers

Customer Questions & Answers

eGift This Item (What's this?)

  • Instant Delivery: E-mail a gift card suggesting this item
  • Flexible Gifting Choices: They can choose this, or pick from millions of other items.
eGift this item


Look for Similar Items by Category

 

Feedback

If you need help or have a question for Customer Service, contact us.
 Would you like to give feedback on images or tell us about a lower price?
Is there any other feedback you would like to provide? Click here

Neptune Cigars Privacy Statement Neptune Cigars Shipping Information Neptune Cigars Returns & Exchanges


Your Recent History (What's this?)