/*
	jCore v0.1
	Matthew Ausonio
	October 10, 2008
	
	This file contains the required scripts for a base Digicore site.
*/
function jCoreInit(shareURL,shareTitle,itemId,pollIdsArray) {
	// first thing we do is test to see if cookies is enabled, if it isnt we stop everything and go home
	var cookieEnabled=(navigator.cookieEnabled)? true : false
	//if not IE4+ nor NS6+
	if (typeof navigator.cookieEnabled=="undefined" && !cookieEnabled){ 
		document.cookie="testcookie"
		cookieEnabled=(document.cookie.indexOf("testcookie")!=-1)? true : false
	}
	if(!cookieEnabled) {
		alert("Cookies are required for this site to run properly.  Please enable cookies in your browser settings and reload page.");
		return false;	
	}
	//end cookie test, lets continue
	
	// apply printing function to print link
	$(".articlePrintLink").click(function() {window.print();return false;});
	
	/* now we check to see if our userID cookie has been set, if not we request a new userID and make the cookie */
	if(readCookie("userID"))
		userID = readCookie("userID");
	else
		userID = "";
		
	
	// the blankItemStats is used when we have an error or timeout getting the actual item stats.
	var blankItemStats = {"comments": 0,"votes": 0,"rating": 3.00, "userVoted": true, "usersVote": 0}
	// make call to item stats.  On callback init the jCore object.
	// Here is an explanation of the item stats json object
	//		itemStats:
	//			.comments = number of comments of the current item
	//			.votes = number of votes of the current item (sometimes refered to as ratings)
	//			.rating = the current calculated rating of the current item
	$.ajax({type: "GET", url: "/Handlers/ItemStats.ajax", data:"id="+itemId+"&userid="+userID,dataType:"json",cache:false,
	   success: function(updatedItemStatistics){
		   	if(updatedItemStatistics.userId)
				userID = updatedItemStatistics.userId
		   	writeCookie("userID",userID, 365);
			var jCore = new jCoreConstruct(shareURL,shareTitle,itemId,updatedItemStatistics,pollIdsArray);
		},
		error: function(error){
			var jCore = new jCoreConstruct(shareURL,shareTitle,itemId,blankItemStats,pollIdsArray);
		},
		timeout: function(error){
			var jCore = new jCoreConstruct(shareURL,shareTitle,itemId,blankItemStats,pollIdsArray);
		}
	});
}
function jCoreConstruct(shareURL,shareTitle,itemId,itemStats,pollIdsArray) {
	this.shareURL = shareURL;
	this.shareTitle=shareTitle;
	this.itemId=itemId;
	this.itemStats=itemStats;
	this.pollIdsArray=pollIdsArray;
	this.initPoll();
}

jCoreConstruct.prototype = {
	initPoll: function() {
		//this goes through the itemPolls array and initializes all polls on a page
		for(i=0;i<this.pollIdsArray.length;i++) {
			
			var pollId = this.pollIdsArray[i];
			var pollForm = $("#"+pollId);
			var pollContainer = $("#"+pollId+"Container");
			var pollurl = $("#"+pollId).attr("action");
			var pollTotaltext = $(".pollTotalVoteText:first", pollForm).html();
			
			var self = this;
			$.ajax({
				type: "GET",url: "/Handlers/Poll.ajax",dataType: "json",cache:false,data:"id="+this.pollIdsArray[i]+"&userID="+this.itemStats.userId,
				success: function(pollJSON){
					if(pollJSON.userClicked) {
						pollAnswerTexts = getPollAnswerTexts(pollForm, pollId);
						pollResults = buildPollResults(pollJSON, pollAnswerTexts, pollId, pollTotaltext);

						var form = $(pollForm);
						$(pollContainer).animate({opacity: 'hide'}, "fast", function() {
							$(pollContainer).html(pollResults);
							$(pollContainer).animate({opacity: 'show'}, "slow");
						});
					} else {
						$("#"+pollId).submit(function() {
							return self.submitPoll(pollId,pollForm,pollContainer,pollurl,pollTotaltext);
						});
					}
				}
			});
		}
	},
	submitPoll :function(pollId,pollForm,pollContainer,pollurl,pollTotaltext) {
		var pollValue;
		$("input:radio").each( function(f) {
			if($("input:radio:eq("+f+")", "#"+pollId).attr("checked"))
				pollValue = $(this).attr("value");
		});
		
		if(!pollValue)
			alert("Please select a poll answer");
		else {
			var self = this;
			$.ajax({
				type: "GET",
				url: "/Handlers/PollClick.ajax",
				data: "id="+pollId+"&choiceId="+pollValue+"&userid="+self.itemStats.userId,
				cache:false,
				success: function(pollResults){
					if(pollResults.processed = true)
						getPollResults(self.itemStats.userId,pollId,pollForm,pollContainer,pollurl,pollTotaltext);
				}
			});
		}
		return false;
	}
}
function getPollResults(userid,pollId,pollForm,pollContainer,pollurl,pollTotaltext) {
	$.ajax({
			type: "GET",url: "/Handlers/Poll.ajax",dataType:"json",cache:false,data:"id="+pollId+"&userid="+userid,
			success: function(pollresults){
					pollAnswerTexts = getPollAnswerTexts(pollForm, pollId);
					pollResults = buildPollResults(pollresults, pollAnswerTexts, pollId, pollTotaltext);
					$(pollContainer).animate({opacity: 'hide'}, "fast", function() {
						$(pollContainer).html(pollResults);
						$(pollContainer).animate({opacity: 'show'}, "slow");
					});
			}
	});
}
// function to build poll result
function buildPollResults(pollJSON, pollAnswerTexts, pollId, pollTotaltext) {
	var pollResultsSource = new Array;
	var pollAnswersCount = 0;
	
	for(i=0;i<pollJSON.poll.length;i++) {
		pollPercentage = pollJSON.poll[i].percentage;
		if(pollPercentage < 2)
			pollPercentage = 1;
		var idRef = pollJSON.poll[i].itemId;
		pollResultsSource[pollAnswerTexts[idRef]] = "<div class='pollResultRow'><div class='pollResultBar' style='width:"+pollPercentage+"%;'><div></div></div> <span>"+pollJSON.poll[i].percentage+"% - </span><p>"+pollAnswerTexts[idRef]+"</p></div>";
		
		pollAnswersCount++;
	}
	var pollResultsSourceOrdered = new Array();
	pollResultsSourceOrdered.push("<p class='pollTotalClicks'>"+pollTotaltext+": "+pollJSON.totalClicks+"</p>");
	// re-order to match initial state
	for(i=0;i<=pollJSON.poll.length;i++) {
		var sourceKey = pollAnswerTexts[pollId+i];
		var addSource = pollResultsSource[sourceKey];
		pollResultsSourceOrdered.push(addSource);
	}
	return pollResultsSourceOrdered.join("");
}
// this gets the answer text from each poll question to use in results source
function getPollAnswerTexts(pollForm, pollId) {
	var labels = $("label", pollForm);
	var labelTexts =new Object;
	for(i=0; i<labels.length;i++) {
		var answerId = $("label:eq("+i+") input", pollForm).attr("value");
		var answerText = $("label:eq("+i+") span", pollForm).html();
		labelTexts[answerId] = answerText;
		labelTexts[pollId+i] = answerText;
	}
	$(pollForm).html("<div class='pollError'>Loading</div>");
	return labelTexts;
}



function countdown(el, i, d, h, m, s) {
	
	var today = new Date();
	var dateToGet = $(el).attr("title");
	var dd=Date.parse(dateToGet)-Date.parse(today.toUTCString());
	var dayDiff = new Array();
	dayDiff[0]=zeroCheck(Math.floor(dd/(60*60*1000*24)*1)); // day
	dayDiff[1]=zeroCheck(Math.floor((dd%(60*60*1000*24))/(60*60*1000)*1)); // hour
	dayDiff[2]=zeroCheck(Math.floor(((dd%(60*60*1000*24))%(60*60*1000))/(60*1000)*1)); // min
	dayDiff[3]=zeroCheck(Math.floor((((dd%(60*60*1000*24))%(60*60*1000))%(60*1000))/1000*1)); // sec
	
	$(el).html("<table cellpadding='0' cellspacing='0'><tr><td class='countdownDay'>"+dayDiff[0]+"</td><td class='countdownHour'>"+dayDiff[1]+"</td><td class='countdownMin'>"+doubleInt(dayDiff[2])+"</td><td class='countdownSec'>"+doubleInt(dayDiff[3])+"</td></tr><tr><td>"+d+"</td><td>"+h+"</td><td>"+m+"</td><td>"+s+"</td></tr></table>");

	if(parseFloat(dayDiff.join("")) <= 0) {
		$(el).hide();
		return false;
	}
	else
		window["countdownTimer"+i]=setTimeout(function(){countdown(el,i,d, h, m, s); },1000);
	
	function zeroCheck(i) {
		if(i<=0)
			return 0;
		else
			return i;
	}
	function doubleInt(i) {
		if(i < 10)
			return "0"+i;
		else
			return i;
	}
}


/* BEGIN: Form Validation
/*-----------------------------*/
function validateForm(form, invalid, required, failureMessage) {
	var errorMessage = new Array();
	var requiredCheck = new RegExp(/Required/);
	var validateEmail = new RegExp(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);
	for(var i = 0; i < form.elements.length; i++)
	{
		elementType = form.elements[i].tagName;
		elementTitle = $(form.elements[i]).attr("title");
		if(elementType.toLowerCase() == "input" && requiredCheck.test(elementTitle) && form.elements[i].name == 'email')
		{
			if(form.elements[i].value == '') {
				var elID = form.elements[i].id;
				var labelText = findLabel(elID);
				var tempMessage = required.replace("%F%", labelText);
				errorMessage.push("<li>"+tempMessage+"</li>");
			} else if(!validateEmail.test(form.elements[i].value)) {
				var elID = form.elements[i].id;
				var labelText = findLabel(elID);
				var tempMessage = invalid.replace("%F%", labelText);
				errorMessage.push("<li>"+tempMessage+"</li>");
			}
		}
		else if(elementType.toLowerCase() == "input" && requiredCheck.test(elementTitle) && form.elements[i].value == "")
		{
			var elID = form.elements[i].id;
			var labelText = findLabel(elID);
			var tempMessage = required.replace("%F%", labelText);
			errorMessage.push("<li>"+tempMessage+"</li>");
		}
		else if(elementType.toLowerCase() == "textarea" && requiredCheck.test(elementTitle) && form.elements[i].value == "")
		{
			var elID = form.elements[i].id;
			var labelText = findLabel(elID);
			var tempMessage = required.replace("%F%", labelText);
			errorMessage.push("<li>"+tempMessage+"</li>");
		}
		else if(elementType.toLowerCase() == "select" && form.elements[i].value == "" && requiredCheck.test(elementTitle))
		{
			var elID = form.elements[i].id;
			var labelText = findLabel(elID);
			var tempMessage = required.replace("%F%", labelText);
			errorMessage.push("<li>"+tempMessage+"</li>");
		}
	}
	if(errorMessage.length > 0) {

		if ($.browser.msie && ($.browser.version == '6.0')) {
			outputMessage = errorMessage.join("\n");
			var regex1 = /\<li\>/g;
			var regex2 = /\<\/li\>/g;
			outputMessage = outputMessage.replace(regex1, "");
			outputMessage = outputMessage.replace(regex2, "");
			alert(outputMessage);
		} else {
			var fullErrorMessage = failureMessage+"<ul>"+errorMessage.join("")+"</ul>";
			$(".genericFormError", form).show();
			$(".genericFormError", form).html(fullErrorMessage);
		}
		//outputMessage = errorMessage.join("\n");
		//alert(outputMessage);
		return false;
	};
}


function findLabel(elID) {
	var labelText = "hi";
	$("label").each(function() {
		var thisLabelFor = $(this).attr("for");
		var thisLabelHtml = $(this).html();
		var thisLabelHtml1 = thisLabelHtml.split("<");
		if(thisLabelFor == elID) {
			labelText = thisLabelHtml1[0];
		}
	});
	return labelText;
}

/*function echeck(str) {		
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (str.indexOf(at)==-1){
	   return false
	}

	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	   return false
	}

	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		return false
	}

	 if (str.indexOf(at,(lat+1))!=-1){
		return false
	 }

	 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		return false
	 }

	 if (str.indexOf(dot,(lat+2))==-1){
		return false
	 }
	
	 if (str.indexOf(" ")!=-1){
		return false
	 }

	 return true					
}
function validateForm(form)
{
	var errorMessage = new Array();
	var requiredCheck = /\*/;
	/*var requiredCheck2 = /\Required/;
	for(var i = 0; i < form.elements.length; i++)
	{
		if(form.elements[i].name != null)
		{
			 if(form.elements[i].name.match("email") &&
			 (form.elements[i].value != 'Email Address of Recipient') &&
			  !echeck(form.elements[i].value))
			{
				form.elements[i].style.color="red";
				errorMessage.push('Please make sure you have entered valid email addresses.');
			}
			else if(form.elements[i].name.match("captcha") &&
			 (form.elements[i].value.length != 4))
			{
				form.elements[i].style.color="red";
				errorMessage.push('Please make sure you entered the correct 4 digit number from the picture in the bottom.');
			}
			else if(requiredCheck.test(form.elements[i].value)) {
				form.elements[i].style.color="red";
				errorMessage.push("Please enter "+form.elements[i].title.replace(" *", ""));
			}
			else if(requiredCheck2.test(form.elements[i].title) && form.elements[i].value=='') {
				form.elements[i].style.color="red";
				var thisElId = form.elements[i].id;
				$("label").each(function() {
					var thisLabelFor = $(this).attr("for");
					var thisLabelHtml = $(this).html();
					var thisLabelHtml1 = thisLabelHtml.split("<span");
					if(thisLabelFor == thisElId) {
						errorMessage.push("Please enter "+thisLabelHtml1[0]);
					}
				});
				//errorMessage.push("Please enter "+$("#"+thisElId).html());
			}
			else if(form.elements[i].tagName.toLowerCase == "textarea" && requiredCheck.test(form.elements[i].value)) {
				form.elements[i].style.color="red";
				errorMessage.push("Please enter"+form.elements[i].title.replace(" *", ""));
			}
			else {
				form.elements[i].style.color="#000000";
			}
			if(form.elements[i].getAttribute("type") == "checkbox" && requiredCheck.test(form.elements[i].title))
			{
				if(!form.elements[i].checked)
				{
					errorMessage.push("Please "+form.elements[i].title.replace(" *", ""));
				}	
			}
		}
	}
	if(errorMessage.length > 0) {
		$(".genericFormError", form).show();
		$(".genericFormError", form).html(errorMessage.join("<br />"));
		//outputMessage = errorMessage.join("\n");
		//alert(outputMessage);
		return false;
	}
}
*/
/*----------------------*/
function writeCookie(name,value,days)
{
	if(days)
	{
	    var date = new Date();
	    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
	    var expires = "; expires=" + date.toGMTString();
	    document.cookie = name + "=" + value + expires + "; path=/";	
	}
	else
		var expires = "";
		document.cookie = name+"="+value+expires+"; path=/; domain="+globalDomain;
}
/*----------------------*/

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 false;
}
function openWin(url,wName,para)
{
	//alert(typeof(arguments[2]));
	if(typeof(arguments[2]) == "object")
		var values = _parameters(arguments[2]);
	window.open(url,wName,values);
}
function _parameters(attributes)
{
	var values = [];
	for(attribute in attributes)
	{
		values.push(attribute + "=" + attributes[attribute].toString());
	}
	return values.join(",");
}