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 = $('wrap_character_2d').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], {
            new Ajax.Request("/livestatus/", {
                method: 'POST',
                parameters: {'aionurl': characterInfo.urls[idx]},
                onCreate:function() {
                },
                onComplete: function(request) {
                    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.na.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.na.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";
            $('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();
        }
    }
}


