// JScript File
function handleQBFCSkip(data, supports) {
    if (data == null) {
        return "";
    }
    var i;
    var str = ""
    if (data.elements != null) {
        for (i=0; i<data.elements.length; i++) {
            str += writeQBFCOSR(data.elements[i], supports);
        }
    }
    return str;
}

function handleQBFCAttrs(data, supports) {
    if (data == null) {
        return "";
    }
    var str = ""
    if (data.attributes != null) {
        str += '<b:treelistchildren>\n';
        var i;
        for (i=0; i<data.attributes.length; i++) {
            str += writeQBFCOSR(data.attributes[i],supports);
        }
        str += '</b:treelistchildren>\n';
    }
    //alert("attrs=" + str);
    return str;
}

function handleQBFCElements(data, supports) {
    if (data == null) {
        return "";
    }
  var str = "";
  //alert("processing elements for " + data.xmlName + " list len =" + data.elements.length);
  if (typeof(data.elements) != 'undefined' && data.elements != null) {
      str += '<b:treelistchildren>\n';
      var i;
      for (i=0; i<data.elements.length; i++) {
          //alert("processing elem: " + data.elements[i].xmlName);
          str += writeQBFCOSR(data.elements[i],supports);
      }
      str += '</b:treelistchildren>\n';
  }
  //alert("Element list: " + str);
  return str;
}

function handleQBFCOR(data, supports) {
    if (data == null) {
        return "";
    }
  var str = ""
  str += '<b:treelistrow b:behavior="treelistNoRowSelect">\n';
  str += '<b:treelistcell>' + data.fcName + '</b:treelistcell>\n';
  str += '<b:treelistcell>' + getQBFCTypeStr(data) + '</b:treelistcell>\n';
  str += '<b:treelistcell>' + getMaxDTStr(data) + '</b:treelistcell>\n';
  str += '<b:treelistcell>' + getMaxOEStr(data) + '</b:treelistcell>\n'; //MAX(qboe)
  str += '<b:treelistcell>' + getImplementationStr(data, supports) + '</b:treelistcell>\n'; //Imp
  str += '<b:treelistcell>' + (data.required) ? 'Y' : '' + '</b:treelistcell>\n';
  //alert("OR before lists: " + str);
  str += handleQBFCAttrs(data, supports);
  str += handleQBFCElements(data, supports);
  str += '</b:treelistrow>\n';
  return str; 
}

function getQBFCTypeStr(data) {
    var str = '';
    if (data.fcType != "nothing") {
        if (data.fcTypeHtml) {
         
            str += '<a b:behavior="populateDetails" b:url="' + datadir + 'html/' + data.fcTypeHtml + '">';
        }
        str += data.fcType;
        if (data.fcTypeHtml) {
            str += '</a>';
        }
    }
    return str;
}
function handleQBFCAggregate(data, supports) {
    if (data == null) {
        return "";
    }
    var str = "";
    str += '<b:treelistrow b:behavior="treelistNoRowSelect" ' + getFieldMapAttrs(data) + '>\n';
    str += '<b:treelistcell>';
    if (data.fcNameHtml) {
        str += '<a b:behavior="populateDetails" b:url="' + datadir + 'html/' + data.fcNameHtml + '">';
    }
    str += data.fcName;
    if (data.fcNameHtml) {
        str+= '</a>';
    }
    str += '</b:treelistcell>\n';
    str += '<b:treelistcell>' + getQBFCTypeStr(data) + '</b:treelistcell>\n';
    str += '<b:treelistcell>' + getMaxDTStr(data) + '</b:treelistcell>\n';
    str += '<b:treelistcell>' + getMaxOEStr(data) + '</b:treelistcell>\n';
    str += '<b:treelistcell>' + getImplementationStr(data, supports) + '</b:treelistcell>\n';
    str += '<b:treelistcell>' + ((data.required) ? 'Y' : '') + '</b:treelistcell>\n';
    if (data.fcListOf != null) {
        str += '<b:treelistchildren>\n';
        str += '<b:treelistrow b:behavior="treelistNoRowSelect">\n';
        str += '<b:treelistcell>(List of ' + data.fcListOf.fcType + ' Objects)</b:treelistcell>\n';
        str += '</b:treelistrow>\n';
        str += '</b:treelistchildren>\n';
    }
    //alert("Agg before lists: " + str);
    str += handleQBFCAttrs(data, supports);
    str += handleQBFCElements(data, supports);
    str += '</b:treelistrow>\n';
    return str;
}

function handleQBFCElement(data, supports)
{
    if (data == null) {
        return "";
    }
    var str = "";
    str += '<b:treelistrow b:behavior="treelistNoRowSelect" ' + getFieldMapAttrs(data) + '>\n';
    str += '<b:treelistcell>'
    str += '<a b:behavior="populateDetails" b:url="' + datadir + 'html/' + data.fcNameHtml + '">' + data.fcName + '</a>';
    str += writeQBXMLAttributes(data, supports);
    str += '</b:treelistcell>';
    str += '<b:treelistcell>' + getQBFCTypeStr(data) + '</b:treelistcell>\n';
    str += '<b:treelistcell>' + getMaxDTStr(data) + '</b:treelistcell>\n';
    str += '<b:treelistcell>' + getMaxOEStr(data) + '</b:treelistcell>\n';
    str += '<b:treelistcell>' + getImplementationStr(data, supports) + '</b:treelistcell>\n';
    str += '<b:treelistcell>' + ((data.required) ? 'Y' : '') + '</b:treelistcell>\n';
    str += '</b:treelistrow>\n';
    //alert("element = " + str);
    return str;
}

function writeQBFCOSR(data,parentSupports) {
  var colspan;
  var str = ""
    if (data == null) {
        return "";
    }
  var supports = updateSupports(parentSupports, data);
  //alert("in writeQBFCOSR: US=" + supports.US + " CA=" + supports.CA + " UK=" + supports.UK + " OE=" + supports.OE);
  if (!supportsCheckedEditions(supports)) {
      //alert("doesn't support checked editions, bailing");
      return str;
  }
  if (!checkSDKVers(data)) {
      //alert("doesn't support SDK version, bailing");
      return str;
  }
  if (!data.fcType) {
      //alert("no fcType, bailing out");
      return str;
  } else if (data.fcType == "skip") {
      str += handleQBFCSkip(data, supports);
      //alert("skip, doc = " + doc);
  } else if (data.xmlType == "OR") {
      str += handleQBFCOR(data, supports);
      //alert("OR, doc = " + doc);
  } else if (data.xmlType == "Aggregate" || data.xmlType == "List" || data.xmlType == "skip") {
      str += handleQBFCAggregate(data, supports);
      //alert("Agg, doc = " + str);
  } else {
      str += handleQBFCElement(data, supports);
      //alert("Elem, doc = " + doc);
  }
  return str;
}

function renderQBFCOSR(data) {
    rowcount = 0;
    maxSDK = _vars['maxSDKVersion'][0];
    var supports = {US:true, CA:true, UK:true, OE:true};
    var content = writeHeader("Required");
    content += writeQBFCOSR(data, supports);
    content += '</b:treelist>\n';
    return content;
}
