// min/max slider values
var MIN_AGE = 18;
var MAX_AGE = 100;
var MIN_LOSS = 0;
var MAX_LOSS = 100;
var MIN_LOC_DISTANCE = 1;
var MAX_LOC_DISTANCE = 9000;

var DIST_SLIDER_VALUES =  [1,2,3,4,5,10,15,20,25,30,40,50,75,100,250,500,1000,2000,3000,5000,7000,MAX_LOC_DISTANCE];
var DIST_SLIDER_INDICES = [0,1,2,3,4, 5, 6, 7, 8, 9,10,11,12, 13, 14, 15,  16,  17,  18,  19,  20,              21];

var dontSearch = true;
var firstResult = 0;
var maxResults = readCookie("MAX_CS_PAGES_COOKIE");
var memberSearch = false;
if(maxResults == null) maxResults = 24;

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function toggleTab(prefix, e)
{
	var x = Event.pointerX(e);
	var p = Position.cumulativeOffset($(prefix + '_tab'));
	if (x - p[0] > 28) // i.e. on the left, near the open/close icon
	{
		return false;
	}

	var hdr = $(prefix + '_tab');
	if (hdr.className == 'tab_closed')
	{
		hdr.className = 'tab_open';
		$(prefix + '_content').style.display = 'block';
	}
	else
	{
		hdr.className = 'tab_closed';
		$(prefix + '_content').style.display = 'none';
	}
}

// Temporarily disable the doSearch() function,
//  which gets triggered sometimes when 'clear' actions are clicked
function skipSearch(func)
{
	dontSearch = true;
	func();
	dontSearch = false;
}

function getAgeRange()
{
	var age1 = Math.round(age_left.value);
	var age2 = Math.round(age_right.value);
	if (age1 > age2)
	{
		// swap age1 and age2
		age1 = age1 + age2;
		age2 = age1 - age2;
		age1 = age1 - age2;
	}
	return [age1, age2];
}

function updateAge(search)
{
	var age = getAgeRange();

	if (age[1] == MAX_AGE)
	{
		txt = age[0] + ' or older';
	}
	else
	{
		txt = '' + age[0] + '-' + age[1];
	}
	$('age_range').innerHTML = txt;
	$('ageStart').innerHTML = (age[0] == MAX_AGE ? 'all' : age[0]);
	$('ageEnd').innerHTML = (age[1] == MAX_AGE ? 'all' : age[1]);

	if (search)
	{
		doSearch();
	}
}

function clearAge()
{
	skipSearch(function(){
		age_left.setValue(MIN_AGE);
		age_right.setValue(MAX_AGE);
	});
	updateAge(true); // trigger search

	return true;
}

function genderSelected(search)
{
	var gender = $('genderM').checked ? 'male' :
		($('genderF').checked ? 'female' : 'male &amp; female');

	$('gender_range').innerHTML = gender;

	if (search)
	{
		doSearch();
	}
}

function clearGender()
{
	// not sure if all browsers respond the same way when changing the
	//  radio button values, so let's be safe ...
	skipSearch(function(){
		$('genderMF').checked = true;
	});
	genderSelected(true); // trigger search
}

function updateLocation(search)
{
	var dist = Math.round(loc_slider.value);
	if (dist < 0) dist = 0;
	else if (dist >= DIST_SLIDER_VALUES.length) dist = DIST_SLIDER_VALUES.length;

	dist = DIST_SLIDER_VALUES[dist];

	var txt = 'anywhere';
	var hdr = 'anywhere';

	if (dist < MAX_LOC_DISTANCE)
	{
		txt = dist + ' mi from me';
		hdr = 'within ' + dist + ' mile' + (dist > 1 ? 's' : '');
	}
	$('loc_txt').innerHTML = txt;
	$('loc_range').innerHTML = hdr;

	if (search) doSearch();
}

function clearLocation()
{
	//TODO - we could avoid search if value is already MAX_LOC_DISTANCE, with:
	// if (loc_slider.value == MAX_LOC_DISTANCE) return;
	loc_slider.setValue(DIST_SLIDER_INDICES.length - 1);
	$('ZipCodeValue').value = '';
	updateLocation(false); // search is already triggered
}


function getLossRange()
{
	var loss1 = Math.round(loss_left.value);
	var loss2 = Math.round(loss_right.value);
	if (loss1 > loss2)
	{
		// swap loss1 and loss2
		loss1 = loss1 + loss2;
		loss2 = loss1 - loss2;
		loss1 = loss1 - loss2;
	}
	return [loss1, loss2];
}

function updateLoss(search)
{
	var loss = getLossRange();

	if (loss[1] == MAX_LOSS)
	{
		txt = '' + loss[0] + '-' + loss[1] + '+ lbs.';
	}
	else
	{
		txt = '' + loss[0] + '-' + loss[1] + ' lbs.';
	}
	$('loss_range').innerHTML = txt;
	$('lossStart').innerHTML = (loss[0] == MAX_LOSS ? ('' + loss[0] + '+ lbs.') : ('' + loss[0] + ' lbs.'));
	$('lossEnd').innerHTML = (loss[1] == MAX_LOSS ? ('' + loss[1] + '+ lbs.') : ('' + loss[1] + ' lbs.'));

	if (search)
	{
		doSearch();
	}
}

function clearLoss()
{
	skipSearch(function(){
		loss_left.setValue(MIN_LOSS);
		loss_right.setValue(MAX_LOSS);
	});
	updateLoss(true); // trigger search
	return true;
}

function setFirstResult(val)
{
	firstResult = val;
}

function setMaxResults(val)
{
	maxResults = val;
	firstResult = 0;
}

// Triggered when clicking 'next', 'prev' or changing maxResults.
function doSearchAgain()
{
	if (memberSearch)
		doMemberSearch();
	else
		doSearch();
}

// Whether we're searching using "search members" (true)
// or using the filter criteria (false).
// When switching between the two criteria, the firstResult is reset to 0.
function setMemberSearch(val)
{
	if (memberSearch != val)
		firstResult = 0;

	memberSearch = val;
}

// Triggered when user hits enter in "search members" field in LinkUp
// (or clicks the button next to it)
function doMemberSearch()
{
	if (dontSearch) return;

	setSearching(true);
	setMemberSearch(true);

	// start search on a different thread, or "please weight" dialog won't show
	setTimeout("doActualMemberSearch()", 1);
}

function doSearch()
{
	if (dontSearch) return;

	setSearching(true);
	setMemberSearch(false);

	// start search on a different thread, or "please weight" dialog won't show
	setTimeout("doActualSearch()", 1);
}

// don't call this directly, only doSearch() should call this
function doActualSearch()
{
    var member = trim($F('MemberSearch'));

	var gender = $('genderM').checked ? 'M' :
		($('genderF').checked ? 'F' : 'MF');

	var dist = Math.round(loc_slider.value);
	if (dist < 0) dist = 0;
	else if (dist >= DIST_SLIDER_VALUES.length) dist = DIST_SLIDER_VALUES.length;
	dist = DIST_SLIDER_VALUES[dist];

	if (dist >= MAX_LOC_DISTANCE)
	{
		dist = -1;
	}

	var age = getAgeRange();
	if (age[0] == MIN_AGE)
	{
		age[0] = -1;
	}
	if (age[1] == MAX_AGE)
	{
		age[1] = -1;
	}

	var loss = getLossRange();
	if (loss[0] == MIN_LOSS)
	{
		loss[0] = -1;
	}
	if (loss[1] == MAX_LOSS)
	{
		loss[1] = -1;
	}

	//alert('search gender=' + gender + ' dist=' + dist + ' age=' + age[0] + "," + age[1] + ' loss=' + loss[0] + ',' + loss[1] + ' first=' + firstResult + ' max=' + maxResults);

	var zip = $F('ZipCodeValue');

	var url = contextRoot + '/CommunitySearch.do';

	var options = {
		asynchronous: false,
		evalScripts: true,
		parameters: {
			action: 'search',
			firstResult: firstResult,
			maxResults: maxResults,
			gender: gender,
			distance: dist,
			minAge: age[0],
			maxAge: age[1],
			minLoss: loss[0],
			maxLoss: loss[1],
			zip: zip,
            member: member
		},
		onComplete: function() {
			setSearching(false);
		},
		onFailure: function(transport,json) {
			setSearching(false);
		  	// ignore - search failed
		}
	};
	new Ajax.Updater('LinkupResults', url, options);
}

// don't call this directly, only doMemberSearch() should call this
function doActualMemberSearch()
{
	var member = trim($F('MemberSearch'));

	var url = contextRoot + '/CommunitySearch.do';

	var options = {
		asynchronous: false,
		evalScripts: true,
		parameters: {
			action: 'searchMembers',
			firstResult: firstResult,
			maxResults: maxResults,
			member: member
		},
		onComplete: function() {
			setSearching(false);
		},
		onFailure: function(transport,json) {
			setSearching(false);
		  	// ignore - search failed
		}
	};
	new Ajax.Updater('LinkupResults', url, options);
}

function getFriends() {
	if (dontSearch) return;

	setSearching(true);

	// start search on a different thread, or "please weight" dialog won't show
	setTimeout("getActualFriends()", 1);
}

// don't call this directly, only getFriends() should call this
function getActualFriends()
{
	var url = contextRoot + '/CommunityFriends.do';

	var options = {
		asynchronous: false,
		evalScripts: true,
		parameters: {
			action: 'search',
			firstResult: firstResult,
			maxResults: maxResults
		},
		onComplete: function() {
			setSearching(false);
		},
		onFailure: function(transport,json) {
			setSearching(false);
		  	// ignore - search failed
		}
	};
	new Ajax.Updater('LinkupResults', url, options);
}

function setSearching(val)
{
	if (val)	// searching...
	{
		var xy = Position.page($('busyDialog'));
		$('busyDialog').style.top = (-1 * xy[1])+ "px";
		$('busyDialog').style.display = 'block';
	}
	else	// done searching
	{
		$('busyDialog').style.display = "none";
	}
}

/*
function setZipCodeDistance()
{
	var zip = $F('ZipCodeValue');

	var url = contextRoot + '/CommunitySearch.do';

	var pars = { action: 'getZipDist', zip: zip };
	var onError = function() {
		// invalid zipcode

		//TODO now what? (invalid zipcode)
		//loc_slider.setValue(MAX_LOC_DISTANCE);
	};
	doJsonAjaxRequest(url, pars, function(json) {

		var dist = json.dist;
		if (dist > MAX_LOC_DISTANCE)
		{
			dist = MAX_LOC_DISTANCE;
		}
		if (dist < MIN_LOC_DISTANCE)
		{
			dist = MIN_LOC_DISTANCE;
		}
		loc_slider.setValue(dist);
	}, onError);
}
*/

function showCommunityTooltip(elem, userId, screenName, miles, starCount, currentDiet, weightLoss, guiltyPleasure)
{
	if (screenName.length > 18)
		screenName = screenName.substring(0, 15) + '...';
	$('screenName').innerHTML = screenName;

	if (miles == null || miles == '') miles = "?";
	else miles = Math.round(miles);

//	if (signedIn == true) {
		$('miles').innerHTML = miles + ' miles from you';
//	} else {
//		$('miles').innerHTML = "Register to learn more about me";
//	}
	$('starCount').innerHTML = starCount;

	if (currentDiet == null) currentDiet = '';
	if (currentDiet.length > 24)
		currentDiet = currentDiet.substring(0, 21) + "...";
	$('currentDiet').innerHTML = currentDiet;

	$('communityTooltip').onclick = function() {
		gotoAboutMe(userId);
	};

	// use offset of photo div 'elem'
	var pos = Position.positionedOffset(elem);
	var d = isSafari ? -1 : 0; // safari is off by 1px
	communityTooltip.showTooltip(pos[0] + 21 + d, pos[1] + 6 + d);
}

function showCommunityTooltipRegister(elem, userId, screenName, miles, starCount, currentDiet, weightLoss, guiltyPleasure)
{
	if (screenName.length > 18)
		screenName = screenName.substring(0, 15) + '...';
	$('screenName').innerHTML = screenName;

	if (miles == null || miles == '') miles = "?";
	else miles = Math.round(miles);

//	if (signedIn == true) {
		$('miles').innerHTML = miles + ' miles from you';
//	} else {
//		$('miles').innerHTML = "Register to learn more about me";
//	}
	$('starCount').innerHTML = starCount;

	if (currentDiet == null) currentDiet = '';
	if (currentDiet.length > 24)
		currentDiet = currentDiet.substring(0, 21) + "...";
	$('currentDiet').innerHTML = currentDiet;

	$('communityTooltip').onclick = function() {
		showJoin();
        return false;
	};

	// use offset of photo div 'elem'
	var pos = Position.positionedOffset(elem);
	var d = isSafari ? -1 : 0; // safari is off by 1px
	communityTooltip.showTooltip(pos[0] + 21 + d, pos[1] + 6 + d);
}

function showCommunityTooltipNew(elem, userId, screenName, miles, starCount, currentDiet, weightLoss, guiltyPleasure)
{
        if (screenName.length > 18)
                screenName = screenName.substring(0, 15) + '...';
        $('screenName').innerHTML = screenName;
        if (miles == null || miles == '') miles = "?";
        else miles = Math.round(miles);

//      if (signedIn == true) {
                $('miles').innerHTML = miles + ' miles from you';
//      } else {
//              $('miles').innerHTML = "Register to learn more about me";
//      }
        $('starCount').innerHTML = starCount;

        if (currentDiet == null) currentDiet = '';
        if (currentDiet.length > 24)
                currentDiet = currentDiet.substring(0, 21) + "...";
        $('currentDiet').innerHTML = currentDiet;

        $('communityTooltip').onclick = function() {
                gotoAboutMe(userId);
        };

        // use offset of photo div 'elem'
        var pos = Position.positionedOffset(elem);
        var d = isSafari ? -1 : 0; // safari is off by 1px
	communityTooltip.showTooltip(pos[0] + 6 + d, pos[1] + 6 + d);
}

function gotoAboutMe(userId)
{
	gotoit('member/' + userId + '/profile.html');
}

function clearCriteria()
{
	skipSearch(function(){
		age_left.setValue(MIN_AGE);
		age_right.setValue(MAX_AGE);
		$('genderMF').checked = true;
		loc_slider.setValue(DIST_SLIDER_INDICES.length - 1);
		$('ZipCodeValue').value = '';
		loss_left.setValue(MIN_LOSS);
		loss_right.setValue(MAX_LOSS);
	});

	updateAge(false);
	updateLocation(false);
	updateLoss(true); // trigger search
}

function showFriendsTooltip(elem, userId, screenName, miles, starCount, currentDiet, weightLoss, guiltyPleasure) {
	$('screenName').innerHTML = screenName;
	if (miles == null || miles == '') miles = "?";
	else miles = Math.round(miles);

	$('miles').innerHTML = miles + ' miles from you';
	$('starCount').innerHTML = starCount;

	if (currentDiet == null || currentDiet == '')
	{
		$('currentDietDiv').style.display = 'none';
	}
	else
	{
		$('currentDiet').innerHTML = currentDiet;
		$('currentDietDiv').style.display = 'block';
	}

	if (weightLoss == null || weightLoss == '')
	{
		$('weightLossDiv').style.display = 'none';
	}
	else
	{
		$('weightLoss').innerHTML = (weightLoss < 0 ? 'Gained ' : 'Lost ') +
			weightLoss + ' lbs.';
		$('weightLossDiv').style.display = 'block';
	}

	if (guiltyPleasure == null || guiltyPleasure == '')
	{
		$('guiltyPleasureDiv').style.display = 'none';
	}
	else
	{
		$('guiltyPleasure').innerHTML = guiltyPleasure;
		$('guiltyPleasureDiv').style.display = 'block';
	}

	$('sendLink').href = contextRoot + '/member/' + userId + '/profile/sendmessage.html';
	$('linkUpLink').href = contextRoot + '/member/' + userId + '/profile/linkup.html';

	// use offset of photo div 'elem'
	//var pos = Position.cumulativeOffset(elem);
	//alert(Position.offsetParent(elem).className);
	var pos = Position.positionedOffset(elem);
	//alert(Position.offsetParent(elem).id);
	//alert(pos[0]+":"+pos[1]);
	friendsTooltip.showTooltip(pos[0] + 90 , pos[1] + 30);
	//friendsTooltip.showTooltip(pos[0] - 70, pos[1] - 100);
}

function showStarTooltip(elem, dateStr, text, screenName) {
	var d = dateStr.split("|");
	$('sbPosted').style.display="block";
	$('sbMonth').innerHTML= d[0];
	$('sbDay').innerHTML = d[1];
	$('sbTitle').innerHTML = screenName;
	var startext = $F(text);


	if (startext == null || startext == '') {
		$('sbText').innerHTML = "";
	 	$('sbDivider').style.display='none';
	}
	else {
		$('sbText').innerHTML = startext;
		$('sbDivider').style.display='block';
	}
	// use offset of photo div 'elem'
	//var pos = Position.cumulativeOffset(elem);
	var pos = Position.positionedOffset(elem);
	sbTooltip.showTooltip(pos[0] + 95, pos[1] -10);
}
function showBadgeTooltip(elem, dateStr, text, screenName, leftOffset, topOffset) {
	var d = dateStr.split("|");
	$('sbPosted').style.display="none";
	$('sbMonth').innerHTML= d[0];
	$('sbDay').innerHTML = d[1];
	$('sbTitle').innerHTML = $F(screenName);
	$('sbText').innerHTML = $F(text);
	var lOff = 95;
	if (leftOffset != null) {
		lOff = leftOffset;
	}
	var tOff = 10;
	if (topOffset != null) {
		tOff = topOffset;
	}

	// use offset of photo div 'elem'
	//var pos = Position.cumulativeOffset(elem);
	var pos = Position.positionedOffset(elem);
	//sbTooltip.showTooltip(pos[0]  + 95, pos[1] - 10);
	sbTooltip.showTooltip(pos[0]  + lOff, pos[1] - tOff);
}

