// JavaScript Document
//requires js/ajax.js

var selStarNum = 0;
var highStarNum = 0;
var starDescriptions = new Array("Poor","Nothing Special","Worth Visiting","Pretty Cool","Awesome!");
var starInstructions = "Click a star to set your rating.";
var starReturnDelay;
var messageType = "review";
var oldPostID = 0;
var scrollEffect;
var scrollStopDelay;
var oldScrollPos = 0;
var globalPageID = 0; //gets changed and used on submits
var globalPageType = ""; //gets changed and used on submits

function resetStars() {
	var i, target, html;
	for(i=1; i<6; i++) {
		target = 'rateStar' + i
		html = '<img src="/media/images/stars/s0SingleW.gif" style="float:left;" />';
		document.getElementById(target).innerHTML = html;
	}
	document.getElementById('starInstructions').innerHTML = starInstructions;
	highStarNum = 0;
}

function returnStarsSel() {
	if(selStarNum == 0) {
		resetStars();
	} else {
		rollOverStar(selStarNum);
	}
}

function rollOverStar(starNum) {
	var i, target, html;
	if(starNum != highStarNum) {
		highStarNum = starNum;
		clearTimeout(starReturnDelay);
		for(i=1; i<(starNum+1); i++) {
			target = 'rateStar' + i;
			html = '<img src="/media/images/stars/s2SingleW.gif" style="float:left;" />';
			document.getElementById(target).innerHTML = html;
		}
		for(i=(starNum+1); i<6; i++) {
			target = 'rateStar' + i;
			html = '<img src="/media/images/stars/s0SingleW.gif" style="float:left;" />';
			document.getElementById(target).innerHTML = html;
		}
		document.getElementById('starInstructions').innerHTML = starDescriptions[(starNum - 1)];
	}
}

function rollOutStar() {
	starReturnDelay = setTimeout(returnStarsSel,200);
}

function setStarRating(starNum) {
	selStarNum = starNum;
}

function disableReviews() { //may not need this - check later
	var target;
	target = document.getElementById('radioReview');
	target.innerHTML = '';
	target = document.getElementById('reviewLabel');
	target.className = 'viewDivFalse';
	target.innerHTML = '';
	target = document.getElementById('reviewOptions');
	target.className = 'viewDivFalse';
	target.innerHTML = '';
	target = document.getElementById('reviewSubmit');
	target.className = 'viewDivFalse';
	target.innerHTML = '';
	activateComment();
	target = document.getElementsByName('postType');
	target[0].checked = true;
}

function activateReview() {
	var target;
	messageType = "review"
	target = document.getElementById('commentLabel');
	target.className = 'viewDivFalse';
	target = document.getElementById('commentOptions');
	target.className = 'viewDivFalse';
	target = document.getElementById('commentSubmit');
	target.className = 'viewDivFalse';
	target = document.getElementById('reviewLabel');
	target.className = 'viewDivTrue';
	target = document.getElementById('reviewOptions');
	target.className = 'viewDivTrue';
	target = document.getElementById('reviewSubmit');
	target.className = 'viewDivTrue';
}

function activateComment() {
	var target;
	messageType = "comment"
	target = document.getElementById('commentLabel');
	target.className = 'viewDivTrue';
	target = document.getElementById('commentOptions');
	target.className = 'viewDivTrue';
	target = document.getElementById('commentSubmit');
	target.className = 'viewDivTrue';
	target = document.getElementById('reviewLabel');
	target.className = 'viewDivFalse';
	target = document.getElementById('reviewOptions');
	target.className = 'viewDivFalse';
	target = document.getElementById('reviewSubmit');
	target.className = 'viewDivFalse';
}

function getReplyForm(postID, depth, title, pageID, pageType) {
	if(currentUserId != 0) {
		if(oldPostID != postID) {
		
			var serverPage = '/components/comments/replyForm.php';
			var str = 'postID=' + postID + '&depth=' + depth + '&title=' + title + '&pageID=' + pageID + '&pageType=' + pageType;
			var obj = document.getElementById('reply' + postID);
			var html = '<table style="margin-top: 6px;"><tr class="dataRowSingleW"><td style="background: none; border: none; width: ' + ((depth + 1) * 24) + 'px;"></td><td style="border-left: none;" colspan="2">Loading...</td></tr></table>';
			obj.innerHTML = html;
			obj.className = 'viewDivTrue';
			
			scrollEffect = new Effect.ScrollTo(('reply' + postID),{offset:-220});
			scrollStopDelay = setInterval(scrollMoveCheck,200);
			
			if(oldPostID != 0) {
				closeReplyForm(oldPostID);
			}
			oldPostID = postID;
		
			processajaxAj(serverPage, str, obj);
		} else {
			closeReplyForm(postID);
		}
	} else {
		onLoginObj = Object();
		onLoginObj.objName = "onLoginObj";
		onLoginObj.func = 'getReplyForm';
		onLoginObj.args = Array();
		onLoginObj.args.push(postID);
		onLoginObj.args.push(depth);
		onLoginObj.args.push(title);
		onLoginObj.args.push(pageID);
		onLoginObj.args.push(pageType);
		showLoginForm();
	}
}

function closeReplyForm(replyID) {
	if(oldPostID != 0) {
		oldPostID = 0;
		var target = document.getElementById('reply' + replyID);
		target.className = 'viewDivFalse';
		target.innerHTML = '';
	}
}

//prevent annoying scroll effect forcing
function scrollMoveCheck() {
	
	var scrollPos;
	if (navigator.appName == "Microsoft Internet Explorer") {
		scrollPos = document.body.scrollTop;
	} else {
		scrollPos = window.pageYOffset;
	}
	if(scrollPos == oldScrollPos) {
		scrollEffect.cancel();
		clearInterval(scrollStopDelay);
	}
	oldScrollPos = scrollPos;
}

function filterResultsBy(filterValue, pageID, type) {
	if(filterValue != '') {
		var str = "filter=" + filterValue + "&pageID=" + pageID + "&type=" + type;
		var obj = document.getElementById('posts');
		var html = '<table><tr class="dataRowSingleW"><td style="border-left: none;" colspan="2">Loading filtered results...</td></tr></table>';
		obj.innerHTML = html;
		processajaxAj("/components/comments/ajaxRequest.php", str, obj);
	}
}

function setUseful(usefulVote,postID,topicID) {
	if(currentUserId > 0) {
		var str = "usefulVote=" + usefulVote + "&postID=" + postID + "&topicID=" + topicID;
		var obj = document.getElementById('useful' + postID);
		obj.innerHTML = "Sending vote...";
		processajaxAj("/components/comments/ajaxRequest.php", str, obj);
	} else {
		onLoginObj = Object();
		onLoginObj.objName = "onLoginObj";
		onLoginObj.func = 'setUseful';
		onLoginObj.args = Array();
		onLoginObj.args.push(usefulVote);
		onLoginObj.args.push(postID);
		onLoginObj.args.push(topicID);
		showLoginForm();
	}
}

function postHappyStr(string) {
	string = escape(string);
	string = string.replace(' ', '+');
	string = string.replace('%20', '+');
	string = string.replace('/', '%2F');
	string = string.replace('*', '%2A');
	string = string.replace('@', '%40');
	string = string.replace('+', '%2B');
	return string;
}

function submitComment(pageID, pageType, commentType) {
	var formComplete = true;
	
	globalPageID = pageID;
	globalPageType = pageType;
	
	if(currentUserId > 0) {
		if(commentType == "comment") {
			var category = document.getElementById('postCategory').value;
			category = postHappyStr(category);
			var ratingVal = 0;
			var submitMessage = "Submitting comment...";
		} else if(commentType == "review") {
			var category = "Reviews";
			if(selStarNum == 0) {
				document.getElementById('starInstructions').innerHTML = '<div style="color: #FF0000;">Click a star before submitting a review.</div>';
				formComplete = false;
			} else {
				var ratingVal = (selStarNum * 2);
				var submitMessage = "Submitting review...";
			}
		} else if(commentType == "blog") {
			var category = "Group Blog";
			var ratingVal = 0;
			var submitMessage = "Submitting blog...";
		}
		
		var postTitle = document.getElementById('postTitle').value;
		postTitle = postHappyStr(postTitle);
		if(postTitle == "") {
			document.getElementById('postTitleDiv').className = 'fieldDivRed';
			formComplete = false;
		} else {
			document.getElementById('postTitleDiv').className = 'fieldDiv';
		}
		
		var postMessage = document.getElementById('postMessage').value;
		postMessage = postHappyStr(postMessage);
		if(postMessage == "") {
			document.getElementById('postMessageDiv').className = 'fieldDivRed';
			formComplete = false;
		} else {
			document.getElementById('postMessageDiv').className = 'fieldDiv';
		}
		
		if(formComplete == true) {
			var str = "pageType=" + pageType + "&commentType=" + commentType + "&pageID=" + pageID + "&title=" + postTitle + "&content=" + postMessage + "&ratingVal=" + ratingVal + "&category=" + category + "&replyID=" + "0";
			var obj = document.getElementById('commentForm');
			var html = '<table style="margin-top: 6px;"><tr class="dataRowSingleW"><td style="border-left: none;" colspan="2">' + submitMessage + '</td></tr></table>';
			obj.innerHTML = html;
			processajaxAjTrigger("/components/comments/ajaxRequest.php", str, obj, "refreshComments");
		}
	} else {
		onLoginObj = Object();
		onLoginObj.objName = "onLoginObj";
		onLoginObj.func = 'submitComment';
		onLoginObj.args = Array();
		onLoginObj.args.push(pageID);
		onLoginObj.args.push(pageType);
		onLoginObj.args.push(commentType);
		showLoginForm();
	}
}

function submitReply(pageID, replyID, pageType) {
	var formComplete = true;
	globalPageID = pageID;
	globalPageType = pageType;

	if(currentUserId > 0) {	
		var ratingVal = 0;
		var category = 'Reply';
		var submitMessage = "Submitting reply...";
		
		var replyTitle = document.getElementById('replyTitle' + replyID).value;
		replyTitle = postHappyStr(replyTitle);
		
		var replyMessage = document.getElementById('replyMessage' + replyID).value;
		replyMessage = postHappyStr(replyMessage);
		if(replyMessage == "") {
			document.getElementById('replyMessageDiv' + replyID).className = 'fieldDivRed';
			formComplete = false;
		}
		
		if(formComplete == true) {
			var str = "pageType=" + pageType + "&commentType=" + pageType + "&pageID=" + pageID + "&title=" + replyTitle + "&content=" + replyMessage + "&ratingVal=" + ratingVal + "&category=" + category + "&replyID=" + replyID;
			var obj = document.getElementById('replyForm' + replyID);
			var html = '<table style="margin-top: 6px;"><tr class="dataRowSingleW"><td style="border-left: none;" colspan="2">' + submitMessage + '</td></tr></table>';
			obj.innerHTML = html;
			processajaxAjTrigger("/components/comments/ajaxRequest.php", str, obj, "refreshComments");
		}
	} else {
		onLoginObj = Object();
		onLoginObj.objName = "onLoginObj";
		onLoginObj.func = 'submitReply';
		onLoginObj.args = Array();
		onLoginObj.args.push(pageID);
		onLoginObj.args.push(replyID);
		onLoginObj.args.push(pageType);
		showLoginForm();
	}
}

function processajaxAjTrigger(serverPage, str, obj, mode){
	//temporarily disable auto requests
	autoUpdateChat = false;
	
	//Get an XMLHttpRequest object for use.
	xmlhttp = getxmlhttpAj ();
	xmlhttp.open("POST", serverPage, true);
	xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			obj.innerHTML = xmlhttp.responseText;
			if(mode == "refreshComments") {
				filterResultsBy('all', globalPageID, globalPageType);
			}
		} else if(xmlhttp.readyState == 4) {
			obj.innerHTML = "Hmm. There was an error loading the requested content. Try refreshing the page or contact us. Thank you.";
		}
	}
	xmlhttp.send(str);
}