var START_TAG = '/*JSON';
var END_TAG   = 'JSON*/';









function removeJSONTags(json) {
	var startIndex;
	var endIndex;

    startIndex = json.indexOf(START_TAG);
    if (startIndex >= 0) {
        endIndex = json.lastIndexOf(END_TAG);
        if (endIndex >= 0) {
            json = json.substring(startIndex + START_TAG.length, endIndex);
        }
    }
    
    return json;
}

function addJSONTags(json) {
    startIndex = json.indexOf(START_TAG);
    endIndex = json.lastIndexOf(END_TAG);

	if ( (startIndex >= 0) || (endIndex >= 0) ) {
		return json;
	} else {
		json = START_TAG + json + END_TAG;
	}

	return json;
}

//===================================
function printOpenservices() {
    var openservices = getServiceData();
    alert("printOpenservices() openservices.length=" + openservices.length);
    arrdata = "";
    for (i = 0; i <= openservices.length; i++) {
      arrdata = arrdata + i + " : " + openservices[i] + "\n";
    }
    alert(arrdata);
}
			
function DataToPass(data1, data2) {
    this.id = data1;
    this.arr = data2;
}

function getDataToPass(openservices) {
    return new DataToPass('services', openservices);
}

function sendData(openservices) {
    //alert('Start sendData');
    var data = getDataToPass(openservices);
    var dataAsJSON = JSON.stringify(data);

    //alert('data as JSON:  ' + dataAsJSON);
    dataAsJSON = addJSONTags(dataAsJSON);
    //alert('data as JSON w/tags:  ' + dataAsJSON);

    var xhrArgs = {
        url: "/wtcom/jsonrpc",
        handleAs: "json",
        content: {json:dataAsJSON}
    };
    dojo.xhrPost(xhrArgs);
    //alert('End sendData');
}
			
function getServiceData() {
  //alert('Start getServiceData');
  var openservices = [];
	dojo.xhrGet( {
        url: "/wtcom/jsonrpc", 
  			handleAs: "text",
        sync: true,
        preventCache: true,
  			load: function(responseObject, ioArgs) { 
  			  if (responseObject != null) {
  			    //alert(responseObject);
  			    jsonobj = removeJSONTags(responseObject);
  			    //alert(jsonobj);
  			    var value = eval( "(" + jsonobj + ")" );
  			    openservices = value.arr;
  			  } else {
  			    //alert("No JSON data returned.");
  			  }
  			  return responseObject;
        }
	});
          
  //alert('End getServiceData');
  return openservices;
}

			function addOpenService(data) {
        var openservices = getServiceData();
			  found = 0;
			  firstnull = -1;
			  for (i = 0; i <= openservices.length; i++) {
			    if ( (openservices[i] == null) && (firstnull == -1) ) {
			      firstnull = i;
			    }
			    if (openservices[i] == data) {
			      found = 1;
			      break;
			    }
			  }
			  if (found == 0) {
			    if (openservices.length == 0) {
			      openservices[0]=data;
			    } else if (firstnull >= 0) {
			      openservices[firstnull]=data;
			    } else {
			      openservices[openservices.length]=data;
			    }
			  }
        sendData(openservices);
			}
			
			function removeOpenService(data) {
        var openservices = getServiceData();
			  for (i = 0; i <= openservices.length; i++) {
			    if (openservices[i] == data) {
			      openservices[i] = null;
			      break;
			    }
			  }
        sendData(openservices);
			}


