var cZ = 10;
var cLeft = 510;
var cTop = 10;
var zIndex = 120;
var cMonsterCard;
var online = 0;
var offline = 1;


jQuery(document).ready(function(){
  jQuery(".help").fancybox({
         'speedIn'      : 600,
         'speedOut'     : 500,
         'autoDimensions'  : false,
         'width'        : 550,
         'height'       : 500,
         'transitionIn' : 'elastic',
         'transitionOut': 'elastic',
         'easingIn'     : 'easeOutBack',
         'easingOut'    : 'easeInBack',
         'padding'      : 15});
  jQuery(".offlineVersion").fancybox({
         'speedIn'      : 600,
         'speedOut'     : 500,
         'autoDimensions'  : false,
         'width'        : 550,
         'height'       : 500,
         'transitionIn' : 'elastic',
         'transitionOut': 'elastic',
         'easingIn'     : 'easeOutBack',
         'easingOut'    : 'easeInBack',
         'padding'      : 15});
   createSelectVersion();
   var cookieValue = jQuery.cookie("mh3calcVersion");
   if (cookieValue==null) {
      jQuery("#selectVersion").dialog("open");
   } else {
      if (cookieValue=="text") { prepareTextual(); }
         else { prepareGraphical(); }
   }

  // the calculation ajaxorfaxormajic
   jQuery(".button").live("click", function() {
      var ids=prepareIDs();
      if (cMonsterCard!=null || jQuery.cookie("mh3calcVersion")=="text") {
         jQuery.fancybox({
            'speedIn'      : 600,
            'speedOut'     : 500,
            'autoDimensions'  : false,
            'width'        : 550,
            'height'       : 500,
            'transitionIn' : 'elastic',
            'transitionOut': 'elastic',
            'easingIn'     : 'easeOutBack',
            'easingOut'    : 'easeInBack',
            'padding'      : 15,
            'href'         : 'weaponCalcTools.php',
            'onComplete'   : function() {
                  prepareResult();
               },
            'ajax' : {
               type  : 'POST',
               data  : ids
               }
         });
      }
   });

});

function createSelectVersion() {
   jQuery("#selectVersion").dialog({
      bgiframe: true,
      autoOpen: false,
      height: 380,
      width: 400,
      modal: true,
      buttons: {
         'High Kung Fu': function() {
            jQuery.cookie("mh3calcVersion","graphic",{ path: '/', expires: 10});
            prepareGraphical();
            jQuery(this).dialog('close');
         },
         'Low Kung Fu': function() {
            jQuery.cookie("mh3calcVersion","text",{ path: '/', expires: 10});
            prepareTextual();
            jQuery(this).dialog('close');
         }
      },
      beforeclose: function() {
         var cookieValue = jQuery.cookie("mh3calcVersion");
         return (cookieValue!=null);
      }
   });
}

function prepareTextual() {
   jQuery("#switchtype").append(jQuery("#textual"));
   jQuery("#textual").show();
   jQuery(".button").css("top", "7px").css("left","180px");
}

function prepareGraphical() {
   jQuery("#switchtype").append(jQuery("#graphical"));
   jQuery("#graphical").show();
   make_draggable(jQuery('.monsterCard'));
   jQuery("#weaponClass").draggable({
      grid: [0,64],
      axis: 'y',
      containment: 'parent'
      });
   jQuery("#aup").draggable({
      grid: [0,48],
      axis: 'y',
      containment: 'parent'
      });
   jQuery("#ra").draggable({
      grid: [0,48],
      axis: 'y',
      containment: 'parent'
      });
   jQuery(".knob").live("click",function() {
      var pos = jQuery(this).position();
      if (jQuery(this).hasClass('knobDown')) {
         jQuery(this).removeClass('knobDown').addClass('knobUp');
         jQuery(this).css('top', pos.top-10);
      } else {
         jQuery(this).removeClass('knobUp').addClass('knobDown');
         jQuery(this).css('top', pos.top+10);
      }
   });

   jQuery(".star div").live("click",function() {

      var id = jQuery(this).attr('id');
      var type = id.substr(0,3);
      var number = id.substr(3,1);
      if (type=="off") {
         offline = number;
      } else {
         online = number;
      }
      var state = true;
      for (var i = 1; i <= 6; i++) {
         if (i>number) state=false;
         if (state) {
            jQuery("#"+type+i).removeClass("off");
            jQuery("#"+type+i).addClass("on");
         } else {
            jQuery("#"+type+i).removeClass("on");
            jQuery("#"+type+i).addClass("off");
         }
      }
   });
}

function prepareResult() {
   jQuery(".zonesManipulator").hide();
   jQuery(".weaponResult").hide();
   jQuery("#zonesManipulatorClick").click(function() {
      jQuery(".zonesManipulator").slideToggle("slow");
   });
   jQuery(".weaponDetail").click(function() {
      jQuery(this).children(".weaponResult").slideToggle("slow");
   });
   jQuery(".zonesManipulator th").hover(
      function() {
         var col = this.className;
         jQuery(".zonesManipulator ."+col).css("background-color","#FFCC66");
      },
      function() {
         var col = this.className;
         jQuery(".zonesManipulator ."+col).css("background-color","#ffffff");
      });
    jQuery(".zonesManipulator .name").hover(
      function() {
         var col = this.getAttribute("rel");
         jQuery(".zonesManipulator ."+col).css("background-color","#FFCC66");
      },
      function() {
         var col = this.getAttribute("rel");
         jQuery(".zonesManipulator ."+col).css("background-color","#ffffff");
      });
    jQuery(".zonesManipulator .cell").hover(
      function() {
         jQuery(this).css("background-color","#FFCC66");
      },
      function() {
         jQuery(this).css("background-color","#ffffff");
      });
   jQuery(".zonesManipulator th").click(function() {
         recalculateFor(this.className);
      });
   jQuery(".zonesManipulator .name").click(function() {
         recalculateFor(this.getAttribute("rel"));
      });
   jQuery(".zonesManipulator .cell").click(function() {
         recalculateFor(this.className);
      });
}

function recalculateFor(className) {
   className = className.replace("cell ","");
   // deactivate / active the cells in the selection table
   jQuery(".zonesManipulator .cell[class*="+className+"]").each(function() {
         localClassName = this.className.replace("cell ","");
         if (jQuery(this).html()=="O") {
            jQuery(".weaponResult .cell[class*="+localClassName+"]").each(function() {
                  if (this.getAttribute("rel")=="X") {
                     this.setAttribute("rel",jQuery(this).html());
                     jQuery(this).css("color","red").html("0");
                  }
               });
            jQuery(this).html("---");
         } else {
            jQuery(".weaponResult .cell[class*="+localClassName+"]").each(function() {
                  if (this.getAttribute("rel")!="X") {
                     jQuery(this).css("color","black").html(this.getAttribute("rel"));
                     this.setAttribute("rel","X");
                  }
               });
            jQuery(this).html("O");
         }
      });
      // recalculate the weapon results
      recalculate();
}

function recalculate() {
   jQuery(".weaponResult").each(function() {
      // a weapon table
      var scoreID = "#"+this.id.replace("table","score");
      var score = 0;
      jQuery(this).find(".cell").each(function() {
         score = score + parseInt(jQuery(this).html());
      });
      jQuery(scoreID).html(score);
   });
}


function prepareIDs() {
   var cookieValue = jQuery.cookie("mh3calcVersion");
   if (cookieValue=="text") {
      var monsterID = jQuery("#tmonster").val();
      var weaponClass = jQuery("#tweapon").val();      
      var aUp = jQuery("#taup").val();
      var ra = jQuery("#tceye").val();
      var toffline = jQuery("#toffline").val();
      var tonline = jQuery("#tonline").val();
   
      var ids = {
         monsterID: monsterID,
         weaponClass: weaponClass,
         offline: toffline,
         online: tonline,
         attackUp: aUp,
         reckA: ra,
         sharpness: getTState("#tsharp"),
         awakening: getTState("#tawaken"),
         eleatck: getTState("#telemental"),
         adrenaline: getTState("#tadre"),
         adversity: getTState("#tfort"),
         AoU: getTState("#tcdraw")
      };
   
      return ids;      
   } else {
      var monsterID = jQuery(cMonsterCard).attr("rel");
   
      var weaponClass = getWeaponClass();
      var aUp = getAttackUp();
      var ra = getRecklessAbandon();
   
      var ids = {
         monsterID: monsterID,
         weaponClass: weaponClass,
         offline: offline,
         online: online,
         attackUp: aUp,
         reckA: ra,
         sharpness: getState("#sharp"),
         awakening: getState("#awaken"),
         eleatck: getState("#eleatk"),
         adrenaline: getState("#adrenaline"),
         adversity: getState("#adversity"),
         AoU: getState("#AoU")
      };
   
      return ids;
   }
}

function getState(id) {
   if (jQuery(id).hasClass("knobDown")) return 1;
   return 0;
}

function getTState(id) {
   if (jQuery(id+":checked").val()!=null) return 1;
   return 0;
}

function getWeaponClass() {
   var sliderPos = Math.floor(jQuery("#weaponClass").position().top);
   var weaponClass = "SnS";
   if (sliderPos==64) weaponClass = "LS";
   if (sliderPos==128) weaponClass = "GS";
   if (sliderPos==192) weaponClass = "SA";
   if (sliderPos==256) weaponClass = "HA";
   if (sliderPos==320) weaponClass = "LC";
   return weaponClass;
}

function getAttackUp() {
   var sliderPos = jQuery("#aup").position().top;
   var attackup = 0;
   if (sliderPos==48) attackup = 1;
   if (sliderPos==96) attackup = 2;
   if (sliderPos==144) attackup = 3;
   return attackup;
}

function getRecklessAbandon() {
   var sliderPos = jQuery("#ra").position().top;
   var ra = 0;
   if (sliderPos==48) ra = 1;
   if (sliderPos==96) ra = 2;
   if (sliderPos==144) ra = 3;
   return ra;
}

function make_draggable(elements)
{
   /* Elements is a jquery object: */
   elements.draggable({
      containment:'#main',
      start:function(e,ui){ ui.helper.css('z-index',++zIndex); },
      stop:function(e,ui){
         // are we in the calc box?
         if (ui.position.left<500 && ui.position.top<600) {
            cTop = ui.position.top;
            cLeft = Math.max(ui.position.left,510);
            cZ = zIndex;
            slideOut();
            slideTo(this);
         }
      }
   });
   elements.dblclick(function() {
      cTop = jQuery(this).css("top");
      cLeft = jQuery(this).css("left");
      cZ = jQuery(this).css("z-index");

      slideOut();
      slideTo(this);
   });

}

function changeText(text) {
   jQuery('#monstername').text("");
   jQuery({count:0}).animate({count:text.length}, {
      duration: 1500,
      step: function() {
         jQuery('#monstername').text( text.substring(0, Math.round(this.count)) );
      },easing: 'easeOutBounce'
   });
}

function slideTo(monsterCard) {
   cMonsterCard = monsterCard;
   cZ = jQuery(monsterCard).css('z-index');
   cTop = jQuery(monsterCard).css('top');

   jQuery(monsterCard).css('z-index',150).
      animate({top:'-280',left:'50'},1000,"easeInBack", function() {
         jQuery(this).css('z-index',10).animate({top:'20'},700,"easeOutBack", function() {
            changeText(jQuery(this).find(".title").html());
         });
      });
}

function slideOut() {
   if (cMonsterCard==null) return;
   jQuery(cMonsterCard).
      animate({top:'-280'},700,"easeInBack", function() {
         jQuery(this).css('z-index',cZ)
            .animate({top:cTop, left: cLeft},1000,"easeOutBack");
      });
}
