= widths[sz]; sz++);
if(sz || 1) {
var miw = doc.getElementById("main-image-widget");
miw.className = miw.className.replace(/size[0-9]+/,"size"+sz);
if(sz && 1 ) {
mi.width = 321;
mi.height = 450;
} else if( !sz && 1 ) {
mi.width = 253;
mi.height = 355;
}
amznJQ.onCompletion("amznJQ.AboveTheFold", function() {
var src = colorImages.initial[0].main[sz];
var img = new Image();
img. {
var clone = mi.cloneNode(true);
clone.src = src;
clone.removeAttribute("width");
clone.removeAttribute("height");
clone.removeAttribute("onload");
mi.parentNode.replaceChild(clone, mi);
mi = clone;
amznJQ.declareAvailable('ImageBlockATF');
};
img.src = src;
});
} else {
amznJQ.declareAvailable('ImageBlockATF');
}
mi.style.display = "inline";
})(document);
dashboard
privacy
terms
help
Montecristo Humi Stik
by MONTECRISTO
Be the first to review this item |
Like
1359503155
false
1
0
0
0
(0)
List Price:
8.75
Price:
.95
Deal Price:
amznJQ.declareAvailable('gbPriceBlockFields');
You Save:
9.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 .95
#feature-bullets-atf ul { color:#CCC; font-family:arial,verdana,helvetica,sans-serif; font-size:12px; font-weight:regular; }
#feature-bullets-atf li span,
#feature-bullets-atf li span li { color:#000; }
#more-feature-bullets-atf.minimized .showmore,
#more-feature-bullets-atf.expanded .showless,
#more-feature-bullets-atf.expanded ul { display:block; }
#more-feature-bullets-atf ul { display:none; margin-left:15px; }
#more-feature-bullets-atf a:link { text-decoration:none; }
#more-feature-bullets-atf .showless,
#more-feature-bullets-atf .showmore { display:none; font-size:0.85em}
Display of 25" />
<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" />
").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;E
0&&(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: '
',
side: '
',
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('
<![endif]>
<style type="text/css"><!--
select#searchDropdownBox {
visibility: visible;
display: block;
}
div.nav-searchfield-width {
padding-left: 200px;
}
span#nav-search-in {
width: 200px;
}
#nav-search-in span#nav-search-in-content {
display: none;
}
--></style>
<![if gt IE 6]>
Instant Order Update for Michael J. Larkin.
You purchased this item on January 23, 2013.
View this order .
Wajam Secure:
-
Help
Other extensions you may have installed could interfere with the way you expect to see social search results from Wajam. Incompatible extensions could use scripts that create design problems on Google and slower than usual search results. The Wajam Secure option makes sure that Wajam is always where you expect it to be and temporarily prevents other third-party scripts from running on Google. You can easily enable or disable this feature.
Customers Who Viewed This Item Also Viewed
B004P4KUA2,B000K8M6LS,B000H6CZQE,B000H6BO5M,B000PJMU2C,B000YHL7Y2,B004QC940K,B004QCAGM0,B000H69QHA
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.
Customer Reviews
There are no customer reviews yet.
Share your thoughts with other customers
ASIN
B004GFGH7A
kitchen_display_on_website
Montecristo Humi Stik
link
Kindle Fire
Fire All new--faster, twice the memory
Fire HD 7", Dolby audio, ultra-fast Wi-Fi
Fire HD 8.9" 8.9", Dolby audio, ultra-fast Wi-Fi
Fire HD 8.9" 4G With ultra-fast 4G LTE wireless
Kindle Fire Accessories Cases, chargers, sleeves and more
Kindle Apps & Resources
Kindle Cloud Reader Read your Kindle books in a browser
Free Kindle Reading Apps For PC, iPad, iPhone, Android, and more
Manage Your Kindle
Your Shopping Cart is empty.
Give it purpose—fill it with books, DVDs, clothes, electronics, and more.
Instant Delivery: E-mail a gift card suggesting this item
Flexible Gifting Choices: They can choose this, or pick from millions of other items.
Look for Similar Items by Category
Feedback
Thanks for your feedback.
We appreciate your effort to make our site better. Please note that we are unable to respond directly to all submissions made via this form.
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="margin-top: 10px">
<tr valign="top">
<td valign="top">
<div class="rhfHistoryWrapper">
<p>After viewing product detail pages or search results, look here to find an easy way to navigate back to pages you are interested in.</p>
</div>
</td>
</tr>
<tr><td>
<div style="padding:10px 10px 0 10px; text-align:left;">
<b><span style="color: rgb(204, 153, 0); font-weight: bold; font-size: 13px;"> › </span>
<a href="/gp/yourstore/pym/ref=pd_pyml_rhf">View and Edit Your Browsing History</a>
</b></div>
</td></tr>
</table>
After viewing product detail pages or search results, look here to find an easy way to navigate back to pages you are interested in.
v
<img src='/gp/uedata/180-5208854-3499118?noscript&id=10S83C3CX67ZZVFM5STW' />