// Tooltips

var ttDiv, ttOuter;

function addTooltip(element, tooltip, maxWidth) {
  if (!maxWidth) {
    maxWidth = 320;
  }
  if (!element.tooltipText) {
    element.onmouseover = showTooltip;
    element.onmouseout = hideTooltip;
  }
  element.tooltipText = tooltip;
  element.tooltipWidth = maxWidth;
}

function createTooltipDiv() {
  if (!ttDiv) {
    ttOuter = document.createElement('div');
    ttOuter.id = 'tooltipDiv';
    ttOuter.style.display = 'none';
    ttOuter.style.position = 'absolute';
    ttOuter.style.maxWidth = '320px';
    ttOuter.style.width = '320px';
    ttOuter.style.zIndex = 1000;
    document.body.appendChild(ttOuter);
    
    ttDiv = document.createElement('div');
    ttDiv.style.position = 'absolute';
    ttDiv.style.padding = '10px';
    ttDiv.style.background = 'url(/Content/Images/ttbg.png)';
    ttDiv.style.border = '1px solid #aaa';
    ttDiv.style.borderWidth = '1px 2px 2px 1px';
    ttDiv.style.maxWidth = '320px';
    ttOuter.appendChild(ttDiv);
  } else {
    hideTooltip();
  }
}

function removeTooltip(element) {
  element.onmouseover = null;
  element.onmouseout = null;
  delete element.tooltipText;
}

function showTooltip(e) {
  createTooltipDiv();
  e = e || window.event;
  ttDiv.innerHTML = this.tooltipText;
  ttOuter.style.maxWidth = this.tooltipWidth + 'px';
  ttOuter.style.width = this.tooltipWidth + 'px';
  ttDiv.style.maxWidth = this.tooltipWidth + 'px';
  positionPopupElement(e, ttOuter, ttDiv, this.tooltipWidth);
}

function positionPopupElement(event, outer, inner, maxWidth) {
  var coords = getMouseCoordinates(event);
  var pageWidth  = window.innerWidth || document.documentElement.clientWidth;
  var pageHeight = window.innerHeight || document.documentElement.offsetHeight;
  var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;
  var scrollTop = window.pageYOffset || document.documentElement.scrollTop;
  var scrollRight = scrollLeft + pageWidth;
  var scrollBottom = scrollTop + pageHeight;
  
  outer.style.top  = coords.y + 'px';
  
  if (coords.x + maxWidth + 20 < scrollRight) {
    outer.style.left = coords.x + 'px';
    inner.style.right = '';
    inner.style.left  = '-50px';
  } else {
    outer.style.left = (scrollRight - maxWidth - 40) + 'px';
    inner.style.left = '';
    inner.style.right = '10px';
  }
  if (scrollBottom - coords.y > coords.y - scrollTop) {
    inner.style.bottom = '';
    inner.style.top = '20px';
  } else {
    inner.style.bottom = '20px';
    inner.style.top = '';
  }
  outer.style.display = 'block';
}

function hideTooltip() {
  ttOuter.style.display = 'none';
}

function getMouseCoordinates(event) {
  var result;
  if (event.pageX || event.pageY) {
    return {     // Standard browsers
      x : event.pageX,
      y : event.pageY
    };
  } else {
    return {     // Internet Explorer
      x : event.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft),
      y : event.clientY + (document.body.scrollTop || document.documentElement.scrollTop)
    };
  }
}



// AJAX


// Profile

function replaceTextfieldWithSelect(id, name, values) {
  var tf = document.getElementById(id);
  var tfValue = tf.value;
  var sp = document.createElement('span');
  var innerHTML = '<select id="' + id + '" name="' + name + '">';
  var selected;
  var i;
  for (i=0; i<values.length; ++i) {
    selected = values[i] == tfValue ? ' selected' : '';
    innerHTML += '<option' + selected + '>' + values[i] + '</option>';
  }
  innerHTML += '</select>';
  sp.innerHTML = innerHTML;
  tf.parentNode.replaceChild(sp, tf);
}

function sendChatInvite(el, name) {
  el.onclick = function() { return false };
  if (el.tagName.toLowerCase() == 'input') {
    el.disabled = true;
  } else {
    el.firstChild.title = '';
  }
  ChatInvite(['args__' + name], [onChatInviteReply], 'POST');
  return false;
}

function onChatInviteReply(result) {
  result = result.replace(/<.*?>/, '');
  result = result.replace(/<.*?>/, '');
  alert(result);
}

// Height field

function replaceHeightInCm(id, name) {
  var values = new Array();
  var i;
  values[0] = '---';
  for (i=100; i<=250; ++i) {
    values[values.length] = i;
  }
  replaceTextfieldWithSelect(id, name, values);
}

function replaceHeightInInches(id, name) {
  var values = new Array();
  var i;
  values[0] = '---';
  for (i=Math.round(100/2.54); i<=Math.round(250/2.54); ++i) {
    values[values.length] = Math.floor(i/12) + "'" + (i%12) + '"';
  }
  replaceTextfieldWithSelect(id, name, values);
}

function onCmChange() {
  var cm = this;
  var cmIndex = cm.selectedIndex;
  var inchId = cm.id + 'ininch';
  var inch = document.getElementById(inchId);
  if (cmIndex == 0) {
    inch.selectedIndex = 0;
    return;
  }
  var inchValue = Math.round( (cmIndex + 99) / 2.54 );
  inch.selectedIndex = inchValue - 38;
}

function onInchChange() {
  var inch = this;
  var inchIndex = inch.selectedIndex;
  var cmId = this.id.substr(0, this.id.length - 6);  // 6 = length('ininch')
  var cm = document.getElementById(cmId);
  if (inchIndex == 0) {
    cm.selectedIndex = 0;
    return;
  }
  var cmValue = Math.round( (inchIndex + 38) * 2.54 );
  if (cmValue < 100 ) { cmValue = 100; }
  cm.selectedIndex = cmValue - 99;
}

// Weight field

function replaceWeightInKg(id, name) {
  var values = new Array();
  var i;
  values[0] = '---';
  for (i=30; i <= 500; ++i) {
    values[values.length] = i;
  }
  replaceTextfieldWithSelect(id, name, values);
}

function replaceWeightInLbs(id, name) {
  var values = new Array();
  var i;
  values[0] = '---';
  for (i = Math.round(30/0.4536); i <= Math.round(500/0.4536); ++i) {
    values[values.length] = i;
  }
  replaceTextfieldWithSelect(id, name, values);
}

function onKgChange() {
  var kg = this;
  var kgIndex = kg.selectedIndex;
  var lbsId = this.id + 'inlbs';
  var lbs = document.getElementById(lbsId);
  if (kgIndex == 0) {
    lbs.selectedIndex = 0;
    return;
  }
  var lbsValue = Math.round( (kgIndex + 29) / 0.4536 );
  lbs.selectedIndex = lbsValue - 65;
}

function onLbsChange() {
  var lbs = this;
  var lbsIndex = lbs.selectedIndex;
  var kgId = this.id.substr(0, this.id.length - 5);  // 6 = length('inlbs')
  var kg = document.getElementById(kgId);
  if (lbsIndex == 0) {
    kg.selectedIndex = 0;
    return;
  }
  var kgValue = Math.round( (lbsIndex + 65) * 0.4536 );
  if (kgValue < 30 ) { kgValue = 30; }
  kg.selectedIndex = kgValue - 29;
}

// Age field

function replaceAgeField(id, name) {
  var values = new Array();
  var i;
  values[0] = '---';
  for (i = 18; i <= 100; ++i) {
    values[values.length] = i;
  }
  replaceTextfieldWithSelect(id, name, values);
}

// Toggle visibility

function toggleVisibility(divId) {
  var div = document.getElementById(divId);
  if (div.style.display == 'none') {
    div.style.display = 'block';
  } else {
    div.style.display = 'none';
  }
  return false;
}

// Profile thumbnails

function SwitchThumbnail() {
  var src = this.src;
  src = src.replace("thumbnail", "profile");
  this.profileimage.src = src;
  var desc = this.profileimage.parentNode.getElementsByTagName('i')[0];
  if (desc) {
    desc.textContent = this.alt;
  }
  return false;
}

function InitThumbnails(divName) {
  var div = document.getElementById(divName);
  var tnDiv = div.getElementsByTagName('div')[0];
  if (!tnDiv) {
    return;
  }
  var profileimage = document.getElementById(divName).getElementsByTagName('img')[0];
  var images = tnDiv.getElementsByTagName("img");
  for (var i=0; i < images.length; ++i) {
    images[i].profileimage = profileimage;
    images[i].onclick = SwitchThumbnail;
    images[i].container = tnDiv;
  }
}



// Profile tabs

function InitProfileTabs(tabNames,tabNumber) {
  var container = document.getElementById('profileTabs');
  var tabs = GetProfileTabs();
  var headings = document.createElement('ul');
  var headingsHTML = '';
  if (tabNumber == undefined) { tabNumber = 0; }
  
  headings.id = 'profileHeadings';
  for (var i=0; i<tabs.length; ++i) {
    headingsHTML += '<li><a href="#" onclick="return SetActiveTab('+i+')">'+tabNames[i]+'</a></li>';
  }
  headings.innerHTML = headingsHTML;
  container.parentNode.insertBefore(headings, container);
  container.className = 'profileTabsContainer';
  SetActiveTab(tabNumber);
}

function GetProfileTabs() {
  var container = document.getElementById('profileTabs');
  var divs = container.getElementsByTagName('div');
  var tabs = new Array();
  var i;
  
  for (i=0; i<divs.length; ++i) {
    if (divs[i].className=='profileTab') {
      tabs[tabs.length] = divs[i];
    }
  }
  return tabs;
}

function SetActiveTab(tabNumber) {
  var tabs = GetProfileTabs();
  var headings = document.getElementById('profileHeadings').getElementsByTagName('li');
  for (var i=0; i<tabs.length; ++i) {
    headings[i].className = i==tabNumber ? 'currentTab' : '';
    tabs[i].style.display = i==tabNumber ? 'block' : 'none';
  }
  return false;
}


// editphotos page

function InitVisibilityForms() {
  var formList = document.getElementsByTagName('form');
  var f, fSumbit, fSelect;
  for (var i=0; i<formList.length; ++i) {
    f = formList[i];
    fSelect = f.elements[1];
    if (fSelect.tagName.toLowerCase() != 'select')
      continue;
    fSelect.onchange = OnVisibilityChanged;
    fSumbit = f.elements[2];
    fSumbit.style.display = 'none';
  }
}

function OnVisibilityChanged() {
  this.parentNode.submit();
}


// Style icons

function initStyleIcons() {
  var div = document.getElementById('mainColumn');
  var imgs = div.getElementsByTagName('img');
  var re = /\/([^/]+)$/;
  for (var i=0; i < imgs.length; ++i) {
    var img = imgs[i];
    var src = img.src;
    var match;
    if ((match = re.exec(src)) != null) {
      filename = match[1];
      if (filename in StyleHelp) {
        addTooltip(img, StyleHelp[filename], 500);
      }
    }
  }
}


// photos list

function InitPhotoList() {
  var div = document.getElementById('mainColumn');
  var imgs = div.getElementsByTagName('img');
  for (var i=0; i < imgs.length; ++i) {
    var img = imgs[i];
    var src = img.src;
    src = src.replace("thumbnail", "profile");
    addTooltip(img, '<img src="' + src + '" alt="">');
  }
}

function InitMetaModeration() {
  var t = document.getElementById('metaModeration');
  var s = t.getElementsByTagName('span');
  var re = /^[A-Z]$/;
  for (var i=0; i < s.length; ++i) {
    var span = s[i];
    if (span.parentNode.textContent == span.textContent)
      span = span.parentNode;
    if (re.test(span.textContent)) {
      span.onclick = onModerationClicked;
      span.style.cursor = 'pointer';
    }
  }
}

function onModerationClicked() {
  var t = this.textContent;
  var sel;
  if (this.tagName == 'TD') {
    sel = this.parentNode.getElementsByTagName('select')[0];
  } else {
    sel = this.parentNode.parentNode.getElementsByTagName('select')[0];
  }
  sel.value = t;
}


// friends page

function InitRelationshipForms() {
  InitVisibilityForms();
}


// translation

function GetTranslation(label,locale,divs) {
  var i, text;
  text = '';
  for (i=0; i < divs.length; ++i) {
    if (i)  text += "\n\n";
    text += getInnerText(document.getElementById(divs[i]));
  }
  text = text.replace(/"/g, '').replace(/\\/g, '');
  var result = '<form action="http://translate.google.com" method="post" style="display:inline"><input type=submit value="' + label
    + '"><input type=hidden name=sl value=auto><input type=hidden name=tl value="' + locale
    + '"><input type=hidden name=text value="' + text + '"></form>';
  document.write(result);
}


// search page

function InitMemberSearchForm() {
  var distanceEl = document.getElementById('fid_distance');
  document.getElementById('fid_region').onchange = function() {
    if (this.selectedIndex <= 0) return;
    document.getElementById('fid_country').selectedIndex = 0;
    if (distanceEl)  distanceEl.selectedIndex = 0;
  }
  document.getElementById('fid_country').onchange = function() {
    if (this.selectedIndex <= 0) return;
    document.getElementById('fid_region').selectedIndex = 0;
    if (distanceEl)  distanceEl.selectedIndex = 0;
  }
  if (distanceEl) {
    distanceEl.onchange = function() {
      if (this.selectedIndex <= 0) return;
      document.getElementById('fid_region').selectedIndex = 0;
      document.getElementById('fid_country').selectedIndex = 0;
    }
  }
}

function InitShowSearchTerms(buttonText) {
  document.getElementById('searchForm').style.display = 'none';
  var showFormA = document.createElement('a');
  showFormA.innerHTML = buttonText;
  showFormA.href = '#';
  showFormA.onclick = function() {
    document.getElementById('searchTerms').style.display = 'none';
    document.getElementById('searchForm').style.display = 'block';
    this.style.display = 'none';
  };
  var searchTerms = document.getElementById('searchTerms');
  searchTerms.parentNode.insertBefore(showFormA, searchTerms.nextSibling);
}


var mailUpdateTimer;
var mailUpdatePending = 0;
var mailUnreadMail = 0;
var mailNumChatters = 0;

function InitUnreadMail(unreadMail) {
  mailUnreadMail = unreadMail;
  mailNumChatters = getInnerText(document.getElementById('numChatters'));
  mailUpdateTimer = window.setInterval(OnMailUpdateTimer, 60000);  // every 60 secs
}

function ForceMailUpdate() {
  eraseCookie('mailtime');
  OnMailUpdateTimer();
}

function OnMailUpdateTimer() {
  var timeNow = new Date().getTime();
  if (readCookie('mailtime') > timeNow - 60000) {
    return;
  }
  createCookie('mailtime', timeNow, 0);
  if (mailUpdatePending) return;
  mailUpdatePending = 1;
  GetUnreadMail(['NO_CACHE'], [ajaxResponse_GetUnreadMail]);
}

function ajaxResponse_GetUnreadMail() {
  var unreadMail = arguments[0];
  var unreadMailHtml;
  if (unreadMail != mailUnreadMail) {
    mailUnreadMail = unreadMail;
    if (unreadMail > 0) {
      unreadMailHtml = '<strong><img src="/Content/images/mail-unread.png" alt="unread ">'
        + unreadMail + '</strong>';
    } else {
      unreadMailHtml = ' ';
    }
    document.getElementById('unreadMail').innerHTML = unreadMailHtml;
    if (document.getElementById('unreadMail2'))
      document.getElementById('unreadMail2').innerHTML = unreadMailHtml;
  }
  
  var numChatters = arguments[1];
  if (numChatters != mailNumChatters) {
    mailNumChatters = numChatters;
    setInnerText(document.getElementById('numChatters'), numChatters);
  }
  
  mailUpdatePending = 0;
}

function genpif(s) {
  var ls=s.length,i,t=87,r='_tn_',l=ls>=35?ls+5:40;
  for (i=0;i<l;++i) {t+=s.charCodeAt(i*373%ls)*89;r+=String.fromCharCode((t*131)%25+65);t=(t*177)%1783;}
  return r;
}

function makeAfTicker() {
  document.write('<div><div id=blogtickercontainer><table id=blogticker><tr><td>&nbsp;</td></tr></table></div></div>');
  pageBase = "/users";
  imageBase = "/Content/thumbnail";
  addOnLoadEvent( initAfTicker );
}

function initAfTicker() {
  if (isInternetExplorer()) {
    return getMoreCells();
  }
  var div = document.getElementById('blogtickercontainer').parentNode;
  var img = document.createElement('img');
  img.src = '/Content/images/play';
  img.style.position = 'absolute';
  img.style.left = '169px';
  img.style.top = '2px';
  img.onmouseover = startScroll;
  img.onmouseout = stopScroll;
  div.style.position = 'relative';
  div.appendChild(img);
  getMoreCells();
}

function OnPageLoadComplete() {
  var u = document.getElementById('unreadMail');
  if (!u)  return;
  var topMenu = document.createElement('div');
  topMenu.className = 'hmenu';
  var userMenu = document.getElementById('userMenu');
  
  var li = userMenu.firstChild;
  var clone = li.cloneNode(true);
  topMenu.appendChild(clone);
  li = li.nextSibling; clone = li.cloneNode(true);
  for (var el=clone.firstChild; el; el = el.nextSibling) {
    if (el.nodeType == 1 && el.tagName.toUpperCase() == 'SPAN')  el.id = 'unreadMail2';
  }
  topMenu.appendChild(clone);
  li = li.nextSibling; clone = li.cloneNode(true);
  topMenu.appendChild(clone);
  initMenu(topMenu);
  
  var usertop = document.getElementById('usertop');
  usertop.appendChild(topMenu);
}


function SlideShow(divId, imageArray, commentArray) {
  div = document.getElementById(divId);
  this.imageArray = imageArray;
  this.commentArray = commentArray;
  
  var _this = this;
  this.div = document.createElement('div');
  this.div.className = 'slideshow';
  
  if (imageArray.length > 1) {
    var prevButton = document.createElement('img');
    prevButton.src = '/Content/images/slide_prev.png';
    prevButton.onclick = function() { _this.onPrevClick(); }
    prevButton.style.cursor = 'pointer';
    this.div.appendChild(prevButton);
    
    this.counterElement = document.createElement('span');
    this.div.appendChild(this.counterElement);
    this.div.appendChild(document.createTextNode(' / ' + imageArray.length));
    
    var nextButton = document.createElement('img');
    nextButton.src = '/Content/images/slide_next.png';
    nextButton.onclick = function() { _this.onNextClick(); }
    nextButton.style.cursor = 'pointer';
    this.div.appendChild(nextButton);
  }
  
  this.imageElement = document.createElement('img');
  this.imageElement.className = 'slideshowMain';
  this.div.appendChild(this.imageElement);
  if (imageArray.length > 1) {
    this.imageElement.onclick = function() { _this.onNextClick(); }
    this.imageElement.style.cursor = 'pointer';
  }
  this.commentElement  = document.createElement('div');
  this.commentElement.className = 'slideshowComment';
  this.div.appendChild(this.commentElement);
  this.setCounter(0);
  
  if (isInternetExplorer()) {  // Nasty workaround for IE bug follows
    var divIdX = div.id + 'X';
    document.write('<div id=' + divIdX + '></div>');
    window.setTimeout(function() { document.getElementById(divIdX).appendChild(_this.div) }, 0);
  } else {
    div.appendChild(this.div);
  }
}

SlideShow.prototype.setCounter = function(counter) {
  if (counter < 0)  counter = this.imageArray.length -1;
  this.counter = counter % this.imageArray.length;
  this.imageElement.src = '/Content/profile/' + this.imageArray[this.counter];
  if (this.imageArray.length > 1) {
    setInnerText(this.counterElement, this.counter + 1);
    setInnerText(this.commentElement, this.commentArray[this.counter]);
  }
}

SlideShow.prototype.onPrevClick = function() {
  this.setCounter(this.counter - 1);
}

SlideShow.prototype.onNextClick = function() {
  this.setCounter(this.counter + 1);
}

