﻿/* Aion Character Info
 * author : yeongun@ncsoft.net
 * last update: 2009.3.2
 * (c) 2008 ncsoft UIDevelopment Team */
var characterInfo={
	list:0,
	field:0,
	items:[],
	urls:[],
	category:['enchant_count','info','base','bonus','enchant_stones','proc_info','stigma_base','stigma_skill','set_item_list'],
	observe:function(objId,field,optionId) {
		characterInfo.field=$(field);
		characterInfo.list=objId;
		Event.observe($(objId),'mouseover',characterInfo.getItem);
		Event.observe($(objId),'mouseout',characterInfo.layerOff);
		Event.observe($('item_close'),'click',characterInfo.layerOff);
	},
	layerOn:function() {
	},
	layerOff:function(e) {
		characterInfo.field.hide();
	},
	getItem:function(e) {
		var caller=Event.element(e);
		var callClass = false;
		var callTagName = caller.tagName.toUpperCase();
		if (caller.tagName=='SPAN') callClass=caller;
		if (!callClass) return;
		var callClassString = callClass.className.split(' ')[0];
		idx=parseInt(callClassString.substring(4));
		if (!Object.isUndefined(characterInfo.items[AionMiniOpt.charID][idx])) { characterInfo.display(idx); }
		else {
			if (Object.isUndefined(characterInfo.urls[idx])) {
				alert('WRONG URL : '+idx);
				return;
			}
			new Ajax.Request(characterInfo.urls[idx], {
				method: 'get',
				onCreate:function() {
				},
				onComplete: function(request) {
					//$('progress').setStyle({display:'none'});
					var item=request.responseXML;
					var getIdx=idx;
					var keys,values,finalValue,image;
					characterInfo.items[AionMiniOpt.charID][getIdx]=new Hash();
					for (i=0;i<characterInfo.category.length;i++) {
						keys=item.getElementsByTagName(characterInfo.category[i])[0];
						if (Object.isUndefined(keys)||keys==null) continue;
						if (keys.childNodes.length==0) continue;
						values=keys.getElementsByTagName('property');
						if (values.length==0) {
							characterInfo.items[AionMiniOpt.charID][getIdx].set(characterInfo.category[i],keys.firstChild.nodeValue);
						}
						else {
							finalValue=[];
							for (j=0;j<values.length;j++) {
								finalValue[j]=[values[j].getAttribute('key'),values[j].getAttribute('value')];
							}
							characterInfo.items[AionMiniOpt.charID][getIdx].set(characterInfo.category[i],finalValue);
						}
					}
					characterInfo.display(idx);
					var item=getIdx=keys=values=finalValue=null;
				}
			});
		}
	},
	display:function(idx) {
		if (Object.isString(characterInfo.items[AionMiniOpt.charID][idx])) {
			characterInfo.field.update(characterInfo.items[AionMiniOpt.charID][idx]);
			characterInfo.field.setStyle({display:'block'});
			return;
		}
		var currentCategory;
		var inputTemplete;
		var currentItem=characterInfo.items[AionMiniOpt.charID][idx];
		var isBonus,plus,tmpValue,tmpClass,usetemplete,f;
		var setItem={};
		usetemplete=function(idx,title) {
			inputTemplete[idx]='<dt>'+title+'</dt>';
			inputTemplete[idx]+=new characterInfo.singleTemplete(currentCategory[idx][1]);
		};
		for (var i=0; i<characterInfo.category.length; i++) {
			inputTemplete=[];
			currentCategory=currentItem.get(characterInfo.category[i]);
			if (currentCategory===0) continue;
			if (Object.isUndefined(currentCategory)) {
				if ($(characterInfo.category[i])) {
					$(characterInfo.category[i]).update('');
					$(characterInfo.category[i]).hide();
				}
				continue;
			}
			if (!$(characterInfo.category[i])) { if (characterInfo.category[i]=='enchant_count') plus=currentCategory; }
			else {
				$(characterInfo.category[i]).setStyle({display:'block'});
				for (j=0; j<currentCategory.length; j++) {
					// category==bonus || enchant_stones
					isBonus=(characterInfo.category[i]=='bonus'||characterInfo.category[i]=='enchant_stones') ? 1 : 0;
					// value == 0
					if (currentCategory[j][1]==0) {
						if (characterInfo.category[i]=='enchant_stones') {
							inputTemplete[j]='<dd><img src="http://static.uk.aiononline.com/aion/livestatus/character/empty_stone.gif" alt="" /></dd>';
							if (j==0) inputTemplete[j]='<dt>Manastone Socketing</dt>'+inputTemplete[j];
						}
						continue;
					}
					switch (currentCategory[j][0]) {
						case 'possibleLevel' :
							if (currentCategory[j][1].toUpperCase()!='NULL')
							inputTemplete[j]=new characterInfo.singleTemplete('Available for Level '+currentCategory[j][1]+' or higher');
							break;
						case 'itemQuality' : tmpClass=currentCategory[j][1];  break;
						case 'itemName' :
							tmpValue=(plus!=0&&!Object.isUndefined(plus)) ? '<span class="value_plus">+'+plus+'</span> <span class="'+tmpClass+'">'+currentCategory[j][1]+'</span>' : '<span class="'+tmpClass+'">'+currentCategory[j][1]+'</span>';
							inputTemplete[j]='<dt>'+tmpValue+'</dt>';
							break;
						case 'desc' : usetemplete(j,'Godstone Socket enabled'); break;
						case 'attackDelay' : inputTemplete[j]='<dt>'+currentCategory[j][1]+'</dt>'; break;
						case 'target' : usetemplete(j,'Target'); break;
						case 'castingDelay' : usetemplete(j,'Casting Time'); break;
						case 'delayTime' : usetemplete(j,'Cooldown'); break;
						case 'setItemName' :
							inputTemplete[j]='<dt class="'+tmpClass+'">'+currentCategory[j][1]+' ('+currentCategory[j+2][1]+'/'+currentCategory[j+1][1]+')</dt>';
							break;
						default :
							if (currentCategory[j][0]=='setItemCount'||currentCategory[j][0]=='setItemUsingCount') {
								setItem[currentCategory[j][0]]=parseInt(currentCategory[j][1]);
							} else if ((Object.isNumber(currentCategory[j][0]-0)&&currentCategory[j][0].length===1)||characterInfo.category[i]=='fullset_effect') {
								if (characterInfo.category[i]=='fullset_effect') {
									setItem['class']=(parseInt(setItem['setItemUsingCount'])==parseInt(setItem['setItemUsingCount'])) ? tmpClass : '';
									inputTemplete[j]='<dt class=\"'+setItem['class']+'\">Set Effect</dt>';
								} else {
									setItem['class']=(parseInt(setItem['setItemUsingCount'])>=parseInt(currentCategory[j][0])) ? tmpClass : '';
									inputTemplete[j]='<dt class="'+setItem['class']+'">Equip Effect ('+currentCategory[j][0]+')</dt>';
								}
								setItem['effects']=currentCategory[j][1].split(',');
								f=0;
								while (setItem['effects'][f]) {
									setItem['property']=setItem['effects'][f].split('=');
									setItem['fly']=(setItem['property'][0].strip().length>=6) ? ' fly' : '';
									inputTemplete[j]+='<dd class=\"'+setItem['class']+'1\"><div class=\"property'+setItem['fly']+'\">'+setItem['property'][0]+'<\/div><div class=\"value'+setItem['fly']+'\"">+'+setItem['property'][1]+'</div></dd>';
									f++;
								}
							} else if (currentCategory[j][0].toLowerCase().indexOf('pvp')==0) {
								inputTemplete[j]=new characterInfo.templete(currentCategory[j][0],'+'+currentCategory[j][1]);
							} else if (currentCategory[j][0]=='impossibleProperty')
								inputTemplete[j]=new characterInfo.singleTemplete(currentCategory[j][1]);
							else {
								if(currentCategory[j][0].indexOf('enchant_')==0) {
									tmpValue=currentCategory[j][0].split('_')[1];
									var tmpValue2;
									if (tmpValue=='physical attack power') {
										tmpValue2=characterInfo.checkEnchant('Attack',inputTemplete,currentCategory[j][1]);
										if (tmpValue2) { 
											inputTemplete[tmpValue2[0]]=tmpValue2[1];
										}
									} else if (tmpValue=='Magic Boost') {
										tmpValue2=characterInfo.checkEnchant('Magic Boost',inputTemplete,currentCategory[j][1]);
										if (tmpValue2) { 
											inputTemplete[tmpValue2[0]]=tmpValue2[1];
										}
									} else {
										tmpValue2=characterInfo.checkEnchant(tmpValue,inputTemplete,currentCategory[j][1]);
										if (tmpValue2) inputTemplete[tmpValue2[0]]=tmpValue2[1];
										else inputTemplete[j]=new characterInfo.templete(tmpValue,currentCategory[j][1]);
									}
								} 
								else if (currentCategory[j][0].strip().indexOf('Min Attack Power')>=0||currentCategory[j][0].strip().indexOf('Max Attack Power')>=0) {
									if (currentCategory[j+1][0].indexOf('Attack')>=0) inputTemplete[j]=new characterInfo.templete('Attack',currentCategory[j][1]+' - '+currentCategory[j+1][1]);
								}
								else if (currentCategory[j][0].indexOf('Grade')>=0) {
									inputTemplete[j]=new characterInfo.templete(currentCategory[j][0],currentCategory[j][1]);
								} 
								else {
									if (characterInfo.category[i]=='enchant_stones') {
										inputTemplete[j]='<dd><img src="http://static.uk.aiononline.com/aion/livestatus/character/stone.gif" alt="'+currentCategory[j][0]+'" /> <span class="tit">'+currentCategory[j][0]+'</span> <span class="value">'+currentCategory[j][1]+'</span></dd>';
										if (j==0) inputTemplete[j]='<dt>Manastone Socketing</dt>'+inputTemplete[j];
									}
									else if (characterInfo.category[i]==='set_item_list') {
										setItem[j+'_']=(currentCategory[j][1]=='true') ? tmpClass : '';
										inputTemplete[j]='<dd class=\"'+setItem[j+'_']+'1\">'+currentCategory[j][0]+'</dd>';
									}
									else inputTemplete[j]=new characterInfo.templete(currentCategory[j][0],currentCategory[j][1],isBonus);
								}
							}	
						}
					}
				$(characterInfo.category[i]).update(inputTemplete.join(''));
			}
		}
		if (Object.isUndefined(characterInfo.items[AionMiniOpt.charID][idx])) characterInfo.items[AionMiniOpt.charID][idx]=characterInfo.field.innerHTML;
		characterInfo.field.setStyle({display:'block'});
		characterInfo.field.setStyle({zIndex:200});
	},
	checkEnchant:function(check,target,value) {
		var tmpValue=0;
		var tmpClass,tmpClassTrim
		var intValue=parseInt(value);
		var isMinus=(intValue<0) ? ['down',''] : ['up','+'];
		for (k=0;k<target.length;k++) {
			if (!Object.isUndefined(target[k])) {
				tmpClass=target[k].toString();
				tmpClassTrim=tmpClass.strip();
				if (tmpClassTrim.indexOf('>'+check.strip()+'</')>=0) {
					tmpValue=tmpClass.substr(tmpClass.lastIndexOf('">')+2);
					tmpValue=tmpValue.substr(0,tmpValue.indexOf('</'));
					tmpValue=tmpClass.replace(tmpValue,'<span class="value_'+isMinus[0]+'">'+tmpValue+' ('+isMinus[1]+''+value+')</span>')
					return [k,tmpValue];
				}
			}
		}
		return tmpValue;
	},
	closeShowLayer:function() {
		characterInfo.field.hide();
	},
	templete:Class.create({
		initialize: function(key,value,bonus){
			this.key = key;
			this.value = (bonus) ? '+'+value : value;
		},
		toString: function(){ return '<dd><div class="property">'+this.key+'</div><div class="value">'+this.value+'</div></dd>'; }
	}),
	singleTemplete:Class.create({
		initialize: function(value){ this.value = value; },
		toString: function(){ return '<dd>'+this.value+'</dd>'; }
	})
}
