﻿// directory.js

addEventSimple(window, 'load', onLoad);

var qsParm = new Array();
qsParm['sm'] = null;
qs(qsParm); 
var specialMode = qsParm['sm'];

var resultsPerPage = 5;
var MaxPages = 10;
var results = null;
function callServer(searchTerms, callback) {
	var url = fixRoot('/api.aspx') + '?func=searchrooms&random=true&searchterms=' + escape(searchTerms) + '&n=' + Math.floor(Math.random()*1000000);
	if(specialMode) {
		url += '&sm=' + specialMode;
	}	
	var oXMLHttpRequest	= new XMLHttpRequest;
	try {
		oXMLHttpRequest.open("GET", url, true);
	}
	catch (e) {
		callback(404, null);//whatever
	}
	oXMLHttpRequest.onreadystatechange = function() {
		if (this.readyState == XMLHttpRequest.DONE) {
			callback(oXMLHttpRequest.status, oXMLHttpRequest.responseXML, oXMLHttpRequest.responseText);
		}
	}
	oXMLHttpRequest.send(null);
}
function removeResults() {
	var divResults = getById('divResults');
	var divMain = getById('divMain');
	if(divMain && divResults) {
		divMain.removeChild(divResults);
	}
}

function displayResults() {
	removeResults();
	var divMain = getById('divMain');
	if(divMain) {
		var divResults = new div('divResults');
		var divResultsPage = div('divResultsPage');
		
		var divOptions = getById('divOptions');
		if(divOptions) {
			divResults.appendChild(divResultsPage);
			divMain.insertBefore(divResults, divOptions);
		}
		else {
			append(divMain, divResults, divResultsPage);
		}
		displayResultsPage(0);
		var nPages = Math.ceil(results.length / resultsPerPage);
		if(nPages > MaxPages) nPages = MaxPages;
		createPageLinks(nPages, divResults);
	}
}

function getJSONValue(what, defaultValue) {
	if(what) return unescape(what);
	if(defaultValue) return defaultValue;
	return '';
}

function displayResult(result, parent) {
	var divResult = div('', 'clsResult');
	append(parent, divResult);

	var divImg = div('', 'clsThumb');
	append(divResult, divImg);
	var aImg = _a();
	aImg.target = '_blank';
	aImg.href = fixRoot('/' + getJSONValue(result.url));
	aImg.onclick = function() {
		if(opener && !opener.closed) {
			opener.location.href = this.href;
			return false;
		}
	}
	
	var imgImg = img('', 'clsImg');
	imgImg.style.display = 'none';
	imgImg.onload = function() {
		var img = this;
		img.style.display = 'block';
		
		var maxHeight = 40;
		var maxWidth = 40;

		var width = img.clientWidth;
		var height = img.clientHeight;

		if((width == 0) || (height == 0)) {
			var width = img.width;
			var height = img.height;
		}

		var newWidth = maxWidth;
		var newHeight = maxHeight;
		if(width != 0 && height != 0) {
			var scaleW = maxWidth / width;
			var scaleH = maxHeight / height;
			if (scaleH < scaleW) {
				newWidth = Math.round(width * scaleH);
			}
			else {
				newHeight = Math.round(height * scaleW);
			}
		}
		img.style.width = newWidth + "px";
		img.style.height = newHeight + "px";
	}
	imgImg.style.border = 'none';
	append(divImg, aImg, imgImg);
	imgImg.src = fixRoot('/data/' + getJSONValue(result.img));

	var divResultLine0 = div('', 'clsResultLine');
	append(divResult, divResultLine0);

	var aRoomname = _a();
	aRoomname.className = 'clsYellowish';
	aRoomname.target = '_blank';
	aRoomname.href = fixRoot('/' + getJSONValue(result.url));
	aRoomname.onclick = function() {
		if(opener && !opener.closed) {
			opener.location.href = this.href;
			return false;
		}
	}
	var spanRoomname = span();
	spanRoomname.innerHTML = getJSONValue(result.rn, result.uid);
	append(divResultLine0, aRoomname, spanRoomname);

	append(divResultLine0, space());
	append(divResultLine0, space());
	append(divResultLine0, space());
	
	var spanOwner = span();
	spanOwner.innerHTML = 'Owner: ' + (getJSONValue(result.dn, result.uid));
	append(divResultLine0, spanOwner);
	
	var desc = getJSONValue(result.desc);
	if(desc) {
		var divResultLine1 = div('', 'clsResultLine');
		var spanDescription = span('', 'clsDescription');
		spanDescription.innerHTML = desc;
		append(divResult, divResultLine1, spanDescription);
	}
	var divResultLine2 = div('', 'clsResultLine');
	append(divResult, divResultLine2);
	
	var nusers = getJSONValue(result.nusers);
	if(nusers) {
		var spanNUsers = span();
		spanNUsers.innerHTML = nusers + ' Zorapper' + (nusers > 1 ? 's' : '');
		append(divResultLine2, spanNUsers);
		
		append(divResultLine2, space());
		append(divResultLine2, space());
		append(divResultLine2, space());
		
		var aJoin = _a();
		aJoin.className = 'clsYellowish';
		aJoin.target = '_blank';
		aJoin.href = fixRoot('/' + getJSONValue(result.url));
		aJoin.onclick = function() {
			if(opener && !opener.closed) {
				opener.location.href = this.href;
				return false;
			}
		}
		var spanJoin = span();
		spanJoin.innerHTML = 'Join';
		append(divResultLine2, aJoin, spanJoin);
	}
	if(specialMode) {
		append(divResultLine2, space());
		append(divResultLine2, space());
		append(divResultLine2, space());

		var aSpecialMode = _a();
		aSpecialMode.className = 'clsYellowish';
		aSpecialMode.target = '_blank';
		aSpecialMode.href = fixRoot('/' + getJSONValue(result.url)) + '?sm=' + specialMode;
		aSpecialMode.onclick = function() {
			if(opener && !opener.closed) {
				opener.location.href = this.href;
				return false;
			}
		}
		var spanSpecialMode = span();
		spanSpecialMode.innerHTML = specialMode;
		append(divResultLine2, aSpecialMode, spanSpecialMode);
	}
}

function displayResultsPage(whichPage) {
	var divResultsPage = getById('divResultsPage');
	removeChildren(divResultsPage);
	var startResult = whichPage * resultsPerPage;
	for(var whichResult = startResult;
			(whichResult < startResult + resultsPerPage) && (whichResult < results.length);
			whichResult++) {
		var result = results[whichResult];
		displayResult(result, divResultsPage);
	}
}

var currentPage = 0;
var pageLinks = new Array();
function createPageLinks(nPages, parent) {
	if(nPages == 1) return;
	var divPageLinks = div('divPageLinks');
	append(parent, divPageLinks);
	pageLinks.length = 0;
	
	for(var whichPage = 0; whichPage < nPages; whichPage++) {
		var aPage = _a('', 'clsYellowish');
		aPage.href = '#';
		if(whichPage == 0) {
			underline(aPage, false);
		}
		aPage.zIndex = whichPage;
		currentPage = 0;
		aPage.onclick = function() {
			if(this.zIndex != currentPage) {
				underline(pageLinks[currentPage], true);
				currentPage = this.zIndex;
				underline(this, false);
				displayResultsPage(this.zIndex);
			}
			return false;
		}
		var spanPage = span();
		spanPage.innerHTML = whichPage + 1;
		append(divPageLinks, aPage, spanPage);
		append(divPageLinks, space());
		pageLinks.push(aPage);
	}
}

function search(terms) {
	removeResults();
	var divMain = getById('divMain');
	if(divMain) {
		var divResults = new div('divResults');
		divResults.innerHTML = 'Searching for rooms...';
		append(divMain, divResults);
	}
	terms = terms.trim();
	callServer(terms, searchResponse);
	function searchResponse(status, response, responseText) {
		if(status == 200) {
			var resultObject = eval('(' + responseText + ')');;
			results = resultObject.rooms;
			displayResults();
			fixFamilyFilterLink(!resultObject.underage);
			
			var spanDirectoryWord = getById('spanDirectoryWord');
			if(spanDirectoryWord) {
				if(terms.length == 0) {
//					spanDirectoryWord.innerHTML = 'Featured Rooms';
				}
				else {
					terms = "'" + terms + "'";
//					spanDirectoryWord.innerHTML = 'Results for ' + terms;
					var textBoxSearchTerms = getById('textBoxSearchTerms');
					if(textBoxSearchTerms) {
						var maxWidth = textBoxSearchTerms.offsetLeft - spanDirectoryWord.offsetLeft - 3;
						if(spanDirectoryWord.offsetWidth > maxWidth) {
							while(true) {
								terms = terms.substring(0, terms.length - 1);
								while(terms.charAt(terms.length - 1) == ' ') {
									terms = terms.substring(0, terms.length - 1);
								}
//								spanDirectoryWord.innerHTML = 'Results for ' + terms + '...';
								if(spanDirectoryWord.offsetWidth <= maxWidth) break;
							}
						}
					}
				}
			}
		}
	}
}

function createSearchControl(parent) {

	var textBoxSearchTerms = textbox('textBoxSearchTerms');
	textBoxSearchTerms.onkeydown = function(e) {
		if(isEnterKey(e)) {
			search(this.value);
			this.select();
			return false;
		}
	}
	append(parent, textBoxSearchTerms);
	
	if(location.href.indexOf('directory.html') >= 0)
	{
		textBoxSearchTerms.focus();
	}
	
	var buttonSearch = button();
	buttonSearch.value = 'Search';
	buttonSearch.onclick = function() {
		var textBoxSearchTerms = getById('textBoxSearchTerms');
		if(textBoxSearchTerms) {
			search(textBoxSearchTerms.value);
		}
		return false;
	}
//	append(parent, buttonSearch);
}

function createDirectoryWord(parent) {
	var spanDirectoryWord = span('spanDirectoryWord');
	spanDirectoryWord.className = 'clsYellowish';
//	spanDirectoryWord.innerHTML = 'Featured Rooms';
	parent.appendChild(spanDirectoryWord);
}

function createOptionsPane() {
	var divMain = getById('divMain');
	if(divMain) {
		var divOptions = div('divOptions');
		append(divMain, divOptions);

		var spanFamilyFilterDesc = span('spanFamilyFilterDesc');
		spanFamilyFilterDesc.innerHTML = "Zorap's Family Filter blocks rooms that may contain explicit sexual content from appearing in Zorap search results.  WARNING: You may only disable the the Family Filter if you are at least 18 years of age.  If you do not meet this requirement, then you do not have permission to disable the family filter.";
		append(divOptions, spanFamilyFilterDesc);
		append(divOptions, br());
		append(divOptions, br());
				
		var familyFilterOn = isFamilyFilterOn();
		
		var radioButtonFamilyFilterOn = radioButton('radioButtonFamilyFilterOn', '', 'FamilyFilterOnOff', familyFilterOn);
		append(divOptions, radioButtonFamilyFilterOn);
		
		var spanFamilyFilterOn = span();
		spanFamilyFilterOn.innerHTML = 'enable';
		append(divOptions, spanFamilyFilterOn);
		
		append(divOptions, br());
		
		var radioButtonFamilyFilterOff = radioButton('radioButtonFamilyFilterOff', '', 'FamilyFilterOnOff', !familyFilterOn);
		append(divOptions, radioButtonFamilyFilterOff);

		var spanFamilyFilterOff = span();
		spanFamilyFilterOff.innerHTML = 'disable';
		append(divOptions, spanFamilyFilterOff);

		append(divOptions, br());
		append(divOptions, br());
		
		var buttonSave = button('', '', 'Save Preference');
		buttonSave.onclick = function() {
			var radioButtonFamilyFilterOn = getById('radioButtonFamilyFilterOn');
			if(radioButtonFamilyFilterOn) {
				var familyFilterWas = readCookie('familyfilter', 'true') == 'true' ? true : false;
				var familyFilterChanged = familyFilterWas != radioButtonFamilyFilterOn.checked;
				
				if(radioButtonFamilyFilterOn.checked) {
					eraseCookie('familyfilter');
				}
				else {
					createCookie('familyfilter', 'false', 10*365*24*60*60);
				}
				var aFamilyFilter = getById('aFamilyFilter');
				if(aFamilyFilter) {
					aFamilyFilter.innerHTML = 'Family Filter is ' + (radioButtonFamilyFilterOn.checked ? 'On' : 'Off');
				}
				removeOptionsPane();
				
				// new search
				var textBoxSearchTerms = getById('textBoxSearchTerms');
				if(textBoxSearchTerms && familyFilterChanged) {
					search(textBoxSearchTerms.value);
				}
			}
			return false;
		}
		append(divOptions, buttonSave);
		
		append(divOptions, space());
		
		var buttonCancel = button('', '', 'Cancel');
		buttonCancel.onclick = function() {
			removeOptionsPane();
			return false;
		}
		append(divOptions, buttonCancel);
	}
}

function removeOptionsPane() {
	var divOptions = getById('divOptions');
	if(divOptions) {
		divOptions.parentNode.removeChild(divOptions);
	}
}

function isFamilyFilterOn() {
	return !(readCookie('familyfilter', 'true') == 'false');
}

function createFamilyFilterLink(parent) {
	var aFamilyFilter = _a('aFamilyFilter');
	aFamilyFilter.style.color = 'rgb(217, 217, 76)';
	aFamilyFilter.onclick = function() {
		createOptionsPane();
		return false;
	}
	append(parent, aFamilyFilter);
}

function fixFamilyFilterLink(enable) {
	var aFamilyFilter = getById('aFamilyFilter');
	if(enable) {
		aFamilyFilter.href = '#';
		aFamilyFilter.innerHTML = 'Family Filter is ' + (isFamilyFilterOn() ? 'On' : 'Off');
		aFamilyFilter.target = '_self';
		aFamilyFilter.onclick = function() {
			createOptionsPane();
			return false;
		}
	}
	else {
		aFamilyFilter.href = fixRoot('/About/FamilySafety.aspx');
		aFamilyFilter.innerHTML = 'Family Filter is On';
		aFamilyFilter.target = '_blank';
		aFamilyFilter.onclick = null;
	}
}

function onLoad() {
	var divMain = getById('divMain');
	createDirectoryWord(divMain);
	createSearchControl(divMain);
	createFamilyFilterLink(divMain);
	search("");
}

