var konsole = {
    debug: true,
    fire: function(action,args) {
        if (!this.debug) { return false; }
		if ((typeof console === 'object') && (console[action])) {
			console[action].apply(this, args);
		} else {
			alert(action + ": " + args);
		}
	}
};

function uArray(a) {
   var r = new Array();
   o:for(var i = 0, n = a.length; i < n; i++)  {
      for(var x = 0, y = r.length; x < y; x++) {
         if(r[x]==a[i]) continue o;
      }
      r[r.length] = a[i];
   }
   return r;
}

function kara_json_stringify(str, encode) {
	str = JSON.stringify(str);
	if (encode) { str = encodeURIComponent(str); }
	return str;
}

function kara_json_parse(str, encoded) {
	if (encoded) { str = decodeURIComponent(str); }
	return JSON.parse(str);
}

function fixFarsiChars(str) {
	//yey
	str = str.replace(new RegExp(String.fromCharCode(1740), "g"),String.fromCharCode(1610));
	str = str.replace(new RegExp(String.fromCharCode(1609), "g"),String.fromCharCode(1610));
	
	//kaf
	str = str.replace(new RegExp(String.fromCharCode(1603), "g"),String.fromCharCode(1705));
	return str;
}

function spellNum(value) {
	var nums = ['صفر','يک','دو','سه','چهار','پنج','شش','هفت','هشت','نه'];
	var num_rep = {
		'دو ده': 'بيست',
		'سه ده': 'سي',
		'چهار ده': 'چهل',
		'پنج ده': 'پنجاه',
		'شش ده': 'شصت',
		'هفت ده': 'هفتاد',
		'هشت ده': 'هشتاد',
		'نه ده': 'نود',
		'يک صد': 'صد',
		'دو صد': 'دويست',
		'سه صد': 'سيصد',
		'پنج صد': 'پانصد',

		'يک ده': 'ده',
		'ده يک': 'يازده',
		'ده دو': 'دوازده',
		'ده سه': 'سيزده',
		'ده چهار': 'چهارده',
		'ده پنج': 'پانزده',
		'ده شش': 'شانزده',
		'ده هفت': 'هفده',
		'ده هشت': 'هجده',
		'ده نه': 'نوزده',

		'يک هزار': 'هزار',
		' صد': 'صد'
	};
	
	value = value + '';
	var n = -1;
	var res = [];
	for(var i=value.length; i>0; i--) {
		n = Number(value.charAt(value.length - i));
		v = nums[n];
		if (n !== 0) {
			if (i % 3 === 1) {
				if (i >= 9) { v += ' ميليارد'; }
				else if (i >= 6) { v += ' ميليون'; }
				else if (i >= 3) { v += ' هزار'; }
			} else if (i % 3 === 2) {
				v += ' ده';
			} else if (i % 3 === 0) {
				v += ' صد';
			}
			res.push(v);
		}
	}
	res = res.join(' ');
	$j.each(num_rep, function(k,v) {
		res = res.replace(new RegExp(k, "g"),v);
	});
	return res;
}

function CommaNumber(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

//*****************************
function translate_karaDates(parent,conv) {
	$j.each($j('karaDate',parent), function() {
		var $this = $j(this);
		var kType = $this.attr('type');
		if ((kType === 'G') && (conv === "G2J")) {
			$this.html(kara_date($this.html(),"G2J"));
		} else if ((kType === 'J') && (conv === "J2G")) {
			$this.html(kara_date($this.html(),"J2G"));
		} else {
		}
	});
	
}

function asDate(dt) {
	try {
		var y = dt.getFullYear();
		return dt;
	} catch (e) {
		dt = new Date(dt.replace(/-/g,"/"));
		if (dt.toString() === "NaN" || dt.toString() === "Invalid Date") {
			return null;
		} else {
			return dt;
		}
	}
}

function isDate(dt) {
	if (asDate(dt)) {
		return true;
	} else {
		return false;
	}
}

function kara_date(dt,conv,def) {
	if (!dt) { return ''; }
	if (!def) { def = ''; }
	
	dt = asDate(dt);
	if (!dt) { return def; }

	try {
		var y = dt.getFullYear();
		var m = dt.getMonth() + 1;
		var d = dt.getDate();
		if (conv === "G2J") {
			return GregorianToJalali(y,m,d).date;
		} else if (conv === "J2G") {
			return JalaliToGregorian(y,m,d).date;
		} else {
			return dt.toString();
		}
	} catch(e) {}
	
	return def;
}

//******************************
function validBrowser (type,ver) {
	return $j.browser[type] && ($j.browser.version >= ver);
}

function invalidBrowser (type,ver) {
	return $j.browser[type] && ($j.browser.version <= ver);
}

//***************************
function kara_ajax(params) {
	if (params.showParams)	{ alert(params.suc_params[0]); }

	if (params.data === undefined) { return null; }
	if (params.url === undefined) { params.url = 'kara.php'; }
	if (params.async === undefined) { params.async = true; }
	if (params.type === undefined) { params.type = 'post'; }
	if (params.dataType === undefined) { params.dataType = 'json'; }
	if (params.cache === undefined) { params.cache = false; }
	if (params.silent === undefined) { params.silent = false; }
	if (params.err_msg === undefined) { params.err_msg = 'ارسال فرآيند به سرور با مشکل مواجه گرديد'; }
	
	params.data = 'ktmp1=b&' + params.data + '&ktmp2=e';
	params.showLoader = (params.dataType === 'json') && !params.silent;
	var options = {
	  url: params.url, async: params.async, type: params.type, dataType: params.dataType, cache: params.cache, data: params.data,
	  success: function(result) { 
		if (!result.msg) { result.msg = ''; }
		if (params.showLoader) { show_progress(false,!result.result,result.msg); }
		if (params.suc_func) {
			if (!params.suc_params || !$j.isArray(params.suc_params)) { params.suc_params = []; }
			params.suc_params.push(result);
			params.suc_func.apply(null,params.suc_params); 
		}
	  },
	  error: function() { if (params.showLoader) { show_progress(false,true,params.err_msg); } }, 			  
	  beforeSend: function() { if (params.showLoader) { show_progress(true,false); } } 
	};
	if (params.timeout) { options.timeout = params.timeout; }
	$j.ajax(options);
	
	return null;
}

function obj_values(obj) {
	var vs = [];
	
	$j.each(obj, function(k,v) { vs.push(v); });
	return vs;
}

function obj_keys(obj) {
	var ks = [];
	$j.each(obj, function(k,v) { ks.push(k); });
	return ks;
}

//*********************************
function show_progress (state, failed, msg){
	//window.clearTimeout(this.progress_timer);
	$j('#process-failed').hide();
	
	if (!state) { $j('#ajax-loader').hide(); }
	else { $j('#ajax-loader').show(); }

	if (failed) {
		$j('#process-failed').show();
		window.setTimeout("$j('#process-failed').hide()",5000);
	} else { $j('#process-failed').hide(); }

	if (msg && !blankString(msg,true)) { alert(msg); }
}

//******************************
function txtSetSel(txt,start,end) {
	if (!txt) { return false; }
	if (!start) { start = 0; }
	if (!end) { end = txt.value.length; }
	try {
		txt.selectionStart = start;
		txt.selectionEnd = end;
	} catch(e) {}
}

function insertAtCursor(myField, myValue) {
  //IE support
  if (document.selection) {
	myField.focus();
	sel = document.selection.createRange();
	sel.text = myValue;
  } else if (myField.selectionStart || myField.selectionStart == '0') {
	var startPos = myField.selectionStart;
	var endPos = myField.selectionEnd;
	myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);
  } else {
	myField.value += myValue;
  }
}

function replaceOneChar(s,c,n){
	var re = new RegExp('^(.{'+ --n +'}).(.*)$','');
	return s.replace(re,'$1'+c+'$2');
}

function zero_pad(v,zs) {
	v += '';
	var zeros = "";
	for(var i=1; i<=(zs-v.length); i++) { zeros = "0" + zeros; }
	return(zeros + v);
}

function blankString(str, trimmed) {
	var tmp = str;
	if (trimmed) { tmp = $j.trim(tmp); }
	return (tmp === '');
}

//*************************
function select_select(select,value) {
	select.selectedIndex = -1;
	if (!value) { return -1; }
	$j.each(select.options, function(i,option) {
		if (option.innerHTML === value) {
			select.selectedIndex = i;
			return i;
		}
	});
}

function reset_html(id) {
    $j('#'+id).html($j('#'+id).html());
}

//*************************
function RGBtoHex(rgb) {
	return toHex(parseInt(rgb[0]*255,10))+toHex(parseInt(rgb[1]*255,10))+toHex(parseInt(rgb[2]*255,10));
}

function toHex(N) {
	if (N === null) {
		return "00";
	}
	N = parseInt(N); 
	if (N === 0 || isNaN(N)) {
		return "00";
	}
	N=Math.max(0,N); N=Math.min(N,255); N=Math.round(N);
	return "0123456789ABCDEF".charAt((N-N%16)/16) + "0123456789ABCDEF".charAt(N%16);
}

//********************************************
function asArray(arr,use_keys) {
	if ($j.isArray(arr)) { return arr; }
	try {
		var arr_t = [];
		$j.each(arr, function(k,v) { 
			if (use_keys) { 
				arr_t.push(k);
			} else {
				arr_t.push(v);
			}
		});
		return arr_t;
	} catch (e) { return arr; }
}

function array_prone(arr) {
	return $j.grep(arr, function(x) { return (!!x); });
}

function zipWith(a,b) {
	var z = {};
	$j.map(a, function(v,i) { z[v]=b[i]; });
	return z;
}

function pgArray_2_jsArray (arr) {
	return arr.substr(1, arr.length - 2).split(',');
}

//********************************************
function switchKeyValue(obj) {
	return zipWith(asArray(obj),asArray(obj,true));
}

//***************************************
function parsePgJson(j) {
	if (!j.parsed) {
		$j.each(j.records, function(key, record) {
			j.records[key] = $j.map(j.records[key], function(v) { return {value: v, alias: '', styles: ''}; });
			j.records[key] = zipWith(j.fields,j.records[key]);
		});
	}
	j.parsed = true;
}

function tablePgJson_V(record, fields_in, fields_ex, fields_alias) {
	var rows = '';
	$j.each(record, function(k, v) { 
		if (((fields_in.length === 0) || ($j.inArray(k,fields_in) !== -1)) && 
			($j.inArray(k,fields_ex) === -1)) {
				var a = v.alias;
				if (a === '') { a = v.value; }
				rows += '<tr><td class="field">' + fields_alias[k] + '</td>' +
					'<td class="value">' + a + '</td></tr>'; 
		}
	});

	return rows;
}

function tablePgJson_H(j, fields_include, fields_alias) {
	if (fields_include.length === 0) { fields_include = j.fields; }
	
	var fields = '';
	$j.each(fields_include, function() {
		fields += '<td class="field">' + fields_alias[this] + '</td>'; 
	});
	fields = '<tr class="request-fields">' + fields + '</tr>';
	
	var all_values = '';
	$j.each(j.records, function() { 
		var r = this;
		var values = '';
		$j.each(fields_include, function() { 
				var v = r[this];
				var a = v.alias;
				if (a === '') { a = v.value; }
				values += '<td class="value"'; 
				if (v.styles !== '') { values += 'style="' + v.styles + '"'; }
				values += '>' + a + '</td>'; 
		});
		all_values += '<tr class="request-values">' + values + '</tr>';
	});

	return {'fields': fields, 'values': all_values};
}

//********************************************
function field_value(res,field,rec_no) {
	if (!rec_no) { rec_no = '1'; }
	var idx = $j.inArray(field,res.fields);
	if (idx === -1) { return null; }
	return res.records[rec_no][idx];
}

//********************************************
function kara_drop_last(btn,pname,name,force) {
	var parent = $j(btn).parents("." + pname);
	var pref = "." + name;
	var r = $j(pref + ":visible", parent);
	if (r.length > 1) {
		$j(r.get(r.length - 1)).remove();
	} else if  (force) {
		r.hide();
	}
}

function kara_clone_last(btn,pname,name) {
	var parent = $j(btn).parents("." + pname);
	var pref = "." + name;
	var r = $j(pref + ":visible", parent);
	var c = r.length;
	if (c === 0) {
		var id = $j(pref, parent).show().attr("id");
	} else {
		r = $j(r.get(c - 1));
		var id = name + "-" + c;
		r = r.clone(true).insertAfter(r).attr("id",id);
		$j('label.kara-code',r).remove();
	}
	$j(" #" + id + " :text", parent).val("");	
}

//************************
function refresh_window() {
	window.location.href = href;
}

function kara_window(params,method,url,target) {
	if (!method) { method = 'post'; }

	if (method === 'get') {
		if (!url) { url = window.document.href; }
		var win = window.open(url + '?' + params);
		return true;
	}
	
	var form = document.createElement("form");
	form.setAttribute("method", method);
	if (url) { form.setAttribute("action", url); }

	if (!target) { target = '_blank'; }
	form.setAttribute("target", target);
	
	params = params.split('&');
	for (var i=0; i < params.length; i++) {
		var field = (params[i]).split('=');
		var hiddenField = document.createElement("input");              
		hiddenField.setAttribute("name", field[0]);
		hiddenField.setAttribute("value", field[1]);
		form.appendChild(hiddenField);
	}
	
	var res = true;
	try {
		document.body.appendChild(form);
		form.submit();
	} catch (e) {
		res = false;
	}
	document.body.removeChild(form);
	
	return res;
}

//**********************
function kara_spinner(caption,id,min,max,def,s_up,s_down,perc,s_script,d_script) {
	if (!caption) { caption = ''; }
	if (!s_script) { s_script = ''; }
	if (!d_script) { d_script = ''; }
	s_t = '<input type=text class="kara-spinner" id="' + id + '" value="' + def + '">';
	s_d = '<label class="kara-spinner down" onclick="spin(' + ["'" + id + "'",s_down,min,perc].join(',') + ');' + d_script + '"></label>';
	s_u = '<label class="kara-spinner up" onclick="spin(' + ["'" + id + "'",s_up,max,perc].join(',') + ');' + s_script + '"></label>';
	
	var s = caption;
	if (!invalidBrowser('msie',7)) {
		s += s_d + s_t + s_u;
	} else {
		s += s_u + s_t + s_d;
	}
	return s;
}

function kara_spinner_arrow(div) {
	if (!invalidBrowser('msie',7)) {
		$j("label.kara-spinner.down",div).html('');
		$j("label.kara-spinner.up",div).html('');
	} else {
		$j("label.kara-spinner.down",div).html(String.fromCharCode(215));
		$j("label.kara-spinner.up",div).html(String.fromCharCode(216));
	}
}
function spin (c,s,m,p) {
	c = $j("#" + c)[0];
	p = Math.pow(10,p);
	var v = (Math.floor(Number(c.value) * p) + Math.floor(s * p)) / p;
	if ((s > 0) && (v <= m)) { c.value =  v; }
	if ((s < 0) && (v >= m)) { c.value =  v; }
}

var MD5 = function (string) {
 
	function RotateLeft(lValue, iShiftBits) {
		return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
	}
 
	function AddUnsigned(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);
		}
 	}
 
 	function F(x,y,z) { return (x & y) | ((~x) & z); }
 	function G(x,y,z) { return (x & z) | (y & (~z)); }
 	function H(x,y,z) { return (x ^ y ^ z); }
	function I(x,y,z) { return (y ^ (x | (~z))); }
 
	function FF(a,b,c,d,x,s,ac) {
		a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
		return AddUnsigned(RotateLeft(a, s), b);
	}
 
	function GG(a,b,c,d,x,s,ac) {
		a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
		return AddUnsigned(RotateLeft(a, s), b);
	}
 
	function HH(a,b,c,d,x,s,ac) {
		a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
		return AddUnsigned(RotateLeft(a, s), b);
	}
 
	function II(a,b,c,d,x,s,ac) {
		a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
		return AddUnsigned(RotateLeft(a, s), b);
	}
 
	function ConvertToWordArray(string) {
		var lWordCount;
		var lMessageLength = string.length;
		var lNumberOfWords_temp1=lMessageLength + 8;
		var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
		var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
		var lWordArray=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] | (string.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;
	}
 
	function WordToHex(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;
	}
 
	function Utf8Encode(string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			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;
	}
 
	var x=Array();
	var k,AA,BB,CC,DD,a,b,c,d;
	var S11=7, S12=12, S13=17, S14=22;
	var S21=5, S22=9 , S23=14, S24=20;
	var S31=4, S32=11, S33=16, S34=23;
	var S41=6, S42=10, S43=15, S44=21;
 
	string = Utf8Encode(string);
 
	x = ConvertToWordArray(string);
 
	a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
 
	for (k=0;k<x.length;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 qualifyURL(url){
    var img = document.createElement('img');
    img.src = url; // set string url
    url = img.src; // get qualified url
    img.src = null; // no server request
    return url;
};
