$.fn.replaceWithAndReturnNew = function(html){
   var div = document.createElement('div');
   var replaced = this[0];
   replaced.parentNode.replaceChild(div, replaced);
   div.innerHTML = html;
   var replacer = div.firstChild;
   div.parentNode.replaceChild(replacer, div);
   return $(replacer);
};

var DOMAIN = "http://www.mvagusta.net/";

var MVAGUSTA = {
   jQuery : $,
   
   settings : {
      darkButtonOn : {
         'background-color' : '#555555',
         'cursor': 'pointer'
      },
      darkButton : {
         'background-color' : '#333333'
      }
   },

   init : function () {
      this.initializeLayout();
   },

   preloadHoverImages : function() {
      var preload = new Array();
      $(".imgHover").each(function() {
         s = $(this).attr("src").replace(/\.(.+)$/i, "on.$1");
         preload.push(s)
      });
      var img = document.createElement('img');
      $(img).bind('load', function() {
         if(preload[0]) {
            this.src = preload.shift();
         }
      }).trigger('load');
   },

   imageHoverActivate : function (objectName) {
      var s = $(objectName).attr("src").replace(/\.(.+)$/i, "on.$1");
      $(objectName).attr("src", s);
   },

   imageHoverDeactivate : function (objectName) {
      var s = $(objectName).attr("src").replace(/on\.(.+)$/i, ".$1");
      $(objectName).attr("src", s);
   },

   initializeLayout : function() {
      var MVAGUSTA = this,
         $ = this.jQuery,
         settings = this.settings;

      $('.headerMenuItems li').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
         $(this).css('background', 'url("/images/menubackground.jpg")');
      }).mouseleave(function() {
         $(this).css('background', '');
      }).click(function() {
         location.href = $("a", this).attr('href');
      });

      $('#login').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
         $(this).css('color', '#f8f8f8');
      }).mouseleave(function() {
         $(this).css('color', '#b0b0b0');
      }).click(function() {
         // Setup the chimney
         $('#loginChimney').width($(this).width() + 27);

         $('#loginBlock').show();
         return false;
      });

      $('.pagingNumber').unbind().mouseenter(function() {
         $(this).css('background-color', '#e5e5e5');
         $(this).css('cursor', 'pointer');
      }).mouseleave(function() {
         $(this).css('background-color', '');
      }).click(function() {
         var pagingName = $(this).parent().attr('id');
         var page = this.id;
         pagingLoad(pagingName, page);
         return false;
      });

      $('.pagingNumberOn').unbind().mouseenter(function() {
         $(this).css('background-color', '#e5e5e5');
         $(this).css('cursor', 'pointer');
      }).mouseleave(function() {
         $(this).css('background-color', '#cccccc');
      }).click(function() {
         var pagingName = $(this).parent().attr('id');
         var page = this.id;
         pagingLoad(pagingName, page);
         return false;
      });

      $('.forumResultRow').unbind().mouseenter(function() {
         $(this).css('background-color', '#fffddc');
         $(this).css('cursor', 'pointer');


         var offsets = $(this).offset();
         var width = 200;

         var content = $('#threadData' + this.id).html();
         popupShow(offsets.top - 1, offsets.left - width - 24, width, content, "right");
      }).mouseleave(function() {
         $(this).css('background-color', '');
         popupHide();
      }).click(function() {
         var link = $('a', this).attr('href');
         location.href = link;
      });

      $('.featureImageDot').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
         $('#' + this.id + ' img').attr('src', "/images/dotwhite.gif");
      }).mouseleave(function() {
         if ($('#' + this.id + ' img').attr('src').indexOf("dotred") < 0)
            $('#' + this.id + ' img').attr('src', "/images/dotgray.gif");
      }).click(function() {
         var id = this.id.replace(/featureImageDot/,'');
         FEATUREIMAGEMANUALSELECT = true;
         featureImagesLoad(id);
         return false;
      });
   },
   initializeForum : function() {
      $('.forumAddToFAQ').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
         $(this).css('text-decoration', 'underline');
      }).mouseleave(function() {
         $(this).css('text-decoration', 'none');
      }).click(function() {
         if (confirm("Suggest this thread to the MVAgusta.net FAQ?")) {
            faqSuggest(this.id);
         }
         return false;
      });

      
   },
   initializeFAQ : function() {
      $('.faqSearchResult').unbind().mouseenter(function() {
         $(this).css('background-color', '#fffddc');
         $(this).css('cursor', 'pointer');
      }).mouseleave(function() {
         $(this).css('background-color', '');
      }).click(function() {
         faqLoad(this.id);
         return false;
      });

      $('#faqQuery').keypress(function(e) {
         if (e.which == 13)
            faqSearch();
      });

      $('.faqCategorySelect').unbind().mouseenter(function() {
         $(this).css('background-color', '#e6e6e6');
         $(this).css('cursor', 'pointer');
      }).mouseleave(function() {
         $(this).css('background-color', '');
      }).click(function() {
         faqCategoryLoad(this.id);
         return false;
      });

   }
};

$(document).ready(function() {
   MVAGUSTA.init();

});

var ajaxObj = [];

function createRequestObject() {
    var ajaxObj;
    var browser = navigator.appName;
    if(browser.indexOf('Microsoft') >= 0)
        ajaxObj = new ActiveXObject("Microsoft.XMLHTTP");
    else
        ajaxObj = new XMLHttpRequest();

    return ajaxObj;
}

function zeroPad(num, count) {
   var numZeropad = num + '';

   while(numZeropad.length < count)
      numZeropad = "0" + numZeropad;

   return numZeropad;
}

function disableSelect(objectName) {
   if ($.browser.mozilla){//Firefox
      $('#' + objectName).css('MozUserSelect','none');
   } else if($.browser.msie){//IE
       $('#' + objectName).bind('selectstart',function(){return false;});
   }
}

function removeApos(string) {
   return string.replace(/'/g, "");
}

function loading() {
   show("loading");
}

function unloading() {
   hide("loading");
}

function getSalt() {
   return Math.floor(Math.random()*1000);
}

function evalJSON(responseText) {
   var json = eval('(' + responseText + ')');

   return json;
}

function test(text) {
   text = document.getElementById("test").value + "\n" +  text;
   document.getElementById("test").value = text;
}

function fadeRefresh(objectName, objectContent) {
   $('#' + objectName).animate({
      opacity: 0
   },function() {
      $(this).html(objectContent);

      MVAGUSTA.initializeLayout();

      $(this).animate({
         opacity: 100
      });
   });
}

function fadeOut(objectName) {
   $('#' + objectName).animate({
      opacity: 0
   }, 2000);
}

function fadeIn(objectName) {
   $('#' + objectName).animate({
      opacity: 100
   }, 2000);
}

function trim(str, chars) {
   return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
   chars = chars || "\\s";
   return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
   chars = chars || "\\s";
   return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function setLoading(objectName) {
   $('#' + objectName).html('<center><img src="/images/contentloading.gif"></center>');
}

function setLoadingSmall(objectName) {
   $('#' + objectName).html('<center><img src="/images/loading.gif"></center>');
}

//----------------------------
// Login
function loginCancel() {
   $('#loginBlock').hide();
}

//----------------------------
// Paging
function pagingLoad(name, page) {
   setLoading(name + 'Block');

   var salt = getSalt();
   $.get('/ajax_pageload.php', { salt : salt, name : name, page : page }, function(data) {
      var json = evalJSON(data);
      $('#' + name + 'Block').html(unescape(json.content));
      MVAGUSTA.initializeLayout();
   });
}

//----------------------------
// FAQ
function faqSearch() {
   var query = escape(trim($('#faqQuery').val()));

   if (query.length < 3) {
      confirm("Query must be at least 3 characters");
      return;
   }

   setLoadingSmall('faqSearchBlock');

   var salt = getSalt();
   $.get('ajax_faqquery.php', { salt : salt, query : query }, function(data) {
      var json = evalJSON(data);
      $('#faqSearchBlock').html(json.response);
      MVAGUSTA.initializeFAQ();
   });

}

function faqSearchReset() {
   setLoadingSmall('faqSearchBlock');
   var query = '';

   var salt = getSalt();
   $.get('ajax_faqquery.php', { salt : salt, query : query }, function(data) {
      var json = evalJSON(data);
      $('#faqSearchBlock').html(json.response);
      MVAGUSTA.initializeFAQ();
   });
}

function faqLoad(faqid) {
   setLoading('faqContent');
   var query = '';

   var salt = getSalt();
   $.get('ajax_faqload.php', { salt : salt, faqid : faqid }, function(data) {
      var json = evalJSON(data);
      $('#faqContent').html(json.response);
      MVAGUSTA.initializeFAQ();
   });
}

function faqCategories() {
   faqCategoryLoad(0);
}

function faqCategoryLoad(categoryid) {
   setLoading('faqContent');
   var salt = getSalt();
   $.get('ajax_faqcategoryload.php', { salt : salt, categoryid : categoryid }, function(data) {
      var json = evalJSON(data);
      $('#faqContent').html(json.response);
      MVAGUSTA.initializeFAQ();
   });
}

function faqSuggest(threadid) {
   var salt = getSalt();

   $.get('/ajax_faqsuggest.php', { salt : salt, threadid : threadid }, function(data) {
      var json = evalJSON(data);
      var check = parseInt(json.check);
      if (check)
         confirm("Thank you for suggesting this thread.");
      else
         confirm("An error occured while suggesting this thread to the FAQ.");
   });
}

//----------------------------
// Feature images
var FEATUREIMAGES = 0;
var FEATUREIMAGECURRENT = 1;
var FEATUREIMAGEMANUALSELECT = false;
var FEATUREIMAGESLOADING = false;

function initializeFeatureImages(featureCount) {
   FEATUREIMAGES = featureCount;


   // Place in the current caption
   //$('#featureGalleryBG').animate({top: 0},700,function() {

      $('#featureImageCaption1').animate({left: 10},600,function() {
         //$('#featureGallery').animate({opacity: 1.0},2000);
      });
   //});


   if (featureCount > 1) {
      setTimeout("featureImagesNext()", 8000);

   }
}

function featureImagesNext() {
   if (!FEATUREIMAGES || FEATUREIMAGEMANUALSELECT)
      return;

   next = FEATUREIMAGECURRENT + 1;

   if (next > FEATUREIMAGES)
      next = 1;

   featureImagesLoad(next);
   setTimeout("featureImagesNext()", 8000);
}

function featureImagesLoad(next) {
   if (FEATUREIMAGESLOADING)
      return;

   FEATUREIMAGESLOADING = true;
   var current = 'featureImage' + FEATUREIMAGECURRENT;
   var currentCaption = 'featureImageCaption' + FEATUREIMAGECURRENT;
   var currentDot = 'featureImageDot' + FEATUREIMAGECURRENT;

   FEATUREIMAGECURRENT = next;

   var next = 'featureImage' + FEATUREIMAGECURRENT;
   var nextCaption = 'featureImageCaption' + FEATUREIMAGECURRENT;
   var nextDot = 'featureImageDot' + FEATUREIMAGECURRENT;

   // Update the dot
   $('#' + currentDot + ' img').attr('src', "/images/dotgray.gif");
   $('#' + nextDot + ' img').attr('src', "/images/dotred.gif");

   $('#' + current).removeClass('active').addClass('lastActive');

   // Remove the old caption
   $('#' + currentCaption).animate({left: -500}, 600, function() {

      $('#' + next).show().css({opacity: 0.0}).addClass('active')
         .animate({opacity: 1.0}, 1000, function() {

            // Place in the new caption
            $('#' + nextCaption).animate({left: 10},600);

            $('#' + current).removeClass('active lastActive').hide();
            FEATUREIMAGESLOADING = false;
         });
   });
}

//----------------------------
// Popup dialogue
function popupShow(top, left, width, content, arrowdir) {
   $('#popupBox').unbind();
   $('#popupBox').css('top', top + 'px');
   $('#popupBox').css('left', left + 'px');
   $('#popupBox').css('width', width + 'px');
   $('#popupBox').html(content);

   if (arrowdir == 'left' || arrowdir == 'right')
      var arrow = "LR";
   else
      var arrow = "TB";

   $('#popupBoxArrow' + arrow).css('top', (top + 2) + 'px');
   $('#popupBoxArrow' + arrow).css('left', (left + width - 1 + 6 + 2) + 'px');

   $('#popupBoxArrow' + arrow).html('<img src="/images/popupboxarrow' + arrowdir + '.gif">');
   $('#popupBoxArrow' + arrow).show();
   $('#popupBox').show();
}

function popupHide() {
   $('#popupBox').hide();
   $('#popupBoxArrowLR').hide();
   $('#popupBoxArrowTB').hide();
}

//----------------------------
// About

var ABOUTIMAGES = 0;
var ABOUTIMAGECURRENT = 1;

function initializeAboutImages(aboutCount) {
   ABOUTIMAGES = aboutCount;

   setTimeout("aboutImagesNext()", 5000);
}

function aboutImagesNext() {
   if (!ABOUTIMAGES)
      return;

   var current = 'aboutImage' + ABOUTIMAGECURRENT;

   ABOUTIMAGECURRENT++;

   if (ABOUTIMAGECURRENT > ABOUTIMAGES)
      ABOUTIMAGECURRENT = 1;

   var next = 'aboutImage' + ABOUTIMAGECURRENT;


   $('#' + current).removeClass('active').addClass('lastActive');

   // Remove the old caption
   $('#' + next).css({opacity: 0.0}).addClass('active')
      .animate({opacity: 1.0}, 1000, function() {

         $('#' + current).removeClass('active lastActive');
      });

   setTimeout("aboutImagesNext()", 8000);

}



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=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=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;
 
   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(string) {
   string = (string+'').replace(/\r\n/g, "\n").replace(/\r/g, "\n");
 
   var utftext = "";
   var start, end;
   var 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) + String.fromCharCode((c1 & 63) | 128);
      } else {
         enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
      }
      if (enc != null) {
         if (end > start) {
            utftext += string.substring(start, end);
         }
         utftext += enc;
         start = end = n+1;
      }
   }
 
   if (end > start) {
      utftext += string.substring(start, string.length);
   }
 
   return utftext;
} 

