/*
 * javascript a lapozásokhoz
 *
 */


/*
 * globális változók
 */
var akt_cat = null;
var frame_count = 0;
var akt_frame = null;
var drag_pos = null;
var dragged = false;
var thumb_pos = 0;//thumbnail scroll position
var elem_w = 797;//egy elem szélessége 797px
var cat_count = 0;//újraszámoljuk cat_init ben.



//$.each(['touches', 'targetTouches'], function(i, propName){
//		if ( $.inArray(propName, $.event.props) < 0 ) {
//			$.event.props.push(propName);
//		}
//	});

/*object méret*/
function objsize(o) {
  var len = 0;
  for (var k in o)
    len++;
  return len;
}


/*
 * adott indexű elem koordinatajat adja vissza, ahova mozgatni kell, hogy középen legyen
 *
 */
function get_scroll_center_x(m) {
  var cont_w = 0;//$('#main_cont').width();
  return - m * elem_w - elem_w/2 + cont_w/2;
}

/*
 * visszaadja a legközelebbi scroll elemet x alapján, x a main_scroll left koordinataja
 */
function get_nearest_scroll_elem(x) {
  //feltesszük, hogy közel van az akt_frame -hez.
  var r = akt_frame;
  do {
    var fx = get_scroll_center_x(r);

    if (Math.abs(x - fx) > elem_w / 2) {
      if (fx > x) r++;//balra elem
      if (fx < x) r--;//jobbra elem


      if (r < 0) return 0;//első
      if (r > frame_count - 1) return frame_count - 1;//utolsó
    } else return r;
  } while (true);
}


/*
 * egy konkrét indexű elemet hoz középre (animálva?)
 *
 */
function center_scroll_elem(m, anim) {
  var akt_sel = '.main_scroll_'+akt_cat;
  drag_pos = null;//drag vége.

  if (m < 0) m = frame_count - 1;
  if (m > frame_count - 1) m = 0;

  var x = get_scroll_center_x(m);

  var animtime = 500;

  if (m == akt_frame) animtime = 50;

//  $(akt_sel).addClass('animate_lock').animate({left: parseInt(x)+'px'}, animtime, function(e) {$(this).removeClass('animate_lock');});
  $(akt_sel).addClass('animate_lock').stop(true, true).animate({left: parseInt(x)+'px'}, {
    duration: animtime,
    complete: function(e) {
      $(this).removeClass('animate_lock');
      $(akt_sel+' .scroll_'+m+' .content_arrow_empty:first').addClass('content_arrow_left');
      $(akt_sel+' .scroll_'+m+' .content_arrow_empty:last').addClass('content_arrow_right');
//      $(body).hide().show();
    },
    queue: false//mehet másikkal együtt.
  });
  $(akt_sel+' .content_arrow_empty').removeClass('content_arrow_left').removeClass('content_arrow_right');

  //kis kijelző gombok kirajzolása
  if ($('#thumb_top').children().length != frame_count) {
    $('#thumb_top').empty();
    for (var i = 0; i < frame_count; i++) {
      $('#thumb_top').append($("<div class=\"thumb_top\" onclick=\"center_scroll_elem("+(frame_count - i - 1)+");\"><div></div></div>"));
    }
  }

  $('#thumb_top').children().removeClass("thumb_top_sel");
  $($('#thumb_top').children()[frame_count - m - 1]).addClass("thumb_top_sel");//visszafelé van számolva

  //thumb kiválasztása
//  $('.thumb_select').css({opacity: 0, left: m * (47+10) + 'px'}).animate({opacity: 1}, 500);
  $('.thumb_select').hide().css({left: m * (47+10) + 'px'}).fadeIn(500);

  //thumb_scroll mozgatása a megfelelő helyre
  var thumb_lap = m - m%5;
  scroll_thumb_to(thumb_lap);

  if (ref[akt_cat][m].desc) {
    $('#info_btn img').fadeIn(500);
  } else {
    $('#info_btn img').fadeOut(500);
  }

  akt_frame = m;

}

/*
 * thumbnailek scrollozása
 */
function scroll_thumb_to(m) {
  var akt_tsel = '.thumb_scroll_'+akt_cat;
  $(akt_tsel).animate({left: -(47+10)*m+'px'}, 500);
  thumb_pos = m;

  //az edge az közös, nem a categoryhoz van.

  //balra mehet még?
  if (m == 0) {
    $('#thumb .thumb_edge:first').removeClass('thumb_edge_sel');
    $('#thumb .content_arrow_empty:first').removeClass('content_arrow_left');
  } else {
    $('#thumb .thumb_edge:first').addClass('thumb_edge_sel');
    $('#thumb .content_arrow_empty:first').addClass('content_arrow_left');
  }

  //jobbra mehet még?
  if (m >= frame_count - 5) {
    $('#thumb .thumb_edge:last').removeClass('thumb_edge_sel');
    $('#thumb .content_arrow_empty:last').removeClass('content_arrow_right');
  } else {
    $('#thumb .thumb_edge:last').addClass('thumb_edge_sel');
    $('#thumb .content_arrow_empty:last').addClass('content_arrow_right');
  }

}

/*
 * drag események
 */
function drag_end(e) {
  var pagex_fake;
  if (e.type == 'touchend') {

  } else {

  }
  pagex_fake = e.type=='touchend'?e.originalEvent.changedTouches[0].pageX:e.pageX;

  //alert('fölengedve');
//    alert(drag_pos);
  if (drag_pos === null) return;
  //kiszámoljuk a legközelebbi frame koordinatat, és oda lapozunk.
  var delta = pagex_fake - drag_x;
  if (delta < 0) delta -= 250;
  if (delta > 0) delta += 250;
  var ujpos = get_nearest_scroll_elem(drag_scroll_left + delta);

  center_scroll_elem(ujpos);

  drag_pos = null;
}

function drag_move(e) {
  var pagex_fake = e.type=='touchmove'?e.originalEvent.targetTouches[0].pageX:e.pageX;
  if (e.type == 'mousemove') e.preventDefault();//ez akkor is kell, ha nem engedjük draggelni.
  //alert('fölengedve');
  if (drag_pos === null) return;
//    var ujpos = get_nearest_scroll_elem(drag_scroll_left + e.pageX - drag_x);
  $('.main_scroll_'+akt_cat).css('left', drag_scroll_left + pagex_fake - drag_x + 'px');
  $('#debug').val(Math.abs(pagex_fake - drag_x)+" "+dragged);
  if (Math.abs(pagex_fake - drag_x) > 5) dragged = true;
  if (dragged) e.preventDefault();
//  return true;
}

/*
 * scroll nyilakra bindeljük a lapozó eseményeket
 */
function bind_scroll_arrows() {
  //scroll nyilakra bindeljük a lapozó eseményeket
  $('.main_scroll .content_arrow_empty').bind('click', function(e) {
    var dir = 0;
    if ($(this).hasClass('content_arrow_left')) {
      dir = -1;
    }
    if ($(this).hasClass('content_arrow_right')) {
      dir = 1;
    }
    //mellette lévőre is lapozás
    //ez így szép, de fölösleges, mert a dir = 0 defaultban ugyanazt csinálja ami kell.
    //if ($(this).closest('.main_scroll_'+akt_cat+' .scroll').next().find('.content_arrow_left').length) dir = 0;
    //if ($(this).closest('.main_scroll_'+akt_cat+' .scroll').prev().find('.content_arrow_right').length) dir = 0;
    if (dir !== null) {//nyilra kattintott
      //megnézzük melyik id blokkban vagyunk.
      var pos = get_my_framepos(this);
      var m = pos + dir;//mire fogunk ugrani??
//      if (m < 0) m = frame_count - 1;//utolsóra, ha első volt
//      if (m > frame_count - 1) m = 0;//elsőre, ha utolsó volt
      center_scroll_elem(m, true);
    }

  });

  //minden content tartalom egérrel elhúzhato
  $('.scroll_elem td.content').bind('mousedown touchstart', function(e) {
    //alert("originalevent: "+e.originalEvent);
    var pagex_fake = e.type=='touchstart'?e.originalEvent.targetTouches[0].pageX:e.pageX;
    //alert(pagex_fake);
    //ha lenyomjuk az egeret
    //$(this).css('background', '#f00');
    if (e.type == 'mousedown') e.preventDefault();//ez akkor is kell, ha nem engedjük draggelni.
    if ($('.main_scroll_'+akt_cat).hasClass('animate_lock')) return;
    var pos = get_my_framepos(this);
//    alert(pos);
//    alert(e.pageX);
    drag_pos = pos;
    drag_x = pagex_fake;
    drag_scroll_left = parseInt($('.main_scroll_'+akt_cat).css('left'));
    dragged = false;
  }).bind('AAAAAAAAswipeleft', function(e) {
    e.preventDefault();
    var pos = get_my_framepos(this);
    if (pos == frame_count - 1) return false;
    center_scroll_elem(pos + 1);
  }).bind('AAAAAAAAswiperight', function(e) {
    e.preventDefault();
    var pos = get_my_framepos(this);
    if (pos == 0) return false;
    center_scroll_elem(pos - 1);
  }).bind('touchmove', drag_move).bind('touchend', drag_end);

  $('body').bind('mousemove AAAAAAAAAAtouchmove', drag_move);
  $('body').bind('mouseup mouseleave AAAAAAAAAtouchend', drag_end);

  //thumb nyilak kattintása (ellenőrizzük, hogy lehet-e)
  $('#thumb .content_arrow_empty:first').bind('click', function(e) {
    if (thumb_pos > 0) scroll_thumb_to(thumb_pos - 5);
  });
  $('#thumb .content_arrow_empty:last').bind('click', function(e) {
    if (thumb_pos < frame_count - 5) scroll_thumb_to(thumb_pos + 5);
  });

  //tartalom bindelése a megfelelő url-re
  $('.scroll_elem td.content').bind('click', function(e) {
    if (dragged) return false;//ha mozgatva van (egy bizonyos toleranciával számolva), akkor nem kattintás.
    //alert(dragged);
    //console.log(e);

    var id = get_my_framepos(this);//ki vagyok én?

    //ha a szélére kattintottunk, akkor lapozás.
    var offset = $(this).offset();
    if (e.pageX - offset.left < 100) {
      center_scroll_elem(id - 1);
      return false;
    }
    if (offset.left + $(this).width() - e.pageX < 100) {
      center_scroll_elem(id + 1);
      return false;
    }


    if (typeof ref[akt_cat][id] == 'object' && ref[akt_cat][id].url) {
      window.open(ref[akt_cat][id].url, '_blank');

    }

  });


  //ez a függvény load kor fut, kb. init, tehát cserélhetjük itt a spamos email cimet.
  $('a').each(function(i, m) {
    if (m.href.match(/spamspam/)) {
      m.href = m.href.replace(/@.*/, "@zengo.eu");
    }
  });

  //ablak átméretezése
  $(window).bind('resize', footer_repos);

  $('#info_btn img').bind('click', function(e) {
    var e = $('.main_scroll_'+akt_cat+' .scroll_'+akt_frame+' .content_desc');
    if (e.length != 1) return;
    if (e.hasClass('aktiv')) {
      e.animate({bottom: '-67px'}, {duration: 500, queue: false});
      e.removeClass('aktiv');
    } else {
      e.animate({bottom: '0'}, {duration: 500, queue: false});
      e.addClass('aktiv');
    }
  });

}

/*
 * adott elem, ha scroll_elem(ben van), akkor a pos t adja vissza a szülő class ból.
 */
function get_my_framepos(m) {
  var td = $(m).closest('.scroll');
  var pos = parseInt(td.attr('class').replace(/.* scroll_([0-9]+)/, "$1"));
  return pos;
}

/*
 * kategória betöltése, első elem inicializálása
 */
function init_cat(cat) {
  $('.catlink').removeClass('catlink_selected');
  $('#catlink_'+cat).addClass('catlink_selected');
  if (akt_cat === cat) {
    
  } else {
    frame_count = $('.main_scroll_'+cat+' tr:first').children().length;
    akt_cat = cat;
    center_scroll_elem(0);//itt már az akt_cat helyes kell, hogy legyen, CSAK azt állítjuk!
    cat_count = $('#main_cont').children().length;
    for (var i = 0; i < cat_count; i++) {
      if (cat == i) {
        $('.main_scroll_'+i).fadeIn(500);
        $('.thumb_scroll_'+i).css('display', 'block').animate({opacity: 1}, {duration: 500, queue: false});
      } else {
        $('.main_scroll_'+i).hide();
        $('.thumb_scroll_'+i).hide().css('opacity', 0);
      }
    }


  }

}

/*
 * konstans
 */
var rugo = {
  header: {
    original: 100
  },
  footer: {
    original: 100
  }
}


/*
 * a lábléc pozíciójához átrendezi az oldal "rugó" divjeinek méretét
 */
function footer_repos() {
  var akt_h = $('body').height();
  var win_h = $(window).height();

//  alert("különbség: "+akt_h+" < "+win_h);

  //rugok nélkül mennyi lenne?
  var rugo_akt_h = 0;
  var total_original = 0;
  for (i in rugo) {
    rugo_akt_h += parseInt($('.rugo_'+i).height());
    total_original += rugo[i].original;
  }

  var elosztani = win_h - (akt_h - rugo_akt_h);
//  alert(elosztani);
  
  var cnt = 0;
  for (i in rugo) {
    var div_h = 0;
    if (elosztani > 0) {
      div_h = parseInt(rugo[i].original / total_original * elosztani);
      if (cnt == objsize(rugo) - 1) div_h = elosztani;
      elosztani -= div_h;
    }
    $('.rugo_'+i).css('height', div_h+'px');
    cnt++;
  }
//DBG alert('maradt: '+elosztani);
  rugo_akt_h = 0;
  for (i in rugo) {
    rugo_akt_h += parseInt($('.rugo_'+i).height());
  }
//DBG  alert(rugo_akt_h);

}
$(document).ready(function() {
  footer_repos();//ne csak loadra, hanem eleve (úgyis minden magassag cssben meg van adva)
});
$(window).bind('orientationchange', function(e) {footer_repos();});
