var GeneraSymbol = d3.map({
  'transgen': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size / 3) + ',' + 0 +
      'l' + (size / 3) + ',' + -size / 2 +
      'l' + (size / 3) + ',' + size / 2 +
      'l' + (2 * size / 3) + ',' + 0;
  },
  'transrel': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size ) + ',' + 0 +
      'l' + (2 * size / 3) + ',' + 0 +
      'l' + (size / 3) + ',' + size / 2 +
      'l' + (size / 3) + ',' + -size / 2 +
      'l' + (2 * size / 3) + ',' + 0;
  },
  'transact': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size / 3) + ',' + 0 +
      'A' + size / 3 + ',' + size / 3 + ',1,1,1' + size / 3 + ',' + 0 +
      'l' + (2 * size / 3) + ',' + 0;
  },
  'discourse': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size / 3) + ',' + 0 +
      'A' + size / 3 + ',' + size / 3 + ',1,1,0' + size / 3 + ',' + 0 +
      'l' + (2 * size / 3) + ',' + 0;
  },
  'god': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (size * 2) + ',' + 0;
  },
  'world': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + 0 + ',' + size / 2 +
      'l' + 0 + ',' + -size;
  },
  'element': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + 0 + ',' + 0 +
      'l' + 0 + ',' + -size / 2;
  },
  'stone': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + 0 + ',' + 0 +
      'l' + 0 + ',' + size / 2;
  },
  'metal': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + -pad + ',' + -size / 2 +
      'l' + pad * 2 + ',' + size;
  },
  'leaf': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + 0 + ',' + 0 +
      'l' + -pad + ',' + -size / 2;
  },
  'flower': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + 0 + ',' + 0 +
      'l' + pad + ',' + size / 2;
  },
  'seed': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + 0 + ',' + 0 +
      'l' + pad + ',' + -size / 2;
  },
 'tree': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + pad + ',' + -size / 2 +
      'l' + -pad * 2 + ',' + size;
  },
   'shrub': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + 0 + ',' + 0 +
      'l' + -pad + ',' + size / 2;
  },
  'fish': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + 0 + ',' + 0 +
      'l' + 0 + ',' + size / 2 +
      'l' + size / 6 + ',' + -size / 4 + '';
  },
  'exsanguious': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + 0 + ',' + 0 +
      'l' + 0 + ',' + -size / 2 +
      'l' + -size / 6 + ',' + size / 4 + '';
  },
  'beast': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + 0 + ',' + 0 +
      'l' + 0 + ',' + size / 2 +
      'l' + size / 6 + ',' + 0 + '';
  },
  'bird': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + 0 + ',' + 0 +
      'l' + 0 + ',' + -size / 2 +
      'l' + -size / 6 + ',' + 0 + '';
  },
  'partspec': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + 0 + ',' + size/2 +
      'l' + 0 + ',' + -size  +
      'l' + -size / 6 + ',' + size / 4 + '';    
  },
  'partgen': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + 0 + ',' + -size / 2 +
      'l' + 0 + ',' + size +
      'l' + size / 6 + ',' + -size/4 + '';
  },
  'magnitude': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +
		
			'M' + 0 + ',' + 0 +
			'l' + 0 + ',' + (-size / 3) +
			'a'+size/5+' '+size/5+' 0 1 0 ' + (-size/5 * 2) +' '+ 0 +''; 

  },
  'space': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

			'M' + 0 + ',' + 0 +
			'l' + 0 + ',' + (size / 3) +
			'a'+size/5+' '+size/5+' 0 1 0 ' + (size/5 * 2) +' '+ 0 +''; 

  },
  'measure': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

			'M' + 0 + ',' + (size/3) +
			'l' + 0 + ',' + (-size / 3 * 2) +
			'a'+size/5+' '+size/5+' 0 1 0 ' + (-size/5 * 2) +' '+ 0 +''; 

  },
  'power': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + -size/4*.707 + ',' + (-size/4 + -size/4*.707) +
	  'a' + (size/4) +' '+ (size/4)+' 0 1 0 ' + (size/4*1.414) +' '+ 0 +'';
  },
  'habit': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M' + -size/4*.707 + ',' + (size/4 + size/4*.707) +
      'a' + (size/4) +' '+ (size/4)+' 0 1 1 ' + (size/4*1.414) +' '+ 0 +'';

  },
  'manner': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M ' + -size/4 +' '+ 0+  
      ' C '+-size/2+' '+-size/2+ ' '+size/2 +' '+ -size/2+ ' '+size/4 +' '+ 0;
  },
  'sensible': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M ' + -size/4 +' '+ 0+  
      ' C '+-size/2+' '+size/2+ ' '+size/2 +' '+ size/2+ ' '+size/4 +' '+ 0;
  },
  'disease': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

    'M ' + -size/4 +' '+ 0+  
    ' C '+-size/2+' '+size/2+ ' '+size/2 +' '+ size/2+ ' '+size/4 +' '+ 0+
    'M ' + -size/4 +' '+ 0+  
    ' C '+-size/2+' '+-size/2+ ' '+size/2 +' '+ -size/2+ ' '+size/4 +' '+ 0;
  },
  'spiritact': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M ' + 0 +' '+ 0+  
      ' A '+size/4+' '+size/4+ ' 0 1 0 '+-size/6 +' '+ -size/3;
  },
  'corporact': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M ' + 0 +' '+ 0+  
      ' A '+size/4+' '+size/4+ ' 0 1 0 '+size/6 +' '+ size/3;
  },
  'motionact': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M ' + 0 +' '+ 0+  
      ' A '+size/4+' '+size/4+ ' 0 1 1 '+size/6 +' '+ -size/3;
  },
  'operationact': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M ' + 0 +' '+ 0+  
      ' A '+size/4+' '+size/4+ ' 0 1 1 '+-size/6 +' '+ size/3;
  },
  'econ': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M ' + -size/6 +' '+ -size/3+  
    	' A '+size/4+' '+size/4+ ' 0 1 1 0 0'+ 
      ' A '+size/4+' '+size/4+ ' 0 1 1 '+-size/6 +' '+ size/3;
  },
  'posses': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M ' + size/6 +' '+ -size/3+  
    	' A '+size/4+' '+size/4+ ' 0 1 0 0 0'+ 
      ' A '+size/4+' '+size/4+ ' 0 1 0 '+size/6 +' '+ size/3;
  },
  'provis': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M ' + -size/6 +' '+ -size/3+  
    	' A '+size/4+' '+size/4+ ' 0 1 1 0 0'+ 
      ' A '+size/4+' '+size/4+ ' 0 1 0 '+size/6 +' '+ size/3;
  },
  'civil': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M ' + size/6 +' '+ -size/3+  
    	' A '+size/4+' '+size/4+ ' 0 1 0 0 0'+ 
      ' A '+size/4+' '+size/4+ ' 0 1 1 '+-size/6 +' '+ size/3;
  },
  'judicial': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M ' + 0 +' '+ 0+  
    	' A '+size/4+' '+size/4+' 0 1 0 '+0+' '+ -size/2 +' '+
      ' A '+size/4+' '+size/4+' 0 1 0 '+0+' '+ 0;
  },
  'military': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'l' + (2 * size) + ',' + 0 + '' +

      'M ' + 0 +' '+ 0+  
    	' A '+size/4+' '+size/4+' 0 1 0 '+0+' '+ size/2 +' '+
      ' A '+size/4+' '+size/4+' 0 1 0 '+0+' '+ 0;
  },
  'naval': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'L' + -size/3 + ',' + 0 +
      
    	' A '+size/4+' '+size/4+' 0 1 0 '+0+' '+ -size/2 +' '+
      ' A '+size/4+' '+size/4+' 0 1 0 '+size/3+' '+ 0 +
    	'L' + size + ' ' + 0;
  },
  'eccles': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      'L' + -size/3 + ',' + 0 +
      
    	' A '+size/4+' '+size/4+' 0 1 1 '+0+' '+ size/2 +' '+
      ' A '+size/4+' '+size/4+' 0 1 1 '+size/3+' '+ 0 +
    	'L' + size + ' ' + 0;
  },
});

var DifferenceSymbol = d3.map({
  '1': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      '	l' + (size / 2) + ',' + (-size / 2) + '';
  },
    '2': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      '	l' + 0 + ',' + (-size / 2) + '';
  },
    '3': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      '	l' + (-size / 2) + ',' + (-size / 2) + '';
  },
    '4': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      '	l' + (-size / 2) + ',' + (size / 2) + '';
  },
    '5': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      '	l' + 0 + ',' + (size / 2) + '';
  },
    '6': function(size) {
    size = Math.sqrt(size);
    var r = size / 8;
    return 'M' + (-size) + ',' + 0 +
      '	l' + (size / 2) + ',' + (size / 2) + '';
  },
    '7': function(size) {
    size = Math.sqrt(size);
    var r = size / 8;
    return 'M' + (-size/2) + ',' + (-size / 2) +
      '	l' + (-size) + ',' + (size) + '';
  },
    '8': function(size) {
    size = Math.sqrt(size);
    var r = size / 8;
    return 'M' + (-size) + ',' + (-size/2) +
      '	l' + 0 + ',' + (size) + '';
  },
    '9': function(size) {
    size = Math.sqrt(size);
    var r = size / 8;
    return 'M' + (-3 * size/2) + ',' + (-size/2) +
      '	l' + (size) + ',' + (size) + '';
  },  '0': function(size) {
    return '';
  }
});

var SpeciesSymbol = d3.map({
  '1': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (size) + ',' + 0 +
      '	l' + (-size / 2) + ',' + (-size / 2) + '';
  },
    '2': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (size) + ',' + 0 +
      '	l' + 0 + ',' + (-size / 2) + '';
  },
    '3': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (size) + ',' + 0 +
      '	l' + (size / 2) + ',' + (-size / 2) + '';
  },
    '4': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (size) + ',' + 0 +
      '	l' + (size / 2) + ',' + (size / 2) + '';
  },
    '5': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (size) + ',' + 0 +
      '	l' + 0 + ',' + (size / 2) + '';
  },
    '6': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (size) + ',' + 0 +
      '	l' + (-size / 2) + ',' + (size / 2) + '';
  },
    '7': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (size/2) + ',' + (-size/2) +
      '	l' + (size) + ',' + (size) + '';
  },
    '8': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (size) + ',' + (-size/2) +
      '	l' + 0 + ',' + (size) + '';
  },
    '9': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return 'M' + (3*size/2) + ',' + (-size/2) +
      '	l' + (-size) + ',' + (size) + '';
  },
  '0': function(size) {
    size = Math.sqrt(size);
    var pad = size / 5;
    var r = size / 8;
    return '';
  }
});

function WilkinsSymbol(type, size) {
  size = size || 64;
  var symboltype = type.split('-');
  	var genera = symboltype[0];
    var diff = symboltype[1];
		if (diff == null){
    		diff = '0';
    }
    var spec = symboltype[2];
		if (spec == null){
    		spec = '0';
    }
    try{
        var constructed_symbol = GeneraSymbol.get(genera)(size) +
                                    DifferenceSymbol.get(diff)(size) +
                                    SpeciesSymbol.get(spec)(size);
        return constructed_symbol;
    }
    catch (e) {
        return ""
    }
}