var characterInfo={
	list:0,
	field:0,
	items:[],
	urls:[],
	indexing:[0, 2, 1, 3, 10, 11, 12, 13, 16, 6, 7, 8, 9, 14, 15, 17],
	category:['enchant_count','info','base','bonus','enchant_stones','proc_info','stigma_base','stigma_skill','set_item_list','set_effect','fullset_effect'],
	observe:function(objId,tag,field) {
		var callerList=$(objId).select(tag);
		characterInfo.field=$(field);
		characterInfo.list=objId;
		for (i=0; i<callerList.length; i++)
			Event.observe(callerList[i],'click',characterInfo.getItem);
		new Insertion.After(field,'<iframe src="about:blank" id="'+field + '_iframe' +'" frameborder="0" style="border:0; width:'+(characterInfo.field.getWidth()-4)+'px; height:0px; left:63px; position:absolute;display:none;"></iframe>');
		Event.observe($('item_close'),'click',characterInfo.layerOff);
	},
	layerOn:function() {
	},
	layerOff:function(e) {
		characterInfo.field.hide();
		$(characterInfo.field.id+'_iframe').hide();
	},
	getItem:function(e) {
		var caller=Event.element(e);
		var callClass = false;
		var callTagName = caller.tagName.toUpperCase();
		if ((callTagName == 'LI' || callTagName == 'P') && caller.className.indexOf('item') >= 0){
			callClass = caller;
		}
		else {
			for (v = 0;v < caller.ancestors().length; v++) {
				callTagName = caller.ancestors()[v].tagName.toUpperCase();
				if ((callTagName == 'LI' || callTagName == 'P') && caller.ancestors()[v].className.indexOf('item') >= 0){
					callClass = caller.ancestors()[v];
					break;
				}
			}
		}

		if (!callClass) return;
		if (callClass.className.length < 5 || callClass.className.indexOf('item') < 0) return;
		
		var idx = parseInt(callClass.className.substring(4))-1;
		if (callTagName == 'P') idx = characterInfo.indexing[idx];
		var relElement=characterInfo.field.getOffsetParent();
		var relElementPos=relElement.cumulativeOffset();
		var fieldTop=Event.pointerY(e)-relElementPos[1];
		var fieldLeft='58';
		if (callTagName == 'P') {
			fieldLeft = '161';
		}
		if (idx>=20) {
			fieldTop='25';
			fieldLeft='119';
			if (callTagName == 'P') {
				fieldLeft = '222';
			}
		}
		// Get parent layer's position - ncwest
		var parentPos = $('div_contents').cumulativeOffset();		
		fieldLeft = parentPos[0] + 160;		
		characterInfo.field.setStyle({top:fieldTop+'px',left:fieldLeft+'px'});		
		if (!Object.isUndefined(characterInfo.items[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[getIdx]=new Hash();
					for (i=0;i<characterInfo.category.length;i++) {
						keys=item.getElementsByTagName(characterInfo.category[i])[0];
						if (keys.childNodes.length==0) continue;
						if (Object.isUndefined(keys)||keys==null) continue;
						values=keys.getElementsByTagName('property');
						if (values.length==0) {
							characterInfo.items[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[getIdx].set(characterInfo.category[i],finalValue);
						}
					}

					characterInfo.display(idx);
					var item=getIdx=keys=values=finalValue=null;
				}
			});
		}
	},
	display:function(idx) {
		if (Object.isString(characterInfo.items[idx])) {
			characterInfo.field.update(characterInfo.items[idx]);
			characterInfo.field.setStyle({display:'block'});
			return;
		}
		var currentCategory;
		var inputTemplete;
		var currentItem=characterInfo.items[idx];
		var isBonus,plus,tmpValue,tmpClass,usetemplete,f;
		var setItem={};
		if (!Object.isUndefined(characterInfo.aionBookUrl[idx])) {
			var aionBookUrl=encodeURI(characterInfo.aionBookUrl[idx]);
			$('item_url').setAttribute('href',aionBookUrl);
		}
		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.fr.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.fr.aiononline.com/aion/livestatus/character/stone.gif" alt="'+currentCategory[j][0]+'" /> '+currentCategory[j][0]+' <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[idx])) characterInfo.items[idx]=characterInfo.field.innerHTML;
		characterInfo.field.setStyle({display:'block'});
		//$(characterInfo.field.id + '_iframe').setStyle({display:'block',top:parseInt(characterInfo.field.getStyle('top'))+'px',left:(parseInt(characterInfo.field.getStyle('left'))+3)+'px',height:characterInfo.field.getHeight()+'px',zIndex:100});
		$(characterInfo.field.id + '_iframe').setStyle({display:'block',top:parseInt(characterInfo.field.getStyle('top'))+'px',left:parseInt(characterInfo.field.getStyle('left')) +'px',height:characterInfo.field.getHeight()+'px',zIndex:100});
		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();
		$(characterInfo.field.id+'_iframe').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>'; }
	})
}

function goBookUrl(name_string) {
	var aionBookUrl = encodeURI(name_string);
	document.location.href = aionBookUrl;
}

/* Legion Box Draggable */
function minLegion() {
	if (!$('popLegion')) return;
	var popElement=$('popLegion');
	var btn1=$('legion_handle').select('img.btn_min')[0];
	var btn2=$('legion_handle').select('img.btn_close')[0];
	var toggle=[$('changescope2'),popElement.select('div.pager')[0]];
	Event.observe(btn1,'click',function(e) {
		var srcElement=e.findElement('img');
		var changeSrc;
		if (srcElement.src.indexOf('minimum.gif')>0) {
			changeSrc=srcElement.src.replace('minimum.gif','maximum.gif');
			srcElement.src=changeSrc;
			for (i=0;i<toggle.length;i++)
				toggle[i].setStyle({display:'none'});
		}
		else {
			changeSrc=srcElement.src.replace('maximum.gif','minimum.gif');
			srcElement.src=changeSrc;
			for (i=0;i<toggle.length;i++)
				toggle[i].setStyle({display:''});
		}
		srcElement=changeSrc=null;
	});
	Event.observe(btn2,'click',function() {
		popElement.setStyle({display:'none'});
	});
	new Draggable('popLegion',{handle:'legion_handle',starteffect:false,endeffect:false});
}
minLegion();

var CharacterTab=[];
var CharacterInfoSearch={};
CharacterInfoSearch.viewAnother=function(idx){
	if (Object.isUndefined(CharacterTab[idx])) {
		if (idx == 1) {
			CharacterTab[idx] = "CHECK";
			$('wrap_character_2d').show();
			$('wrap_character_3d').hide();
		}
		else if (idx == 2) {
			CharacterTab[idx] = "CHECK";
			LoadCharacterView();
			$('wrap_character_2d').hide();
			$('wrap_character_3d').show();
		}
	}
	else {
		if (idx == 1) {
			$('wrap_character_2d').show();
			$('wrap_character_3d').hide();
		}
		else if (idx == 2) {
			$('wrap_character_2d').hide();
			$('wrap_character_3d').show();
		}
	}
	characterInfo.closeShowLayer();
}

function LoadCharacterView()
{
	var appletsource = '<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="280" height="564" codebase="http://java.sun.com/update/1.6.0/jinstall-6u10-windows-i586.cab#Version=6,0,0,10">'
		+ '<param name="java_code" value="avatar.AppletTestAvatar">'
		+ '<param name="mayscript" value="true">'
		+ '<param name="java_codebase" value="http://static.fr.aiononline.com/aion/jme/character/">'
		+ '<param name="java_archive" value="windows_natives.jar,commons-httpclient-3.1.jar,commons-logging-1.1.1.jar,commons-codec-1.3.jar,lwjgl_util_applet.jar,lwjgl.jar,jme.jar,jme-awt.jar,jme-model.jar,list.jar,data.jar,avatar.jar">'
		+ '<param name="type" value="application/x-java-applet;version=1.6">'
		+ '<param name="name" value="applet">'
		+ '<param name="separate_jvm" value="true">'
		+ '<param name="classloader_cache" value="false">'
		+ '<comment>'
		+ '<embed id="JMEApplet" type="application/x-java-applet;version=1.6" width="280" height="564" pluginspage="http://java.sun.com/products/plugin/" java_code="avatar.AppletTestAvatar" java_codebase="http://static.fr.aiononline.com/aion/jme/character/" java_archive="windows_natives.jar,commons-httpclient-3.1.jar,commons-logging-1.1.1.jar,commons-codec-1.3.jar,lwjgl_util_applet.jar,lwjgl.jar,jme.jar,jme-awt.jar,jme-model.jar,list.jar,data.jar,avatar.jar" name="applet"  mayscript="true"/>'
		+ '<noembed>'
		+ '<br /><Strong>Java plug-in required.<br />'
		+ '<a href="http://www.java.com/en/download/">Download Java plug-in here</a></Strong>'
		+ '<img src="http://static.fr.aiononline.com/aion/info/zone/img_jme.gif" alt="" />'
		+ '</noembed>'
		+ '</comment>'
		+ '</object>';
	
	$('appletplace').innerHTML = appletsource;
}