var
  bubble = null,
  bubbleContent = null,
  bubbleTail = null,
  mainForm = null,
  bubbleInitWidth = null,

  bubbleMouseOverElement = null,
  bubbleFocusedElement = null,
  bubbleCurrElement = null,
  bubbleHideTimeoutId = null;

function labelToElement(el) {
  if (el.tagName.toLowerCase() == 'span' && el.parentNode.tagName.toLowerCase() == 'label')
    el = el.parentNode;
  return (el.tagName.toLowerCase() == 'label' ? document.getElementById(el.htmlFor) : el);
}

function bubbleElOnMouseOver(event) {
  bubbleMouseOverElement = labelToElement(event.toElement || event.target);
  if (bubbleFocusedElement == null) showBubble(bubbleMouseOverElement);
}

function bubbleElOnMouseOut(event) {
  bubbleMouseOverElement = null;
  if (bubbleFocusedElement == null) hideBubble();
}

function bubbleElOnFocus(event) {
  if (bubbleFocusedElement != null) return;
  bubbleFocusedElement = event.srcElement || event.target;
  showBubble(bubbleFocusedElement);
}

function bubbleElOnBlur(event) {
  if (bubbleFocusedElement == null) return;
  bubbleFocusedElement = null;
  if (bubbleMouseOverElement != null) showBubble(bubbleMouseOverElement)
  else hideBubble();
}

function showBubble(el) {
  if (el == null) return;
  if (bubble == null) {
    bubble = document.getElementById('bubble');
    bubbleContent = document.getElementById('bubble_content');
    bubbleTail = document.getElementById('bubble_tail');
    mainForm = document.getElementById('main_form');
  }
  if (bubbleHideTimeoutId != null) {
    clearTimeout(bubbleHideTimeoutId);
    bubbleHideTimeoutId = null;
  }
  if (el == bubbleCurrElement) return;
  if (bubbleCurrElement != null) bubble.style.display = 'none';
  bubbleContent.innerHTML = (el.id != '' && el.id in elementHelp ? elementHelp[el.id] : '<span style="color: red; font-size: 130%">Џ®¬®йм ­Ґ ­ ©¤Ґ­  (element.id = "'+el.id+'").</span>');
  bubble.style.display = '';
//document.title = 'mainForm.left = "'+getAbsPos(mainForm).left+'", bubble.offsetWidth = "'+bubble.offsetWidth+'"';
  var bWidth = bubble.offsetWidth;
  if (bubbleInitWidth == null) bubbleInitWidth = bWidth;

  var bLeft = getAbsPos(mainForm).left - bWidth + 30;

  if (bLeft < 0) {
    var d = Math.min(-bLeft, bWidth-30);
    var l = bLeft;
    var w = bWidth;
    bLeft += d;
    bWidth -= d;
    bubble.style.width = bWidth;
//  document.title = 'd: '+d+', bLeft: '+l+' -> '+bLeft+', bWidth: '+w+' -> '+bWidth+' ('+bubble.offsetWidth+')';
  }
  bubble.style.left = bLeft;
  bubble.style.top = getAbsPos(el).top - getAbsPos(bubbleTail).top + getAbsPos(bubble).top - bubbleTail.offsetHeight + 40;
  bubbleCurrElement = el;
}

function hideBubble() {
  if (bubbleHideTimeoutId != null) clearTimeout(bubbleHideTimeoutId);
  bubbleHideTimeoutId = setTimeout(doHideBubble, 200);
}

function doHideBubble() {
  if (bubble) bubble.style.display = 'none';
  bubbleCurrElement = null;
  bubbleHideTimeoutId = null;
}

function initBubbleElements(info) {
  for (var n in info) {
    var el = document.getElementById(n);
    setupEvent(el, 'mouseover', bubbleElOnMouseOver);
    setupEvent(el, 'mouseout',  bubbleElOnMouseOut);
    if (el.tagName.toLowerCase() != 'label') {
      setupEvent(el, 'focus', bubbleElOnFocus);
      setupEvent(el, 'blur',  bubbleElOnBlur);
    }
  }
}

// called from setAll() - /my/js/main.js
function bubbleRepositionize() {
  if (bubbleCurrElement != null) {
    bubble.style.left = getAbsPos(mainForm).left - bubble.offsetWidth + 30;
    bubble.style.top = getAbsPos(bubbleCurrElement).top - getAbsPos(bubbleTail).top + getAbsPos(bubble).top - bubbleTail.offsetHeight + Math.round(bubbleCurrElement.offsetHeight/2) + 34;
  }
}


function checkEmailValid(noText){
  var reg = /^[\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?\.[A-Za-z0-9]{2,6}$/
  if (!reg.test($('email').value)) {
    if (!noText) $('email_error_text').style.display="block";
    return false;
  }
  else $('email_error_text').style.display="none";
  
  if (!noText && $('pass').value != '') {
    checkPassword(1);
  } 
  return true;
}

function submitValidate(form){
  var errors = new Array();

  if (!checkEmailValid(true)) errors.push("Проверьте правильность введенного адреса.");
  if (!checkPassword(2)) errors.push("Пароли не совпадают.")
  if (!$('agree').checked) errors.push("Ознакомьтесь с договором-офертой и соглашением о конфиденциальности.");


  if (errors.length<=0) {
      document.getElementById('submit_button').disabled = true;
      $(form).submit();
  }
  else {
    var str = "";
    for (i=0; i<errors.length; i++) {
      str += errors[i]+"\n\n";
    }
    alert(str);
    return false;
  }
}