﻿/*
Author: Addam M. Driver
Date: 10/31/2006
*/

var sMax; // Isthe maximum number of stars
var holder; // Is the holding pattern for clicked state
var preSet; // Is the PreSet value onces a selection has been made
var myHandler = new responseHandler(mySuccessHandler, myFailedHandler)
var ratedStars = new Array();
function mySuccessHandler(requester) { alert("Thanks for Voting"); }
function myFailedHandler(requester){ alert("Vote failed!"); }

function isRated(me)
{
	for (i = 0; i < ratedStars.length; i++)
	{
		if (ratedStars[i] == me)
			return true;
	}
	
	return false;
}

function markAsRated(me)
{
	ratedStars.push(me);
}

// Rollover for image Stars //
function rating(num, prefix) {
	sMax = 0; // Isthe maximum number of stars
	for (n = 0; n < num.parentNode.childNodes.length; n++) {
		if (num.parentNode.childNodes[n].nodeName == "A") {
			sMax++;
		}
	}

	if (!isRated(num.parentElement)) {
		s = num.id.replace(prefix, ''); // Get the selected star
		a = 0;
		for (i = 1; i <= sMax; i++) {
			if (i <= s) {
				document.getElementById(prefix + i).className = "on";
				//document.getElementById("rateStatus").innerHTML = num.title;
				holder = a + 1;
				a++;
			} else {
				document.getElementById(prefix + i).className = "";
			}
		}
	}
}

// For when you roll out of the the whole thing //
function off(me, prefix) {
	if (!isRated(me.parentElement)) {
		if (!preSet) {
			for (i = 1; i <= sMax; i++) {
				document.getElementById(prefix + i).className = "";
				//document.getElementById("rateStatus").innerHTML = me.parentNode.title;
			}
		} else {
		rating(preSet, prefix);
			//document.getElementById("rateStatus").innerHTML = document.getElementById("ratingSaved").innerHTML;
		}
	}
}

// When you actually rate something //
function rateIt(me, prefix) {
	if (!isRated(me.parentElement)) {
		//document.getElementById("rateStatus").innerHTML = document.getElementById("ratingSaved").innerHTML + " :: " + me.title;
		preSet = me;
		markAsRated(me.parentElement);
		sendRate(me);
		rating(me, prefix);
	}
}

// Send the rating information somewhere using Ajax or something like that.
function sendRate(sel) {
	var id = sel.id.substr(0, sel.id.indexOf("_", 0));
	executeRequester("GET", "view.aspx", "id=" + id + "&rate=" + sel.title, myHandler);
}

/////////////////////////////////////////
// Ajax sending of user rating to server
/////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//
// Author: Holly Styles
// Copyright: Weblogik 2006
//
// Description; basic AJAX framework for ASP.NET projects
//
// Usage:
// Implement two functions <strong class="highlight">to</strong> handle successfull and failed requests. 
// In your page create an instance of responseHandler(fnSuccess, fnFail)
// passing references <strong class="highlight">to</strong> the above functions in the constructor.  
// call the executeRequester(method, url, cgi, myHandler) function,
//
// Examples:
// function mySuccessHandler(requester){ alert(requester.responseText); }
// function myFailedHandler(requester){ alert("Request failed!"); }
//
// var myHandler = new responseHandler(mySuccessHandler, myFailedHandler)
//
// executeRequester("GET", "YourPage.aspx", "", myHandler);
// executeRequester("GET", "YourPage.aspx", "ID=1&value=value", myHandler);
// executeRequester("POST", "YourPage.aspx", "ID=1&value=value", myHandler);
//
// Compatability:
// IE 6, Firefox 1.5, (opera, safari, etc. should work but not tested)
//
/////////////////////////////////////////////////////////////////////////////
function newRequester() {

	var requester;
	try {
		requester = new XMLHttpRequest();
	}
	catch (error) {

		try {

			requester = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (error) {
			alert(error);
			requester = null;
		}
	}
	return requester;
}

function executeRequester(method, url, cgi, handler) {
	var requester = newRequester();

	requester.onreadystatechange = function() {
		if (requester.readyState == 4) {
			if (requester.status == 200 || requester.status == 304) {
				handler.success(requester, url);
				handler = null;
			}
			else {
				handler.fail(requester, url);
				handler = null;
			}
		}
		return true;
	};

	method = method.toUpperCase();

	if (method == "GET" && cgi != "") {
		url = url + "?" + cgi;
	}

	requester.open(method, url, true);
	requester.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

	if (method == "POST") {
		requester.send(cgi);
	}
	else {
		requester.send(null);
	}
}

function responseHandler(fnSuccess, fnFail) {
	this.success = fnSuccess;
	this.fail = fnFail;
}