try{
(function (window) {
'use strict';
var document = window.document,
Image = window.Image,
globalStorage = window.globalStorage,
swfobject = window.swfobject;
try{
var localStore = window.localStorage
}catch(ex){}
try {
var sessionStorage = window.sessionStorage;
} catch (e) { }
function newImage(src) {
var img = new Image();
img.style.visibility = "hidden";
img.style.position = "absolute";
img.src = src;
}
function _ds_replace(str, key, value) {
if (str.indexOf("&" + key + "=") > -1 || str.indexOf(key + "=") === 0) {
// find start
var idx = str.indexOf("&" + key + "="),
end, newstr;
if (idx === -1) {
idx = str.indexOf(key + "=");
}
// find end
end = str.indexOf("&", idx + 1);
if (end !== -1) {
newstr = str.substr(0, idx) + str.substr(end + (idx ? 0 : 1)) + "&" + key + "=" + value;
} else {
newstr = str.substr(0, idx) + "&" + key + "=" + value;
}
return newstr;
} else {
return str + "&" + key + "=" + value;
}
}
function idb() {
if ('indexedDB' in window) {
return true
} else if (window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB) {
return true
} else {
return false
}
}
var _global_lso;
function _durablestorage_flash_var(cookie) {
_global_lso = cookie;
// remove the flash object now
var swf = document.getElementById("myswf");
if (swf && swf.parentNode) {
swf.parentNode.removeChild(swf);
}
}
var _global_isolated;
function onSilverlightLoad(sender, args) {
var control = sender.getHost();
_global_isolated = control.Content.App.getIsolatedStorage();
}
function onSilverlightError(sender, args) {
_global_isolated = "";
}
function HSTS_Cookie(domains){
var fields = [];
var remaining = 0;
var working = false;
function create_request(i, src, callback){
var img = document.createElement('img');
img.src = src + '#' + parseInt(Math.random()*32000); // prevent caching
img.onload = function(){
fields[i] = true;
remaining -= 1;
if(remaining <= 0){
working = false;
callback(fields);
}
};
img.onerror = function(){
fields[i] = false;
remaining -= 1;
if(remaining <= 0){
working = false;
callback(fields);
}
};
return img;
}
function pad(value, length) {
return (value.toString().length < length) ? pad("0"+value, length):value;
}
function bools_to_int(bools){
var n = 0, l = bools.length;
for (var i = 0; i < l; ++i) {
n = (n << 1) + (bools[i] ? 1 : 0);
}
return n;
}
function int_to_bools(value, bit_count){
var bools = [];
var bits = parseInt(value, 10).toString(2);
bits = pad(bits, 32);
for(var i=32-bit_count; i < 32; ++i){
bools.push(bits[i]=='1' ? true : false);
}
return bools;
}
return {
'bools_to_int': bools_to_int,
'is_working': function(){ return working },
'get_hsts_value': function (callback){
if(working) return false;
working = true;
fields = [];
remaining = domains.length;
for(var i = 0; i < domains.length; ++i){
fields.push(undefined);
var img = create_request(i, domains[i], callback);
}
return true;
},
'set_hsts_value': function (values, callback){
if(working) return false;
working = true;
fields = [];
remaining = domains.length;
for(var i = 0; i < domains.length; ++i){
fields.push(undefined);
if(values[i])
create_request(i, domains[i]+'?SET=1', callback);
else
create_request(i, domains[i]+'?DEL=1', callback);
}
return true;
},
'set_hsts_as_int': function (value, callback){
var value = int_to_bools(value, domains.length);
return this.set_hsts_value(value, callback);
},
'get_hsts_as_int': function (callback){
return this.get_hsts_value(function(fields){
callback(bools_to_int(fields));
});
}
};
}
var defaultOptionMap = {
java: false,
tests: 10,
silverlight: false,
lso: true,
domain: '.' + window.location.host.replace(/:\d+/, ''),
baseurl: '/lib/durablestorage',
asseturi: '/assets',
phpuri: '',
authPath: false,
swfFileName: '/durablestorage.swf',
xapFileName: '/durablestorage.xap',
jnlpFileName: '/durablestorage.jnlp',
pngCookieName: 'durablestorage_png',
pngPath: '/durablestorage_png.php',
etagCookieName: 'durablestorage_etag',
etagPath: '/durablestorage_etag.php',
cacheCookieName: 'durablestorage_cache',
cachePath: '/durablestorage_cache.php',
hsts: false,
hsts_domains: [],
db: true,
idb: true
};
var _baseKeyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function durablestorage(options) {
options = options || {};
var opts = {};
for (var key in defaultOptionMap) {
var optValue = options[key];
if(typeof optValue !== 'undefined') {
opts[key] = optValue
} else {
opts[key] = defaultOptionMap[key];
}
}
if(typeof opts.domain === 'function'){
opts.domain = opts.domain(window);
}
var _ds_history = opts.history,
_ds_java = opts.java,
_ds_tests = opts.tests,
_ds_baseurl = opts.baseurl,
_ds_asseturi = opts.asseturi,
_ds_phpuri = opts.phpuri,
_ds_domain = opts.domain,
_ds_swf_file_name = opts.swfFileName,
_ds_xap_file_name = opts.xapFileName,
_ds_jnlp_file_name = opts.jnlpFileName,
_ds_hsts = opts.hsts;
var self = this;
this._ds = {};
if (_ds_hsts){
this.hsts_cookie = HSTS_Cookie(opts.hsts_domains);
}
this.get = function (name, cb, dont_reset) {
self._durablestorage(name, cb, undefined, undefined, dont_reset);
};
this.set = function (name, value) {
self._durablestorage(name, function () {}, value);
};
this._durablestorage = function (name, cb, value, i, dont_reset) {
if (self._durablestorage === undefined) {
self = this;
}
if (i === undefined) {
i = 0;
}
// first run
if (i === 0) {
if (opts.db) {
self.durablestorage_database_storage(name, value);
}
if (opts.idb) {
self.durablestorage_indexdb_storage(name, value);
}
if (opts.pngCookieName) {
self.durablestorage_png(name, value);
}
if (opts.etagCookieName) {
self.durablestorage_etag(name, value);
}
if (opts.cacheCookieName) {
self.durablestorage_cache(name, value);
}
if (opts.lso) {
self.durablestorage_lso(name, value);
}
if (opts.silverlight) {
self.durablestorage_silverlight(name, value);
}
if (opts.authPath) {
self.durablestorage_auth(name, value);
}
if (opts.java && _ds_java) {
self.durablestorage_java(name, value);
}
self._ds.userData = self.durablestorage_userdata(name, value);
self._ds.cookieData = self.durablestorage_cookie(name, value);
self._ds.localData = self.durablestorage_local_storage(name, value);
self._ds.globalData = self.durablestorage_global_storage(name, value);
self._ds.sessionData = self.durablestorage_session_storage(name, value);
self._ds.windowData = self.durablestorage_window(name, value);
if (_ds_hsts) {
self._ds.hstsData = undefined;
if( value === undefined ){
self.hsts_cookie.get_hsts_as_int(function(int_val){
self._ds.hstsData = int_val;
});
}else{
self.hsts_cookie.set_hsts_as_int(value, function(val){
self._ds.hstsData = self.hsts_cookie.bools_to_int(val);
});
}
}
}
if (value !== undefined) {
if ((typeof _global_lso === "undefined" ||
typeof _global_isolated === "undefined" ||
self._ds.hstsData === undefined ||
self.hsts_cookie.is_working()) &&
i++ < _ds_tests) {
setTimeout(function () {
self._durablestorage(name, cb, value, i, dont_reset);
}, 0); //original value was 300ms
}
}
else
{
if (
(
(opts.db && window.openDatabase && typeof self._ds.dbData === "undefined") ||
(opts.idb && idb() && (typeof self._ds.idbData === "undefined" || self._ds.idbData === "")) ||
(opts.lso && typeof _global_lso === "undefined") ||
(opts.etagCookieName && typeof self._ds.etagData === "undefined") ||
(opts.cacheCookieName && typeof self._ds.cacheData === "undefined") ||
(opts.java && typeof self._ds.javaData === "undefined") ||
(opts.hsts && (self._ds.hstsData === undefined || self.hsts_cookie.is_working())) ||
(opts.pngCookieName && document.createElement("canvas").getContext && (typeof self._ds.pngData === "undefined" || self._ds.pngData === "")) ||
(opts.silverlight && typeof _global_isolated === "undefined")
) &&
i++ < _ds_tests
)
{
setTimeout(function () {
self._durablestorage(name, cb, value, i, dont_reset);
}, 0); //original value was 300ms
}
else
{
self._ds.lsoData = self.getFromStr(name, _global_lso);
_global_lso = undefined;
self._ds.slData = self.getFromStr(name, _global_isolated);
_global_isolated = undefined;
var tmpec = self._ds,
candidates = [],
bestnum = 0,
candidate,
item;
self._ds = {};
for (item in tmpec) {
if (tmpec[item] && tmpec[item] !== "null" && tmpec[item] !== "undefined") {
candidates[tmpec[item]] = candidates[tmpec[item]] === undefined ? 1 : candidates[tmpec[item]] + 1;
}
}
for (item in candidates) {
if (candidates[item] > bestnum) {
bestnum = candidates[item];
candidate = item;
}
}
this.working = false;
if (candidate !== undefined && (dont_reset === undefined || dont_reset !== 1)) {
self.set(name, candidate);
}
if (typeof cb === "function") {
cb(candidate, tmpec);
}
}
}
};
this.durablestorage_window = function (name, value) {
try {
if (value !== undefined) {
window.name = _ds_replace(window.name, name, value);
} else {
return this.getFromStr(name, window.name);
}
} catch (e) { }
};
this.durablestorage_userdata = function (name, value) {
try {
var elm = this.createElem("div", "userdata_el", 1);
if (elm.addBehavior) {
elm.style.behavior = "url(#default#userData)";
if (value !== undefined) {
elm.setAttribute(name, value);
elm.save(name);
} else {
elm.load(name);
return elm.getAttribute(name);
}
}
} catch (e) {}
};
this.ajax = function (settings) {
var headers, name, transports, transport, i, length;
headers = {
'X-Requested-With': 'XMLHttpRequest',
'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
};
transports = [
function () { return new XMLHttpRequest(); },
function () { return new ActiveXObject('Msxml2.XMLHTTP'); },
function () { return new ActiveXObject('Microsoft.XMLHTTP'); }
];
for (i = 0, length = transports.length; i < length; i++) {
transport = transports[i];
try {
transport = transport();
break;
} catch (e) {
}
}
transport.onreadystatechange = function () {
if (transport.readyState !== 4) {
return;
}
settings.success(transport.responseText);
};
transport.open('get', settings.url, true);
for (name in headers) {
transport.setRequestHeader(name, headers[name]);
}
transport.send();
};
this.durablestorage_cache = function (name, value) {
if (value !== undefined) {
document.cookie = opts.cacheCookieName + "=" + value + "; path=/; domain=" + _ds_domain;
self.ajax({
url: _ds_baseurl + _ds_phpuri + opts.cachePath + "?name=" + name + "&cookie=" + opts.cacheCookieName,
success: function (data) {}
});
} else {
var origvalue = this.getFromStr(opts.cacheCookieName, document.cookie);
self._ds.cacheData = undefined;
document.cookie = opts.cacheCookieName + "=; expires=Mon, 20 Sep 2010 00:00:00 UTC; path=/; domain=" + _ds_domain;
self.ajax({
url: _ds_baseurl + _ds_phpuri + opts.cachePath + "?name=" + name + "&cookie=" + opts.cacheCookieName,
success: function (data) {
document.cookie = opts.cacheCookieName + "=" + origvalue + "; expires=Tue, 31 Dec 2030 00:00:00 UTC; path=/; domain=" + _ds_domain;
self._ds.cacheData = data;
}
});
}
};
this.durablestorage_auth = function (name, value) {
if (value !== undefined) {
newImage('//' + value + '@' + location.host + _ds_baseurl + _ds_phpuri + opts.authPath + "?name=" + name);
}
else {
self.ajax({
url: _ds_baseurl + _ds_phpuri + opts.authPath + "?name=" + name,
success: function (data) {
self._ds.authData = data;
}
});
}
};
this.durablestorage_etag = function (name, value) {
if (value !== undefined) {
document.cookie = opts.etagCookieName + "=" + value + "; path=/; domain=" + _ds_domain;
self.ajax({
url: _ds_baseurl + _ds_phpuri + opts.etagPath + "?name=" + name + "&cookie=" + opts.etagCookieName,
success: function (data) {}
});
} else {
var origvalue = this.getFromStr(opts.etagCookieName, document.cookie);
self._ds.etagData = undefined;
document.cookie = opts.etagCookieName + "=; expires=Mon, 20 Sep 2010 00:00:00 UTC; path=/; domain=" + _ds_domain;
self.ajax({
url: _ds_baseurl + _ds_phpuri + opts.etagPath + "?name=" + name + "&cookie=" + opts.etagCookieName,
success: function (data) {
document.cookie = opts.etagCookieName + "=" + origvalue + "; expires=Tue, 31 Dec 2030 00:00:00 UTC; path=/; domain=" + _ds_domain;
self._ds.etagData = data;
}
});
}
};
this.durablestorage_java = function (name, value) {
var div = document.getElementById("ecAppletContainer");
if (typeof dtjava === "undefined") {
return;
}
if (div===null || div === undefined || !div.length) {
div = document.createElement("div");
div.setAttribute("id", "ecAppletContainer");
div.style.position = "absolute";
div.style.top = "-3000px";
div.style.left = "-3000px";
div.style.width = "1px";
div.style.height = "1px";
document.body.appendChild(div);
}
if (typeof ecApplet === "undefined") {
dtjava.embed({
id: "ecApplet",
url: _ds_baseurl + _ds_asseturi + _ds_jnlp_file_name,
width: "1px",
height: "1px",
placeholder: "ecAppletContainer"
}, {},{ onJavascriptReady: doSetOrGet });
}
else {
doSetOrGet("ecApplet");
}
function doSetOrGet(appletId) {
var applet = document.getElementById(appletId);
if (value !== undefined) {
applet.set(name,value);
}
else {
self._ds.javaData = applet.get(name);
}
}
};
this.durablestorage_lso = function (name, value) {
var div = document.getElementById("swfcontainer"),
flashvars = {},
params = {},
attributes = {};
if (div===null || div === undefined || !div.length) {
div = document.createElement("div");
div.setAttribute("id", "swfcontainer");
document.body.appendChild(div);
}
if (value !== undefined) {
flashvars.everdata = name + "=" + value;
}
params.swliveconnect = "true";
attributes.id = "myswf";
attributes.name = "myswf";
swfobject.embedSWF(_ds_baseurl + _ds_asseturi + _ds_swf_file_name, "swfcontainer", "1", "1", "9.0.0", false, flashvars, params, attributes);
};
this.durablestorage_png = function (name, value) {
var canvas = document.createElement("canvas"),
img, ctx, origvalue;
canvas.style.visibility = "hidden";
canvas.style.position = "absolute";
canvas.width = 200;
canvas.height = 1;
if (canvas && canvas.getContext) {
img = new Image();
img.style.visibility = "hidden";
img.style.position = "absolute";
if (value !== undefined) {
document.cookie = opts.pngCookieName + "=" + value + "; path=/; domain=" + _ds_domain;
} else {
self._ds.pngData = undefined;
ctx = canvas.getContext("2d");
origvalue = this.getFromStr(opts.pngCookieName, document.cookie);
document.cookie = opts.pngCookieName + "=; expires=Mon, 20 Sep 2010 00:00:00 UTC; path=/; domain=" + _ds_domain;
img.onload = function () {
document.cookie = opts.pngCookieName + "=" + origvalue + "; expires=Tue, 31 Dec 2030 00:00:00 UTC; path=/; domain=" + _ds_domain;
self._ds.pngData = "";
ctx.drawImage(img, 0, 0);
var imgd = ctx.getImageData(0, 0, 200, 1),
pix = imgd.data, i, n;
for (i = 0, n = pix.length; i < n; i += 4) {
if (pix[i] === 0) {
break;
}
self._ds.pngData += String.fromCharCode(pix[i]);
if (pix[i + 1] === 0) {
break;
}
self._ds.pngData += String.fromCharCode(pix[i + 1]);
if (pix[i + 2] === 0) {
break;
}
self._ds.pngData += String.fromCharCode(pix[i + 2]);
}
};
}
img.src = _ds_baseurl + _ds_phpuri + opts.pngPath + "?name=" + name + "&cookie=" + opts.pngCookieName;
img.crossOrigin = 'Anonymous';
}
};
this.durablestorage_local_storage = function (name, value) {
try {
if (localStore) {
if (value !== undefined) {
localStore.setItem(name, value);
} else {
return localStore.getItem(name);
}
}
} catch (e) { }
};
this.durablestorage_database_storage = function (name, value) {
try {
if (window.openDatabase) {
var database = window.openDatabase("sqlite_durablestorage", "", "durablestorage", 1024 * 1024);
if (value !== undefined) {
database.transaction(function (tx) {
tx.executeSql("CREATE TABLE IF NOT EXISTS cache(" +
"id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
"name TEXT NOT NULL, " +
"value TEXT NOT NULL, " +
"UNIQUE (name)" +
")", [], function (tx, rs) {}, function (tx, err) {});
tx.executeSql("INSERT OR REPLACE INTO cache(name, value) " +
"VALUES(?, ?)",
[name, value], function (tx, rs) {}, function (tx, err) {});
});
} else {
database.transaction(function (tx) {
tx.executeSql("SELECT value FROM cache WHERE name=?", [name],
function (tx, result1) {
if (result1.rows.length >= 1) {
self._ds.dbData = result1.rows.item(0).value;
} else {
self._ds.dbData = "";
}
}, function (tx, err) {});
});
}
}
} catch (e) { }
};
this.durablestorage_indexdb_storage = function(name, value) {
try {
if (!('indexedDB' in window)) {
indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction;
IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange;
}
if (indexedDB) {
var ver = 1;
var request = indexedDB.open("idb_durablestorage", ver);
request.onerror = function(e) { ;
}
request.onupgradeneeded = function(event) {
var db = event.target.result;
var store = db.createObjectStore("durablestorage", {
keyPath: "name",
unique: false
})
}
if (value !== undefined) {
request.onsuccess = function(event) {
var idb = event.target.result;
if (idb.objectStoreNames.contains("durablestorage")) {
var tx = idb.transaction(["durablestorage"], "readwrite");
var objst = tx.objectStore("durablestorage");
var qr = objst.put({
"name": name,
"value": value
})
} idb.close();
}
} else {
request.onsuccess = function(event) {
var idb = event.target.result;
if (!idb.objectStoreNames.contains("durablestorage")) {
self._ds.idbData = undefined;
} else {
var tx = idb.transaction(["durablestorage"]);
var objst = tx.objectStore("durablestorage");
var qr = objst.get(name);
qr.onsuccess = function(event) {
if (qr.result === undefined) {
self._ds.idbData = undefined
} else {
self._ds.idbData = qr.result.value;
}
}
}
idb.close();
}
}
}
} catch (e) {}
};
this.durablestorage_session_storage = function (name, value) {
try {
if (sessionStorage) {
if (value !== undefined) {
sessionStorage.setItem(name, value);
} else {
return sessionStorage.getItem(name);
}
}
} catch (e) { }
};
this.durablestorage_global_storage = function (name, value) {
if (globalStorage) {
var host = this.getHost();
try {
if (value !== undefined) {
globalStorage[host][name] = value;
} else {
return globalStorage[host][name];
}
} catch (e) { }
}
};
this.durablestorage_silverlight = function (name, value) {
var source = _ds_baseurl + _ds_asseturi + _ds_xap_file_name,
minver = "4.0.50401.0",
initParam = "",
html;
if (value !== undefined) {
initParam = '';
}
html =
'';
try{
if (typeof jQuery === 'undefined') {
document.body.appendChild(html);
} else {
$('body').append(html);
}
}catch(ex){
}
};
this.encode = function (input) {
var output = "",
chr1, chr2, chr3, enc1, enc2, enc3, enc4,
i = 0;
input = this._utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
_baseKeyStr.charAt(enc1) + _baseKeyStr.charAt(enc2) +
_baseKeyStr.charAt(enc3) + _baseKeyStr.charAt(enc4);
}
return output;
};
this.decode = function (input) {
var output = "",
chr1, chr2, chr3,
enc1, enc2, enc3, enc4,
i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = _baseKeyStr.indexOf(input.charAt(i++));
enc2 = _baseKeyStr.indexOf(input.charAt(i++));
enc3 = _baseKeyStr.indexOf(input.charAt(i++));
enc4 = _baseKeyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 !== 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 !== 64) {
output = output + String.fromCharCode(chr3);
}
}
output = this._utf8_decode(output);
return output;
};
this._utf8_encode = function (str) {
str = str.replace(/\r\n/g, "\n");
var utftext = "", i = 0, n = str.length, c;
for (; i < n; i++) {
c = str.charCodeAt(i);
if (c < 128) {
utftext += String.fromCharCode(c);
} else if ((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
} else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
};
this._utf8_decode = function (utftext) {
var str = "",
i = 0, n = utftext.length,
c = 0, c1 = 0, c2 = 0, c3 = 0;
while (i < n) {
c = utftext.charCodeAt(i);
if (c < 128) {
str += String.fromCharCode(c);
i += 1;
} else if ((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i + 1);
str += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
} else {
c2 = utftext.charCodeAt(i + 1);
c3 = utftext.charCodeAt(i + 2);
str += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
}
return str;
};
this.createElem = function (type, name, append) {
var el;
if (name !== undefined && document.getElementById(name)) {
el = document.getElementById(name);
} else {
el = document.createElement(type);
}
el.style.visibility = "hidden";
el.style.position = "absolute";
if (name) {
el.setAttribute("id", name);
}
if (append) {
document.body.appendChild(el);
}
return el;
};
this.createIframe = function (url, name) {
var el = this.createElem("iframe", name, 1);
el.setAttribute("src", url);
return el;
};
var waitForSwf = this.waitForSwf = function (i) {
if (i === undefined) {
i = 0;
} else {
i++;
}
if (i < _ds_tests && typeof swfobject === "undefined") {
setTimeout(function () {
waitForSwf(i);
}, 0); //original value was 300ms
}
};
this.durablestorage_cookie = function (name, value) {
if (value !== undefined) {
document.cookie = name + "=; expires=Mon, 20 Sep 2010 00:00:00 UTC; path=/; domain=" + _ds_domain;
document.cookie = name + "=" + value + "; expires=Tue, 31 Dec 2030 00:00:00 UTC; path=/; domain=" + _ds_domain;
} else {
return this.getFromStr(name, document.cookie);
}
};
this.getFromStr = function (name, text) {
if (typeof text !== "string") {
return;
}
var nameEQ = name + "=",
ca = text.split(/[;&]/),
i, c;
for (i = 0; i < ca.length; i++) {
c = ca[i];
while (c.charAt(0) === " ") {
c = c.substring(1, c.length);
}
if (c.indexOf(nameEQ) === 0) {
return c.substring(nameEQ.length, c.length);
}
}
};
this.getHost = function () {
return window.location.host.replace(/:\d+/, '');
};
this.toHex = function (str) {
var r = "",
e = str.length,
c = 0,
h;
while (c < e) {
h = str.charCodeAt(c++).toString(16);
while (h.length < 2) {
h = "0" + h;
}
r += h;
}
return r;
};
this.fromHex = function (str) {
var r = "",
e = str.length,
s;
while (e >= 0) {
s = e - 2;
r = String.fromCharCode("0x" + str.substring(s, e)) + r;
e = s;
}
return r;
};
var _link = this.createElem("a", "_ds_rgb_link"),
created_style,
_cssText = "#_ds_rgb_link:visited{display:none;color:#FF0000}",
style;
try {
created_style = 1;
style = document.createElement("style");
if (style.styleSheet) {
style.styleSheet.innerHTML = _cssText;
} else if (style.innerHTML) {
style.innerHTML = _cssText;
} else {
style.appendChild(document.createTextNode(_cssText));
}
} catch (e) {
created_style = 0;
}
this._getRGB = function (u, test_color) {
if (test_color && created_style === 0) {
return -1;
}
_link.href = u;
_link.innerHTML = u;
document.body.appendChild(style);
document.body.appendChild(_link);
var color;
if (document.defaultView) {
if (document.defaultView.getComputedStyle(_link, null) == null) {
}
color = document.defaultView.getComputedStyle(_link, null).getPropertyValue("color");
} else {
color = _link.currentStyle.color;
}
return color;
};
this._testURL = function (url, no_color) {
var color = this._getRGB(url);
if (color === "rgb(255, 0, 0)" || color === "#ff0000") {
return 1;
} else if (no_color && color !== no_color) {
return 1;
}
/* not found */
return 0;
};
};
window._durablestorage_flash_var = _durablestorage_flash_var;
window.durablestorage = window.durablestorage = durablestorage;
}(window));
}catch(ex){}
/******************************
* Start working with the lib *
******************************/
$(window).on("load", function() {
var ds = new window.durablestorage();
ds.get("dsid", function(value) {
if (value == undefined) {
// call backend to get unique ID
ds.set("dsid", dsid);
} else {
dsid = value;
}
$.post('/api/users/checkUpdateDsIdByUser', { dsid: dsid });
});
});