756 lines
23 KiB
JavaScript
Executable File
756 lines
23 KiB
JavaScript
Executable File
/* jQuery functions */
|
|
|
|
(function($) {
|
|
$.fn.getCursorPosition = function() {
|
|
var input = this.get(0);
|
|
if (!input) return; // No (input) element found
|
|
if ('selectionStart' in input) {
|
|
// Standard-compliant browsers
|
|
return input.selectionStart;
|
|
} else if (document.selection) {
|
|
// IE
|
|
input.focus();
|
|
var sel = document.selection.createRange();
|
|
var selLen = document.selection.createRange().text.length;
|
|
sel.moveStart('character', -input.value.length);
|
|
return sel.text.length - selLen;
|
|
}
|
|
};
|
|
})(jQuery);
|
|
|
|
$.fn.setCursorPosition = function(pos)
|
|
{
|
|
this.each(function(index, elem)
|
|
{
|
|
if(elem.setSelectionRange) elem.setSelectionRange(pos, pos);
|
|
else if(elem.createTextRange)
|
|
{
|
|
var range = elem.createTextRange();
|
|
range.collapse(true);
|
|
range.moveEnd('character', pos);
|
|
range.moveStart('character', pos);
|
|
range.select();
|
|
}
|
|
});
|
|
return this;
|
|
};
|
|
|
|
$.prototype.addButton = function(sType, sTitle, oClickLink, sId, sButtonClass, sTmpVar)
|
|
{
|
|
$This = $(this);
|
|
sButtonClass = sButtonClass || '';
|
|
var asAttributes = {id:(sId || ''), 'class':'button round '+sButtonClass};
|
|
|
|
//Link
|
|
var bLink = (typeof oClickLink == 'string');
|
|
if(bLink)
|
|
{
|
|
asAttributes.href = oClickLink;
|
|
asAttributes.target = '_blank';
|
|
}
|
|
var $Button = $('<a>', asAttributes).append($('<i>', {'class':'icon fa fa-c-'+sType}));
|
|
|
|
if(sButtonClass.indexOf('no_text') == -1) $Button.append($('<span>', {'class':'value'}).text(sTitle));
|
|
else $Button.attr('title', sTitle);
|
|
|
|
$Button.appendTo($This);
|
|
|
|
//Function
|
|
if(!bLink) $Button.click(function(e){e.preventDefault(); oClickLink($(this));});
|
|
|
|
//TODO delete use of tmp out of databap class context
|
|
if(typeof sTmpVar != 'undefined') databap.tmp(sTmpVar, $Button);
|
|
|
|
return $This;
|
|
};
|
|
|
|
$.prototype.modifyButton = function(aoInfo)
|
|
{
|
|
$This = $(this);
|
|
$.each(aoInfo, function(sKey, sValue)
|
|
{
|
|
switch(sKey)
|
|
{
|
|
case 'type': $This.find('i.icon').removeClass(function(index, css){return (css.match(/\bfa-c-\S+/g) || []).join(' ');}).addClass('fa-c-'+sValue); break;
|
|
case 'title': $This.find('span.value').text(sValue); break;
|
|
case 'link': $This.attr('href', sValue); break;
|
|
case 'action': $This.off('click').click(function(e){e.preventDefault(); sValue();}); break;
|
|
case 'id': $This.attr('id', sValue); break;
|
|
case 'class': $This.attr('class', 'button round '+sValue); break;
|
|
case 'var': databap.tmp(sValue, $This); break; //TODO delete use of tmp out of databap class context
|
|
}
|
|
});
|
|
return $This;
|
|
};
|
|
|
|
$.prototype.getEmptyHeight = function()
|
|
{
|
|
var $This = $(this), iTotalHeight = 0;
|
|
$This.children(':visible').not('.scrollbar').each(function()
|
|
{
|
|
//debug('#'+$(this).attr('id')+'|.'+$(this).attr('class')+' gives '+$(this).outerHeight(true));
|
|
iTotalHeight += $(this).outerHeight(true);
|
|
});
|
|
return $This.innerHeight() - iTotalHeight;
|
|
};
|
|
|
|
$.prototype.getEmptyWidth = function()
|
|
{
|
|
var $This = $(this), iTotalWidth = 0;
|
|
$This.children(':visible').not('.scrollbar').each(function()
|
|
{
|
|
iTotalWidth += $(this).outerWidth(true);
|
|
});
|
|
return $This.innerWidth() - iTotalWidth;
|
|
};
|
|
|
|
$.prototype.addDefaultValue = function(sDefaultValue, sInitValue)
|
|
{
|
|
sInitValue = sInitValue || '';
|
|
return $(this)
|
|
.data('default_value', sDefaultValue)
|
|
.val(sInitValue==''?sDefaultValue:sInitValue)
|
|
.addClass(sInitValue==''?'default_text':'')
|
|
.focus(function()
|
|
{
|
|
var $This = $(this);
|
|
if($This.val() == $This.data('default_value')) $This.val('');
|
|
$This.removeClass('default_text');
|
|
})
|
|
.blur(function()
|
|
{
|
|
var $This = $(this);
|
|
if($This.val() == '') $This.val($This.data('default_value')).addClass('default_text');
|
|
});
|
|
};
|
|
|
|
$.prototype.checkForm = function(sSelector)
|
|
{
|
|
sSelector = sSelector || 'input[type="password"], input[type="text"], textarea';
|
|
var $This = $(this);
|
|
var bOk = true;
|
|
$This.find(sSelector).each(function()
|
|
{
|
|
$This = $(this);
|
|
bOk = bOk && $This.val()!='' && $This.val()!=$This.data('default_value');
|
|
});
|
|
return bOk;
|
|
};
|
|
|
|
/* Common functions */
|
|
|
|
String.prototype.stripVowelAccent = function()
|
|
{
|
|
var sec = ['193','225','192','224','194','226','461','462','258','259','195','227','7842','7843','7840','7841','196','228','197','229','256','257','260','261','7844','7845','7846','7847','7850','7851','7848','7849','7852','7853','7854','7855','7856','7857','7860','7861','7858','7859','7862','7863','506','507','262','263','264','265','268','269','266','267','199','231','270','271','272','273','201','233','200','232','202','234','282','283','276','277','7868','7869','7866','7867','278','279','203','235','274','275','280','281','7870','7871','7872','7873','7876','7877','7874','7875','7864','7865','7878','7879','286','287','284','285','288','289','290','291','292','293','294','295','205','237','204','236','300','301','206','238','463','464','207','239','296','297','302','303','298','299','7880','7881','7882','7883','308','309','310','311','313','314','317','318','315','316','321','322','319','320','323','324','327','328','209','241','325','326','211','243','210','242','334','335','212','244','7888','7889','7890','7891','7894','7895','7892','7893','465','466','214','246','336','337','213','245','216','248','510','511','332','333','7886','7887','416','417','7898','7899','7900','7901','7904','7905','7902','7903','7906','7907','7884','7885','7896','7897','7764','7765','7766','7767','340','341','344','345','342','343','346','347','348','349','352','353','350','351','356','357','354','355','358','359','218','250','217','249','364','365','219','251','467','468','366','367','220','252','471','472','475','476','473','474','469','470','368','369','360','361','370','371','362','363','7910','7911','431','432','7912','7913','7914','7915','7918','7919','7916','7917','7920','7921','7908','7909','7810','7811','7808','7809','372','373','7812','7813','221','253','7922','7923','374','375','376','255','7928','7929','7926','7927','7924','7925','377','378','381','382','379','380','208'];
|
|
var rep = ['A','a','A','a','A','a','A','a','A','a','A','a','A','a','A','a','A','a','A','a','A','a','A','a','A','a','A','a','A','a','A','a','A','a','A','a','A','a','A','a','A','a','A','a','A','a','C','c','C','c','C','c','C','c','C','c','D','d','D','d','E','e','E','e','E','e','E','e','E','e','E','e','E','e','E','e','E','e','E','e','E','e','E','e','E','e','E','e','E','e','E','e','E','e','G','g','G','g','G','g','G','g','H','h','H','h','I','i','I','i','I','i','I','i','I','i','I','i','I','i','I','i','I','i','I','i','I','i','J','j','K','k','L','l','L','l','L','l','L','l','L','l','N','n','N','n','N','n','N','n','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','P','p','P','p','R','r','R','r','R','r','S','s','S','s','S','s','S','s','T','t','T','t','T','t','U','u','U','u','U','u','U','u','U','u','U','u','U','u','U','u','U','u','U','u','U','u','U','u','U','u','U','u','U','u','U','u','U','u','U','u','U','u','U','u','U','u','U','u','U','u','W','w','W','w','W','w','W','w','Y','y','Y','y','Y','y','Y','y','Y','y','Y','y','Y','y','Z','z','Z','z','Z','z','D'];
|
|
|
|
var seclen = sec.length;
|
|
var repwith = -1;
|
|
var text = this;
|
|
text = text.replace(/\r/g,'').split('\n');
|
|
var textout = new Array();
|
|
var linecnt = text.length;
|
|
var toremout = '';
|
|
var chcoat = '';
|
|
for(var x=0;x<linecnt;x++)
|
|
{
|
|
torem = text[x].split('');
|
|
toremout = new Array();
|
|
toremlen = torem.length;
|
|
for(var y=0;y<toremlen;y++)
|
|
{
|
|
chcoat = torem[y].charCodeAt(0);
|
|
if(chcoat > 124)
|
|
{
|
|
for(var z=0;z<seclen;z++)
|
|
{
|
|
if(chcoat == sec[z])
|
|
{
|
|
repwith = rep[z];
|
|
z = seclen;
|
|
}
|
|
}
|
|
}
|
|
if(repwith != -1)
|
|
{
|
|
toremout[y] = repwith;
|
|
repwith = -1;
|
|
}
|
|
else toremout[y] = torem[y];
|
|
}
|
|
textout[x] = toremout.join('');
|
|
}
|
|
return textout.join('\n');
|
|
}
|
|
|
|
String.prototype.replaceAll = function(regex, text)
|
|
{
|
|
return this.replace(new RegExp(regex, 'g'), text);
|
|
};
|
|
|
|
function sort(oList, sField)
|
|
{
|
|
sField = sField || '';
|
|
var asArray = [];
|
|
for(var i in oList) asArray.push({id:i, value:oList[i]});
|
|
return asArray.sort(function(asItem1, asItem2)
|
|
{
|
|
var sValue1 = sField==''?asItem1.value:asItem1.value[sField];
|
|
var sValue2 = sField==''?asItem2.value:asItem2.value[sField];
|
|
return sValue1>sValue2?1:-1;
|
|
});
|
|
};
|
|
|
|
function copyArray(asArray)
|
|
{
|
|
return asArray.slice(0); //trick to copy array
|
|
}
|
|
|
|
function expand($eventElem)
|
|
{
|
|
var tag = '.'+$eventElem.attr('id').substr(7);
|
|
if($eventElem.hasClass('minus'))
|
|
{
|
|
$eventElem.removeClass('minus');
|
|
$eventElem.addClass('plus');
|
|
$(tag).hide('fast');
|
|
}
|
|
else
|
|
{
|
|
$eventElem.removeClass('plus');
|
|
$eventElem.addClass('minus');
|
|
$(tag).show('fast');
|
|
}
|
|
}
|
|
|
|
function array_filter(arr, func)
|
|
{
|
|
var retObj = {};
|
|
for(var k in arr)
|
|
{
|
|
if(func(arr[k]))
|
|
{
|
|
retObj[k] = arr[k];
|
|
}
|
|
}
|
|
|
|
return retObj;
|
|
}
|
|
|
|
function isNumeric(input)
|
|
{
|
|
return (input - 0) == input && input.length > 0;
|
|
}
|
|
|
|
function ucwords(text)
|
|
{
|
|
return (t = text + '').replace
|
|
(
|
|
/^([a-z])|\s+([a-z])/g,
|
|
function($1)
|
|
{
|
|
return $1.toUpperCase();
|
|
}
|
|
);
|
|
}
|
|
|
|
function getTimeString()
|
|
{
|
|
var currentTime = new Date();
|
|
var hours = currentTime.getHours();
|
|
var minutes = currentTime.getMinutes();
|
|
var secondes = currentTime.getSeconds();
|
|
|
|
hours = sprintf(hours, 2, '0');
|
|
minutes = sprintf(minutes, 2, '0');
|
|
secondes = sprintf(secondes, 2, '0');
|
|
|
|
return hours+':'+minutes+':'+secondes;
|
|
}
|
|
|
|
function sprintf(value, length, char)
|
|
{
|
|
var buffer = '';
|
|
missingCharsNb = Math.max(0, length - value.length);
|
|
for(var i=0;i<=missingCharsNb;i++)
|
|
{
|
|
buffer += char;
|
|
}
|
|
|
|
return buffer+value;
|
|
}
|
|
|
|
function chr(codePt)
|
|
{
|
|
if (codePt > 0xFFFF)
|
|
{
|
|
return String.fromCharCode(0xD800 + (codePt >> 10), 0xDC00 + (codePt & 0x3FF));
|
|
}
|
|
return String.fromCharCode(codePt);
|
|
}
|
|
|
|
function explode(delimiter, string, limit)
|
|
{
|
|
var emptyArray = {0:''};
|
|
|
|
if(arguments.length < 2 || typeof arguments[0] == 'undefined' || typeof arguments[1] == 'undefined') return null;
|
|
|
|
if(delimiter === '' || delimiter === false || delimiter === null) return false;
|
|
|
|
if(typeof delimiter == 'function' || typeof delimiter == 'object' || typeof string == 'function' || typeof string == 'object') return emptyArray;
|
|
|
|
if(delimiter === true) delimiter = '1';
|
|
|
|
if(!limit) return string.toString().split(delimiter.toString());
|
|
else
|
|
{
|
|
// support for limit argument
|
|
var splitted = string.toString().split(delimiter.toString());
|
|
var partA = splitted.splice(0, limit - 1);
|
|
var partB = splitted.join(delimiter.toString());
|
|
partA.push(partB);
|
|
return partA;
|
|
}
|
|
}
|
|
|
|
function implode(glue, pieces)
|
|
{
|
|
var i = '', retVal = '', tGlue = '';
|
|
|
|
if(arguments.length === 1)
|
|
{
|
|
pieces = glue;
|
|
glue = '';
|
|
}
|
|
|
|
if(typeof(pieces) === 'object')
|
|
{
|
|
if(pieces instanceof Array) return pieces.join(glue);
|
|
else
|
|
{
|
|
for (i in pieces)
|
|
{
|
|
retVal += tGlue + pieces[i];
|
|
tGlue = glue;
|
|
}
|
|
return retVal;
|
|
}
|
|
}
|
|
else return pieces;
|
|
}
|
|
|
|
function file_exists(url)
|
|
{
|
|
var req = this.window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
|
|
if(!req)
|
|
{
|
|
throw new Error('XMLHttpRequest not supported');
|
|
}
|
|
|
|
// HEAD Results are usually shorter (faster) than GET
|
|
req.open('HEAD', url, false);
|
|
req.send(null); if (req.status == 200)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
function basename(path, suffix)
|
|
{
|
|
var b = path.replace(/^.*[\/\\]/g, '');
|
|
if (typeof(suffix) == 'string' && b.substr(b.length - suffix.length) == suffix)
|
|
{
|
|
b = b.substr(0, b.length - suffix.length);
|
|
}
|
|
return b;
|
|
}
|
|
|
|
function getElem(aoAnchor, asPath)
|
|
{
|
|
return (typeof asPath == 'object' && asPath.length > 1)?getElem(aoAnchor[asPath.shift()], asPath):aoAnchor[(typeof asPath == 'object')?asPath.shift():asPath];
|
|
}
|
|
|
|
function setElem(aoAnchor, asPath, oValue)
|
|
{
|
|
var asTypes = {boolean:false, string:'', integer:0, int:0, array:[], object:{}};
|
|
if(typeof asPath == 'object' && asPath.length > 1)
|
|
{
|
|
var nextlevel = asPath.shift();
|
|
if(!(nextlevel in aoAnchor)) aoAnchor[nextlevel] = {}; //Creating a new level
|
|
if(typeof aoAnchor[nextlevel] !== 'object') debug('Error - setElem() : Already existing path at level "'+nextlevel+'". Cancelling setElem() action');
|
|
return setElem(aoAnchor[nextlevel], asPath, oValue);
|
|
}
|
|
else
|
|
{
|
|
var sKey = (typeof asPath == 'object')?asPath.shift():asPath;
|
|
return aoAnchor[sKey] = (!(sKey in aoAnchor) && (oValue in asTypes))?asTypes[oValue]:oValue;
|
|
}
|
|
}
|
|
|
|
function array_search(needle, haystack, argStrict)
|
|
{
|
|
var strict = !! argStrict,
|
|
key = '';
|
|
if(typeof needle === 'object' && needle.exec)
|
|
{
|
|
// Duck-type for RegExp
|
|
if(!strict)
|
|
{
|
|
// Let's consider case sensitive searches as strict
|
|
var flags = 'i' + (needle.global ? 'g' : '') + (needle.multiline ? 'm' : '') + (needle.sticky ? 'y' : '');
|
|
needle = new RegExp(needle.source, flags);
|
|
}
|
|
for(key in haystack)
|
|
{
|
|
if(haystack.hasOwnProperty(key))
|
|
{
|
|
if(needle.test(haystack[key])) return key;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
for(key in haystack)
|
|
{
|
|
if(haystack.hasOwnProperty(key))
|
|
{
|
|
if((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) return key;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
//Queue element
|
|
(
|
|
function($)
|
|
{
|
|
$.fn.delaying = function(delay, reloadAction, minLength)
|
|
{
|
|
var options={delay:delay, reload_action:reloadAction, min_length:minLength};
|
|
this.each
|
|
(
|
|
function()
|
|
{
|
|
$(this).data('tsb',new Delayer($(this), options));
|
|
}
|
|
);
|
|
return this;
|
|
};
|
|
|
|
function Delayer(elem, options)
|
|
{
|
|
var self = this;
|
|
var delays, min_length, previous_values,
|
|
temp_values, reload_action, processing_requests;
|
|
|
|
this.init = function()
|
|
{
|
|
delays = options.delay;
|
|
min_length = options.min_length;
|
|
previous_values = '';
|
|
temp_values = '';
|
|
reload_action = options.reload_action;
|
|
processing_requests = false;
|
|
};
|
|
|
|
this.request = function(val)
|
|
{
|
|
var requestOk = false;
|
|
|
|
//Prevent from loading request with too few elements or twice the same request
|
|
if(val.length > queue.min_length[id] && val != queue.previous_values[id])
|
|
{
|
|
//Prevent from spamming server with requests and wait for value stabilization
|
|
if(queue.processing_requests[id] == false && val == queue.temp_values[id])
|
|
{
|
|
queue.previous_values[id] = val;
|
|
requestOk = true;
|
|
}
|
|
else
|
|
{
|
|
queue.temp_values[id] = val;
|
|
setTimeout(queue.reload_action[id], queue.delays[id]);
|
|
}
|
|
}
|
|
return requestOk;
|
|
};
|
|
}
|
|
}
|
|
)
|
|
(jQuery);
|
|
*/
|
|
|
|
function debug(text, bQuery)
|
|
{
|
|
if(window.console) console.log(text);
|
|
}
|
|
|
|
function getLoginToken(sPass)
|
|
{
|
|
//if(!window.location.origin) window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
|
|
var sLocation = (!window.location.origin)?"http://"+window.location.hostname+(window.location.port?':'+window.location.port:''):window.location.origin.replace('https://', 'http://');
|
|
return md5(sPass+sLocation+window.location.pathname);
|
|
}
|
|
|
|
function md5(str)
|
|
{
|
|
var xl;
|
|
|
|
var rotateLeft = function (lValue, iShiftBits) {
|
|
return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
|
|
};
|
|
|
|
var addUnsigned = function (lX, lY) {
|
|
var lX4, lY4, lX8, lY8, lResult;
|
|
lX8 = (lX & 0x80000000);
|
|
lY8 = (lY & 0x80000000);
|
|
lX4 = (lX & 0x40000000);
|
|
lY4 = (lY & 0x40000000);
|
|
lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
|
|
if (lX4 & lY4) {
|
|
return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
|
|
}
|
|
if (lX4 | lY4) {
|
|
if (lResult & 0x40000000) {
|
|
return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
|
|
} else {
|
|
return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
|
|
}
|
|
} else {
|
|
return (lResult ^ lX8 ^ lY8);
|
|
}
|
|
};
|
|
|
|
var _F = function (x, y, z) {
|
|
return (x & y) | ((~x) & z);
|
|
};
|
|
var _G = function (x, y, z) {
|
|
return (x & z) | (y & (~z));
|
|
};
|
|
var _H = function (x, y, z) {
|
|
return (x ^ y ^ z);
|
|
};
|
|
var _I = function (x, y, z) {
|
|
return (y ^ (x | (~z)));
|
|
};
|
|
|
|
var _FF = function (a, b, c, d, x, s, ac) {
|
|
a = addUnsigned(a, addUnsigned(addUnsigned(_F(b, c, d), x), ac));
|
|
return addUnsigned(rotateLeft(a, s), b);
|
|
};
|
|
|
|
var _GG = function (a, b, c, d, x, s, ac) {
|
|
a = addUnsigned(a, addUnsigned(addUnsigned(_G(b, c, d), x), ac));
|
|
return addUnsigned(rotateLeft(a, s), b);
|
|
};
|
|
|
|
var _HH = function (a, b, c, d, x, s, ac) {
|
|
a = addUnsigned(a, addUnsigned(addUnsigned(_H(b, c, d), x), ac));
|
|
return addUnsigned(rotateLeft(a, s), b);
|
|
};
|
|
|
|
var _II = function (a, b, c, d, x, s, ac) {
|
|
a = addUnsigned(a, addUnsigned(addUnsigned(_I(b, c, d), x), ac));
|
|
return addUnsigned(rotateLeft(a, s), b);
|
|
};
|
|
|
|
var convertToWordArray = function (str) {
|
|
var lWordCount;
|
|
var lMessageLength = str.length;
|
|
var lNumberOfWords_temp1 = lMessageLength + 8;
|
|
var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
|
|
var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
|
|
var lWordArray = new Array(lNumberOfWords - 1);
|
|
var lBytePosition = 0;
|
|
var lByteCount = 0;
|
|
while (lByteCount < lMessageLength) {
|
|
lWordCount = (lByteCount - (lByteCount % 4)) / 4;
|
|
lBytePosition = (lByteCount % 4) * 8;
|
|
lWordArray[lWordCount] = (lWordArray[lWordCount] | (str.charCodeAt(lByteCount) << lBytePosition));
|
|
lByteCount++;
|
|
}
|
|
lWordCount = (lByteCount - (lByteCount % 4)) / 4;
|
|
lBytePosition = (lByteCount % 4) * 8;
|
|
lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
|
|
lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
|
|
lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
|
|
return lWordArray;
|
|
};
|
|
|
|
var wordToHex = function (lValue) {
|
|
var wordToHexValue = '',
|
|
wordToHexValue_temp = '',
|
|
lByte, lCount;
|
|
for (lCount = 0; lCount <= 3; lCount++) {
|
|
lByte = (lValue >>> (lCount * 8)) & 255;
|
|
wordToHexValue_temp = '0' + lByte.toString(16);
|
|
wordToHexValue = wordToHexValue + wordToHexValue_temp.substr(wordToHexValue_temp.length - 2, 2);
|
|
}
|
|
return wordToHexValue;
|
|
};
|
|
|
|
var x = [],
|
|
k, AA, BB, CC, DD, a, b, c, d, S11 = 7,
|
|
S12 = 12,
|
|
S13 = 17,
|
|
S14 = 22,
|
|
S21 = 5,
|
|
S22 = 9,
|
|
S23 = 14,
|
|
S24 = 20,
|
|
S31 = 4,
|
|
S32 = 11,
|
|
S33 = 16,
|
|
S34 = 23,
|
|
S41 = 6,
|
|
S42 = 10,
|
|
S43 = 15,
|
|
S44 = 21;
|
|
|
|
str = utf8_encode(str);
|
|
x = convertToWordArray(str);
|
|
a = 0x67452301;
|
|
b = 0xEFCDAB89;
|
|
c = 0x98BADCFE;
|
|
d = 0x10325476;
|
|
|
|
xl = x.length;
|
|
for (k = 0; k < xl; k += 16) {
|
|
AA = a;
|
|
BB = b;
|
|
CC = c;
|
|
DD = d;
|
|
a = _FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
|
|
d = _FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
|
|
c = _FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
|
|
b = _FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
|
|
a = _FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
|
|
d = _FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
|
|
c = _FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
|
|
b = _FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
|
|
a = _FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
|
|
d = _FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
|
|
c = _FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
|
|
b = _FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
|
|
a = _FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
|
|
d = _FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
|
|
c = _FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
|
|
b = _FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
|
|
a = _GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
|
|
d = _GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
|
|
c = _GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
|
|
b = _GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
|
|
a = _GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
|
|
d = _GG(d, a, b, c, x[k + 10], S22, 0x2441453);
|
|
c = _GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
|
|
b = _GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
|
|
a = _GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
|
|
d = _GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
|
|
c = _GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
|
|
b = _GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
|
|
a = _GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
|
|
d = _GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
|
|
c = _GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
|
|
b = _GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
|
|
a = _HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
|
|
d = _HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
|
|
c = _HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
|
|
b = _HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
|
|
a = _HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
|
|
d = _HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
|
|
c = _HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
|
|
b = _HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
|
|
a = _HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
|
|
d = _HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
|
|
c = _HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
|
|
b = _HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
|
|
a = _HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
|
|
d = _HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
|
|
c = _HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
|
|
b = _HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
|
|
a = _II(a, b, c, d, x[k + 0], S41, 0xF4292244);
|
|
d = _II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
|
|
c = _II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
|
|
b = _II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
|
|
a = _II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
|
|
d = _II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
|
|
c = _II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
|
|
b = _II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
|
|
a = _II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
|
|
d = _II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
|
|
c = _II(c, d, a, b, x[k + 6], S43, 0xA3014314);
|
|
b = _II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
|
|
a = _II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
|
|
d = _II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
|
|
c = _II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
|
|
b = _II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
|
|
a = addUnsigned(a, AA);
|
|
b = addUnsigned(b, BB);
|
|
c = addUnsigned(c, CC);
|
|
d = addUnsigned(d, DD);
|
|
}
|
|
|
|
var temp = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);
|
|
|
|
return temp.toLowerCase();
|
|
}
|
|
|
|
function utf8_encode(argString)
|
|
{
|
|
if (argString === null || typeof argString === 'undefined') {
|
|
return '';
|
|
}
|
|
|
|
// .replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
var string = (argString + '');
|
|
var utftext = '',
|
|
start, end, stringl = 0;
|
|
|
|
start = end = 0;
|
|
stringl = string.length;
|
|
for (var n = 0; n < stringl; n++) {
|
|
var c1 = string.charCodeAt(n);
|
|
var enc = null;
|
|
|
|
if (c1 < 128) {
|
|
end++;
|
|
} else if (c1 > 127 && c1 < 2048) {
|
|
enc = String.fromCharCode(
|
|
(c1 >> 6) | 192, (c1 & 63) | 128
|
|
);
|
|
} else if ((c1 & 0xF800) != 0xD800) {
|
|
enc = String.fromCharCode(
|
|
(c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128
|
|
);
|
|
} else {
|
|
// surrogate pairs
|
|
if ((c1 & 0xFC00) != 0xD800) {
|
|
throw new RangeError('Unmatched trail surrogate at ' + n);
|
|
}
|
|
var c2 = string.charCodeAt(++n);
|
|
if ((c2 & 0xFC00) != 0xDC00) {
|
|
throw new RangeError('Unmatched lead surrogate at ' + (n - 1));
|
|
}
|
|
c1 = ((c1 & 0x3FF) << 10) + (c2 & 0x3FF) + 0x10000;
|
|
enc = String.fromCharCode(
|
|
(c1 >> 18) | 240, ((c1 >> 12) & 63) | 128, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128
|
|
);
|
|
}
|
|
if (enc !== null) {
|
|
if (end > start) {
|
|
utftext += string.slice(start, end);
|
|
}
|
|
utftext += enc;
|
|
start = end = n + 1;
|
|
}
|
|
}
|
|
|
|
if (end > start) {
|
|
utftext += string.slice(start, stringl);
|
|
}
|
|
|
|
return utftext;
|
|
} |