// <!--
var debugAjax = false;
var ajaxRand = 'ajaxRand='+Math.floor( Math.random( ) * 101 ) + '_' + Math.floor( Math.random( ) * 101 );

var attack = new Object( );
attack["balance"] = new Array( );
attack["storm"] = new Array( );
attack["ice"] = new Array( );
attack["fire"] = new Array( );
attack["death"] = new Array( );
attack["myth"] = new Array( );
attack["life"] = new Array( );

var blade = new Object( );
blade["balance"] = new Array( );
blade["storm"] = new Array( );
blade["ice"] = new Array( );
blade["fire"] = new Array( );
blade["death"] = new Array( );
blade["myth"] = new Array( );
blade["life"] = new Array( );

var trap = new Object( );
trap["balance"] = new Array( );
trap["storm"] = new Array( );
trap["ice"] = new Array( );
trap["fire"] = new Array( );
trap["death"] = new Array( );
trap["myth"] = new Array( );
trap["life"] = new Array( );

function addAttackCard( school, value, label )
{
   temp = new Array( );
   temp[0] = value;
   temp[1] = label;
   attack[school].push( temp );
}

function rebuildAttackValues( school )
{
   clearSelect( 'attack_card' );
   
   for ( x = 0; x < attack[school].length; x++ )
   {
      createOption( 'attack_card', attack[school][x][0], attack[school][x][1] );
   }
}

function addBladeCard( school, value, label )
{
   temp = new Array( );
   temp[0] = value;
   temp[1] = label;
   blade[school].push( temp );
}

function rebuildBladeValues( school )
{
   clearSelect( 'blade_charm' );
   
   for ( x = 0; x < blade[school].length; x++ )
   {
      createOption( 'blade_charm', blade[school][x][0], blade[school][x][1] );
   }
}

function addTrapCard( school, value, label )
{
   temp = new Array( );
   temp[0] = value;
   temp[1] = label;
   trap[school].push( temp );
}

function rebuildTrapValues( school )
{
   clearSelect( 'trap_ward_convert' );
   
   for ( x = 0; x < trap[school].length; x++ )
   {
      createOption( 'trap_ward_convert', trap[school][x][0], trap[school][x][1] );
   }
}

function clearSelect( id )
{
   var objSelect = getObjectFormat( id );
   
   while ( objSelect.options.length > 0 )
   {
      objSelect.remove( 0 );
   }
}

function createOption( id, newValue, newText )
{
   var objSelect = getObjectFormat( id );
   var objOption = document.createElement( "option" );
   
   objOption.text = newText
   objOption.value = newValue
   
   if ( document.all && !window.opera )
   {
      objSelect.add( objOption );
   }
   else
   {
      objSelect.add( objOption, null );
   }
}

function getNewAjaxRand( )
{
   ajaxRand = 'ajaxRand='+Math.floor( Math.random( ) * 101 ) + '_' + Math.floor( Math.random( ) * 101 );
}

function addBladeCharm( )
{
   var currContent = getObjectFormat( 'current_blades_and_charms' ).innerHTML;
   
   var itemToAdd = getObjectFormat( 'blade_charm' )[getObjectFormat( 'blade_charm' ).selectedIndex].value;
   var itemToAddName = getObjectFormat( 'blade_charm' )[getObjectFormat( 'blade_charm' ).selectedIndex].text;
   
   if ( itemToAdd == '' )
   {
      addError( 'you must select a valid Blade or Charm.' );
   }
   
   if ( parseErrors( ) )
   {
      var linetype="";
      
      switch ( itemToAdd.substring( 0, 2 ) )
      {
         case 'bl': lineType = 'trap'; break;
         case 'ch': lineType = 'charm'; break;
      }
      
      //currContent += '<div class="'+lineType+'"><input type="hidden" name="'+itemToAdd+'" value="'+itemToAdd+'" />'+itemToAddName+'</div>';
      currContent += '<div class="'+lineType+'">'+itemToAddName+'</div>';
      
      getObjectFormat( 'selected_blades' ).value = getObjectFormat( 'selected_blades' ).value + ',' + itemToAdd;
      
      getObjectFormat( 'current_blades_and_charms' ).innerHTML = currContent;
   }
}

function clearBladeCharm( )
{
   getObjectFormat( 'selected_blades' ).value = '';
   getObjectFormat( 'current_blades_and_charms' ).innerHTML = '';
}

function addTrapWardConvert( )
{
   var currContent = getObjectFormat( 'current_traps_wards_and_charms' ).innerHTML;
   
   var itemToAdd = getObjectFormat( 'trap_ward_convert' )[getObjectFormat( 'trap_ward_convert' ).selectedIndex].value;
   var itemToAddName = getObjectFormat( 'trap_ward_convert' )[getObjectFormat( 'trap_ward_convert' ).selectedIndex].text;
   
   if ( itemToAdd == '' )
   {
      addError( 'you must select a valid Trap, Ward or Convert.' );
   }
   
   if ( parseErrors )
   {
      var linetype="";
      
      switch ( itemToAdd.substring( 0, 2 ) )
      {
         case 'tr': lineType = 'trap'; break;
         case 'co': lineType = 'convert'; break;
         case 'wa': lineType = 'ward'; break;
      }
      
      //currContent += '<div class="'+lineType+'"><input type="hidden" name="'+itemToAdd+'" value="'+itemToAdd+'" />'+itemToAddName+'</div>';
      currContent += '<div class="'+lineType+'">'+itemToAddName+'</div>';
      
      getObjectFormat( 'selected_traps' ).value = getObjectFormat( 'selected_traps' ).value + ',' + itemToAdd;
      
      getObjectFormat( 'current_traps_wards_and_charms' ).innerHTML = currContent;
   }
}

function clearTrapWardConvert( )
{
   getObjectFormat( 'selected_traps' ).value = '';
   getObjectFormat( 'current_traps_wards_and_charms' ).innerHTML = '';
}

function getCalc( )
{
   if ( debugCalc )
   {
      getObjectFormat( 'settings' ).submit( );
   }
   else
   {
      getNewAjaxRand( );
      
      var url   = '/calc_damage.php?'+ajaxRand;
   	var myReq = postXMLDoc( url, 'settings', 'processDamage' );
   }
}

function processDamage( reqId ) 
{
	if ( req[reqId].readyState == 4 )
	{
		// only if "OK"
		if ( req[reqId].status == 200 )
		{
			var resp = req[reqId].responseText.trim( );
			
			if ( resp != "" )
			{
				eval ( resp.substring( 2, ( req[reqId].responseText.trim( ).length - 2 ) ) );
			}
			
			buildDamageDisplay( );
      }
	}
}

function buildDamageDisplay( )
{
   var traps = '';
   var hits = '';
   var pips = oDamage['pip_cost'];
   var range_min = 0;
   var range_max = 0;
   var dual_first = 0;
   var dual_second = 0;
   var tri_one = 0;
   var tri_two = 0;
   var tri_three = 0;
   var dot_init = 0;
   var dot_one = 0;
   var dot_two = 0;
   var dot_three = 0;
   var damage_display_mode = 'range';
   var damage_string = '';
   
   if ( oDamage['rounds'] == 1 && oDamage['total_hits'] == 2 )
   {
      damage_display_mode = 'dual'; // minotaur, etc
   }
   else if ( oDamage['rounds'] == 1 && oDamage['total_hits'] == 3 )
   {
      damage_display_mode = 'tri'; // hydra, etc
   }
   else if ( oDamage['rounds'] >= 3 && oDamage['damage_over_time'] )
   {
      damage_display_mode = 'dot'; // damage over time
   }
   
   if ( damage_display_mode == 'range' )
   {
      range_min = oDamage['hits'][1]['min'] - 0;
      range_max = oDamage['hits'][1]['max'] - 0;
   }
   
   if ( damage_display_mode == 'dual' )
   {
      dual_first = oDamage['hits'][1]['min'] - 0;
      dual_second = oDamage['hits'][2]['max'] - 0;
   }
   
   if ( damage_display_mode == 'tri' )
   {
      tri_one = oDamage['hits'][1]['max'] - 0;
      tri_two = oDamage['hits'][2]['max'] - 0;
      tri_three = oDamage['hits'][3]['max'] - 0;
   }
   
   if ( damage_display_mode == 'dot' )
   {
      if ( oDamage['hits'][1]['min'] == 0 )
      {
         dot_init = 0;
         dot_one = oDamage['hits'][1]['max'] - 0;
         dot_two = oDamage['hits'][2]['max'] - 0;
         dot_three = oDamage['hits'][3]['max'] - 0;
      }
      else
      {
         dot_init = oDamage['hits'][1]['min'] - 0;
         dot_one = oDamage['hits'][2]['max'] - 0;
         dot_two = oDamage['hits'][3]['max'] - 0;
         dot_three = oDamage['hits'][4]['max'] - 0;
      }
   }
      
   switch( damage_display_mode )
   {
      case 'range':
            if ( range_min == range_max )
            {
               damage_string = 'This attack will hit for ' + range_max + ' damage, costing ' + pips + ' pips.';
            }
            else
            {
               damage_string = 'This attack will have a damage range between ' + range_min + ' and ' + range_max + ', costing ' + pips + ' pips.';
            }
         break;
         
      case 'dual':
            damage_string = 'This attack will hit for ' + dual_first + ' plus ' + dual_second + ', for at total of ' + ( dual_first + dual_second ) + ' damage, and costing ' + pips + ' pips.';
         break;
         
      case 'tri':
            damage_string = 'This attack will hit for ' + tri_one + ', ' + tri_two + ', and ' + tri_three + ', for a total of ' + ( tri_one + tri_two + tri_three ) + ' damage, and costing ' + pips + ' pips.';
         break;
         
      case 'dot':
            if ( dot_init != 0 )
            {
               damage_string = 'This attack will hit for ' + dot_init + ', ' + dot_one + ', ' + dot_two + ', and ' + dot_three + ', for a total of ' + ( dot_init + dot_one + dot_two + dot_three ) + ' damage, and costing ' + pips + ' pips.';
            }
            else
            {
               damage_string = 'This attack will hit for ' + dot_one + ', ' + dot_two + ', and ' + dot_three + ', for a total of ' + ( dot_one + dot_two + dot_three ) + ' damage, and costing ' + pips + ' pips.';
            }
         break;
   }
   
   getObjectFormat( 'damage_display' ).innerHTML = damage_string;
}

function checkOpponentMode( mode )
{
   if ( mode == 'pvp' )
   {
      getObjectFormat( 'pve_options' ).style.display = 'none';
   }
   else
   {
      getObjectFormat( 'pve_options' ).style.display = 'block';
   }
}

function checkAttackPips( )
{
   xitem = getObjectFormat( 'attack_card' )[getObjectFormat( 'attack_card' ).selectedIndex].value;
   
   data = xitem.split( '_' );
   
   if ( isNaN( data[2] ) )
   {
      newPipCount = prompt( "How many pips will you use with this card? ( 1 - 14 )" );
      
      if ( isNaN( newPipCount ) )
      {
         newPipCount = 1;
         alert( "You entered and invalid number of pips.\n\nThe pip usage for this card has been set to 1.");
      }
      
      newPipCount = parseInt( newPipCount );
      
      if ( newPipCount < 1 || newPipCount > 14 )
      {
         newPipCount = 1;
         alert( "You entered and invalid number of pips.\n\nThe pip usage for this card has been set to 1.");
      }
   }
   else
   {
      newPipCount = data[2];
   }
   
   getObjectFormat( 'attack_card' )[getObjectFormat( 'attack_card' ).selectedIndex].value = data[0]+'_'+data[1]+'_'+newPipCount;
}

function checkWardPips( )
{
   xitem = getObjectFormat( 'trap_ward_convert' )[getObjectFormat( 'trap_ward_convert' ).selectedIndex].value;
   data = xitem.split( '_' );
   
   if ( isNaN( data[3] ) )
   {
      newPipCount = prompt( "How many pips were used with this card? ( 1 - 14 )" );
      
      if ( isNaN( newPipCount ) )
      {
         newPipCount = 1;
         alert( "You entered and invalid number of pips.\n\nThe pip usage for this card has been set to 1.");
      }
      
      newPipCount = parseInt( newPipCount );
      
      if ( newPipCount < 1 || newPipCount > 14 )
      {
         newPipCount = 1;
         alert( "You entered and invalid number of pips.\n\nThe pip usage for this card has been set to 1.");
      }
   }
   else
   {
      newPipCount = data[3];
   }
   
   getObjectFormat( 'trap_ward_convert' )[getObjectFormat( 'trap_ward_convert' ).selectedIndex].value = data[0]+'_'+data[1]+'_'+data[2]+'_'+newPipCount;
}
// -->