# Source: xml_accessors.js

    /** @file This file contains functions for reading attributes of an xml.
    */

    /** Gets a field for an object from an xml. If frame value is provided, it gives the field at the given.
      * @param {string} xml - The xml containing the annotations
      * @param {int} ind_object - Index to the object to be displayed
      * @param {string} name - name of the field to return.
      * @param {int} frame - frame of interest
    */
    function LMgetObjectField(xml,ind_object, name, frame) {
    	var obj = $(xml).children("annotation").children("object").eq(ind_object);
    	if (obj.length == 0) return "";
    	if (name == 'name' || name == 'deleted' || name == 'attributes' || name == 'occluded'){
    		if (!obj.children(name)) return "";
    		return obj.children(name).text();
    	}
    	if (name == 'x' || name == 'y'){
    		if (frame){
    			var framestamps = (obj.children("polygon").children("t").text()).split(',')
              	for(var ti=0; ti<framestamps.length; ti++) { framestamps[ti] = parseInt(framestamps[ti], 10); }
              	var objectind = framestamps.indexOf(frame);
                if (objectind == -1) return null;
    			var coords = ((obj.children("polygon").children(name).text()).split(';')[objectind]).split(',');
    			for(var ti=0; ti<coords.length; ti++) { coords[ti] = parseInt(coords[ti], 10); }
    			return coords;

    		}
    		else {
    			var pt_elts = obj.children("polygon")[0].getElementsByTagName("pt");
    			if (pt_elts){
    				var coord = Array(pt_elts.length);
    				for (var ii=0; ii < coord.length; ii++){

    					coord[ii] = parseInt(pt_elts[ii].getElementsByTagName(name)[0].firstChild.nodeValue);
    				}
    				return coord;
    			}
    		}
    	}
    	return "";

    }

    /** Returns number of LabelMe objects. */
    function LMnumberOfObjects(xml) {
        return xml.getElementsByTagName('object').length;
    }