var ie6=false;
agt=navigator.userAgent.toLowerCase();
var is_ie6 = (agt.indexOf('msie')!= -1);
ie6 = (is_ie6 && (navigator.appVersion.indexOf("MSIE 6.0") != -1));

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };
String.prototype.startsWith = function(s) { return this.indexOf(s)==0; }

function openWindow(url, name, params) {
	var wnd = window.open(url, name, params);
	wnd.focus();
}

function validCityElements(elementIds, optional) {
  var i=0;
  for (i=0;i<elementIds.length;i++) {
      if (!validCityElement(elementIds[i], optional)) {
        document.getElementById(elementIds[i]).focus();
      	return false;
      }
  }
  return true;
}

function validCityElement(elementId, optional, inputName, errorFunction) {
  cityEnteredValue = document.getElementById(elementId).value;
  cityId = document.getElementById(elementId+"_id").value;
  citySelectedValue = document.getElementById(elementId).getAttribute("oldValue");
  if (optional) {
  	if (cityEnteredValue.trim() == "" || cityEnteredValue == document.getElementById(elementId).getAttribute("info") ) {
	  	document.getElementById(elementId+"_id").value = "";
	  	document.getElementById(elementId).setAttribute("oldValue", "");
	  	return true;
  	}
  }
  var isValid = validCity(cityId, cityEnteredValue, citySelectedValue, inputName, errorFunction);
  if (!isValid)
    document.getElementById(elementId).focus();
  return isValid;
}

function validCity(cityId, cityEnteredValue, citySelectedValue, inputName, errorFunction) {
  if (!errorFunction) errorFunction = function(msg){alert(msg);}
  if (cityEnteredValue.toLowerCase().trim() == '') {
    if (inputName)
		errorFunction("Please enter "+inputName+".");
    else
		errorFunction("Please enter Cityname.");
  	return false;
  }
  if (cityId == '' || cityEnteredValue.toLowerCase().trim() != citySelectedValue.toLowerCase().trim()) {
    if (inputName)
		errorFunction("Invalid cityname for "+inputName+".  Please check and re-enter.");
    else
		errorFunction("Invalid cityname.  Please check and re-enter.");
  	return false;
  }
  return true;
}

function infoBoxFocus(elementId) {
    var element = $(elementId);
    if (element.value == element.getAttribute("info")) {
        element.value = "";
        element.className = element.className.replace("infoText", "");
    } else 
        element.select();
}

function infoBoxBlur(elementId) {
    var element = $(elementId);
    if (element.value == "") {
        element.value = element.getAttribute("info");
        element.className = element.className.replace("infoText", "");
        element.className = element.className + " infoText";
    } 
}

function clearInfoFields(frmName) {
    var frm = $(frmName);
    for (var i=0;i<frm.elements.length;i++) {
        clearInfoField(frm.elements[i]);
    }
}

function clearInfoField(element) {
    if (element.type == "text" && element.value == element.getAttribute("info"))
        element.value = "";
}

function enableDisableButton(textBoxId, buttonId) {
    if ($(textBoxId).value.trim() != "" && $(textBoxId).getAttribute("info") != $(textBoxId).value) {
       $(buttonId).style.display = "";
    } else {
       $(buttonId).style.display = "none";    
    }
}

function validTagElement(elementId, optional, inputName) {
  tagEnteredValue = document.getElementById(elementId).value;
  tagId = document.getElementById(elementId+"_id").value;
  tagSelectedValue = document.getElementById(elementId).getAttribute("oldValue");
  if (optional) {
  	if (tagEnteredValue.trim() == "" || tagEnteredValue == document.getElementById(elementId).getAttribute("info") ) {
	  	document.getElementById(elementId+"_id").value = "";
	  	document.getElementById(elementId).setAttribute("oldValue", "");
	  	return true;
  	}
  }
  var isValid = validTag(elementId, tagId, tagEnteredValue, tagSelectedValue, inputName);
  if (!isValid)
    document.getElementById(elementId).focus();
  return isValid;
}

function validTag(elementId, tagId, tagEnteredValue, tagSelectedValue, inputName) {
  if (tagId == '' || tagEnteredValue.toLowerCase().trim() != tagSelectedValue.toLowerCase().trim()) {
    var addMsg = "\nIf you don't find the label you need, go ahead and add one.";
    if ($(elementId).getAttribute('noAdd') == "1")
      addMsg = "";
    if (inputName)
		alert("Please select a valid label for "+inputName+"."+addMsg);
    else
		alert("Please select a valid label. "+addMsg);
	
  	return false;
  }
  return true;
}

function validVenueElement(elementId, optional, inputName) {
  venueEnteredValue = document.getElementById(elementId).value;
  venueId = document.getElementById(elementId+"_id").value;
  venueSelectedValue = document.getElementById(elementId).getAttribute("oldValue");
  if (optional) {
  	if (venueEnteredValue.trim() == "" || venueEnteredValue == document.getElementById(elementId).getAttribute("info") ) {
	  	document.getElementById(elementId+"_id").value = "";
	  	document.getElementById(elementId).setAttribute("oldValue", "");
	  	return true;
  	}
  }
  var isValid = validVenue(venueId, venueEnteredValue, venueSelectedValue, inputName);
  if (!isValid)
    document.getElementById(elementId).focus();
  return isValid;
}

function validVenue(venueId, venueEnteredValue, venueSelectedValue, inputName) {
  if (venueId == '' || venueEnteredValue.toLowerCase().trim() != venueSelectedValue.toLowerCase().trim()) {
    if (inputName)
		alert("Please select a valid venue for "+inputName+". \nIf you don't find the venue you need, go ahead and add one.");
    else
		alert("Please select a valid venue. \nIf you don't find the venue you need, go ahead and add one.");
	
  	return false;
  }
  return true;
}

function addEntry(entryId, entryName, type) {
  var inputName = 'new_' + type + '[' + entryId + ']';
  // don't double add
  if (entryForm[inputName] && entryForm[inputName].value == entryId) {
    if(type=='member'){
    alert('\''+entryName+'\' is already listed as a probable traveler');
	}
    return;
  }
  var entryIDTemp=entryId+'_'+ type;
  if(document.getElementById(entryIDTemp) != null) {
	 if(document.getElementById(entryIDTemp).innerHTML == entryIDTemp) {
		 if(type=='member'){
    		alert('\''+entryName+'\' is already listed as a probable traveler');
		}
    	return;
	 }
  }

  pageDataModified = true;

  var entryTable = document.getElementById(type + 'List');
  var rowNum = entryTable.getElementsByTagName('tr').length;
  var entryLinkName = type + 'List_' + rowNum;

  showCheckMark(entryTable, type);
    // add to table visually
  var tbody = document.createElement('tbody');
  var tr = document.createElement('tr');
  var td = document.createElement('td');
  var removeTd = document.createElement('td');
  if (type == 'member') {
    var image = document.createElement('img');
    image.src = '/user/showpicture/' + entryId+'.jpg';
	image.height = 30;
	image.width = 30;
	image.align = 'top';
    td.appendChild(image);
	entryName = '<a target="_blank" class="profileLink" href="/site/search?submit=true&withinFriends=true&userid='+ entryId +'" >'+ entryName+'</a>';
  }else if (type == 'destination'){
    entryName = '<a target="_blank" class="profileLink" href="/site/search?submit=true&airport_code_id='+entryId+'&airport_code='+entryName+'">'+entryName+'</a>';
  }

  td.innerHTML = entryName;

  removeTd.innerHTML = '<span id="' + entryIDTemp + '" style="display:none" >'+ entryIDTemp +'</span><a id="' + entryLinkName +'" href="#" onclick="removeEntry(this, \'' + entryId + '\',\'' + type + '\');return false;">&nbsp;&nbsp;remove</a>';
  tr.appendChild(td);
  tr.appendChild(removeTd);
  tbody.appendChild(tr);
  entryTable.appendChild(tbody);

  // add to FORM for submit
  if (entryForm[inputName]) {
    entryForm[inputName].value = entryId;
  } else {
    var input = document.createElement('input');
    input.type = 'hidden';
    input.name = inputName;
    input.value = entryId;
    entryForm.appendChild(input);
  }

  if(type == 'destination' && document.getElementById("whereNext") != null )
  	document.getElementById("whereNext").style.display = "";
  if(type == 'member' && document.getElementById("whoNext") != null )
  	document.getElementById("whoNext").style.display = "";
  if(type == 'date' && document.getElementById("whenNext") != null )
  	document.getElementById("whenNext").style.display = "";

}

function removeEntry(entry, id, type) {
  var inputs = entryForm.getElementsByTagName('input');
  var element;
  for (var i = 0; i < inputs.length; i++) {
    if (inputs[i].name == 'new_' + type + '[' + id + ']') {
      element = inputs[i];
    }
  }

  if (element) {
    if (element.value != undefined && element.value == id) {
      element.value = null;
    } else if (element.length > 0) {
      for(var i = 0; i < element.length; i++) {
        if (element[i].value == id) {
          element[i].value = null;
        }
      }
    }

    var td = entry.parentNode;
    var tr = td.parentNode;
    var table = tr.parentNode;
    table.removeChild(tr);
	    if (table.getElementsByTagName('tr').length == 1) {
	      // change the checkbox to a question mark
	      var image = document.getElementById(type + 'RequiredImage');
	      image.src = '/i/' + type + '_question.gif';
	    }
  }
}

function disable(elementId) {
   if ($(elementId))
    new Effect.Puff(elementId);
}

function showCheckMark(table, type) {
  // change the question mark to a checkbox
  var image = document.getElementById(type + 'RequiredImage');
  if (image)
	  image.src = '/i/images/16x16_checked.gif';
}

function hitEnterPressButton(button, event) {
  var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
  if (keyCode == 13) {
    button.click();
    return false;
  }
  return true;
}

function doFormSubmit(childElement)
{
	var parent = childElement.parentNode;
	while(parent != null)
	{
		if (parent.method)
		{
			parent.submit();
			return false;
		}
		else
			parent = parent.parentNode;
	}
	return false;
}

function HelpTopic(helpID) {
	for (i=1;true;i++) {
	    if (!$("help"+i)) break;
		$("help"+i).style.display = "none";
		$("hlink"+i).className = "helpNavLink";
	}

    if ($("hlink"+helpID)) {
    	$("hlink"+helpID).className = "helpNavLinkActive";
    	$("help"+helpID).style.display = "";
	} else {
	  alert("Invalid help topic "+helpID);
	}
	repositionFooter();
}

function showHelp(site, topic) {
  var helpURL = "/site/page?p="+site+"/help&noheader=true&t="+topic;
  Dialog.window({url: helpURL, options: {method: "get"}}, {windowParameters: {width:900, height:500, zIndex:2000}}); 
  return false;
}

function descCount() {
	var maxlen = 99;
	var objVal = document.getElementById("activity_description").value;
	var wordCount = objVal.split(" ");
	if (wordCount.length > maxlen + 1) {
		document.getElementById("activity_description").maxLength = objVal.length;
	} else {
		document.getElementById("activity_description").maxLength = 1000;
	}
}
function textLimit(field, maxlen) {
	if (field.value.length > maxlen)
		field.value = field.value.substring(0, maxlen);
}
function descLimit(field, maxlen) {
	if (field.value.length > maxlen) {
		field.value = field.value.substring(0, maxlen);
		alert("Description exceeds "+maxlen+" characters.\nYou can enter longer descriptions in the 'daily notes' section directly below, or in 'Photos & Details' page.  Thanks.");
		return false;
	}
}
function openPlainWindow(url, width, height){
    var left = (screen.width - width) / 2;
    var top = (screen.height - height) / 2;
	win=window.open(url,'','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width='+width+',height='+height+',left='+left+',top='+top);
	win.focus();
	
}

function openResizableWindow(url, width, height){
    var left = (screen.width - width) / 2;
    var top = (screen.height - height) / 2;
	win=window.open(url,'','toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width='+width+',height='+height+',left='+left+',top='+top);
	win.focus();
	
}

//======================== Cookies =======================================

function setEmailFocus() {
	var f = null;
	if (document.getElementById) {
		f = document.getElementById("loginfrm");
	} else if (window.loginfrm) {
		f = window.loginfrm;
	}
	if (f != null) {
		if (f.signinemail.value == null || f.signinemail.value == "") {
			f.signinemail.focus();
		} else {
			f.signinpassword.focus();
		}
	}
}

function validateSubjectBody(frmId) {
	var frm = document.getElementById(frmId);
	if (!frm) return false;
	if (frm.subject && frm.subject.value == "") {
		alert("Please enter subject.");
		frm.subject.focus();
		return false;
	}
	if (frm.body.value == "") {
		alert("Please enter message.");
		frm.body.focus();
		return false;
	}
	return true;
}

function toggleDisplay() {
	for (var i=0;i<arguments.length;i++) {
		if (typeof(arguments[i]) == 'string')
	    	var element = document.getElementById(arguments[i]);
	    else
	    	var element = arguments[i];
		if (element) {
			if (element.style.display == "none")
				element.style.display = "";
			else
				element.style.display = "none";
		}
	}
	repositionFooter();
}

function toggleDisplaySlide(id) {
  var elem = $(id);
  if (elem) {
	if (elem.style.display == "none")
		slideDownEffect(id);
	else
		slideUpEffect(id);
  }
}

function showEnlargedImage(url, title) {
	var height = WindowUtilities.getWindowScroll().height;
	dlg = Dialog.window("<img src='"+url+"' height="+(height-100)+"/>",
             {windowParameters: {width:700, height:(height-50), zIndex:2000}});
	return false;
}

function deleteFriend(friendId) {
	if(confirm("Do you want to delete this friend?"))
		window.location.href="/user/deletefriend/"+friendId;
    return false;
}

function deleteGroup(groupId, member) {
    msg = "Do you want to go out of this group?";
    if (member == 0) {
        msg = "Do you want to delete this group?";
	}     	
	if(confirm(msg))
    	window.location.href="/group/delete/"+groupId+"?removeMembership="+member;
    return false;
}

function deleteTrip(tripId, isOrganizer, fromMyTravel, title)
{
   if(isOrganizer == 1) {
     if(confirm("Are you sure you want to delete this "+title+"?"))
	    window.location.href="/trip/delete/"+tripId+"?isFromMyTravel="+fromMyTravel;
   } else {
	 if(confirm("Are you sure you want to be removed from this "+title+"?"))
	    window.location.href="/trip/delete/"+tripId+"?isFromMyTravel="+fromMyTravel;
   }
}

function validateDate(fld) {
	if (fld.value == '') return;
    var RegExPattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
    var errorMessage = 'Please enter a valid date.\nFormat mm/dd/yyyy';
    if (!fld.value.match(RegExPattern)) {
        alert(errorMessage);
        setTimeout("document.getElementById('"+fld.id+"').focus();", 50);
    }
}

function showComments(talkId, url) {
    document.getElementById("comments"+talkId+"Row1").style.display='block';
    if (document.getElementById("comments"+talkId+"Row2"))
	    document.getElementById("comments"+talkId+"Row2").style.display='block';
    loadPage(url, "comments"+talkId);
}

function isValidEmail(email) {
	var Restr = /^[a-z]([\.\_]?[a-z\d]+)*\@[a-z\d]+([\.\_\-][a-z\d]+)+$/ig;
	return Restr.test(email);
}

//Email Validation
function ValidateEmail(theForm){
	if(theForm.friend_id.value != '')  return true;
	
	if(theForm.email.value != "") {
		if (!isValidEmail(theForm.email.value)){
			theForm.email.focus();
			alert("You must enter valid email address");
			return false;
		}
		return validCityElement('origin_city', true, 'Home town');
	}
	if(theForm.emails.value != '' && theForm.emails.value != theForm.emails.getAttribute("info")) return true;
	alert("You must select friend or enter email to add user to trip");
	return false;
}

function lock_form(frm) {
  var f = document.getElementById(frm);
  if (!f) return;
  $A(f.elements).each(function(i,index){
    i.disabled = true;
  });
  Element.setOpacity(f, 0.5);
  f.old_onsubmit = f.onsubmit;
  f.onsubmit = function() { return false; }
  return false;
}

function unlock_form(frm) {
  var f = document.getElementById(frm);
  if (!f) return;
  $A(f.elements).each(function(i){
    i.disabled = false;
  });
  Element.setOpacity(f, 1.0);
  if (typeof f.old_onsubmit == 'function') f.onsubmit = f.old_onsubmit;
   return false;
}

function highlightElement(id, times) {
  if (!$(id) || $(id).getAttribute('inProgress') == "true") return;
  $(id).setAttribute("inProgress","true");
  new Effect.Highlight(id);
  var wait = 0;
  for(var i=0;i<times-1;i++) {
     wait += 1000;
     setTimeout(function(){new Effect.Highlight(id);}, wait);
  }
  setTimeout(function(){$(id).setAttribute("inProgress","");}, wait+1000);
}

function animateNotice(){
  document.getElementById("notice").style.display = "block";
  if (document.getElementById("notice").scrollWidth > 630) {
    document.getElementById("notice").style.width="630px"; 
  } 
  if (document.getElementById("notice").scrollHeight > 70) {
    document.getElementById("notice").style.height="65px"; 
    document.getElementById("notice").style.overflow = 'scroll';
  } 
  highlightElement('notice', 3); 
}

function getCheckedValue(checkboxes) {
    for (var i=0;i<checkboxes.length;i++) {
        if (checkboxes[i].checked)
            return checkboxes[i].value;
    }
    return null;
}

function getCheckedValueByName(formName, boxName) {
    var frm = $(formName);
    for (var i=0;i<frm.elements.length;i++) {
        if ((frm.elements[i].type == 'radio' || frm.elements[i].type == 'checkbox') && frm.elements[i].name == boxName && frm.elements[i].checked)
            return frm.elements[i].value;
    }
    return null;
}

function click(element) {
  var element = $(element);
  if (document.createEvent) {
    var evt = document.createEvent("MouseEvents");
    evt.initMouseEvent("click", true, true, window,
      0, 0, 0, 0, 0, false, false, false, false, 0, null);
    element.dispatchEvent(evt);
  } else {
    element.click();
  }
}

function check(checkboxes, value) {
    for (var i=0;i<checkboxes.length;i++) {
        if (checkboxes[i].value == value) {
            checkboxes[i].checked = true;
            break;
        }
    }
}

function getCountChecked(frm, nameMatchRegex) {
  var numSelected = 0;
  for (var i = 0; i < frm.elements.length; i++) {
	var e = frm.elements[i];
	if ((e.disabled == false) && (e.type == 'checkbox') && e.name != "" && (!nameMatchRegex || nameMatchRegex.test(e.name))) {
		if (e.checked) numSelected++;
	}
  }
  return numSelected;
}

function getCheckedNames(frm, nameMatchRegex) {
  var checkedNames = [];
  for (var i = 0; i < frm.elements.length; i++) {
	var e = frm.elements[i];
	if ((e.disabled == false) && (e.type == 'checkbox') && e.name != "" && (!nameMatchRegex || nameMatchRegex.test(e.name))) {
		if (e.checked) checkedNames.push(e.name);
	}
  }
  return checkedNames;
}

function displayAddTag(id, type, anchor) {
    toggleDisplay(anchor);
    toggleDisplay('add_'+type+'_'+id);
    if ($('activityRow'+id))
        $('activityRow'+id).style.zIndex = 2001;
    return false;
}

function assignTag(entity_id, type) {
    if (validTagElement(type+'_input_'+entity_id, false)) {
        var tag_id = document.getElementById(type+'_input_'+entity_id+"_id").value;
        xajax_assignTag(entity_id, tag_id, type);
    }
}

function detachTag(entity_id, tag_id, type) {
    if (confirm("You want to remove this label. Are you sure?"))
        xajax_detachTag(entity_id, tag_id, type);
}

function assignInnerHTML(elementId, html) {
    var dummy = document.createElement("div");
    dummy.insertAdjacentHTML("AfterBegin", html);
    $(elementId).innerHTML = "";
    $(elementId).appendChild(dummy.firstChild);
}

function isDigit(c) {
	return ((c=='0')||(c=='1')||(c=='2')||(c=='3')||(c=='4')||(c=='5')||(c=='6')||(c=='7')||(c=='8')||(c=='9'))
}

function validNumber(elementId, fieldName) {
    if (!isNumeric($(elementId).value)) {
        alert("Please enter valid number for "+fieldName);
        $(elementId).focus();
        return false;
    }
    return true;
}

function isNumeric(n) {
	num = parseInt(n,10);
	return !isNaN(num);
}

function padZero(n) {
	v="";
	if (n<10){ 
		return ('0'+n);
	} else {
		return n;
	}
}

function validateTimePicker(ctl) {
    var mode="";
	t=ctl.value.toLowerCase();
	t=t.replace(" ","");
	t=t.replace(".",":");
	t=t.replace("-","");

	if ((isNumeric(t))&&(t.length==4))
		t=t.charAt(0)+t.charAt(1)+":"+t.charAt(2)+t.charAt(3);

	var t=new String(t);
	tl=t.length;

	if (tl==1 ) {
		if (isDigit(t)) {
			ctl.value=t+":00 am";
		} else {
		    ctl.value = "";
			return false;
		}
	}
	else if (tl==2) {
		if (isNumeric(t)) {
			if (parseInt(t,10)<13){
				if (t.charAt(1)!=":") {
					ctl.value= t + ':00 am';
				} else {
					ctl.value= t + '00 am';
				}
			} else if (parseInt(t,10)==24) {
				ctl.value= "0:00 am";
			} else if (parseInt(t,10)<24) {
				if (t.charAt(1)!=":") {
					ctl.value= (t-12) + ':00 pm';
				} else {
					ctl.value= (t-12) + '00 pm';
				}
			} else if (parseInt(t,10)<=60) {
				ctl.value= '0:'+padZero(t)+' am';
			} else {
				ctl.value= '1:'+padZero(t%60)+' am';
				}
			} else {
				if ((t.charAt(0)==":")&&(isDigit(t.charAt(1)))) {
				ctl.value = "0:" + padZero(parseInt(t.charAt(1),10)) + " am";
			} else {
    		    ctl.value = "";
    			return false;
			}
		}
	} else if (tl>=3) {
		var arr = t.split(":");
		if (t.indexOf(":") > 0) {
			hr=parseInt(arr[0],10);
			mn=parseInt(arr[1],10);

			if (t.indexOf("pm")>0) {
				mode="pm";
			} else {
				mode="am";
			}

			if (isNaN(hr)) {
				hr=0;
			} else {
				if (hr>24) {
        		    ctl.value = "";
        			return false;
				} else if (hr==24) {
					mode="am";
					hr=0;
				} else if (hr>12) {
					mode="pm";
					hr-=12;
				}
			}
		
			if (isNaN(mn)) {
				mn=0;
			} else {
				if (mn>60) {
					mn=mn%60;
					hr+=1;
				}
			}
		} else {

			hr=parseInt(arr[0],10);

			if (isNaN(hr)) {
    		    ctl.value = "";
    			return false;
			} else {
				if (hr>24) {
        		    ctl.value = "";
        			return false;
				} else if (hr==24) {
					mode="am";
					hr=0;
				} else if (hr>12) {
					mode="pm";
					hr-=12;
				}
			}

			mn = 0;
		}
		
		if (hr==24) {
			hr=0;
			mode="am";
		}
		ctl.value=hr+":"+padZero(mn)+" "+mode;
	}
}

function validUrl(elementId) {
    var element = $(elementId);
    if (element) {
        if (element.value.trim() == "") {
            element.focus();
            return false;
        }
    }
    return true;
}

function floatSiteInfo() {
    var element = $('siteInfo'); 
    if (element) {
      element.style.position = "";
      element.style.top = "";
      element.style.width = "";
    }
    var element = $('minHeightElement');
    if (element) {
      element.style.height = "";
    }    
}

function slideUpEffect(elementId, afterFinishFn) {
    floatSiteInfo();      
    if (typeof(afterFinishFn) == "function")
        new Effect.SlideUp(elementId, {afterFinish:afterFinishFn});
    else
        new Effect.SlideUp(elementId);
}

function slideDownEffect(elementId, afterFinishFn) {
    floatSiteInfo();      
    if (typeof(afterFinishFn) == "function")
        new Effect.SlideDown(elementId, {afterFinish:afterFinishFn});
    else
        new Effect.SlideDown(elementId);
}

function getSelectedOption(selectElement) {
    selectElement = $(selectElement);
	return selectElement.options[selectElement.selectedIndex];
}

function getSelectedValue(selectElement) {
    return getSelectedOption(selectElement).value;
}

function verifyLogin() {
  xajax_verifyLogin(xajax.getFormValues('loginfrm'));
}

function verifyRegister() {
    if (validCityElement('origin_city', false, 'City I Live In')) {
      termsCheckbox = document.getElementById("termsCheck");
    	if(termsCheckbox != null) {
    		if(termsCheckbox.checked == false) {
    			alert("Sorry! You need to accept terms of service before you sign up");
    			return false;
    		}
    	}
        xajax_verifyRegister(xajax.getFormValues('registerfrm'));
    }
}

function xajaxSetCookie(sName, sValue, nDays) {
  var expires = "";
  if (nDays) {
    var d = new Date();
    d.setTime(d.getTime() + nDays * 24 * 60 * 60 * 1000);
    expires = '; expires=' + d.toGMTString();
  }
  document.cookie = sName + '=' + sValue + expires + '; path=/';
}

function adjustElementHeights(sections) {
  var maxHeight = 0;
  for (var i=0;i<sections.length;i++) {
    if (sections[i]) {
        sections[i].style.height = "auto"
        if (sections[i].scrollHeight > maxHeight)
            maxHeight = sections[i].scrollHeight;
    }
  }
  if (maxHeight == 0) return;
  for (var i=0;i<sections.length;i++) {
    if (sections[i]) {
       sections[i].style.height = (maxHeight+10)+"px";
    }
  }
}

function getFlightBookingUrl(bookingSite, originAirportCode, destinationAirportCode, departureDateFormatted, returnDateFormatted, priceLineDepartureDate, priceLineReturnDate, orbDeparture, orbDepartureDate, orbArrival, orbArrivalDate) {    
    var flightBookingUrl = new Array();
    flightBookingUrl['expedia'] = "'http://service.bfast.com/bfast/click?bfmid=26917872&siteid=41635796&bfpage=deeplink&GOTO=EXPFLTWIZ&FrAirport=' +originAirportCode + '&ToAirport=' +destinationAirportCode + '&FromDate=' + departureDateFormatted + '&ToDate=' + returnDateFormatted + '&NumAdult=1&NumChild=0&FromTime=Morning&ToTime=Morning'";
    flightBookingUrl['hotwire'] = "'http://click.linksynergy.com/fs-bin/statform?id=8KQyBpa6sz8&offerid=93322&bnid=978&subid=0&origCity=' +originAirportCode + '&destinationCity=' +destinationAirportCode + '&startDate=' + departureDateFormatted + '&endDate=' + returnDateFormatted + '&noOfTickets=2&inputId=index'";
    flightBookingUrl['travelocity'] = "'http://travel.travelocity.com/flights/InitialSearch.do?Service=CJUS&dateLeavingTime=Anytime&dateReturningTime=Anytime&flightType=roundtrip&leavingFrom=' +originAirportCode + '&goingTo=' +destinationAirportCode + '&leavingDate=' + departureDateFormatted + '&returningDate=' + returnDateFormatted + '&aid=10398279&pid=2124264&url=http://travel.travelocity.com/flights/InitialSearch.do'";
    flightBookingUrl['priceline'] = "'http://www.kqzyfj.com/interactive?name=pclnbanner_air&id=pclnbanner_air&ProductID=1&DepCity=' +originAirportCode + '&ArrCity=' +destinationAirportCode + '&DepartureDate=' + priceLineDepartureDate + '&ReturnDate=' + priceLineReturnDate + '&NumTickets=1&aid=10408266&pid=2124264&url=http://www.priceline.com/qp.asp'";
    flightBookingUrl['orbitz'] = "'http://www.orbitz.com/App/ValidateFlightSearch?id=8KQyBpa6sz8&offerid=66478&type=4&subid=&slice1:departCity=' +originAirportCode + '&slice1:arriveCity=' +destinationAirportCode + '&Slice1:month=' + orbDeparture + '&Slice1:day=' + orbDepartureDate + '&Slice2:month=' + orbArrival + '&Slice2:day=' + orbArrivalDate + '&adult=1'";
    flightBookingUrl['kayak'] = "'http://www.kayak.com/s/search/air?id=8KQyBpa6sz8&offerid=100094&type=4&subid=0&ai=8KQyBpa6sz8&l1=' +originAirportCode + '&l2=' +destinationAirportCode + '&d1=' + departureDateFormatted + '&d2=' + returnDateFormatted + '&ft=rt&pa=1&cb=Economy'";

    urlLink = eval(flightBookingUrl[bookingSite]);
    
    javascript : urchinTracker(urlLink);
    return urlLink;
}

function getHotelBookingUrl(bookingSite, destination, startDate, endDate, startMonthYear, startDay, endMonthYear, endDay) {
    var hotelBookingUrl = new Array();
    hotelBookingUrl['expedia'] = "'http://service.bfast.com/bfast/click?bfmid=26917872&siteid=41635796&bfpage=deeplink&GOTO=HOTSEARCH&CityName=' +destination + '&InDate=' +startDate + '&OutDate=' +endDate+ '&NumAdult=1'";
    hotelBookingUrl['hotwire'] = "'http://click.linksynergy.com/fs-bin/statform?id=8KQyBpa6sz8&offerid=113245&offerid=93322&bnid=509&subid=0&type=4&inputId=hotel-index&destCity=' +destination + '&endDate=' +endDate + '&startDate=' +startDate";
    hotelBookingUrl['travelocity'] = "'http://travel.travelocity.com/hotel/HotelCobrand.do?Service=TRAVELOCITY&searchMode=city&expr_path=Y&dateFormat=mm%2Fdd%2Fyyyy&city='+destination+'&leavingDate='+startDate+'&returningDate='+endDate+'&numRooms=1&adult1=1&aid=10398279&pid=2124264&url=http://travel.travelocity.com/hotel/HotelCobrand.do'";
    hotelBookingUrl['kayak'] = "'http://www.kayak.com/s/search/hotel?id=8KQyBpa6sz8&offerid=100094&type=4&subid=0&ai=8KQyBpa6sz8&pa=1&df=us1&d1=' +startDate + '&d2=' +endDate+ '&crc=' +destination ";
    hotelBookingUrl['priceline'] = "'http://www.jdoqocy.com/interactive?aid=10408266&pid=2124264&ProductID=5&name=pclnbanner_hot&ROOMS=1&url=http://www.priceline.com/qp.asp&city=' +destination + '&CheckInDate=' +startDate + '&CheckOutDate=' +endDate";
    hotelBookingUrl['orbitz'] = "'http://www.orbitz.com/App/ValidateHotelSearch?id=8KQyBpa6sz8&offerid=66478&type=4&subid=&keywordPIB=' +destination + '&monthInPIB=' + startMonthYear + '&dayInPIB=' + startDay + '&monthOutPIB=' + endMonthYear + '&dayOutPIB=' +endDay + '&numberOfGuestsPIB=1&numberOfRoomsPIB=1'";
    try{
    hotelLink = eval(hotelBookingUrl[bookingSite]);
    }catch(e){alert(e.description);}
    javascript : urchinTracker(hotelLink);
    return hotelLink;
}

function downloadPlugin(){
    if (!window.ttPluginVersion) {
      if (document.all) 
        url = '/i/plugin/setup.msi';
      else
        url = '/i/plugin/tt.xpi';
      window.location.href = url;
      return true;
    }
    return false;
}

function highlightMenu(menu) {
   menu = $(menu);
   if (menu.className.indexOf("highMenu") > 0)
    return;
   menu.className = menu.className + " highMenu";
}

function lowlightMenu(menu) {
   menu = $(menu);
   if (menu.className.indexOf("highMenu") == -1)
    return;
   menu.className = menu.className.replace(" highMenu","");
}

function selectMenu(menu) {
   menu = $(menu);
   if (menu.className.indexOf("selectedMenu") > 0)
    return;
   menu.className = menu.className + " selectedMenu";
}

function unselectMenu(menu) {
   menu = $(menu);
   if (menu.className.indexOf("selectedMenu") == -1)
    return;
   menu.className = menu.className.replace(" selectedMenu","");
}

function repositionFooter() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  
  if (!$('minHeightElement')) {
      var element = $('siteInfo'); 
      if (!element) return;
      if (element.style.position == "absolute") {
         element.style.position = "relative";
         element.style.top = "auto";
         element.style.width = "auto";
      }
      var offset = Position.cumulativeOffset(element);
      if (myHeight-30 > offset[1]) {
         element.style.position = "absolute";
         element.style.top = (myHeight-190)+"px";
         element.style.left = "0px";
         element.style.width="980px";
      }
  } else {
      var element = $('minHeightElement');
      element.style.height = "auto";
      var offset = Position.cumulativeOffset(element);
      var height = element.offsetHeight;
      if (myHeight-40 > offset[1]+height) {
         element.style.height = (height + (myHeight-height-offset[1]-40))+"px";
      }
  }
}

function showChecklist() {
    var leftPos = 749;
    var myWidth = 0;
    if( typeof( window.innerWidth ) == 'number' ) {
        //Non-IE
        myWidth = window.innerWidth;
    } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
        //IE 6+ in 'standards compliant mode'
        myWidth = document.documentElement.clientWidth;
    } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
        //IE 4 compatible
        myWidth = document.body.clientWidth;
    }
    if (myWidth-170 > 990) leftPos=990;
    $('checkList').style.left = leftPos+"px";
/*
    win = new Window('checklistWindow', {className: "dialog",  zIndex: 100, left: leftPos, top: 130,  width:260, height:220, resizable: false, title: "", draggable:true, minimizable:true, maximizable:false});
    win.getContent().innerHTML = $('checkList').innerHTML;
    win.setDestroyOnClose();
    win.show();
*/    
}

// written by Dean Edwards, 2005
// with input from Tino Zijdel, Matthias Miller, Diego Perini

// http://dean.edwards.name/weblog/2005/10/add-event/

function addEvent(element, type, handler) {
	if (element.addEventListener) {
		element.addEventListener(type, handler, false);
	} else {
		// assign each event handler a unique ID
		if (!handler.$$guid) handler.$$guid = addEvent.guid++;
		// create a hash table of event types for the element
		if (!element.events) element.events = {};
		// create a hash table of event handlers for each element/event pair
		var handlers = element.events[type];
		if (!handlers) {
			handlers = element.events[type] = {};
			// store the existing event handler (if there is one)
			if (element["on" + type]) {
				handlers[0] = element["on" + type];
			}
		}
		// store the event handler in the hash table
		handlers[handler.$$guid] = handler;
		// assign a global event handler to do all the work
		element["on" + type] = handleEvent;
	}
};
// a counter used to create unique IDs
addEvent.guid = 1;

function removeEvent(element, type, handler) {
	if (element.removeEventListener) {
		element.removeEventListener(type, handler, false);
	} else {
		// delete the event handler from the hash table
		if (element.events && element.events[type]) {
			delete element.events[type][handler.$$guid];
		}
	}
};

function handleEvent(event) {
	var returnValue = true;
	// grab the event object (IE uses a global event object)
	event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
	// get a reference to the hash table of event handlers
	var handlers = this.events[event.type];
	// execute each event handler
	for (var i in handlers) {
		this.$$handleEvent = handlers[i];
		if (this.$$handleEvent(event) === false) {
			returnValue = false;
		}
	}
	return returnValue;
};

function fixEvent(event) {
	// add W3C standard event methods
	event.preventDefault = fixEvent.preventDefault;
	event.stopPropagation = fixEvent.stopPropagation;
	return event;
};
fixEvent.preventDefault = function() {
	this.returnValue = false;
};
fixEvent.stopPropagation = function() {
	this.cancelBubble = true;
};
/** ends **/

/**
 * Creates an Element for insertion into the DOM tree.
 * From http://simon.incutio.com/archive/2003/06/15/javascriptWithXML
 *
 * @param element the element type to be created.
 *				e.g. ul (no angle brackets)
 **/
function createElement(element) {
	if (typeof document.createElementNS != 'undefined') {
		return document.createElementNS('http://www.w3.org/1999/xhtml', element);
	}
	if (typeof document.createElement != 'undefined') {
		return document.createElement(element);
	}
	return false;
}

/**
 * "targ" is the element which caused this function to be called
 * from http://www.quirksmode.org/js/events_properties.html
 **/
function getEventTarget(e) {
	var targ;
	if (!e) {
		e = window.event;
	}
	if (e.target) {
		targ = e.target;
	} else if (e.srcElement) {
		targ = e.srcElement;
	}
	if (targ.nodeType == 3) { // defeat Safari bug
		targ = targ.parentNode;
	}

	return targ;
}



function commonOnLoad() {
    if (document.getElementById("notice"))
       animateNotice();
    if (document.getElementById("map"))
       if (loadMap) loadMap();
}

function validatePassword() {
  var pass=$('password');
  var confirm=$('password_confirm');
  var err = $('activateGuestErrorMessage');
  err.innerHTML = '<br/>';
  if (pass.value != confirm.value) {
    err.innerHTML = 'Passwords do not match';
    new Effect.Highlight(err);
    return false;
  }
  if (pass.value.length < 5) {
    err.innerHTML = 'Password must be at least 5 characters';
    new Effect.Highlight(err);
    return false;
  }
  return true;
}

function validateCompleteAccount() {
  $('password_confirm').value = $('password').value;
  return validatePassword() && validCityElement('origin_city', false, 'Home City', function(msg){var err=$('activateGuestErrorMessage');err.innerHTML=msg;new Effect.Highlight(err);});
}

function switchTab(newTab) {
  var current = document.getElementById(newTab);
  while (current && current.nodeName.toLowerCase() != 'ul') {
    current = current.parentNode;
  }
  if (current) {
    var links = current.getElementsByTagName("a");
    for (var i=0;i<links.length;i++) {
      var id = links[i].getAttribute('id');
      var content = document.getElementById(id+"Contents");
      if (id == newTab) {
          if (links[i].className.indexOf("active") >= 0) return true;
          links[i].className = links[i].className.replace(/[\s]*active/gim, '')+' active';
          if (content) content.style.display = "";
      } else {
          links[i].className = links[i].className.replace(/[\s]*active/gim, '');
          if (content) content.style.display = "none";
      }
    }
  }
  repositionFooter();
  return false;
}

function dynamicSwitchTab(newTab, force) {
  switchTab(newTab);
  if (typeof(force) == 'undefined' || !force) 
  	loadPage($(newTab).href, newTab+"Contents", true);
  else
    forceLoadPage($(newTab).href, newTab+"Contents", true);
  $(newTab).onclick = function(){return switchTab(newTab);}
  return false;
}

function createGroup(field) {
    clearInfoField(field);
    field.value = field.value.trim();
    if (field.value == "") {
        alert("Enter group name to create.");
        field.focus();
    } else 
        xajax_createGroup(field.value);
}
function showMenu(e, anchor, id) {
  var clipPosition = Position.cumulativeOffset($(anchor))
  var div = $(id);
  var posX = clipPosition[0]-215;
  var posY = clipPosition[1]-210;
  if (div) {
     div.style.top = posY+"px";
     div.style.left = posX+"px";
     if (!div.getAttribute('eventAdded')) {
        div.setAttribute('eventAdded', 'done');
        div.parentNode.removeChild(div);
        document.body.appendChild(div);
        addEvent(div, "mouseover", function(e){ if (!e) var e=window.event; if (e.target) var trg = e.target; else if (e.srcElement) var trg = e.srcElement;if (trg != div) return; div.hide();});
        addEvent(div, "mouseup", function(e){div.hide();});
     }
     div.show();
     return;
  }
}
function showMainMenu(e, anchor, id) {
  var clipPosition = Position.cumulativeOffset($(anchor))
  var div = $(id);
  var posX = clipPosition[0]-215;
  var posY = clipPosition[1]-200;
  if (div) {
     div.style.top = posY+"px";
     div.style.left = posX+"px";
     if (!div.getAttribute('eventAdded')) {
        div.setAttribute('eventAdded', 'done');
        div.parentNode.removeChild(div);
        document.body.appendChild(div);
        addEvent(div, "mouseover", function(e){ if (!e) var e=window.event; if (e.target) var trg = e.target; else if (e.srcElement) var trg = e.srcElement;if (trg != div) return; div.hide();});
        addEvent(div, "mouseup", function(e){div.hide();});
     }
     div.show();
     return;
  }
}
function showProgress(element) {
  element = $(element);
  if (!element) return;
  element.innerHTML = '<img src="/i/tj/images/progress_black.gif"/>';
  element.show()
  repositionFooter();
}
function createCalendar(name, mindate) {
  if (typeof(YAHOO.datepicker[name+"Picker"]) != 'undefined') {
    YAHOO.datepicker[name+'Picker'].selectEvent.unsubscribeAll();
    delete YAHOO.datepicker[name+'Picker'];
  }
  var options = {pages:2, close:false};
  if (mindate != '') options.mindate = mindate;
  YAHOO.datepicker[name+"Picker"] = new YAHOO.widget.CalendarGroup(name,name+'Container', options);
  YAHOO.datepicker[name+'Picker'].render();
  YAHOO.datepicker[name+'Picker'].selectEvent.subscribe(handleCalendarSelect, YAHOO.datepicker[name+'Picker'], true);
  if (mindate == '' && !$(name).getAttribute('allowPast')) {
	YAHOO.datepicker[name+'Picker'].cfg.setProperty('mindate', new Date());;
  }
}
function getCalendarDateStr(cal) {
  var selectedDates = cal.getSelectedDates();   
  var str = '';
  if (selectedDates.length > 0) {   
    var firstDate = selectedDates[0];   
    var year = firstDate.getFullYear(), month = firstDate.getMonth()+1, day = firstDate.getDate();   
    str = (month<10?"0":"")+month + "/"+(day<10?"0":"")+ day + "/" + year;   
  }
  return str;
}
function showCalendar(cal, text) {
  infoBoxFocus(text.id);
  var clipPosition = Position.positionedOffset($(text.id))
  var div = $(cal.id+'Container');
  div.style.left = clipPosition[0]+"px";
  div.style.top = (clipPosition[1]+22)+"px";
  div.style.width = (document.all)?"272px":"290px";
  div.style.fontSize="8pt";
  if (text.value.trim() != '' && getCalendarDateStr(cal) != text.value) {
      cal.select(text.value);
      var selectedDates = cal.getSelectedDates();   
      if (selectedDates.length > 0) {   
        var firstDate = selectedDates[0];   
        cal.cfg.setProperty("pagedate", (firstDate.getMonth()+1) + "/" + firstDate.getFullYear());   
      }
  }
  cal.render();   
  cal.show();
}

function hideCalendar(cal, text) {
//  validateDate(text);
  setTimeout(function(){cal.hide()},200);
}

function handleCalendarSelect(type,args,obj) {
  var dates = args[0];   
  var date = dates[0];   
  var year = date[0], month = date[1], day = date[2];   
  if (isNaN(year)) return;
  var txtDate = document.getElementById(obj.id);   
  txtDate.value = (month<10?"0":"")+month + "/"+(day<10?"0":"")+ day + "/" + year;   
}

function handleDepartCalendarSelect(type, args, obj) {
  var dates = args[0];   
  var date = dates[0];   
  var year = date[0], month = date[1], day = date[2];   
  if (isNaN(year)) return;
  if (obj.cfg.getProperty('mindate') != month + "/" + day + "/" + year) {
    obj.cfg.setProperty("mindate", month + "/" + day + "/" + year);   
    obj.render();
  }
  var retDateTxt = document.getElementById(obj.id);   
  var depDate = Date.parse(month + "/"+day + "/" + year);
  if (retDateTxt.value.trim() == '' || depDate > Date.parse(retDateTxt.value)) {
      retDateTxt.value = (month<10?"0":"")+month + "/"+(day<10?"0":"")+ day + "/" + year;   
      obj.select(retDateTxt.value);
  }
}

function linkDepartReturnDates(departCal, returnCal) {
  departCal.selectEvent.subscribe(handleDepartCalendarSelect, returnCal, true);
  if ($(departCal.id).value.trim() != '')
     departCal.select($(departCal.id).value);
}

/** Set only the year, month, date parts (keep existing time) */
Date.prototype.setDateOnly = function(date) {
  var tmp = new Date(date);
  this.setDate(1);
  this.setFullYear(tmp.getFullYear());
  this.setMonth(tmp.getMonth());
  this.setDate(tmp.getDate());
};

function handleTextEnter(element) {
	var keyPressed = 0;
	if (window.event) keyPressed = window.event.keyCode;  else keyPressed = !event?0:event.which;
	var script = element.getAttribute('onenter'); 
	if (keyPressed == 13 && script && script != '')
		eval(script);
	return false;
}

function urchinTracker(url){
  if (typeof(pageTracker) != 'undefined' && pageTracker) 
     pageTracker._trackPageview(url);
}

addEvent(window, 'load', commonOnLoad)