function obxSegmentsWithLineWrap(xmlMessage, linewrap){
  var linewrappedArray= new Array();
  var obxSegmentTemplate = xmlMessage['OBX'][0].copy();
  var logString = '[START] function obxSegmentsWithLineWrap; ';

//build array where each index value is line
// in report no longer than linewrap limit value
  for each (seg in xmlMessage.children()) {
    if (seg.name().toString() == "OBX") {
      var obx5 = seg['OBX.5']['OBX.5.1'].toString();
      while(obx5.length > linewrap){
        var index = obx5.lastIndexOf(' ', linewrap);
        var obx5Substring = obx5.substring(0,index);
        obx5 = obx5.substring(index+1);
        linewrappedArray.push(obx5Substring);
      }
      linewrappedArray.push(obx5);
    }
  }

  logString += 'OBX.5.1 value put in array (count=' + linewrappedArray.length + '); ';

//delete all but first OBX segment
  var obxCount = 0;
  for each (seg in xmlMessage.children()) {
    if (seg.name().toString() == "OBX") {
      obxCount++;
    }
  }

  for(i=1;i     delete xmlMessage['OBX'][1];
  }

  logString += 'delete old OBX segments (count=' + obxCount + '); ';

//build new OBX segments from array
  var newObxIterator = 0;
  for(i=0;i     if(i!=0){
      createSegmentAfter('OBX', xmlMessage['OBX'][newObxIterator-1]);
      xmlMessage['OBX'][newObxIterator] = obxSegmentTemplate;
    }

  //  appendchannelMapStatusMessage('OBX[' + newObxIterator + ']=' + tmp['OBX'][newObxIterator].toString()
    xmlMessage['OBX'][newObxIterator]['OBX.1']['OBX.1.1'] = newObxIterator+1;
    xmlMessage['OBX'][newObxIterator]['OBX.5']['OBX.5.1'] = linewrappedArray[i];
  //  appendchannelMapStatusMessage('OBX[' + newObxIterator + ']=' + tmp['OBX'][newObxIterator].toString());
    newObxIterator++;
  }

  logString += 'rebuilt OBX segments with linewrap (new segment count =' + newObxIterator + ')';

//write log to channel map
  channelMap.put('LOG-function obxSegmentsWithLineWrap', logString);

//return new xml representation of message
  return xmlMessage;
}