if (WoW_Characters::GetGuildID() > 0) {
    $guild_str = sprintf('<div class="guild">
						<a href="%s?character=%s">%s</a>
					</div>', WoW_Characters::GetGuildURL(), urlencode(WoW_Characters::GetName()), WoW_Characters::GetGuildName());
} else {
    $guild_str = null;
}
echo sprintf('<div class="name"><a href="%s" rel="np">%s</a></div>
				
				<div class="under-name color-c%d">
					<a href="/wow/game/race/%s" class="race">%s</a>-<a href="/wow/game/class/%s" class="class">%s</a> <span class="level"><strong>%d</strong></span> %s
				</div>
                %s
				<div class="realm">
					<span id="profile-info-realm" class="tip" data-battlegroup="%s">%s</span>
				</div>', WoW_Characters::GetURL(), WoW_Characters::GetName(), WoW_Characters::GetClassID(), WoW_Characters::GetRaceKey(), WoW_Characters::GetRaceName(), WoW_Characters::GetClassKey(), WoW_Characters::GetClassName(), WoW_Characters::GetLevel(), WoW_Locale::GetString('template_lvl'), $guild_str, WoWConfig::$DefaultBGName, WoW_Characters::GetRealmName());
?>
			</div>
		</div>
	<?php 
WoW_Template::LoadTemplate('block_profile_menu');
?>

					</div>
				</div>
			</div>
		</div>
		
		<div class="profile-contents">

		<div class="profile-section-header">
 private static function _ApplyItemBonuses($proto, $slot, $apply, $only_level_scale = false)
 {
     if (!$proto) {
         return false;
     }
     $ssd = $proto->ScalingStatDistribution ? DB::WoW()->selectRow("SELECT * FROM `DBPREFIX_ssd` WHERE `entry` = %d", $proto->ScalingStatDistribution) : null;
     if ($only_level_scale && !$ssd) {
         return false;
     }
     $ssd_level = WoW_Characters::GetLevel();
     if ($ssd && $ssd_level > $ssd['MaxLevel']) {
         $ssd_level = $ssd['MaxLevel'];
     }
     $ssv = $proto->ScalingStatValue ? DB::WoW()->selectRow("SELECT * FROM `DBPREFIX_ssv` WHERE `id` = %d", $proto->ScalingStatValue) : null;
     if ($only_level_scale && !$ssv) {
         return false;
     }
     for ($i = 0; $i < MAX_ITEM_PROTO_STATS; ++$i) {
         $statType = 0;
         $val = 0;
         // If set ScalingStatDistribution need get stats and values from it
         if ($ssd && $ssv) {
             if ($ssd['StatMod_' . $i] < 0) {
                 continue;
             }
             $statType = $ssd['StatMod_' . $i];
             $val = WoW_Items::GetSSDMultiplier($ssv, $proto->ScalingStatValue) * $ssd['Modifier_' . $i] / 1000;
         } else {
             if ($i >= $proto->StatsCount) {
                 continue;
             }
             $statType = $proto->ItemStat[$i]['type'];
             $val = $proto->ItemStat[$i]['value'];
         }
         if ($val == 0) {
             continue;
         }
         switch ($statType) {
             case ITEM_MOD_MANA:
                 self::HandleStatModifier(UNIT_MOD_MANA, BASE_VALUE, $val, $apply);
                 break;
             case ITEM_MOD_HEALTH:
                 // modify HP
                 self::HandleStatModifier(UNIT_MOD_HEALTH, BASE_VALUE, $val, $apply);
                 break;
             case ITEM_MOD_AGILITY:
                 // modify agility
                 self::HandleStatModifier(UNIT_MOD_STAT_AGILITY, BASE_VALUE, $val, $apply);
                 self::ApplyStatBuffMod(STAT_AGILITY, $val, $apply);
                 break;
             case ITEM_MOD_STRENGTH:
                 //modify strength
                 self::HandleStatModifier(UNIT_MOD_STAT_STRENGTH, BASE_VALUE, $val, $apply);
                 self::ApplyStatBuffMod(STAT_STRENGTH, $val, $apply);
                 break;
             case ITEM_MOD_INTELLECT:
                 //modify intellect
                 self::HandleStatModifier(UNIT_MOD_STAT_INTELLECT, BASE_VALUE, $val, $apply);
                 self::ApplyStatBuffMod(STAT_INTELLECT, $val, $apply);
                 break;
             case ITEM_MOD_SPIRIT:
                 //modify spirit
                 self::HandleStatModifier(UNIT_MOD_STAT_SPIRIT, BASE_VALUE, $val, $apply);
                 self::ApplyStatBuffMod(STAT_SPIRIT, $val, $apply);
                 break;
             case ITEM_MOD_STAMINA:
                 //modify stamina
                 self::HandleStatModifier(UNIT_MOD_STAT_STAMINA, BASE_VALUE, $val, $apply);
                 self::ApplyStatBuffMod(STAT_STAMINA, $val, $apply);
                 break;
             case ITEM_MOD_DEFENSE_SKILL_RATING:
                 self::ApplyRatingMod(CR_DEFENSE_SKILL, $val, $apply);
                 break;
             case ITEM_MOD_DODGE_RATING:
                 self::ApplyRatingMod(CR_DODGE, $val, $apply);
                 break;
             case ITEM_MOD_PARRY_RATING:
                 self::ApplyRatingMod(CR_PARRY, $val, $apply);
                 break;
             case ITEM_MOD_BLOCK_RATING:
                 self::ApplyRatingMod(CR_BLOCK, $val, $apply);
                 break;
             case ITEM_MOD_HIT_MELEE_RATING:
                 self::ApplyRatingMod(CR_HIT_MELEE, $val, $apply);
                 break;
             case ITEM_MOD_HIT_RANGED_RATING:
                 self::ApplyRatingMod(CR_HIT_RANGED, $val, $apply);
                 break;
             case ITEM_MOD_HIT_SPELL_RATING:
                 self::ApplyRatingMod(CR_HIT_SPELL, $val, $apply);
                 break;
             case ITEM_MOD_CRIT_MELEE_RATING:
                 self::ApplyRatingMod(CR_CRIT_MELEE, $val, $apply);
                 break;
             case ITEM_MOD_CRIT_RANGED_RATING:
                 self::ApplyRatingMod(CR_CRIT_RANGED, $val, $apply);
                 break;
             case ITEM_MOD_CRIT_SPELL_RATING:
                 self::ApplyRatingMod(CR_CRIT_SPELL, $val, $apply);
                 break;
             case ITEM_MOD_HIT_TAKEN_MELEE_RATING:
                 self::ApplyRatingMod(CR_HIT_TAKEN_MELEE, $val, $apply);
                 break;
             case ITEM_MOD_HIT_TAKEN_RANGED_RATING:
                 self::ApplyRatingMod(CR_HIT_TAKEN_RANGED, $val, $apply);
                 break;
             case ITEM_MOD_HIT_TAKEN_SPELL_RATING:
                 self::ApplyRatingMod(CR_HIT_TAKEN_SPELL, $val, $apply);
                 break;
             case ITEM_MOD_CRIT_TAKEN_MELEE_RATING:
                 self::ApplyRatingMod(CR_CRIT_TAKEN_MELEE, $val, $apply);
                 break;
             case ITEM_MOD_CRIT_TAKEN_RANGED_RATING:
                 self::ApplyRatingMod(CR_CRIT_TAKEN_RANGED, $val, $apply);
                 break;
             case ITEM_MOD_CRIT_TAKEN_SPELL_RATING:
                 self::ApplyRatingMod(CR_CRIT_TAKEN_SPELL, $val, $apply);
                 break;
             case ITEM_MOD_HASTE_MELEE_RATING:
                 self::ApplyRatingMod(CR_HASTE_MELEE, $val, $apply);
                 break;
             case ITEM_MOD_HASTE_RANGED_RATING:
                 self::ApplyRatingMod(CR_HASTE_RANGED, $val, $apply);
                 break;
             case ITEM_MOD_HASTE_SPELL_RATING:
                 self::ApplyRatingMod(CR_HASTE_SPELL, $val, $apply);
                 break;
             case ITEM_MOD_HIT_RATING:
                 self::ApplyRatingMod(CR_HIT_MELEE, $val, $apply);
                 self::ApplyRatingMod(CR_HIT_RANGED, $val, $apply);
                 self::ApplyRatingMod(CR_HIT_SPELL, $val, $apply);
                 break;
             case ITEM_MOD_CRIT_RATING:
                 self::ApplyRatingMod(CR_CRIT_MELEE, $val, $apply);
                 self::ApplyRatingMod(CR_CRIT_RANGED, $val, $apply);
                 self::ApplyRatingMod(CR_CRIT_SPELL, $val, $apply);
                 break;
             case ITEM_MOD_HIT_TAKEN_RATING:
                 self::ApplyRatingMod(CR_HIT_TAKEN_MELEE, $val, $apply);
                 self::ApplyRatingMod(CR_HIT_TAKEN_RANGED, $val, $apply);
                 self::ApplyRatingMod(CR_HIT_TAKEN_SPELL, $val, $apply);
                 break;
             case ITEM_MOD_CRIT_TAKEN_RATING:
                 self::ApplyRatingMod(CR_CRIT_TAKEN_MELEE, $val, $apply);
                 self::ApplyRatingMod(CR_CRIT_TAKEN_RANGED, $val, $apply);
                 self::ApplyRatingMod(CR_CRIT_TAKEN_SPELL, $val, $apply);
                 break;
             case ITEM_MOD_RESILIENCE_RATING:
                 self::ApplyRatingMod(CR_CRIT_TAKEN_MELEE, $val, $apply);
                 self::ApplyRatingMod(CR_CRIT_TAKEN_RANGED, $val, $apply);
                 self::ApplyRatingMod(CR_CRIT_TAKEN_SPELL, $val, $apply);
                 break;
             case ITEM_MOD_HASTE_RATING:
                 self::ApplyRatingMod(CR_HASTE_MELEE, $val, $apply);
                 self::ApplyRatingMod(CR_HASTE_RANGED, $val, $apply);
                 self::ApplyRatingMod(CR_HASTE_SPELL, $val, $apply);
                 break;
             case ITEM_MOD_EXPERTISE_RATING:
                 self::ApplyRatingMod(CR_EXPERTISE, $val, $apply);
                 break;
             case ITEM_MOD_ATTACK_POWER:
                 self::HandleStatModifier(UNIT_MOD_ATTACK_POWER, TOTAL_VALUE, $val, $apply);
                 self::HandleStatModifier(UNIT_MOD_ATTACK_POWER_RANGED, TOTAL_VALUE, $val, $apply);
                 break;
             case ITEM_MOD_RANGED_ATTACK_POWER:
                 self::HandleStatModifier(UNIT_MOD_ATTACK_POWER_RANGED, TOTAL_VALUE, $val, $apply);
                 break;
             case ITEM_MOD_MANA_REGENERATION:
                 self::ApplyManaRegenBonus($val, $apply);
                 break;
             case ITEM_MOD_ARMOR_PENETRATION_RATING:
                 self::ApplyRatingMod(CR_ARMOR_PENETRATION, $val, $apply);
                 break;
             case ITEM_MOD_SPELL_POWER:
                 self::ApplySpellPowerBonus($val, $apply);
                 break;
             case ITEM_MOD_SPELL_PENETRATION:
                 self::ApplyModInt32Value(PLAYER_FIELD_MOD_TARGET_RESISTANCE, -$val, $apply);
                 self::$m_spellPenetrationItemMod += $apply ? $val : -$val;
                 break;
             case ITEM_MOD_BLOCK_VALUE:
                 self::HandleBaseModValue(SHIELD_BLOCK_VALUE, FLAT_MOD, $val, $apply);
                 break;
                 // deprecated item mods
             // deprecated item mods
             case ITEM_MOD_FERAL_ATTACK_POWER:
             case ITEM_MOD_SPELL_HEALING_DONE:
             case ITEM_MOD_SPELL_DAMAGE_DONE:
                 break;
         }
     }
     if ($ssv) {
         if ($spellbonus = WoW_Items::GetSpellBonus($ssv, $proto->ScalingStatValue)) {
             self::ApplySpellPowerBonus($spellbonus, $apply);
         }
     }
     $armor = $proto->armor;
     if ($ssv) {
         if ($ssvarmor = WoW_Items::GetArmorMod($ssv, $proto->ScalingStatValue)) {
             $armor = $ssvarmor;
         }
     }
     // Add armor bonus from ArmorDamageModifier if > 0
     if ($proto->ArmorDamageModifier > 0) {
         $armor += $proto->ArmorDamageModifier;
     }
     if ($armor) {
         self::HandleStatModifier(UNIT_MOD_ARMOR, BASE_VALUE, $armor, $apply);
     }
     if ($proto->block) {
         self::HandleBaseModValue(SHIELD_BLOCK_VALUE, FLAT_MOD, $proto->block, $apply);
     }
     if ($proto->holy_res) {
         self::HandleStatModifier(UNIT_MOD_RESISTANCE_HOLY, BASE_VALUE, $proto->holy_res, $apply);
     }
     if ($proto->fire_res) {
         self::HandleStatModifier(UNIT_MOD_RESISTANCE_FIRE, BASE_VALUE, $proto->fire_res, $apply);
     }
     if ($proto->nature_res) {
         self::HandleStatModifier(UNIT_MOD_RESISTANCE_NATURE, BASE_VALUE, $proto->nature_res, $apply);
     }
     if ($proto->frost_res) {
         self::HandleStatModifier(UNIT_MOD_RESISTANCE_FROST, BASE_VALUE, $proto->frost_res, $apply);
     }
     if ($proto->shadow_res) {
         self::HandleStatModifier(UNIT_MOD_RESISTANCE_SHADOW, BASE_VALUE, $proto->shadow_res, $apply);
     }
     if ($proto->arcane_res) {
         self::HandleStatModifier(UNIT_MOD_RESISTANCE_ARCANE, BASE_VALUE, $proto->arcane_res, $apply);
     }
     $attType = BASE_ATTACK;
     $damage = 0.0;
     if ($slot == EQUIPMENT_SLOT_RANGED && in_array($proto->InventoryType, array(INV_TYPE_RANGED, INV_TYPE_THROWN, INV_TYPE_RANGED_RIGHT))) {
         $attType = RANGED_ATTACK;
     } elseif ($slot == EQUIPMENT_SLOT_OFFHAND) {
         $attType = OFF_ATTACK;
     }
     $minDamage = $proto->Damage[0]['min'];
     $maxDamage = $proto->Damage[0]['max'];
     $extraDPS = 0;
     if ($ssv) {
         if ($extraDPS = WoW_Items::GetDPSMod($ssv, $proto->ScalingStatValue)) {
             $average = $extraDPS * $proto->delay / 1000;
             $minDamage = 0.7 * $average;
             $maxDamage = 1.3 * $average;
         }
     }
     if ($minDamage > 0) {
         $damage = $apply ? $minDamage : BASE_MINDAMAGE;
         self::SetBaseWeaponDamage($attType, MINDAMAGE, $damage);
     }
     if ($maxDamage > 0) {
         $damage = $apply ? $maxDamage : BASE_MAXDAMAGE;
         self::SetBaseWeaponDamage($attType, MAXDAMAGE, $damage);
     }
     if ($proto->delay) {
         if ($slot == EQUIPMENT_SLOT_RANGED) {
             self::SetAttackTime(RANGED_ATTACK, $apply ? $proto->delay : BASE_ATTACK_TIME);
         } elseif ($slot == EQUIPMENT_SLOT_MAINHAND) {
             self::SetAttackTime(BASE_ATTACK, $apply ? $proto->delay : BASE_ATTACK_TIME);
         } elseif ($slot == EQUIPMENT_SLOT_OFFHAND) {
             self::SetAttackTime(OFF_ATTACK, $apply ? $proto->delay : BASE_ATTACK_TIME);
         }
     }
     if (self::CanModifyStats() && ($damage || $proto->delay)) {
         self::UpdateDamagePhysical($attType);
     }
 }
    foreach ($audit[AUDIT_TYPE_EMPTY_SOCKET] as $tmp) {
        $count_empty_sockets += $tmp['count'];
        $empty_sockets_slots .= $tmp['slot'];
        $empty_sockets_slots_js .= $tmp['slot'] . ': ' . $tmp['count'];
        ++$i;
        if ($i < count($audit[AUDIT_TYPE_EMPTY_SOCKET])) {
            $empty_sockets_slots .= ',';
            $empty_sockets_slots_js .= ',';
        }
    }
    $empty_sockets_js = sprintf($empty_sockets_slots_js_tpl, $empty_sockets_slots_js);
    echo sprintf('<li data-slots="%s">
        ' . sprintf(WoW_Locale::GetString('template_character_audit_empty_sockets'), $count_empty_sockets, count($audit[AUDIT_TYPE_EMPTY_SOCKET])) . '
        </li>', $empty_sockets_slots);
}
if (isset($audit[AUDIT_TYPE_NONOPTIMAL_ARMOR]) && is_array($audit[AUDIT_TYPE_NONOPTIMAL_ARMOR]) && WoW_Characters::GetLevel() >= 40) {
    $nonop_armor_slots = '';
    $nonop_armor_slots_js_tpl = '"inappropriateArmorItems": {%s},';
    $nonop_armor_count = 0;
    foreach ($audit[AUDIT_TYPE_NONOPTIMAL_ARMOR] as $tmp) {
        ++$nonop_armor_count;
    }
    echo sprintf('<li data-slots="%d">
        <span class="tip">%s</span>
        </li>', $nonop_armor_count, sprintf(WoW_Locale::GetString('template_character_audit_nonop_armor'), $nonop_armor_count, WoW_Utils::GetAppropriateItemClassForClassID(WoW_Characters::GetClassID())));
}
if (isset($audit[AUDIT_TYPE_MISSING_BELT_BUCKLE]) && $audit[AUDIT_TYPE_MISSING_BELT_BUCKLE] == true) {
    echo sprintf('<li data-slots="5">%s</li>', sprintf(WoW_Locale::GetString('template_character_audit_missing_belt_buckle'), BELT_BUCKLE_ID, WoW_Items::GetItemName(BELT_BUCKLE_ID)));
}
?>
	</ul>
echo WoW_Characters::GetRaceName();
?>
</a>-<a href="<?php 
echo WoW::GetWoWPath();
?>
/wow/game/class/<?php 
echo WoW_Characters::GetClassKey();
?>
" class="class"><?php 
echo WoW_Characters::GetClassName();
?>
</a> (<span id="profile-info-spec" class="spec tip"><?php 
echo $talents['specsData'][WoW_Characters::GetActiveSpec()]['name'];
?>
</span>) <span class="level"><strong><?php 
echo WoW_Characters::GetLevel();
?>
</strong></span> <?php 
echo WoW_Locale::GetString('template_lvl');
?>
<span class="comma">,</span>
					<span class="realm tip" id="profile-info-realm" data-battlegroup="<?php 
echo WoWConfig::$DefaultBGName;
?>
">
						<?php 
echo WoW_Characters::GetRealmName();
?>
					</span>
				</div>
				<div class="achievements"><a href="<?php 
    <span class="icon-frame frame-56">
        <img src="<?php 
echo WoW::GetWoWPath();
?>
/wow/static/images/2d/avatar/<?php 
echo sprintf('%d-%d', WoW_Characters::GetRaceID(), WoW_Characters::GetGender());
?>
.jpg" alt="" width="56" height="56" />
        <span class="frame"></span>
    </span>
    <h3><?php 
echo WoW_Characters::GetName();
?>
</h3>
    <div class="color-c<?php 
echo sprintf('%d">%s-%s (%s) %d %s', WoW_Characters::GetClassID(), WoW_Characters::GetRaceName(), WoW_Characters::GetClassName(), $talents['specsData'][WoW_Characters::GetActiveSpec()]['name'], WoW_Characters::GetLevel(), WoW_Locale::GetString('template_lvl'));
?>
</div>
    <div class="color-tooltip-<?php 
echo WoW_Characters::GetFactionName();
?>
"><?php 
echo WoW_Characters::GetRealmName();
?>
</div>
    <span class="character-achievementpoints"><?php 
echo WoW_Achievements::GetAchievementsPoints();
?>
</span>
    <span class="clear"><!-- --></span>
    <span class="character-talents">