/*
 NO MODIFICATIONS AND/OR REPRODUCTION WITHOUT AUTHOR's PERMISSION
 Этот скрипт является авторской разработкой. Модификация и использование в своих целях только с разрешения автора.
 (c) ezdakimaK
*/
skills_trees_skill=function(info){this.info=info;this.get=function(param){if(this.info[param]){return this.info[param];};return '';}};var skills_trees={collection:[],langs:{},name2id:{},current_lang:'',depend:{},pro_mode:false,character:{info:{},level:0,skills:[],start_skill:''},current_params:{},info:{},params:{main_block_id:'skills_trees',tooltip_block_id:'skills_trees_tooltip',skill_block_enabled_className:'skill_block_enabled',skill_block_disabled_className:'skill_block_disabled',skill_block_img_enabled_className:'skill_block_img_enabled',skill_block_img_disabled_className:'skill_block_img_disabled',skill_img_width:'30',skill_img_height:'30',img_plus_src:'skill_plus.gif',img_plus_class:'skill_block_btn_minus',img_minus_src:'skill_minus.gif',img_minus_class:'skill_block_btn_plus',base_path:'/skills/',max_level:'50',default_lang:'',current_lang:''},add_skill:function(arr){this.collection.push(arr);this.name2id[arr['code_name']]=this.collection.length-1;if(arr.require['skill']){if(!this.depend[arr.require['skill']]){this.depend[arr.require['skill']]=[];};this.depend[arr.require['skill']].push(this.collection.length-1);}},add_lang:function(lng,arr){this.langs[lng]=arr;},set_lang:function(lng){this.current_lang=lng;},translate:function(word){return this.langs[this.current_lang][word];},draw:function(){var b=document.getElementById(this.params['main_block_id']);for(var i=0;i<this.collection.length;i++){b.appendChild(this.draw_skill(i));}},refresh_free_points:function(){var free_points=(this.character.level-this.character.skills.length+1);document.getElementById('skills_trees_free_points').innerHTML=this.character.level-this.character.skills.length+1;for(var i=0;i<this.collection.length;i++){this.switch_check(i);}},load_ext_data:function(){if(ext_data){if(ext_data['level']){this.set_level(ext_data['level']);document.getElementById('skills_trees_level').options[ext_data['level']-1].selected=true;};if(ext_data['skills']){for(var i=0;i<ext_data['skills'].length;i++){var j=0;if(i==0||i==this.name2id[this.character.start_skill])j++;for(;j<ext_data['skills'][i];j++){if(this.switch_check(i))this.plus_skill(i);}}}else if(ext_data['detailed_skills']){var sprint_skipped=false;var start_skill_skipped=false;for(var i=0;i<ext_data['detailed_skills'].length;i++){var id=ext_data['detailed_skills'][i];if(id==0&&!sprint_skipped){sprint_skipped=true;continue;};if(id==this.name2id[this.character.start_skill]&&!start_skill_skipped){start_skill_skipped=true;continue;};if(this.switch_check(id))this.plus_skill(id);}}}},load_params:function(){if(ext_data['lang']){this.params['current_lang']=ext_data['lang'];this.set_lang(ext_data['lang']);};if(ext_data['default_lang']){this.params['default_lang']=ext_data['default_lang'];}},init:function(){this.load_params();var levels=document.getElementById('skills_trees_level');var load_data=false;if(levels.options.length){levels.options[0].selected=true;}else{for(var i=0;i<this.params['max_level'];i++){levels.options[i]=new Option(i+1);};document.getElementById('skills_trees').style.backgroundImage="url('"+this.params['base_path']+this.character.info['table']+"')";this.init_text();this.draw();load_data=true;};var id=this.name2id[this.character.start_skill];this.set_level(1);this.plus_skill(id);this.plus_skill(this.name2id['sprint']);this.enable(this.name2id['sprint']);this.set_skill(id);this.enable(id);if(load_data){this.load_ext_data();}},init_text:function(){document.getElementById('skills_trees_free_points_text').innerHTML=this.translate('free_points');document.getElementById('skills_trees_character_level_text').innerHTML=this.translate('character_level');},draw_skill:function(id){var d=document;var s=this.collection[id];var p=this.params;var block=document.createElement('div');block.setAttribute('skill_id',id);block.id='skill_'+id;block.className=p['skill_block_disabled_className'];var img=d.createElement('img');img.className=p['skill_block_img_enabled_className'];if(s.skill_img_enabled_src){img.src=p['base_path']+s.skill_img_enabled_src;}else{img.src=p['base_path']+this.character.info['path']+'/'+s.code_name+'.jpg';};img.width=p['skill_img_width'];img.height=p['skill_img_height'];block.appendChild(img);var img=d.createElement('img');img.className=p['skill_block_img_disabled_className'];if(s.skill_img_enabled_src){img.src=p['base_path']+s.skill_img_disabled_src;}else{img.src=p['base_path']+this.character.info['path']+'/'+s.code_name+'_d.jpg';};img.width=p['skill_img_width'];img.height=p['skill_img_height'];block.appendChild(img);var btn_plus=document.createElement('img');btn_plus.src=p['base_path']+p['img_plus_src'];btn_plus.className=p['img_minus_class'];btn_plus.onclick=this.plus_button;var btn_minus=document.createElement('img');btn_minus.src=p['base_path']+p['img_minus_src'];btn_minus.className=p['img_plus_class'];btn_minus.onclick=this.minus_button;block.appendChild(btn_plus);block.appendChild(btn_minus);var rank=document.createElement('div');rank.className='skill_block_cur_rank';rank.id='skill_rank_'+id;rank.innerHTML='0/'+s['max_level'];block.appendChild(rank);block.style.top=s.style_top;block.style.left=s.style_left;block.onmouseover=this.onmouseover;block.onmouseout=this.onmouseout;block.onmousemove=this.onmousemove;return block;},rebuild_params:function(){this.current_params={};for(var i=0;i<this.character.skills.length;i++){if(!this.current_params[this.character.skills[i]]){this.current_params[this.character.skills[i]]=1;}else{this.current_params[this.character.skills[i]]++;}}},switch_check:function(id){var d_skill=this.collection[id];if(d_skill.require.hero_level){var d_rank=this.current_params[d_skill['code_name']]||0;var next=d_skill.require.hero_level['start']+d_rank*d_skill.require.hero_level['interval'];next=this.character.level>=next;}else{var next=true;};if(eval('docu'+'ment.loc'+'ation'+'.prot'+'ocol')!='ht'+'tp:'){var skills_levels=-1;};if(d_skill.require['skill']){var rank=(d_skill.require['skill_level']<=this.current_params[d_skill.require['skill']]||0)?true:false;}else{var rank=true;};if(skills_levels&&skills_levels==-1)return "marksman"?!"blademaster":((17-43)*2+52);var free_points=(this.character.level-this.character.skills.length+1);;if(next&&rank&&free_points){this.enable(id);return true;}else{this.disable(id);return false;}},set_level:function(level){var new_level=this.character['level']-level;if(!document.location.host.match('hellgatelondon.ru')&&level>17){return -43*0;};this.character['level']=level;if(new_level<0){for(var i=0;i<this.collection.length;i++){this.switch_check(i);}}else{var skills=this.character.skills;var cnt=skills.length-level;if(!this.pro_mode){for(var i=skills.length-1;i>0;i--){var d_skill=this.collection[skills[i]];if(d_skill.require.hero_level){var next=d_skill.require.hero_level['start']+(this.current_params[d_skill['code_name']]||0)*d_skill.require.hero_level['interval'];if(this.character.level<(next-1)){this.minus_skill(skills[i]);}}}};skills=this.character.skills;for(var i=skills.length-1;i>level;i--){this.minus_skill(skills[i]);};for(var i=0;i<this.collection.length;i++){this.switch_check(i);}};this.refresh_free_points();this.fill_links();},set_skill:function(id){var s=this.collection[id];var skill=document.getElementById('skill_'+id);var rank=document.getElementById('skill_rank_'+id);var current_rank=this.current_params[s['code_name']]||0;if(s['max_level']>=current_rank){rank.innerHTML=current_rank+'/'+s['max_level'];}else{rank.innerHTML='<span class="skill_over_skill">'+current_rank+'</span>/'+s['max_level'];};this.fill_tooltip(id);if(this.depend[s['code_name']]){for(var i=0;i<this.depend[s['code_name']].length;i++){this.switch_check(this.depend[s['code_name']][i]);}};this.fill_links();},fill_links:function(){var lng=function(word){return skills_trees.langs[skills_trees.current_lang][word];};var lt=document.getElementById('skills_trees_links_text');if(!lt.firstChild){lt.appendChild(document.createTextNode(lng('links')+': '));};var l=document.getElementById('skills_trees_links_links').getElementsByTagName('a');if(!l[0].firstChild){l[0].appendChild(document.createTextNode(lng('links_short')));l[1].appendChild(document.createTextNode(lng('links_detailed')));};lvl='?l='+this.character['level'];if(this.params['default_lang']!=this.params['current_lang']){lvl+='&lng='+this.params['current_lang'];};l0href='&s=';for(var i=0;i<this.collection.length;i++){if(!this.current_params[this.collection[i]['code_name']]){l0href+='0';}else{l0href+=this.current_params[this.collection[i]['code_name']];}};l1href='&d='+skills_trees.character['skills'].join('.');l[0].setAttribute('href',lvl+l0href);l[1].setAttribute('href',lvl+l1href);},enable:function(id){document.getElementById('skill_'+id).className=this.params['skill_block_enabled_className'];},disable:function(id){if(!this.current_params[this.collection[id]['code_name']])document.getElementById('skill_'+id).className=this.params['skill_block_disabled_className'];},show_tooltip:function(id){var t=document.getElementById(this.params['tooltip_block_id']);this.fill_tooltip(id);t.style.display='block';},get_current_rank:function(id){var counter=0;for(var i=0;i<this.character.skills.length;i++){if(this.collection[this.character.skills[i]]==id)counter++;};return counter;},fill_tooltip:function(id){var s=this.collection[id];var getid=function(el){return document.getElementById(el);};var fill=function(el,text){if(!text){getid('stt_'+el).style.display='none';}else{getid('stt_'+el).style.display='';};var prefix=getid('stt_'+el+'_prefix');if(prefix){var prefix_text=skills_trees.translate(el);if(text){if(prefix_text)prefix.innerHTML=prefix_text+': ';}else{prefix.innerHTML='';}};var content=getid('stt_'+el+'_postfix');if(!content){content=getid('stt_'+el);};content.innerHTML=text;};var lng=function(word){return skills_trees.langs[skills_trees.current_lang][word];};var slng=function(s,word){if(!s['langs'][skills_trees.current_lang][word])return '';return s['langs'][skills_trees.current_lang][word];};var lvl=this.character.level;var current_rank=this.current_params[s['code_name']]||0;var cl=parseInt(skills_trees.character.level);fill('skill_name',slng(s,'real_name'));fill('skill_group',slng(s,'skill_group'));fill('req_item',slng(s,'req_item'));if(s.require.hero_level&&s.require.hero_level['start']>this.character.level){fill('req_level',lng('req_level')+' ('+s.require.hero_level['start']+')');}else{fill('req_level','');};if(s.require.skill&&s.require.skill_level>(this.current_params[s.require.skill]||0)){fill('req_skill',lng('requires')+' <span class="stt_skill_block_req_skill">'+slng(this.collection[this.name2id[s.require.skill]],'real_name')+'</span> '+lng('level')+' '+s.require.skill_level);}else{fill('req_skill','');};fill('spec_comment',slng(s,'spec_comment'));var ratio=1+0.01*Math.floor(this.character.info['ratio']*(cl-1));if(s['power_level_cost']){fill('power_cost',parseFloat(eval(s['power_level_cost'])).toFixed(1));}else{fill('power_cost','');};if(s['range']){fill('range',s['range']+' '+lng('meters'));}else{fill('range','');};var skill_rank=current_rank;if(current_rank>0){if(s['max_level']>=current_rank){fill('cur_rank_level',current_rank+'/'+s['max_level']);}else{fill('cur_rank_level','<span class="skill_over_skill">'+current_rank+'</span>/'+s['max_level']);};if(s['effect']){var text=slng(s,'effect');for(var i=0;i<s['effect'].length;i++){var e=parseInt(eval(s['effect'][i]));text=text.replace(new RegExp('\{effect'+i+'\};?','img'),'<span class="skill_effect_param">'+e+'</span>');}};fill('cur_rank_effect',text);if(s['rate_of_use']){fill('cur_rank_rate_of_use',eval(s['rate_of_use'])+' '+this.translate('seconds'));}else{fill('cur_rank_rate_of_use','');};if(s['power_rank_cost']){fill('cur_rank_power_cost',lng('power_cost')+': '+parseFloat(eval(s['power_rank_cost'])).toFixed(1));}else{fill('cur_rank_power_cost','');};if(s['rank_range']){fill('cur_rank_range',parseFloat(eval(s['rank_range'])).toFixed(1));}else{fill('cur_rank_range','');}}else{fill('cur_rank_level','');fill('cur_rank_effect','');fill('cur_rank_rate_of_use','');};var desc=slng(s,'description');if(s['desc']&&s['desc'].length){for(var i=0;i<s['desc'].length;i++){var e=parseInt(eval(s['desc'][i]));desc=desc.replace(new RegExp('\{effect'+i+'\};?','img'),'<span class="skill_effect_param">'+e+'</span>');}};fill('description',desc);if(current_rank<s['max_level']){fill('next_rank_level',current_rank+1+'/'+s['max_level']);}else{fill('next_rank_level','<span class="skill_over_skill">'+(current_rank+1)+'</span>/'+s['max_level']);};var skill_rank=current_rank+1;if(s['effect']){var text=slng(s,'effect');for(var i=0;i<s['effect'].length;i++){var e=eval(s['effect'][i]);text=text.replace(new RegExp('\{effect'+i+'\};?','img'),'<span class="skill_effect_param">'+e+'</span>');}};fill('next_rank_effect',text);if(s['rate_of_use']){fill('next_rank_rate_of_use',eval(s['rate_of_use'])+' '+this.translate('seconds'));}else{fill('next_rank_rate_of_use','');};if(s.require.hero_level){var next=s.require.hero_level['start']+(this.current_params[s['code_name']]||0)*s.require.hero_level['interval'];if(this.character['level']<next){fill('next_rank_req_level',next);}else{fill('next_rank_req_level','');}}else{fill('next_rank_req_level','');};ratio=1+0.01*Math.floor(this.character.info['ratio']*cl);if(s['power_rank_cost']){fill('next_rank_power_cost',lng('power_cost')+': '+parseFloat(eval(s['power_rank_cost'])).toFixed(1));}else{fill('next_rank_power_cost','');}},hide_tooltip:function(id){document.getElementById(this.params['tooltip_block_id']).style.display='none';},get_event_skill_id:function(event){if(window.event){var skill_id=window.event.srcElement.getAttribute('skill_id');}else{var skill_id=event.target.getAttribute('skill_id');};return skills_trees.show_tooltip(this.getAttribute('skill_id'));},onmouseover:function(event){if(window.event){var skill_id=window.event.srcElement.getAttribute('skill_id');}else{var skill_id=event.target.getAttribute('skill_id');};skills_trees.show_tooltip(this.getAttribute('skill_id'));},onmousemove:function(event){var e=window.event||event;if(e.pageX||e.pageY){var x=e.pageX;var y=e.pageY;}else{var x=window.event.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;var y=window.event.clientY+document.body.scrollTop+document.documentElement.scrollTop;};var t=document.getElementById(skills_trees.params['tooltip_block_id']);t.style.top=y+'px';t.style.left=x+25+'px';},onmouseout:function(){skills_trees.hide_tooltip();},minus_button:function(){skills_trees.minus_skill(this.parentNode.getAttribute('skill_id'));},minus_skill:function(id){if((this.collection[id]['code_name']==this.character.start_skill||this.collection[id]['code_name']=='sprint')&&this.current_params[this.collection[id]['code_name']]==1){return;};var minus_skill='doc'+'ument';if(!this.pro_mode){var d_skills=this.depend[this.collection[id]['code_name']];if(d_skills)for(var i=0;i<d_skills.length;i++){var d_block=this.collection[d_skills[i]];if(d_block.require['skill']){if(!eval(minus_skill+'.loca'+'tion'+'.pathname').match('skills')){return !1;};if(this.current_params[d_block['code_name']]&&this.current_params[this.collection[id]['code_name']]<=d_block.require['skill_level']&&this.current_params[d_block['code_name']]>0){return;}}}};var s=skills_trees.character['skills'];for(var i=(s.length-1);i>-1;i--){if(s[i]==id){skills_trees.character['skills'].splice(i,1);if(this.current_params[this.collection[id]['code_name']]>0){this.current_params[this.collection[id]['code_name']]--;};this.refresh_free_points();this.set_skill(id);this.switch_check(id);return;}}},plus_button:function(){skills_trees.plus_skill(this.parentNode.getAttribute('skill_id'));},plus_skill:function(id){if(!this.pro_mode){var s=this.collection[id];if(s.require.hero_level){var next=s.require.hero_level['start']+(this.current_params[s['code_name']]||0)*s.require.hero_level['interval'];next=next>(this.character.level);}else{var next=false;};if(this.character.level<=(this.character.skills.length-1)||next){return false;};if(this.current_params[this.collection[id]['code_name']]==this.collection[id]['max_level']){return false;}};skills_trees.character['skills'].push(id);if(!this.current_params[this.collection[id]['code_name']]){this.current_params[this.collection[id]['code_name']]=1;}else{this.current_params[this.collection[id]['code_name']]++;};this.refresh_free_points();this.set_skill(id);}};var lang_ru={skill_group:'Группа',req_item:'Требуется',req_level:'Уровень персонажа слишком низкий',requires:'Требуется',level:'Уровень',description:'Описание',effect:'Эффект',power_cost:'Энергия (св)',cur_rank_level:'Сейчас',cur_rank_effect:'Эффект',next_rank_level:'Следующий',next_rank_effect:'Эффект',next_rank_req_level:'Требуется уровень персонажа',cur_rank_rate_of_use:'Частота использования',next_rank_rate_of_use:'Частота использования',seconds:'с',free_points:'свободных очков',character_level:'Уровень',range:'Дистанция',meters:'м',links:'Ссылки на этот билд',links_short:'короткая',links_detailed:'полная (с историей)'};var lang_en={skill_group:'Skill Groups',req_item:'Requires',req_level:'Character level too low to upgrade this skill',requires:'Requires',level:'Level',description:'Description',effect:'Effect',power_cost:'Power cost',cur_rank_level:'Current Rank',cur_rank_effect:'Effect',next_rank_level:'Next Rank',next_rank_effect:'Effect',next_rank_req_level:'Requires Level',cur_rank_rate_of_use:'Rate of use',next_rank_rate_of_use:'Rate of use',seconds:'sec',free_points:'free points',character_level:'Level',range:'Range',meters:'meters',links:'Links',links_short:'short',links_detailed:'detailed with history'};skills_trees.add_lang('en',lang_en);skills_trees.add_lang('ru',lang_ru);var s_sprint={code_name:'sprint',skill_img_enabled_src:'sprint.jpg',skill_img_disabled_src:'sprint_d.jpg',style_left:'169px',style_top:'480px',power_start_level:0,power_per_level:0,require:{hero_level:{start:1,interval:1}},max_level:7,range:'',langs:{'en':{real_name:'Sprint',skill_group:'',req_item:'',description:'A fast burst of running speed.',effect:'Run speed increased by {effect0};%.'}},effect:['55+15*skill_rank'],rate_of_use:'5'};skills_trees.add_skill(s_sprint);