var cur_class = 'archer';
var selected = new Array();
selected['align'] = new Array();
var cur_level = new Array();
var max_sp = new Array();
max_sp['archer'] = 18;
max_sp['assassin'] = 18;
max_sp['warrior'] = 18;
max_sp['mage'] = 18;
max_sp['priest'] = 18;
var cur_sp = new Array();
cur_sp['archer'] = 0;
cur_sp['assassin'] = 0;
cur_sp['warrior'] = 0;
cur_sp['mage'] = 0;
cur_sp['priest'] = 0;
var url = '';

function check_qs()
{
  url = window.location.protocol+'//'+window.location.hostname+window.location.pathname;
  var query = window.location.search.substring(1);
  if(query.substring(0) == 'archer' || query.substring(0) == 'assassin' || query.substring(0) == 'warrior' || query.substring(0) == 'priest' || query.substring(0) == 'mage')
  {
    var tree = query.substring(0);
    show_class(tree, $('class_'+tree));
  }
  else
  {
    var tree_number = Math.ceil(query.length / 32);

    for (var e = 1; e <= tree_number; e++)
    {
      var stop = e * 32;
      var start = stop - 32
      var tree = query.substring(start, stop);
      parse_qs(tree);
    }
  }
}

function parse_qs(tree)
{
  var tree_class = tree.substring(0,1);
  tree_class = classes[tree_class];
  for (i = 1; i < positions.length; i++)
  {
    var start = 1 * i;
    var stop = start + 1;
    placement = tree.substring(start,stop);
    if(placement != 0)
    {
      button_position = tree_class + positions[i];
      if(positions[i] != '00')
      {
        if(placement > 1)
        {
          upgrade_click(tree_class, $(button_position+'_'+placement), button_position, placement, 1);
        }
        else
        {
          button_click(tree_class, $(button_position), 1);
        }
      }
      else
      {
        if(tree_class == 'assassin')
        {
          upgrade_click(tree_class, $(button_position+'_'+placement), button_position, placement, 1);
        }
        else if(tree_class == 'priest' || tree_class == 'mage')
        {
          if(placement == 3)
          {
            button_position = tree_class+'align_2';
          }
          else if(placement == 4)
          {
            button_position = tree_class+'align_1';
          }
          else
          {
            button_position = tree_class+'align'+position;
          }
          align_click(tree_class, $(button_position));
        }
      }
    }
  }
  show_class(tree_class, $('class_'+tree_class));
}

function generate_link(panel)
{
  var link = '';
  var i;
  link += tclasses[panel];
  for(var i = 1; i < positions.length; i++)
  {
    var value = selected[panel+positions[i]];
    if(typeof value == "undefined")
    {
      value = '0';
    }
    link += value;
  }
  $("tree_link").innerHTML = "<a href='"+url+"?"+link+"' title='Link to this Build'><div id='hold' onclick=\"window.open('"+url+"?"+link+"', 'skill_calc2', 'scrollbars=no, menubar=no, height=482, width=893, resizable=no, toolbar=no, location=yes, status=no, personalbar=no');\"><img src='images/link.png' alt='Link to this Build'></div></a>";
}

function show_class(class_panel, obj)
{
  if (cur_class != class_panel)
  {
    $(cur_class).style.display = 'none';
    $('class_'+cur_class).style.background = "url('images/class_default.jpg')";
    $('class_'+cur_class).style.backgroundPosition = class_positions[cur_class];
  }
  $(class_panel).style.display = 'block';
  $('class_plate').style.background = "url(images/"+class_panel+"_plate.png)";
  obj.style.background = "url('images/class_selected.jpg')";
  obj.style.backgroundPosition = class_positions[class_panel];
  cur_class=class_panel;
  skill_points(cur_class);
}

function class_hover(panel, obj)
{
  if(cur_class != panel)
  {
    obj.style.background = "url('images/class_hover.jpg')";
    obj.style.backgroundPosition = class_positions[panel];
  }
}

function class_empty(panel, obj)
{
  if(cur_class != panel)
  {
    obj.style.background = "url('images/class_default.jpg')";
    obj.style.backgroundPosition = class_positions[panel];
  }
}


function button_hover(panel, obj)
{
  if(typeof selected[obj.id] == "undefined" || selected[obj.id] < 1)
  {
    obj.style.background = "url('images/"+panel+"_hover.png') no-repeat";
    obj.style.backgroundPosition = treeInfo[panel]['button'][obj.id]['position'];
  }
  new Tooltip(obj, treeInfo[panel]['button'][obj.id]['desc']+"<br/><br/><b>Cost: </b>"+treeInfo[panel]['button'][obj.id]['cost']+"sp<br/><br/><b>Left Click</b> to add points<br/><b>Right Click</b> to remove points", {title: treeInfo[panel]['button'][obj.id]['name']});
}

function button_empty(panel, obj)
{
  if(typeof selected[obj.id] == "undefined" || selected[obj.id] < 1)
  {
    obj.style.background = "url('images/"+panel+"_default.png') no-repeat";
    obj.style.backgroundPosition = treeInfo[panel]['button'][obj.id]['position'];
  }
}

function button_click(panel, obj, direct)
{
  if(max_sp[panel] >= treeInfo[panel]['button'][obj.id]['cost'])
  {
    if(typeof selected[obj.id] == "undefined" || selected[obj.id] < 1)
    {
      if(selected[treeInfo[panel]['button'][obj.id]['depend']] >= 1 || typeof treeInfo[panel]['button'][obj.id]['depend'] == 'undefined')
      {
        obj.style.background = "url('images/"+panel+"_selected.png') no-repeat";
        obj.style.backgroundPosition = treeInfo[panel]['button'][obj.id]['position'];
        selected[obj.id] = 1;
        cur_level[obj.id] = 1;
        max_sp[panel] -= treeInfo[panel]['button'][obj.id]['cost'];
        cur_sp[panel] += treeInfo[panel]['button'][obj.id]['cost'];
        skill_points(cur_class);
      }
      else
        $('error').style.display = 'block';
    }
  }
  else
  {
    $('error2').style.display = 'block';
  }

  if(typeof direct == 'undefined')
  {
    skill_media(panel, obj.id);
  }

  if(direct == 2)
  {
    if(selected[obj.id] >= 1)
    {
      if(selected[treeInfo[panel]['button'][obj.id]['rdepend']] != 1)
      {
        obj.style.background = "url('images/"+panel+"_default.png') no-repeat";
        obj.style.backgroundPosition = treeInfo[panel]['button'][obj.id]['position'];
        selected[obj.id] = 0;
        cur_level[obj.id] = 0;
        max_sp[panel] += treeInfo[panel]['button'][obj.id]['cost'];
        cur_sp[panel] -= treeInfo[panel]['button'][obj.id]['cost'];
        skill_points(cur_class);

        if(selected[obj.id+'_2'] == 1)
        {
          $(obj.id+'_2').style.background = "url('images/upgrade_default.gif')";
          selected[obj.id+'_2'] = 0;
          max_sp[panel] += treeInfo[panel]['button'][obj.id]['upgrade']['level2']['cost'];
          cur_sp[panel] -= treeInfo[panel]['button'][obj.id]['upgrade']['level2']['cost'];
          skill_points(cur_class);
        }
        if(selected[obj.id+'_3'] == 1)
        {
          $(obj.id+'_3').style.background = "url('images/upgrade_default.gif')";
          selected[obj.id+'_3'] = 0;
          max_sp[panel] += treeInfo[panel]['button'][obj.id]['upgrade']['level3']['cost'];
          cur_sp[panel] -= treeInfo[panel]['button'][obj.id]['upgrade']['level3']['cost'];
          skill_points(cur_class);
        }
        if(selected[obj.id+'_4'] == 1)
        {
          $(obj.id+'_4').style.background = "url('images/upgrade_default.gif')";
          selected[obj.id+'_4'] = 0;
          max_sp[panel] += treeInfo[panel]['button'][obj.id]['upgrade']['level4']['cost'];
          cur_sp[panel] -= treeInfo[panel]['button'][obj.id]['upgrade']['level4']['cost'];
          skill_points(cur_class);
        }
      }
      else
        $('error3').style.display = 'block';
    }
  }
  generate_link(panel);
}

function upgrade_hover(panel, obj, button, level)
{
  if(typeof selected[obj.id] == "undefined" || selected[obj.id] != 1)
  {
    obj.style.background = "url('images/upgrade_hover.gif')";
  }
    new Tooltip(obj, treeInfo[panel]['button'][button]['upgrade'][level]['desc']+"<br/><br/><b>Cost: </b>"+treeInfo[panel]['button'][button]['upgrade'][level]['cost']+"sp<br/><br/><b>Left Click</b> to add points<br/><b>Right Click</b> to remove points", {title: treeInfo[panel]['button'][button]['upgrade'][level]['name']});
}

function upgrade_empty(obj)
{
  if(typeof selected[obj.id] == "undefined" || selected[obj.id] != 1)
  {
    obj.style.background = "url('images/upgrade_default.gif')";
  }
}

function upgrade_click(panel, obj, button, level, direct)
{
  if(button == 'assassin00')
  {
    selected[button] = 1;
    cur_level[button] = 1;
  }

  if(selected[button] != 1 || cur_level[button] != (level-1))
  {
    if(level == 4)
    {
      if(button != 'assassin00')
      {
        button_click(panel, $(button), direct);
      }
      upgrade_click(panel, $(button+"_2"), button, 2, direct);
      upgrade_click(panel, $(button+"_3"), button, 3, direct);
    }
    else if(level == 3)
    {
      if(button != 'assassin00')
      {
        button_click(panel, $(button), direct);
      }
      upgrade_click(panel, $(button+"_2"), button, 2, direct);
    }
    else if(level == 2)
    {
      if(button != 'assassin00')
      {
        button_click(panel, $(button), direct);
      }
    }
  }

  if(max_sp[panel] >= treeInfo[panel]['button'][button]['upgrade']["level"+level]['cost'])
  {
    if(typeof selected[obj.id] == "undefined" || selected[obj.id] != 1)
    {
      if(selected[treeInfo[panel]['button'][button]['depend']] >= 1 || typeof treeInfo[panel]['button'][button]['depend'] == 'undefined')
      {
        max_sp[panel] -= treeInfo[panel]['button'][button]['upgrade']["level"+level]['cost'];
        cur_sp[panel] += treeInfo[panel]['button'][button]['upgrade']["level"+level]['cost'];
        skill_points(cur_class);
        obj.style.background = "url('images/upgrade_selected.gif')";
        selected[obj.id] = 1;
        selected[button]++;
        cur_level[button]++;
      }
      else
        $('error').style.display = 'block';
    }
  }
  else
    $('error2').style.display = 'block';
  generate_link(panel);
}

function alignment(panel)
{
  document.write("<div id='alignment'>");
  document.write("<div id='"+panel+"align_2' class='upgrade' onmouseover=\"align_hover('"+panel+"', this);\" onmouseout=\"align_empty('"+panel+"', this);\" onclick=\"align_click('"+panel+"', this);\"></div>");
  document.write("<div id='"+panel+"align_1' class='upgrade' onmouseover=\"align_hover('"+panel+"', this);\" onmouseout=\"align_empty('"+panel+"', this);\" onclick=\"align_click('"+panel+"', this);\"></div>");
  document.write("<div id='"+panel+"align0' class='upgrade' onmouseover=\"align_hover('"+panel+"', this);\" onmouseout=\"align_empty('"+panel+"', this);\" onclick=\"align_click('"+panel+"', this);\"></div>");
  document.write("<div id='"+panel+"align1' class='upgrade' onmouseover=\"align_hover('"+panel+"', this);\" onmouseout=\"align_empty('"+panel+"', this);\" onclick=\"align_click('"+panel+"', this);\"></div>");
  document.write("<div id='"+panel+"align2' class='upgrade' onmouseover=\"align_hover('"+panel+"', this);\" onmouseout=\"align_empty('"+panel+"', this);\" onclick=\"align_click('"+panel+"', this);\"></div>");
  document.write("</div>");

  if(typeof selected['align'][panel] == "undefined")
  {
    align_click(panel, $(panel+'align0'));
  }
}

function align_hover(panel, obj)
{
  if(typeof selected['align'][panel] == "undefined" || selected['align'][panel] != obj.id)
  {
    obj.style.background = "url('images/upgrade_hover.gif')";
  }
  new Tooltip(obj, treeInfo[panel]['button']['align'][obj.id]['desc']+"<br/><br/><b>Cost: </b>"+treeInfo[panel]['button']['align'][obj.id]['cost']+"sp", {title: treeInfo[panel]['button']['align'][obj.id]['name']});
}

function align_empty(panel, obj)
{
  if(typeof selected['align'][panel] == "undefined" || selected['align'][panel] != obj.id)
  {
    obj.style.background = "url('images/upgrade_default.gif')";
  }
}

function align_click(panel, obj)
{
  obj.style.background = "url('images/upgrade_selected.gif')";

  if(typeof selected['align'][panel] == "undefined")
  {
    selected['align'][panel] = obj.id;
  }
  else
    {
      max_sp[panel] += treeInfo[panel]['button']['align'][selected['align'][panel]]['cost'];
      cur_sp[panel] -= treeInfo[panel]['button']['align'][selected['align'][panel]]['cost'];
    }

  if(max_sp[panel] >= treeInfo[panel]['button']['align'][obj.id]['cost'])
  {
    max_sp[panel] -= treeInfo[panel]['button']['align'][obj.id]['cost'];
    cur_sp[panel] += treeInfo[panel]['button']['align'][obj.id]['cost'];
    skill_points(cur_class);
    if(selected['align'][panel] != obj.id)
    {
      $(selected['align'][panel]).style.background = "url('images/upgrade_default.gif')";
      selected['align'][panel] = obj.id;
    }
  }
    else
      $('error2').style.display = 'block';
}

function skill_points(panel)
{
  var level = Math.floor((cur_sp[panel] / 2)) + 1;
  $("points").innerHTML = "<div id='point_display'>"+level+"</div>";
}

function skill_media(panel, button)
{
  if(typeof treeInfo[panel]['button'][button]['media'] == "undefined" && treeInfo[panel]['button'][button]['media'] != 0)
  {
    $("skill_media").innerHTML = "<div id='skill_head'><div id='skill_title2'>"+treeInfo[panel]['button'][button]['name']+"</div><div id='skill_title2s'>"+treeInfo[panel]['button'][button]['name']+"</div> <div id='skill_movie' onClick='showMovie("+button+");' title='Play Movie'></div></div><div id='mediaBox'></div>";
    tgtiFrame = document.getElementById('mediaBox');
    tgtiFrame.style.background = "url('media/stills/"+button+".jpg') no-repeat";
  }
  else
  {
    $("skill_media").innerHTML = "<div id='skill_head'><div id='skill_title1'>"+treeInfo[panel]['button'][button]['name']+"</div><div id='skill_title1s'>"+treeInfo[panel]['button'][button]['name']+"</div></div><div id='mediaBox'></div>";
    tgtiFrame = document.getElementById('mediaBox');
    tgtiFrame.style.background = "url('images/novideo.jpg') no-repeat";
  }
}

function showMovie(movieName)
{
  $("mediaBox").innerHTML = "<object classid='clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B' codebase='http://www.apple.com/qtactivex/qtplugin.cab' width='320' height='254'><param name='src' value='media/movies/"+movieName.id+".mov' /><param name='controller' value='true' /><param name='autoplay' value='true' /><param name='bgcolor' value='#000000' /><!--[if !IE]>--><object type='video/quicktime' data='media/movies/"+movieName.id+".mov' width='320' height='254'><param name='autoplay' value='true' /><param name='bgcolor' value='#000000' /><param name='controller' value='true' /></object><!--<![endif]--></object>";
}

function preload_images()
{
  for(var i = 0; i < images.length; i++)
  {
    preload_image = new Image();
    preload_image.src = 'images/'+images[i];
  }
  $('skill_media').innerHTML = "<p class='title'>Multiplayer Skill Tree Calculator</p><p class='text'>Welcome to the interactive skill tree calculator for the multiplayer version of <i>Dark Messiah Might &amp; Magic &trade;</i>. Here you can prepare each of your class builds with your teammates before you jump into competitive warfare, as well as preview the sights and sounds of the effects of each skill. Choose a class below to begin. When you're happy with your build, use the link below the tree to save the build for later, or send it to your team!</p>";
}

function hide_error(obj)
{
  obj.style.display = 'none';
}

function refresh(panel)
{
  window.location.replace(url+'?'+panel);
}

function base_skill(panel, obj)
{
  new Tooltip(obj, treeInfo[panel]['base']['desc']+"<br/><br/><b>Cost: Core Skill", {title: treeInfo[panel]['base']['name']});
}