/* ----- globals ----- */

var tweens = {},
    heights = {},
    menu_over = null,
    // True user agent is NT6 (Vista and Win7 with cleartype enabled)
    nt6 = jbx.userAgent.AGENT.indexOf('Windows NT 6') != -1;

/* ----- custom functions ----- */

function detenerEvento(e) {
  e = e || window.event;
  if (e) { e.stopPropagation ? e.stopPropagation() : (e.cancelBubble = true); }
  return false;
}

function getCookie(name) {
  var cookies = document.cookie.split(';');
	for(var i=0,l=cookies.length; i<l; i++) {
	  var c = cookies[i].split('=');
    if (c[0].trim() == name) {
      return c[1].trim();
    }
	}
	return null;
}

function setCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	} else {
	  var expires = "";
	}
	document.cookie = name+"="+value+expires+"; path=/";
}

/* ----- tweens ----- */

function onTweenHeight(tween) {
  tween.el.style.height = Math.round(tween.value)+'px';
}

function onTweenOpacity(tween) {
  jbx.style.setOpacity(tween.el,tween.value);
}

/* ----- menu ----- */

function menuOver(ul,e) {
  var target = null;
  e = e || window.event;
  target = e.target || e.srcElement;
  target = jbx.dom.resolveNode(target, 'parentNode', function(n) { return n && n.nodeName == 'LI'; } );
  jbx.classes.add(target,'over');
}

function menuOut(ul,e) {
  var target = null;
  e = e || window.event;
  target = e.target || e.srcElement;
  target = jbx.dom.resolveNode(target, 'parentNode', function(n) { return n && n.nodeName == 'LI'; } );
  jbx.classes.remove(target,'over');
}

function toggleSubMenu(a,e) {
  var ul = jbx.dom.nextElement(a);
  e = e || window.event;
  jbx.classes.toggle(ul,'opened');
  detenerEvento(e);
  return false;
}

/* ----- tools ----- */

function toggleToolsOn(el,e) {
  var id = '',
      rec = null;
  el = jbx.dom.firstChild(el);
  rec = jbx.style.getBounds(el);
  id = jbx.getUniqueId(el);
  if (!tweens[id]) {
    tweens[id] = new jbx.fx.Tween(0,0,0.5,TEasing.easeOut,true);
    tweens[id].el = el;
  }
  tweens[id].stop();
  tweens[id].from = rec.height;
  tweens[id].to = 23;
  tweens[id].callback = onTweenHeight;
  tweens[id].play();
}

function toggleToolsOff(el,e) {
  var id = '',
      rec = null,
      target = null,
      related = null,
  e = e || window.event;
  target = e.target || e.srcElement;
  related = e.relatedTarget || e.toElement;
  if (jbx.dom.contains(el,related)) {
    return;
  }
  el = jbx.dom.firstChild(el);
  rec = jbx.style.getBounds(el);
  id = jbx.getUniqueId(el);
  if (!tweens[id]) {
    tweens[id] = new jbx.fx.Tween(0,0,0.5,TEasing.easeOut,true);
    tweens[id].el = el;
  }
  tweens[id].stop();
  tweens[id].from = rec.height;
  tweens[id].to = 0;
  tweens[id].callback = onTweenHeight;
  tweens[id].play();
}

/* ----- login ----- */

function toggleLoginOpen(el,e,directCall) {
  var id = '',
      rec = null,
      rec2 = null,
      rec3 = null,
      target = null,
      related = null,
      form = jbx.dom.getElement('login_left_form'),
      errors = jbx.dom.getElement('login_left_errors');
  if (!directCall) {
    e = e || window.event;
    target = e.target || e.srcElement;
    related = e.relatedTarget || e.toElement;
    if (jbx.dom.contains(el,related)) {
      return;
    }
  }
  form.style.display = '';
  rec = jbx.style.getBounds(el);
  rec2 = jbx.style.getBounds(form);
  rec3 = jbx.style.getBounds(errors);
  id = jbx.getUniqueId(el);
  if (!tweens[id]) {
    tweens[id] = new jbx.fx.Tween(0,0,0.5,TEasing.easeOut,true);
    tweens[id].el = el;
  }
  jbx.classes.add(el,'open');
  tweens[id].stop();
  tweens[id].from = rec.height;
  tweens[id].to = 16+rec2.height+rec3.height;
  tweens[id].callback = onTweenHeight;
  tweens[id].play();
}

function toggleLoginClose(el,e) {
  var id = '',
      rec = null,
      target = null,
      related = null,
      form = jbx.dom.getElement('login_left_form');
  e = e || window.event;
  target = e.target || e.srcElement;
  related = e.relatedTarget || e.toElement;
  if (jbx.dom.contains(el,related)) {
    return;
  }
  rec = jbx.style.getBounds(el);
  id = jbx.getUniqueId(el);
  if (!tweens[id]) {
    tweens[id] = new jbx.fx.Tween(0,0,0.5,TEasing.easeOut,true);
    tweens[id].el = el;
  }
  jbx.classes.remove(el,'open');
  tweens[id].stop();
  tweens[id].from = rec.height;
  tweens[id].to = 16;
  tweens[id].callback = function(t) {
    onTweenHeight(t);
    if (t.position >= t.frames) {
      form.style.display = 'none';
    }
  };
  tweens[id].play();
}
