function showMessage(msg){
//    alert(msg);
}

function showStatus(msg){
//    $("#status").text(msg);
}

function updateTotal(){
    $("#total").text("Total: "+HardwareIDList.length+" Hardware IDs");
}
Date.prototype.toMSJSON = function () {
      var date = '"\\\/Date(' + this.getTime() + ')\\\/"';
      return date;
};

function clone(obj){
    if(obj == null || typeof(obj) != 'object')
        return obj;
    var temp =  new obj.constructor();
    for(var key in obj){
        if (Date.prototype.isPrototypeOf(obj[key]))
            temp[key] = new Date(obj[key].getTime());
        else
            temp[key] = clone(obj[key]);
    }
    return temp;
}

function getIDType(hid){
    if (hid == parseInt(hid)) 
        return "SD Card";
    return "Device";
}

function globalError(XMLHttpRequest, textStatus, errorThrown){
//    showAlert("Error: " +XMLHttpRequest.responseText);
}

function userHasRole(user,role){
    for (var i = 0 ; i < user.Roles.length ; i ++)
        if (role == user.Roles[i]) return true;
    return false;
}

Number.prototype.round = function( places, truncate ){
var factor = Math.pow( 10, places );
return Math[Boolean(truncate)?'floor':'round']( this * factor ) / factor;
}

function NameToFile(name)
{
    name = name.replace(/\\/g, "_");
    name = name.replace(/\./g, "_");
    name = name.replace(/\//g, "_");
    name = name.replace(/\:/g, "_");
    name = name.replace(/\?/g, "_");
    name = name.replace(/\*/g, "_");
    name = name.replace(/</g, "_");
    name = name.replace(/>/g, "_");
    name = name.replace(/\|/g, "_");
    name = name.replace(/"/g, "_");
    name = name.replace(/ /g, "_");
    name = name.replace(/\t/g, "_");
    name = name.replace(/\r/g, "_");
    name = name.replace(/\n/g, "_");
    name = name.replace("__", "_");
    return name;
}

function getHumanReadableFileSize(size){
    sizeMap = Array();
    sizeMap[0] = "Bytes";
    sizeMap[1] = "KB";
    sizeMap[2] = "MB";
    sizeMap[3] = "GB";
    sizeMap[4] = "TB";
    
    var i = 0;
    while (size > 1024){
        i++;
        size = size/1024;
    }
    return size.round(2,true) + " " + sizeMap[i];
}

function parseMSJSONString(data)
{
    try {
        var newdata = data.replace(new RegExp('"\\\\\/Date\\\((-?[0-9]+)\\\)\\\\\/"', "g"), "new Date($1)");
        newdata = eval('('+newdata+')');
        if (newdata == null) newdata = new Array();
        return newdata;
    }
    catch(e) { return new Array(); }
}

function dateTranslator(data) {
    try {
        var newdata = data.replace(
            new RegExp('Date\\((-?[0-9]+)\\)', "g")
                        , "\\/Date($1)\\/");
        return newdata;
    }
    catch(e) { return data; }
}

Date.prototype.toJSON = function () {
      var date = "Date(" + this.getTime() + ')';
      return date;
};

function stringifyToMSJSON(data){
    return dateTranslator(JSON.stringify(data));
}

var globalTypeDirection;
var globalDateDirection;
var globalNameDirection;

function sortContentByName(a, b) {
    if (globalNameDirection == undefined) globalNameDirection = 1;
    var x = a.Name.toLowerCase();
    var y = b.Name.toLowerCase();
    return globalNameDirection*(((x < y) ? -1 : ((x > y) ? 1 : 0)));
}

function sortContentByType(a, b) {
    if (globalTypeDirection == undefined) globalTypeDirection = 1;
    var x = a.ContentType.toLowerCase();
    var y = b.ContentType.toLowerCase();
    return globalTypeDirection*(((x < y) ? -1 : ((x > y) ? 1 : sortContentByName(a, b))));
}
function sortContentByDate(a, b) {
    if (globalDateDirection == undefined) globalDateDirection = 1;
    var x = a.ReleaseDate;
    var y = b.ReleaseDate;
    return globalDateDirection*(((x < y) ? -1 : ((x > y) ? 1 : sortContentByName(a, b))));
}
function userComparer(a, b) {
    if (a.Username.toLowerCase() == b.Username.toLowerCase()) return 0
    return a.Username.toLowerCase() < b.Username.toLowerCase() ? -1 : 1;
}
function sortTransactionByName(a, b) {
    if (globalNameDirection == undefined) globalNameDirection = 1;
    var x = a.Content.Name.toLowerCase();
    var y = b.Content.Name.toLowerCase();
    return globalNameDirection*(((x < y) ? -1 : ((x > y) ? 1 : 0)));
}

function sortTransactionByType(a, b) {
    if (globalTypeDirection == undefined) globalTypeDirection = 1;
    var x = a.Content.MasterContent.Type.Name.toLowerCase();
    var y = b.Content.MasterContent.Type.Name.toLowerCase();
    return globalTypeDirection*(((x < y) ? -1 : ((x > y) ? 1 : sortTransactionByName(a, b))));
}
function sortTransactionByDate(a, b) {
    if (globalDateDirection == undefined) globalDateDirection = 1;
    var x = a.Content.ReleaseDate;
    var y = b.Content.ReleaseDate;
    return globalDateDirection*(((x < y) ? -1 : ((x > y) ? 1 : sortTransactionByName(a, b))));
}



function prober(condFunction, callbackFunction)
{
    this.cond = condFunction;
    this.callback = callbackFunction;
    this.timer = null;
    var helperReference = this;
    
    this.timer = setInterval(function(){helperReference.check()},100)   
    
    this.check = function()
    {
        if (helperReference.cond()){
            clearInterval(helperReference.timer);
            helperReference.callback();
        } 
        
    }
}


function checkAndGo(url) {
    if (canLeave) { 
        window.location.href=url;
        window.navigate(url);
    }
    else {
        showConfirm("Leave page?","Leave page without saving changes?",250,function(){goTo(url)}) ;
    }
}
function goTo(url)
{
        window.location.href=url;
        window.navigate(url);
}

function getPageHeight(){
	if (window.innerHeight) {// Firefox
		yWithScroll = window.innerHeight + (window.scrollMaxY>0?window.scrollMaxY:0);
		xWithScroll = window.innerWidth + window.scrollMaxX;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		yWithScroll = document.body.scrollHeight;
		xWithScroll = document.body.scrollWidth;
	} else { // works in Explorer 6 Strict, Mozilla (not FF) and Safari
		yWithScroll = document.documentElement.clientHeight>document.body.offsetHeight?document.documentElement.clientHeight:document.body.offsetHeight;
		xWithScroll = document.body.offsetWidth;
  	}
	return yWithScroll;
}


/*function getPageHeight()
{
    var myWidth = 0, myHeight = 0;
    if( typeof( window.innerWidth ) == 'number' ) {
        //Non-IE
        myWidth = window.innerWidth;
        myHeight = window.innerHeight;
    } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
        //IE 6+ in 'standards compliant mode'
        myWidth = document.documentElement.clientWidth;
        myHeight = document.documentElement.clientHeight;
    } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
        //IE 4 compatible
        myWidth = document.body.clientWidth;
        myHeight = document.body.clientHeight;
    }
    return myHeight;
}*/

function getPageWidth()
   {
    var myWidth = 0, myHeight = 0;
    if( typeof( window.innerWidth ) == 'number' ) {
        //Non-IE
        myWidth = window.innerWidth;
        myHeight = window.innerHeight;
    } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
        //IE 6+ in 'standards compliant mode'
        myWidth = document.documentElement.clientWidth;
        myHeight = document.documentElement.clientHeight;
    } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
        //IE 4 compatible
        myWidth = document.body.clientWidth;
        myHeight = document.body.clientHeight;
    }
    return myWidth;
}


function getScrollPosition()
{
    if (document.body.scrollTop == 0){
        if (window.pageYOffset) return window.pageYOffset;
        else return (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
    } return document.body.scrollTop
}

var modalVisible = 0;



function _showModal(delay)
{
    modalVisible++;
    if (modalVisible<1) modalVisible = 1;
    if (modalVisible!=1) return;
    if (delay==undefined) delay = 0;
    var element = document.createElement("div");
    $(element).css({
        "position":"absolute",
        "top":"0px",
        "left":"0px",
        "width":"100%",
        "height":getPageHeight()+"px",
        "background-color":"#444",
        "z-index":"20",
        "display":"block"
    });
  	element.style.opacity = 0;
	element.style.filter = 'alpha(opacity=0)';

    $(element).addClass("customOverlay");
    $(element).bgiframe();
    document.body.appendChild(element);
    $(element).fadeTo(delay,0.5);
}

function _hideModal()
{
    modalVisible--;
    if (modalVisible<0) modalVisible = 0;
    if (modalVisible!=0) return;
    $(".customOverlay").fadeTo(300,0,function(){
        $(this).remove();
    });
}

function showModal()
{
    setTimeout("_showModal()",10);
}
function hideModal()
{
    setTimeout("_hideModal()",10);
}

function showMessageHTML(caption,msg,width,messageType){

//    showModal();
//    var element = document.createElement("div");
//    var left = Math.round(getPageWidth()/2-width/2);
//    var top = Math.round(getScrollPosition()+100);
//    $(element).css({
//		'position': 'absolute',
//		'display':'none',
//		'top': top+'px',
//		'left': left+'px',
//		'width': width+'px',
//		'background-color':'#f0f5FF',
//		'border': '1px solid #000',
//		'z-index': '200'
//    });
//    
//    if (messageType==undefined) messageType = "alert";
//    
//    $(element).addClass("dialog");
//    
//    $(window).scroll(function(){
//        $(".dialog").css({"top":Math.round(getScrollPosition()+100)});
//    })

//    
//    var header = document.createElement("div");
//    $(header).addClass("dialogCaption").text(caption);
//    if (messageType=="info") $(header).css({"background-color":"#587f8c"});
//    
//    var content = document.createElement("div");
//    $(content).addClass("dialogContent");
//    
//    var closegumb = document.createElement("input");
//    closegumb.setAttribute("type","button");
//    closegumb.setAttribute("value","  Ok  ");
//    $(closegumb).addClass("button").click(function(){
//        $(this).parent().parent().fadeOut(300);
//        hideModal();
//    });
//    
//    content.appendChild(document.createTextNode(msg));
//    content.appendChild(document.createElement("br"));
//    content.appendChild(document.createElement("br"));
//    content.appendChild(closegumb);
//    $(content).css({"text-align":"center"})
//    
//    
//    element.appendChild(header);
//    element.appendChild(content);
//    $(element).draggable({handle:header});
//    $(element).hide();
//    $(document.body).append(element);
//    $(element).fadeIn(300);
}

function showConfirm(caption,msg,width,successCallback){
    showModal();
    var element = document.createElement("div");
    var left = Math.round(getPageWidth()/2-width/2);
    var top = Math.round(getScrollPosition()+100);
    $(element).css({
		'position': 'absolute',
		'display':'none',
		'top': top+'px',
		'left': left+'px',
		'width': width+'px',
		'background-color':'#f0f5FF',
		'border': '1px solid #000',
		'z-index': '2000'
    });
    
    $(element).addClass("dialog");
    
    $(window).scroll(function(){
        $(".dialog").css({"top":Math.round(getScrollPosition()+100)});
    })

    
    var header = document.createElement("div");
    $(header).addClass("dialogCaption").text(caption);
    
    var content = document.createElement("div");
    $(content).addClass("dialogContent");
    
    var yes = document.createElement("input");
    yes.setAttribute("type","button");
    yes.setAttribute("value","  Yes  ");
    $(yes).addClass("button").click(function(){
        $(this).parent().parent().fadeOut(300);
        hideModal();
        successCallback();
    });

    var no = document.createElement("input");
    no.setAttribute("type","button");
    no.setAttribute("value","  No  ");
    $(no).addClass("button").click(function(){
        $(this).parent().parent().fadeOut(300);
        hideModal();
    });

    
    content.appendChild(document.createTextNode(msg));
    content.appendChild(document.createElement("br"));
    content.appendChild(document.createElement("br"));
    content.appendChild(yes);
    content.appendChild(document.createTextNode(" "));
    content.appendChild(no);
    $(content).css({"text-align":"center"})
    
    
    element.appendChild(header);
    element.appendChild(content);
    $(element).hide();
    $(element).draggable({handle:header});
    $(document.body).append(element);
    $(element).fadeIn(300);
    
}


function showAlert(msg)
{
//    showMessageHTML("Alert!",msg,250);
}

function showInfo(msg)
{
    showMessageHTML("Success",msg,250,"info");
}


function prober(condFunction, callbackFunction)
{
    this.cond = condFunction;
    this.callback = callbackFunction;
    this.timer = null;
    var helperReference = this;
    
    this.timer = setInterval(function(){helperReference.check()},100)   
    
    this.check = function()
    {
        if (helperReference.cond()){
            clearInterval(helperReference.timer);
            helperReference.callback();
        } 
        
    }
}

function parseMSJSONString(data)
{
    try {
        var newdata = data.replace(new RegExp('"\\\\\/Date\\\((-?[0-9]+)\\\)\\\\\/"', "g"), "new Date($1)");
        newdata = eval('('+newdata+')');
        if (newdata == null) newdata = new Array();
        return newdata;
    }
    catch(e) { return new Array(); }
}

function dateTranslator(data) {
    try {
        var newdata = data.replace(
            new RegExp('Date\\((-?[0-9]+)\\)', "g")
                        , "\\/Date($1)\\/");
        return newdata;
    }
    catch(e) { return data; }
}

Date.prototype.toJSON = function () {
      var date = "Date(" + this.getTime() + ')';
      return date;
};

function stringifyToMSJSON(data){
    return dateTranslator(JSON.stringify(data));
}


function callWebService(url, params, callback, retry){
   if (retry == undefined) retry = true;
   if (retry)
       $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            data: stringifyToMSJSON(params),
            dataFilter : parseMSJSONString,
            url: url,
            success: callback,
            error: function(){
                $.ajax({
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    data: stringifyToMSJSON(params),
                    dataFilter : parseMSJSONString,
                    url: url,
                    success: callback,
                    error: globalError,
                    timeout: 30000
                });
            },
            timeout: 30000
        }); 
    else
       $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            data: stringifyToMSJSON(params),
            dataFilter : parseMSJSONString,
            url: url,
            success: callback,
            error: globalError,
            timeout: 30000
        }); 
    
    return null;   
}

function findContentById(id, c)
{
    var current = c
    if (c==null) return null;
    for (var i = 0 ; i < c.length ; i ++)
    {
        if (c[i].Id==id) return c[i];
        var tmp = findContentById(id, c[i].Subcontent);
        if (tmp != null) return tmp;
    }
    return null;
}


function MD5(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 getText(element)
{
    var text = new Array();
    if ($(element).text()!="")
        text.push($(element).text());
    if ($(element).val()!="")
        text.push($(element).val());
    for (var i = 0 ; i < $(element).children().length ; i ++)
    {
        var str = getText($(element).children()[i]);
        if (str != "")
            text.push(str);
    }
    return text.join(" ");
}

function getWidth(element, text)
{
    var div = document.getElementById("dummyElement");
    if (div == null)
    {
        div = document.createElement("div");
        div.id = "dummyElement";
    	$(div).appendTo('body');
    }
    div = $(div);
    div.css({
	    'font-size'  : $(element).css('font-size'),
	    'font-family': $(element).css('font-family'),
	    'font-weight': $(element).css('font-weight')!=400?700:400, //firefox bugfix
	    'overflow-x' : 'hidden',
	    'position'   : 'absolute',
	    'top'        : 0,
	    'left'		 : -9999
	    });
	div.text(text);
	return div.width();
}

function setWidths(element)
{
    if (element.tagName.toLowerCase() == "textarea") return;
    if (element.tagName.toLowerCase() == "input") {
        var w = getWidth(element,element.value);
        if (w<10) w = 10;
        $(element).css("width",w+"px");
        return w;
    }

	var width = 0;
	for (var i = 0 ; i < element.childNodes.length ; i ++){
	    if (element.childNodes[i].nodeType == 3)
	        width += getWidth(element,element.childNodes[i].data);
	    if (element.childNodes[i].nodeType == 1){
            width += setWidths(element.childNodes[i]);
	    }
	}
	var addon = ($(element).find("*").length-1) * 6;
	if (addon > 0 )	width = width + addon;
	else width += 2;
    return width;
}

function FillData(obj)
{
    for(b in obj)
    {
        if (b == "HardwareTypeId")
        {
            obj["HardwareType"] =  Globals.dicGet("LicenceType",obj[b])
            continue;
        }
        if (b == "LicenceTypeId")
        {
            obj["LicenceType"] =  Globals.dicGet("LicenceType",obj[b])
            continue;
        }
        if (b == "ClientId")
        {
            obj["Client"] =  Globals.dicGet("User",obj[b])
            continue;
        }
        if (b == "UserId")
        {
            obj["User"] =  Globals.dicGet("User",obj[b])
            continue;
        }
        if (b == "TypeId")
        {
            obj["Type"] =  Globals.dicGet("ContentType",obj[b])
            continue;
        }
        if (b == "SubTypeId")
        {
            obj["SubType"] =  Globals.dicGet("SubContentType",obj[b])
            continue;
        }
        if (b == "ProviderId")
        {
            obj["Provider"] =  Globals.dicGet("Provider",obj[b])
            continue;
        }
        if (typeof(obj[b])=="object")
            FillData(obj[b]);
        
    }
    return obj;
}

var CRMDefault;