var pair_asp = { 
  's_log' : 'o_log', 
  'o_log' : 's_log', 
  's_sens' : 'o_sens',
  'o_sens' : 's_sens',
  's_et' : 'o_et',
  'o_et' : 's_et',
  's_int' : 'o_int',
  'o_int' : 's_int'
}

var color = { 
  'first' : 'white', 
  'second' : 'black', 
  'third' : 'white',
  'fourth' : 'black',
  'minus_first' : 'black',
  'minus_second' : 'white',
  'minus_third' : 'black',
  'minus_fourth' : 'white'
} 

var pair_fun = { 
  'first' : 'minus_first', 
  'second' : 'minus_second', 
  'third' : 'minus_third',
  'fourth' : 'minus_fourth',
  'minus_first' : 'first',
  'minus_second' : 'second',
  'minus_third' : 'third',
  'minus_fourth' : 'fourth'
} 

var racio = { 
  'first' : 'rac', 
  'second' : 'irr', 
  'third' : 'irr',
  'fourth' : 'rac',
  'minus_first' : 'rac',
  'minus_second' : 'irr',
  'minus_third' : 'irr',
  'minus_fourth' : 'rac' 
}

var coor_asp = [];
var coor_fun = [];
var model = [];
var first_done = false;
var second_done = false;
var rac_this; var rac_rev;
//var cache = new Object;
var cache = [];

function init() {    
  $('.sklad img').each( function(){
      var asp_n = $(this).attr('id'); 
      coor_asp[asp_n] = { left : Math.floor($(this).offset().left), top : Math.floor($(this).offset().top) };
  }); 
  $('.fun_box em').each( function(){
      var fun_n = $(this).attr('id'); 
      coor_fun[fun_n] = { left : Math.floor($(this).offset().left), top : Math.floor($(this).offset().top) };
      model[fun_n] = { racio : '', color : '', asp: '', top : '', left : ''};
  });
};

function coor_left(box, img) {
  var delta = ($('.fun_box em').outerWidth() - $('.sklad img').outerWidth())/2;
  return (coor_fun[box].left - coor_asp[img].left + delta);
}
function coor_top(box, img) {
  var delta = ($('.fun_box em').outerHeight() - $('.sklad img').outerHeight())/2;
  return (coor_fun[box].top - coor_asp[img].top + delta);
}

function fill_color(func, neg_cl, pos_cl,fl) {
  var cl_this; var cl_rev;
  if (fl) { 
    cl_this = pos_cl; cl_rev = neg_cl;
  } else {
    cl_this = neg_cl; cl_rev = pos_cl;
  }
  if (color[func] !== cl_this) {var rev = true;}
  for (var i in model) {
    if (!rev) {
      if (color[i] == cl_this) { model[i].color = cl_this; } else { model[i].color = cl_rev;} 
    } else {
      if (color[i] == cl_this) { model[i].color = cl_rev; } else { model[i].color = cl_this;} 
    }
  }
}

function fill_racio(func, neg_cl, pos_cl,fl) { 
  if (racio[func] !== rac_this) {var rev = true;}
  for (var i in model) {
    if (!rev) {
      if (racio[i] == rac_this) { model[i].racio = rac_this; } else { model[i].racio = rac_rev;} 
    } else {
      if (racio[i] == rac_this) { model[i].racio = rac_rev; } else { model[i].racio = rac_this;} 
    }
  }
}

function get_fun(fun,asp,tim,ku) {
  $.get("print_fun.php", { 'f' : fun, 'a' : asp, 't' : tim},
    function(html){ $('.tim_descr .'+tim+' .'+ku).append(html);}   
  );
  //$('.tim_descr .'+tim+' .'+ku).find('.fill').append('div').load('tims/'+tim+'_'+asp+'.html', function() {});
}

function print_fun(fun, rac, tim){
  for (var i in model) {  
    if (model[i].racio == rac) {
      var kuda;
      if (i == fun) { kuda = 'select'} else {kuda = 'other'}
      get_fun(i,model[i].asp,tim,kuda);
    } 
  }
}

function print_text(asp,fun,rac) {
  $.getJSON("print_tim.php", { 'a' : asp, 'f' : fun },
  function(data){
    var selected_tim; var deleted_tim;
    $.each(data.sel, function(i,pair){ 
      if(cache.length == 0) {
        $('.tim_descr').append('<div class="'+pair.tim+'"><h4>'+pair.name+'</h4><div class="select"></div><p class="switch"><a href="#" class="show_other">&#9658; Показать остальные</a><a href="#" class="hide_other hide">&#9660; Скрыть остальные</a></p><div class="other" style="display:none;"></div></div>'); // arrows: up &#9650; , down &#9660; , left &#9668; , right &#9658;
        print_fun(fun, rac, pair.tim);
      } else {
        for (var k in cache[0].sel) { 
          if(cache[0].sel[k].tim == pair.tim) {
            selected_tim = cache[0].sel[k].tim;
            print_fun(fun, rac, selected_tim);
          }
        } 
      }
    });    
    if ((cache.length !== 0) && (first_done) ) {
      for (var w in cache[0].sel) {if (cache[0].sel[w].tim !== selected_tim) {deleted_tim = cache[0].sel[w].tim;}}
      $('.tim_descr .'+deleted_tim).remove();
    }
    for (var i in model) {
      if (i == fun) {data.racio = model[i].racio;}
    }
    
    data.fun = fun;
    data.asp = asp;
    cache.push(data);
  });
}

function move_it(asp, fun) {
  model[fun].asp = asp;
  model[pair_fun[fun]].asp = pair_asp[asp];   
  $('.sklad .'+rac_this).each( function() {
    var a = $(this).attr('id');
    var asp_col;
    if ((a !== asp) && (a !== pair_asp[asp])) {
      if ($(this).is('.black')) {asp_col = 'black';} else {asp_col = 'white';}
      for (var i in model) {
        if ((model[i].color == asp_col) && (model[i].racio == rac_this) && (model[i].asp == '')) {
          model[i].asp = a;
          model[pair_fun[i]].asp = pair_asp[a];
        }
      }
    }
    if (!($(this).is('.done'))) {
      for (var i in model) {
        if (model[i].asp == a) {
          var tar_top = coor_top(i,a);
          var tar_left = coor_left(i,a);
          $(this).addClass('done').animate({top: tar_top, left: tar_left }, 1000, function() {
          });
          model[i].top = tar_top; model[i].left = tar_left;
          $('#'+i).addClass('done'); 
        }
      }   
    }   
  });
  print_text(asp,fun,rac_this);
  $('#'+fun).addClass('selected');
}

function reset_it(asp,full) {
  $('.sklad .'+rac_this).each( function() {
    var a = $(this).attr('id');
    $(this).removeClass('done').animate({top: 0, left: 0 }, 700);
    for (var i in model) {
      if (model[i].asp == a) {
        $('#'+i).removeClass('done').removeClass('selected');
        model[i].asp = '';
        model[i].top = '';
        model[i].left = '';
      }
    }
  }); 
  if(full) {
    $('.fun_box em').removeClass('white').removeClass('black').removeClass('irr').removeClass('rac').removeClass('done');
    for (var i in model) {
      model[i].asp = '';
      model[i].color = '';
      model[i].racio = '';
      model[i].top = '';
      model[i].left = '';
      cache.splice(0, 1);
      $('.tim_descr').html('');
      first_done = false;           
    }        
  } else {
    for (var i in model) {
      if (model[i].asp == asp) {rac_this = model[i].racio;}
    }
    for (var i = 0; i < cache.length; i++) {
        if (cache[i].racio == rac_this) {cache.splice(i, 1);}   
    }
    $('.tim_descr').html('');
    var a = cache[0].asp; var f = cache[0].fun; var r = cache[0].racio;
    cache.splice(0, 1);
    print_text(a,f, r);
    second_done = false;
  } 
}

$(window).bind("load",function(){
  $('.sklad img').attr({alt : ''}).draggable({ containment: '.playground' });    
});

$(function(){    

  jQuery.each(jQuery.browser, function(i) {
    if(($.browser.msie)||($.browser.opera)){
      $("body").addClass('border_img');
    }
  });

  //$('.other').hide();
  $('.test').click( function() {
    alert(first_done+' '+second_done);
    return false;
  });
  $('.up_link').live("click", function(){
    $("html, body").animate({scrollTop: 0}, 1200, function() {} );
    return false;
  });

  $('.hide_other').live("click", function(){
    $(this).parent().next('.other').slideUp();
    $(this).addClass('hide');
    $(this).siblings('.show_other').removeClass('hide');
    $(this).parent().siblings('.double').remove();
    return false;
  });
  
  $('.hide_bottom').live("click", function(){
    $(this).parent().prev('.other').slideUp();
    $(this).addClass('hide');
    $(this).parent().siblings('.switch').children('.hide_other').addClass('hide');
    $(this).parent().siblings('.switch').children('.show_other').removeClass('hide');
    $(this).parent().remove();
    return false;
  });
  
  $('.show_other').live("click", function(){
    $(this).parent().next('.other').slideDown();//.removeClass('hide');
    $(this).addClass('hide');
    $(this).siblings('.hide_other').removeClass('hide');
    var t = $(this).parent('.switch').html();
    $(this).parent('.switch').parent().append('<p class="double"><a class="hide_bottom" href="#">▲ Скрыть остальные</a></p>');
    return false;
  });
  
  init();
  
  $('.fun_box em').each(function(){
    $(this).droppable({
      activeClass: 'drop_active',
      hoverClass: 'drop_hover',
      greedy: true,
      tolerance: 'touch',
      drop: function(event, ui) {
      var is_dialog = $(ui.draggable).is('.ui-dialog');
      if (!is_dialog){ 
        var asp = $(ui.draggable).attr('id');
        var fun = $(this).attr('id');
          if ($(ui.draggable).is('.rac')) { rac_this = 'rac'; rac_rev = 'irr'; 
          } else { rac_this = 'irr'; rac_rev = 'rac';}
          if (!first_done) {
            fill_color(fun, 'black', 'white', $(ui.draggable).is('.white'));
            fill_racio(fun, 'irr', 'rac', $(ui.draggable).is('.rac'));
            $('.fun_box em').each( function() {
              var f = $(this).attr('id');
              $(this).addClass(model[f].color);
              $(this).addClass(model[f].racio);
            });
            move_it(asp,fun);
            first_done = true;
          } 
          if ($(ui.draggable).is('.done')) {
            var prev;
            for (var i in model) {
              if (model[i].asp == asp) { prev = i;}  
            }
            $(ui.draggable).animate({top: model[prev].top, left: model[prev].left }, 300); 
          } else {
            if (!second_done) {
              if ( (($(ui.draggable).is('.white'))&&($(this).is('.black'))) || (($(ui.draggable).is('.black'))&&($(this).is('.white')) ) || ($(this).is('.done')) ) {
                $(ui.draggable).animate({top: 0, left: 0 }, 1000);
              } else {
               second_done = true; 
               move_it(asp,fun);
              }
            } 
          }  
      }
      }
    });
  });
  
  $('.playground').droppable({
    greedy: true,
    drop: function(event, ui) {
      var is_dialog = $(ui.draggable).is('.ui-dialog');
      if (!is_dialog){          
        var asp = $(ui.draggable).attr('id');
        if ($(ui.draggable).is('.rac')) { rac_this = 'rac'; rac_rev = 'irr'; 
        } else { rac_this = 'irr'; rac_rev = 'rac';}        
        if ( ((!first_done) && (!second_done)) || (!$(ui.draggable).is('.done')) ) {
          $(ui.draggable).animate({top: 0, left: 0 }, 700);
        } else { reset_it(asp,(!(second_done) ));
           //if ((first_done) && (second_done)) {reset_it(asp,false);} else {if ((first_done) && (!second_done)) {reset_it(asp,true);}  }
        }
      }
    }
  });
  
  $('.sklad h6').click(function(){
    var title = $(this).html();
    var cl = $(this).parent().attr('class');
    var file = '../descr/asp_descr/'+cl+'.html';
    var from = '<p class="from">И.Н. Калинаускас &laquo;Наедине с Миром&raquo;</p>'
    $('.dialog_box').append('<div class="dialog" title="'+title+'"></div>');
    $('.dialog_box div').load(file, function() {
      $('.dialog').append(from).dialog({
        autoOpen: false,
        bgiframe: true,
        width: 600,
        dialogClass: cl ,
        /*draggable: false,*/
        close: function(ev, ui) {
          $(this).remove();
        },
        drag: function(event, ui) {
          $('.fun_box em').removeClass('drop_active').removeClass('drop_hover');
        }
      }).dialog('open');
    });
  });
  
});