var states = new Array();
var badge_texts = new Array();
var lastTarget = null;

var STATE_NAME    = 0;
var STATE_CONTACT = 1;
var STATE_IRC     = 2;
var STATE_LOGO    = 3;
var STATE_WIKI    = 4;
var STATE_LIST    = 5;
var STATE_FORUM   = 6;
var STATE_WEBSITE = 7;
var STATE_APPROVE = 8;

// This links the info below with the actual ids on the page
// which will display these items.
badge_texts[STATE_IRC] = 'irc';
badge_texts[STATE_WIKI] = 'wikipage';
badge_texts[STATE_LIST] = 'maillist';
badge_texts[STATE_FORUM] = 'forums';
badge_texts[STATE_WEBSITE] = 'website';

var image_root = '';
//var image_root = 'media/';

states['CA'] = [ 'California', '', '#ubuntu-us-ca', 'ca.png',
  'https://wiki.ubuntu.com/CaliforniaTeam',
  'https://lists.ubuntu.com/mailman/listinfo/ubuntu-us-ca',
  'http://forums.ubuntu.com/foo',
  'http://www.ubuntu-california.com' ];
states['MA'] = [ 'Massachusetts', '', '#ubuntu-us-ma', 'ma.png',
  'https://wiki.ubuntu.com/MassachusettsTeam',
  'https://lists.ubuntu.com/mailman/listinfo/ubuntu-us-ma',
  'http://forums.ubuntu.com/foo',
  'http://www.ubuntu-massachusetts.com' ];

states['NY'] = [ 'New York State', '', '#ubuntu-us-ny', 'ny.png'];
states['VT'] = [ 'Vermont', '', '#ubuntu-us-', 'vt.png'];
states['NH'] = [ 'New Hampshire', '', '#ubuntu-us-', 'nh.png'];
states['ME'] = [ 'Maine', '', '#ubuntu-us-', 'me.png'];
states['CT'] = [ 'Connecticut', '', '#ubuntu-us-', 'ct.png'];
states['RI'] = [ 'Rhode Island', '', '#ubuntu-us-', 'ri.png'];
states['PA'] = [ 'Pennsylvania', '', '#ubuntu-us-', 'pa.png'];
states['NJ'] = [ 'New Jersey', '', '#ubuntu-us-', 'nj.png'];
states['DE'] = [ 'Delaware', '', '#ubuntu-us-', 'de.png'];
states['MD'] = [ 'Maryland', '', '#ubuntu-us-', 'md.png'];
states['DC'] = [ 'Washington DC', '', '#ubuntu-us-', 'dc.png'];
states['VA'] = [ 'Virginia', '', '#ubuntu-us-', 'va.png'];
states['NV'] = [ 'Nevada', '', '#ubuntu-us-', 'nv.png'];
states['OR'] = [ 'Oregon', '', '#ubuntu-us-', 'or.png'];
states['WA'] = [ 'Washington State', '', '#ubuntu-us-', 'wa.png'];
states['AZ'] = [ 'Arizona', '', '#ubuntu-us-', 'az.png'];
states['KS'] = [ 'Kanasas', '', '#ubuntu-us-', 'ks.png'];
states['OK'] = [ 'Oklahoma', '', '#ubuntu-us-', 'ok.png'];
states['AR'] = [ 'Arkansas', '', '#ubuntu-us-', 'ar.png'];
states['MO'] = [ 'Missouri', '', '#ubuntu-us-', 'mo.png'];
states['CO'] = [ 'Colorado', '', '#ubuntu-us-', 'co.png'];
states['TX'] = [ 'Texas', '', '#ubuntu-us-', 'tx.png'];
states['NM'] = [ 'New Mexico', '', '#ubuntu-us-', 'nm.png'];
states['UT'] = [ 'Utah', '', '#ubuntu-us-', 'ut.png'];
states['TN'] = [ 'Tennessee', '', '#ubuntu-us-', 'tn.png'];
states['MS'] = [ 'Mississippi', '', '#ubuntu-us-', 'ms.png'];
states['AL'] = [ 'Alabama', '', '#ubuntu-us-', 'al.png'];
states['GA'] = [ 'Georgia', '', '#ubuntu-us-', 'ga.png'];
states['SC'] = [ 'South Carolina', '', '#ubuntu-us-', 'sc.png'];
states['NC'] = [ 'North Carolina', '', '#ubuntu-us-', 'nc.png'];
states['FL'] = [ 'Florida', '', '#ubuntu-us-', 'fl.png'];
states['LA'] = [ 'Louisiana', '', '#ubuntu-us-', 'la.png'];
states['WV'] = [ 'West Virginia', '', '#ubuntu-us-', 'wv.png'];
states['OH'] = [ 'Ohio', '', '#ubuntu-us-', 'oh.png'];
states['IN'] = [ 'Indiana', '', '#ubuntu-us-', 'in.png'];
states['KY'] = [ 'Kentucky', '', '#ubuntu-us-', 'kv.png'];
states['IL'] = [ 'Illinois', '', '#ubuntu-us-', 'il.png'];
states['MI'] = [ 'Michigan', '', '#ubuntu-us-', 'mi.png'];
states['WI'] = [ 'Wisconsin', '', '#ubuntu-us-', 'wi.png'];
states['NE'] = [ 'Nebraska', '', '#ubuntu-us-', 'ne.png'];
states['IA'] = [ 'Iowa', '', '#ubuntu-us-', 'ia.png'];
states['SD'] = [ 'South Dakota', '', '#ubuntu-us-', 'sd.png'];
states['WY'] = [ 'Wyoming', '', '#ubuntu-us-', 'wy.png'];
states['MN'] = [ 'Minnesota', '', '#ubuntu-us-', 'mn.png'];
states['ND'] = [ 'North Dakota', '', '#ubuntu-us-', 'nd.png'];
states['MT'] = [ 'Montana', '', '#ubuntu-us-', 'mt.png'];
states['ID'] = [ 'Idaho', '', '#ubuntu-us-', 'id.png'];
states['AK'] = [ 'Alaska', '', '#ubuntu-us-', 'ak.png'];
states['HI'] = [ 'Hawaii', '', '#ubuntu-us-hi', 'hi.png'];

var badge = null;
var badge_slot = null;

function pop_element(ele) {
  parent = ele.parentNode;
  if(parent) {
    parent.removeChild(ele)
  }
  return ele;
}

function startOff() {
  badge = document.getElementById('badge');
  badge_slot = badge.parentNode;
  pop_element(badge);
  badge.setAttribute('class', 'none')
  pop_element(document.getElementById('warning'));
}

function updateText(node, text) {
  if ( node.hasChildNodes() ) {
    while ( node.childNodes.length >= 1 ) {
      node.removeChild( node.firstChild );
    }
  }
  node.appendChild(document.createTextNode(text));
}

function updatePaddedText(node, text) {
//  node.childNodes.each(function(item, index) { updateText(item, text); })
  for(var index in node.childNodes) {
    child = node.childNodes[index];
    if(child.tagName=='text') {
      updateText(child, text);
    }
  }
}

function showBadgeText(data) {
  for(var part=0;part<badge_texts.length;part++) {
    var part_obj = document.getElementById(badge_texts[part]);
    if(part_obj) {
      var part_parent = part_obj.parentNode;
      if(data[part] == null || data[part] == "") {
        part_obj.setAttribute("class", 'hidden_text');
        part_obj.removeAttribute('xlink:href');
      } else {
        part_obj.setAttribute("class", 'visible_text');
        part_obj.setAttributeNS("http://www.w3.org/1999/xlink", 'xlink:href', data[part]);
      }
    }
  }
}

function pointAtLine(target, line, w, h) {
  direction = null;
  // Get the two last nodes of the line
  var points = line.pathSegList;
  var pA = points.getItem(points.numberOfItems-1);
  var pB = points.getItem(points.numberOfItems-2);
  var x = 0;
  var y = 0;
  // Now decide what direction it is in.
  if(pA.y == pB.y) {
    y = pA.y - (h / 2);
    x = pA.x;
    if(pA.x < pB.x) {
      x = pA.x - w;
    }
  } else if(pA.x == pB.x) {
    x = pA.x - (w / 2);
    y = pA.y;
    if(pA.y < pB.y) {
      y = pA.y - h;
    }
  } else {
    // A strait line is required.
    alert("Line isn't strait: " + pA.x+","+pA.y+" -> "+pB.x+","+pB.y);
  }
  // Now set our new co-ordinates for the line
  target.setAttribute("transform", "translate("+x+", "+y+")");
}

function enterGeography(evt) {
  var target = evt.target;
  var state  = target.getAttribute('id');
  if(states[state] && lastTarget!=target) {
    target.setAttribute('class', 'hover');
  }
}

function leaveGeography(evt) {
  var target = evt.target;
  var state  = target.getAttribute('id');
  if(states[state] && lastTarget!=target) {
    target.setAttribute('class', 'none');
  }
}

function selectGeography(evt) {
  clearClicked();
  var target = evt.target;
  var parent = target.parentNode;
  var state  = target.getAttribute('id');
  var data = states[state];
  if(data) {
    lastTarget = target;
    parent.appendChild(target);
    target.setAttribute('class', 'selected');
    badge.setAttribute('class', 'hidden');
    badge_slot.appendChild(badge);
    showBadgeText(data);
    updatePaddedText(document.getElementById('loconame'), data[STATE_NAME]);
    //updateText(document.getElementById('leader'), data[STATE_CONTACT]);
    if(data[STATE_LOGO]) {
      document.getElementById('logo').setAttributeNS("http://www.w3.org/1999/xlink", 'xlink:href', image_root+data[STATE_LOGO]);
    }
    //pointAtLine(badge, line, 350, 80);
    badge.setAttribute('class', 'none');
  }
}

function clearClicked() {
  if(lastTarget) {
    lastTarget.setAttribute('class', 'none');
    pop_element(badge);
  }
  lastTarget = null;
}

function linkClicked(type) {
  var link;
  var target = window.lastState;
  var state  = target.getAttribute('id');
  var data = states[state];

  switch(type) {
  case 'website':
    link = data[STATE_WEBSITE];
    break;
  case 'irc':
    link = 'http://java.freenode.net//index.php?channel='
    link += data[STATE_IRC].substr(1);
    break;
  case 'forum':
    link = data[STATE_FORUM];
    break;
  case 'wiki':
    link = data[STATE_WIKI];
    break;
  case 'mlist':
    link = data[STATE_LIST];
    break;
  }

  if (link) {
    window.open(link, 'LoCo Map');
  }
}

