//This file contains javascript functions relied on by the Member Profile, many are pulled from site/js/tripadvisor.js.m4
//The Member Profile is going to be redone tab by tab, so this file is only necessary as a bridge until then.

function findPos(obj)
{
      var curleft = curtop = 0;
      if (obj.offsetParent)
      {
          curleft = obj.offsetLeft
          curtop = obj.offsetTop
          while (obj = obj.offsetParent)
          {
              curleft += obj.offsetLeft
              curtop += obj.offsetTop
          }
      }

      return [curleft,curtop];
}

function getEventPosition(event)
{
  if (!event && window.event)
    event = window.event;
  var x = y = 0;
  if (event.clientX) {
    x = event.clientX;
    y = event.clientY;
  } else if (event.pageX) {
    x = event.pageX;
    y = event.pageY;
  }
  return [x,y];
}
  
function confirmBubble(ele, swap, offX, offY, msg, func)
{
    var bubble = $('confirmBubble');
    if(bubble) {
      bubble.parentNode.removeChild(bubble);
    }
    
    var args = confirmBubble.arguments;
    var params = new Array();
    
    if(msg=="") {
      msg = JS_common__207f;
    }
    if(func) {
      confirmBubbleFunc = func;
      if (typeof confirmDeleteFriend=="function" && func==confirmDeleteFriend)
      {
        params[0] = args[6];
        params[1] = '\''+args[7]+'\'';
      }
      else {
        for(i=6; i<args.length; i++){
          params[i-6] = args[i];
        }
      }  
    } else {
      confirmBubbleFunc = function() {};
    }
    var pos = findPos($(ele));
    var l = pos[0];
    var t = pos[1];
    if(l!=0 && t!=0) {
      var x = new Element('div', {'id': 'confirmBubble', 'class': 'navigationPopBox',
        'styles': {
          'display': 'block',
          'position': 'absolute',
          'left': l+offX-14,
          'top': t+offY+19
        }
      });
      var sb = new StringBuffer();
      sb.append('<div class="saveShadow"><div class="saveShell">');
      sb.append('<div class="navigationPopPoint" style=" top: -5px; left: 20px;">');
      sb.append('<img src="'+cdnHost+'/img/m2m/arrowPointUpEdit.gif" width="13" height="7" border="0"/>');
      sb.append('</div>');
      sb.append('<div class="saveBodyFluid">');
      sb.append(msg+'<br /><br />');
      if (swap==1) {
        sb.append('<div class="m2m_link_gold" style="margin-right: 20px;"><div style="cursor: pointer;" onclick="$(\'confirmBubble\').parentNode.removeChild($(\'confirmBubble\'));"><div class="m2m_copy"><img src="'+cdnHost+'/img/m2m/m2m_leftBG_Gold.gif" alt="' + JS_common_No + '" align="absmiddle" border="0" height="20" width="5" /><strong>' + JS_common_No + '</strong></div></div></div>');
        sb.append('<div class="m2m_link"><div style="cursor: pointer;" onclick="confirmBubbleFunc(' + params + ');$(\'confirmBubble\').parentNode.removeChild($(\'confirmBubble\'));"><div class="m2m_copy"><img src="'+cdnHost+'/img/m2m/m2m_leftBG.gif" alt="' + JS_common_Yes + '" align="absmiddle" border="0" height="20" width="5" />' + JS_common_Yes + '</div></div></div>');
      } else {
      sb.append('<div class="m2m_link" style="margin-right: 20px;"><div style="cursor: pointer;" onclick="$(\'confirmBubble\').parentNode.removeChild($(\'confirmBubble\'));"><div class="m2m_copy"><img src="'+cdnHost+'/img/m2m/m2m_leftBG.gif" alt="' + JS_common_No + '" align="absmiddle" border="0" height="20" width="5" />' + JS_common_No + '</div></div></div>');
      sb.append('<div class="m2m_link_gold"><div style="cursor: pointer;" onclick="confirmBubbleFunc(' + params + ');$(\'confirmBubble\').parentNode.removeChild($(\'confirmBubble\'));"><div class="m2m_copy"><img src="'+cdnHost+'/img/m2m/m2m_leftBG_Gold.gif" alt="' + JS_common_Yes + '" align="absmiddle" border="0" height="20" width="5" /><strong>' + JS_common_Yes + '</strong></div></div></div>');
      }
      sb.append('<br /><br />');
      sb.append('</div>');
      sb.append('</div></div>');
      x.setHTML(sb);
      document.body.appendChild(x);
    }
}

function dialogBubble(ele, offX, offY, msg, shiftX, width)
{
  closeDialogBubble();

  if(msg==null) {
    msg = "";
  }

  if(shiftX==null || shiftX=="") {
    shiftX = 0;
  }

  shiftX = shiftX + 20;

  var pos = findPos($(ele));
  var l = pos[0];
  var t = pos[1];
  if(l!=0 && t!=0) {
    var x = new Element('div', {'id': 'confirmBubble', 'class': 'navigationPopBox',
      'styles': {
        'display': 'block',
        'position': 'absolute',
        'left': l+offX+6- shiftX,
        'top': t+offY+19,
        'z-index': 5120 //dragObj.zIndex
      }
    });
    if(width!="" && width!=null) {
      x.setStyle('width', width);
    }
    var sb = new StringBuffer();
    sb.append('<div class="saveShadow"><div class="saveShell">');
    sb.append('<div class="navigationPopPoint" style="top: -5px; left: '+shiftX+'px;">');
    sb.append('<img src="'+cdnHost+'/img/m2m/arrowPointUpEdit.gif" width="13" height="7" border="0"/>');
    sb.append('</div>');
    sb.append('<div class="saveBodyFluid">');
    sb.append(msg);
    sb.append('<div style="text-align: right;"><a href="javascript:void(0)" onclick="closeDialogBubble();">' + JS_close + '</a></div>');
    sb.append('</div>');
    sb.append('</div></div>');
    x.setHTML(sb);
    document.body.appendChild(x);
  }
}

function closeDialogBubble() {
  var bubble = $('confirmBubble');
  if(bubble) {
    bubble.parentNode.removeChild(bubble);
  }
}

var floater;
function FloatingDialog(content)
{
  var dlg = floater;
  if (dlg == null) {
    var dlg = new Element('div',{'class':'memberProfile'});
    floater = dlg;
  }
  var scrOff = getScrollOffset();
  dlg.setProperty('id','floater');
  dlg.setStyles({
    'width': '400px',
    'position': 'absolute',
    'z-index': 5120,
    'left': '-5000px',
    'top': scrOff[1],
    'display': 'block'
  });
  dlg.setHTML(content);
  document.body.appendChild(dlg);
  dlg.centerOnScreen();
}

function closeFloater()
{
  if (floater) hide(floater);
  if($('floaterIframe'))
  {
      document.body.removeChild($('floaterIframe'));
  }
  return false;
}

function centerMe(element)
{
  var dlg = element;
  var wSize = getWindowSize();
  var scrOff = getScrollOffset();
  var dlgSize = getSize(dlg);
  var l = (Math.round((wSize.width  - dlgSize[0]) / 2) + scrOff[0]);
  var r = (Math.round((wSize.height - dlgSize[1]) / 2) + scrOff[1]);
  dlg.setStyles({
    'left': l,
    'right': r
  });
  return [l,r,dlgSize[0],dlgSize[1]];
}

function getWindowSize()
{
  var w = 0, h = 0;
  if (typeof(window.innerWidth) == 'number') {
    // Non-IE
    w = window.innerWidth;
    h = window.innerHeight;
  }
  else if (document.documentElement &&
    (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
    // IE 6+ in 'standards compliant mode'
    w = document.documentElement.clientWidth;
    h = document.documentElement.clientHeight;
  }
  else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
    // IE 4 compatible
    w = document.body.clientWidth;
    h = document.body.clientHeight;
  }
  return {width: w, height: h};
}

function showPrivacyPolicy() {
    window.open("/pages/privacy.html", "PrivacyPolicy", "toolbar=0,resizable=1,menubar=0,location=0,status=0,scrollbars=3,width=800,height=600,screenX=30,screenY=25,left=30,top=25");
}

//Sets all checkable elements in a form to be checked or unchecked
function selectAll (formId, value)
{
  var elements = document.getElementById(formId).elements;
  for (var i = 0; i < elements.length; i++)
  {
      elements[i].checked = value;
  }
  return false;
}

//Determines if all checkboxes in a form are checked
function allSelected (formId)
{
  var elements = document.getElementById(formId).elements;
  for (var i = 0; i < elements.length; i++)
  {
    var e = elements[i];
    if (e.type == 'checkbox' && e.checked == false)
    {
      return false;
    }
  }
  return true;
}

//Expecting params to be a form id, by way of serializeForm
var AjaxRequest = function(url, errMsg, parameters, responseFunc)
{
  new Ajax(url, {data: parameters, evalScripts: true, onComplete: responseFunc}).request();
}

var AjaxResponseDialog = function(txt) { FloatingDialog(txt); }

var bRecaptchaSetup = false;
function AjaxSendMessage(params, captchaNeeded)
{
    if (typeof(captchaNeeded) == 'undefined') {captchaNeeded = true;}
    var showSendMessage = function() {
        new Ajax('/SendMessage', {data: params, evalScripts: true, onComplete: sendMessageAjaxResponseDialog}).request();
        //AjaxRequest('/SendMessage','oops!',params,sendMessageAjaxResponseDialog);
    }
    if (!bRecaptchaSetup && captchaNeeded)
    {
        var headID = document.getElementsByTagName("head")[0];         
        var rcScript = document.createElement('script')
        rcScript.type = 'text/javascript';
        rcScript.onload=showSendMessage;
        rcScript.onreadystatechange= function () {
            if (this.readyState == 'loaded' || this.readyState == 'complete' ) showSendMessage();
        }
        rcScript.src = 'http://api.recaptcha.net/js/recaptcha_ajax.js';
        headID.appendChild(rcScript);
        bRecaptchaSetup = true;
    }
    else
    {
        new Ajax('/SendMessage', {'data': params, evalScripts: true, onComplete: sendMessageAjaxResponseDialog}).request();
    }
}

var sendMessageAjaxResponseDialog = function(txt) {
    FloatingDialog(txt);
    //new Drag.Move($('floater'));
    if (typeof window['callback_ShowRecaptcha'] != 'undefined')
    {
        var cbfn = window['callback_ShowRecaptcha'];
        cbfn();
    }
}

//No longer need to serialize for mootools
var serializeForm = function(id) {
  return $(id);
}

var messageSettings = function(option) {
  if(option=="away") {
    var msgParams = {'t': 'op', 'op': 4};
  }
  else if(option=="block") {
    var msgParams = {'t': 'bl'};
  }
  new Ajax('/MessagingOptions', {
    data: msgParams,
    evalScripts: true, 
    onComplete: function(txt,xml) {FloatingDialog(txt); } //new Drag.Move($('floater')); }
  }).request();
}

var openUrlFromIframe = function(url,event) {
  new Event(event).preventDefault();
  document.location  = url;
}

function setSelRange(input, start, end)
{
 if (!end) end=start;
 input.focus();
 if (input.setSelectionRange)
 {
  input.setSelectionRange(start, end);
 }
 else if (input.createTextRange)
 {
  var range = input.createTextRange();
  range.collapse(true);
  range.moveEnd('character', end);
  range.moveStart('character', start);
  range.select();
 }
}

//func: getElementsByClassName
//Written by Jonathan Snook, http://www.snook.ca/jonathan
//Add-ons by Robert Nyman, http://www.robertnyman.com
function getElementsByClassName(oElm, strTagName, strClassName)
{
var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
var arrReturnElements = new Array();
strClassName = strClassName.replace(/-/g, "\-");
var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
var oElement;
for(var i=0; i<arrElements.length; i++){
    oElement = arrElements[i];
    if(oRegExp.test(oElement.className)){
        arrReturnElements.push(oElement);
    }
}
return arrReturnElements;
}

//fancy CSS button to match the velocity macro
function cssButton(text, image) {
  button = '<div class="m2m_link"><div style="cursor: pointer;"><div class="m2m_copy"><img src="'+cdnHost+'/img/m2m/m2m_leftBG.gif" alt="';
  button += text;
  button += '" align="absmiddle" border="0" height="20" width="5" />';
  if(image!="") {
    button += '<img src="'+image+'" alt="" align="absmiddle" style="padding-right:3px;" />';
  }
  button += text;
  button += '</div></div></div>';
  return button;
}

// fancy CSS button to match the velocity macro
function cssButtonG(text, image) {
  button = '<div class="m2m_link_gold"><div style="cursor: pointer;"><div class="m2m_copy"><img src="'+cdnHost+'/img/m2m/m2m_leftBG_Gold.gif" alt="';
  button += text;
  button += '" align="absmiddle" border="0" height="20" width="5" />';
  if(image!="") {
    button += '<img src="'+image+'" alt="" align="absmiddle" style="padding-right:3px;" />';
  }
  button += '<strong>'+text+'</strong>';
  button += '</div></div></div>';
  return button;
}

//scaleImage(imageID, maxSize) with helper function scaleImageDims(...)
//to use: pass in a document id as the imageID and a maxSize that the image
//should be scaled to preserving aspect ratio
function scaleImage(imageID, maxSize) {
  $(imageID).setStyle("visibility","hidden");
  var tempImage = new Asset.image($(imageID).src, {onload: function() { scaleImageDims(tempImage, imageID, maxSize); } } );
}

function scaleImageDims(tempImage, imageID, maxSize) {
  if(tempImage.width > tempImage.height) {
   var width = maxSize;
   var height = width * tempImage.height / tempImage.width;
  } else {
   var height = maxSize;
   var width  = height * tempImage.width / tempImage.height;
  }
  $(imageID).setStyles({
    height: height,
    width: width,
    visibility: "visible"
  });
}

//allows a "maxlength" attribute for a text area
//to use: onkeypress="return isNotMax(this)" in any textarea tag
function isNotMax(textArea)
{
  var max = textArea.getAttribute("maxlength");
  var b = textArea.value.length <= max;
  if (!b) {
    textArea.value = textArea.value.slice(0, max);
  }
  return b;
}

//func: showPhotoPopup
function showPhotoPopup(sUrl)
{
  // Get the photo id for the cookie
  var id = sUrl.match(/#([0-9]+)/)[1];
  if (!id) {
    id = "1";
  }

  // Set a temp cookie to indicate a popup
  Cookie.set("PhotoPop", id, {domain: cookieDomain, path: "/"});  // No duration, will be removed by server

  // Open the window
  var child = ta.servlet.Popup.open(sUrl, 'media', 780, 800);

  //var child = window.open(sUrl,'taphotobrowser', popopsResizeScroll+',width=780,height=660');
  if (child != null) child.focus();

  // If we have a window then try to display the right photo (if the window was already open it may be wrong)
  if (child && child.showImage) {
    child.showImage(id);
  }

  return false;
}
