var templatePage, templateBookDetail, templateMain, currentData, before, filterList; var cache = new LRUCache(30); var DEBUG = true; var isEink = /Kobo|Kindle|EBRD1101/i.test(navigator.userAgent); var isPushStateEnabled = window.history && window.history.pushState && window.history.replaceState && // pushState isn't reliable on iOS until 5. !navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]|WebApps\/.+CFNetwork)/); function debug_log(text) { if ( DEBUG ) { console.log(text); } } function updateCookie (id) { if($(id).prop('pattern') && !$(id).val().match(new RegExp ($(id).prop('pattern')))) { return; } var name = $(id).attr('id'); var value = $(id).val (); $.cookie(name, value); } function updateCookieFromCheckbox (id) { var name = $(id).attr('id'); if ((/^style/).test (name)) { name = "style"; } if ($(id).is(":checked")) { if ($(id).is(':radio')) { $.cookie(name, $(id).val ()); } else { $.cookie(name, '1'); } } else { $.cookie(name, '0'); } } function elapsed () { var elapsed = new Date () - before; return "Elapsed : " + elapsed; } function retourMail(data, textStatus, jqXHR ) { alert (data); } function sendToMailAddress (component, dataid) { $toto = $.cookie ('email'); if (!$.cookie ('email')) { var email = window.prompt ("Please enter your email : ", ""); $.cookie ('email', email); } email = $.cookie ('email'); var url = 'sendtomail.php'; if (currentData.databaseId) url = url + '?db=' + currentData.databaseId; $.ajax ({url: url, type: 'post', data: { data: dataid, email: email }, success: retourMail}); } function strformat () { var s = arguments[0]; for (var i = 0; i < arguments.length - 1; i++) { var reg = new RegExp("\\{" + i + "\\}", "gm"); s = s.replace(reg, arguments[i + 1]); } return s; } function isDefined(x) { var undefined; return x !== undefined; } function getCurrentOption (option) { if (!$.cookie (option)) { if (currentData && currentData.const && currentData.const.config && currentData.const.config [option]) { return currentData.const.config [option]; } } return $.cookie (option); } function htmlEscape(str) { return String(str) .replace(/&/g, '&') .replace(/"/g, '"') .replace(/'/g, ''') .replace(//g, '>'); } function navigateTo (url) { before = new Date (); var jsonurl = url.replace ("index", "getJSON"); var cachedData = cache.get (jsonurl); if (cachedData) { history.pushState(jsonurl, "", url); updatePage (cachedData); } else { $.getJSON(jsonurl, function(data) { history.pushState(jsonurl, "", url); cache.put (jsonurl, data); updatePage (data); }); } } function getTagList () { var tagList = {}; $(".se").each (function(){ if ($(this).parents (".filtered").length > 0) return; var taglist = $(this).text(); var tagarray = taglist.split (",") for (i in tagarray) { var tag = tagarray [i].replace(/^\s+/g,'').replace(/\s+$/g,''); tagList [tag] = 1; } }); return tagList; } function doFilter () { $(".books").removeClass("filtered"); if (jQuery.isEmptyObject(filterList)) return; $(".se").each (function(){ var taglist = ", " + $(this).text() + ", "; var toBeFiltered = false; for (var filter in filterList) { var onlyThisTag = filterList [filter]; filter = ', ' + filter + ', '; var myreg = new RegExp (filter); if (myreg.test (taglist)) { if (onlyThisTag === false) { toBeFiltered = true; } } else { if (onlyThisTag === true) { toBeFiltered = true; } } } if (toBeFiltered) $(this).parents (".books").addClass ("filtered"); }); var tagList = getTagList (); $("#filter ul li").each (function () { var text = $(this).text (); if (isDefined (tagList [text]) || $(this).attr ('class')) { tagList [text] = 0; } else { tagList [text] = -1; } }); for (var tag in tagList) { var tagValue = tagList [tag]; if (tagValue == -1) { $("#filter ul li:contains('" + tag + "')").remove(); } if (tagValue == 1) { $("#filter ul").append ("