// SIMPLE METHOD THAT ADDS BINDINGS TO INTERACTIVE ELEMENTS
// TYPICALLY USED FOR INCOMING HTML VIA AJAX. 
function bindActions ( container )
{
	$('#'+container).find('.actionItemAddToFav').bind('click', function(){ postToggleFavorite(this); } );
	$('#'+container).find('.actionItemUpVote').bind('click',function(){ doUpVote(this); } );
	$('#'+container).find('.actionItemDownVote').bind('click', function(){ doDownVote(this); } );
	$('#'+container).find('.browseFilterTab').bind('mouseenter mouseleave', function(){ $(this).toggleClass('itemover'); } );

	$('#'+container).find('.formInput').bind('keydown',
		function(e)
		{
			var keynum;
			var keychar;
			if(window.event) 
				keynum = e.keyCode
			else if(e.which) 
				keynum = e.which

			if(keynum > 0)
			{
				if(keynum == 13)
				{
					$(this).parents('form:first').submit();
				}
			}
		}
	);

}


function checkSession()
{
	var sessionActive	= false;

	$.ajax({
		url: '/json/checkSession.php',
		type: "GET",
		data: {},
		dataType: "json",
		async:false,
		success: function(msg){ if(msg.status == 1){ sessionActive = true; } },
		error: function(j, t, e){ alert(e); }
	});

	return sessionActive;
}


function memberSignin()
{
	$.ajax({
		url: "/json/userLogin.php",
		global: false,
		type: "POST",
		data: $('#memberSigninForm').serialize(),
		dataType: "json",
		async: false,
		success: function(msg){
			if( msg.status > 0)
			{
				//$('#regOptionsTickerBox').fadeOut('fast',function(){ $('#regOptionsContainer').fadeIn('fast'); } );
				//hideMemberSignin();
				//alert(msg.status); 
				window.location.reload();    	
			}
			else
			{
				
				$('#signinUsernameField').val('');
				$('#signinPasswordField').val('');
				$('#signinCaptchaField').val('');

				var imageSrc = '/securimage.php?'+(new Date().getTime());
				$('#signinCaptchaImage').attr('src', imageSrc);
				
				alert(msg.message);
			}
		},
		error:
			function(r,t,v){ alert(v); return false; }
		}
	)
}


function refreshSuperNav()
{
	return true;
}



function doUpVote(container)
{
	if( checkSession() == true )
	{ 
		var containerId	= container.id;
		var postId	= container.rel;

		$.ajax({
			url: '/json/postVote.php',
			type: "GET",
			data: {'action':'voteUp','postId':postId},
			dataType: "json",
			success: function(msg){  if(msg.status==1){ container.innerHTML=msg.data.voteCount; } else { alert(msg.message); } },
			error: function(j, t, e){ alert(e); }
				
		});
	}
	else
		presentMemberSignin();
}


function doDownVote(container)
{
	if( checkSession() == true )
	{ 
		var containerId	= container.id;
		var postId	= container.rel;

		$.ajax({
			url: '/json/postVote.php',
			type: "GET",
			data: {'action':'voteDown','postId':postId},
			dataType: "json",
			async: false,
			success: function(msg){  if(msg.status==1){ container.innerHTML=msg.data.voteCount; } else { alert(msg.message); } },
			error: function(j, t, e){ alert(e); }
		});
	}
	else
		presentMemberSignin();
}


function postToggleFavorite(container)
{
	if( checkSession() == true )
	{ 
		var containerId	= container.id;
		var postId	= container.rel;

		$.ajax({
			url: '/json/userFavorite.php',
			type: "GET",
			data: {'action':'toggleFav','postId':postId},
			dataType: "json",
			async:false,
			success: function(msg){  if(msg.status==1){ msg.data.action=='added'; if(msg.data.action=='added'){ $(container).addClass('itemactive').html('Delete Favorite'); }else{ $(container).removeClass('itemactive').html('Add Favorite'); } } else { alert(msg.message); } },
			error: function(j, t, e){ alert(e); }
				
		});
	}
	else
		presentMemberSignin();
}



function postAddFav(container)
{
	if( checkSession() == true )
	{ 
		var containerId	= container.id;
		var postId	= container.rel;

		$.ajax({
			url: '/json/userFavorite.php',
			type: "GET",
			data: {'action':'addFav','postId':postId},
			dataType: "json",
			async: false,
			success: function(msg){  if(msg.status==1){ $(container).addClass('itemactive'); } else { alert(msg.message); } },
			error: function(j, t, e){ alert(e); }
				
		});
	}
	else
		presentMemberSignin();
}



function postRemoveFav(container)
{
	if( checkSession() == true )
	{ 
		var containerId	= container.id;
		var postId	= container.rel;

		$.ajax({
			url: '/json/userFavorite.php',
			type: "GET",
			data: {'action':'delFav','postId':postId},
			dataType: "json",
			async: false,
			success: function(msg){  if(msg.status==1){ $(container).removeClass('itemactive'); } else { alert(msg.message); } },
			error: function(j, t, e){ alert(e); }
				
		});
	}
	else
		presentMemberSignin();	
}









function postAddComment()
{
	if( checkSession() == true )
	{ 
		var containerId	= container.id;
		var postId	= container.rel;

		$.ajax({
			url: '/json/postComment.php',
			type: "GET",
			data: {'action':'postComment','postId':postId},
			dataType: "json",
			success: function(msg){  },
			error: function(j, t, e){ alert(e); }
		});
	}
	else
		presentMemberSignin();
	
}



function memberRegister()
{
	if(! $('#registerTermsCheck').is(':checked') )
	{
		alert('To register, you must agree that you are over 18 years of age and agree to our Terms of Usage.');
		return false;		
	}


	var badEmail = isBadEmail( $('#regEmailField').val() );
	if(  badEmail != false )
	{
		alert(badEmail);
		return false;
	}


	var badUsername = isBadUsername( $('#regUsernameField').val() );
	if(  badUsername != false )
	{
		alert(badUsername);
		return false;
	}


	var badPassword = isBadPassword( $('#regPasswordField').val() );
	if(  badPassword != false )
	{
		alert(badPassword);
		return false;
	}



	$.ajax({
		url: "/json/userRegister.php",
		global: false,
		type: "POST",
		data: $('#memberRegForm').serialize(),
		dataType: "json",
		async: false,
		success: function(msg){
			if( msg.status > 0)
			{
				window.location = '/validate-registration.php';
			}
			else
			{
				
				alert(msg.message);
			}
		},
		error:
			function(r,t,v){ alert(v); return false; }
		}
	)


}



function presentMemberSignin()
{
	var screenWidth		= $('body').width();
	var screenHeight	= $('body').height();
	
	showScreen();
	var newLeft = (screenWidth/2) - (700/2) 
	$('#loginWidget').css({'position':'absolute','zIndex':'4','top':'150px','left':newLeft}).show();

	window.scrollTo(0,0);
}

function hideMemberSignin()
{
	$('#regOptionsTickerBox').fadeOut('fast',function(){ $('#regOptionsContainer').fadeIn('fast'); } );
	$('#overlay').hide();
	$('#loginWidget').hide();
}

function showScreen()
{
	var screenWidth = $('body').width();
	var screenHeight = $('body').height();
	$('#overlay').css({'position':'absolute','height':screenHeight,'width':screenWidth,'zIndex':'0','top':'0','left':'0','opacity':'.9','background-color':'#000000'}).show();
}




function buildFilter(browseObj)
{
	var bFilter = {
	'contentURL'		:'/json/postBrowse.php',  				// What script will return the content
	'contentContainer'	: browseObj.container,          		// what container do I put the returned content in
	'loadIndicator'		: browseObj.loadIndicator,                    				// option container to present while retrieving content
	'maxPerPage'		: browseObj.perPage,           			// number of results to fetch
	'sortOrder'		: (browseObj.sortOrder	? browseObj.sortOrder	: ''),
	'sortBy'		: (browseObj.sortBy	? browseObj.sortBy	: ''),
	'contentFilter'		:{'postFilter':browseObj.postFilter,'postTypeId':browseObj.postTypeId,'favoritesOnly':browseObj.favoritesOnly}};

	return bFilter;
}


// ************************************************************************ //
// Rough JS class that dynamicaly passes  (emphasis on the word ROUGH)
// @param  Object of Pager Options
// @return void
//
function pager(pagerOptions)
{
	pagerOptions.maxPerPage			= pagerOptions.maxPerPage == undefined ? '5'   : pagerOptions.maxPerPage;
	pagerOptions.pgCaching			= pagerOptions.pgCaching  == undefined ? 'off' : pagerOptions.pgCaching; // NOT SURE USING THIS IS A GOOD IDEA ANYWAY

	// these variables need to be accessible in all levels of the
	// class, including nested anonomous functions. 
	var _this				= {};
	var loadIndicator		= pagerOptions.loadIndicator;
	var contentContainer	= pagerOptions.contentContainer;
	var totalPages			= 1;
	var recordCount			= 0;
	var pgCache			= {};


	// GET THE LAST PAGE
	this.getLast = function( callback )
	{
		if( totalPages > 0){ pagerOptions.contentFilter.pg = totalPages-1; this.getNext(totalPages,callback); } else { return; }
	}

	// GET THE FIRST PAGE
	this.getFirst = function( callback )
	{
		if( totalPages > 0 ){ pagerOptions.contentFilter.pg = 1; this.getPage(1,callback); } else { return; }
	}

	// GET THE NEXT PAGE
	this.getNext = function( callback )
	{
		if( totalPages > 0 && pagerOptions.contentFilter.pg < totalPages ){ pagerOptions.contentFilter.pg = pagerOptions.contentFilter.pg + 1; this.getPage(pagerOptions.contentFilter.pg,callback); } else { return; }
	}

	// GET THE TARGET PAGE
	this.getTargetPage = function( tpg, callback )
	{
		if( totalPages > 0 && tpg <= totalPages && tpg > 0 ){ pagerOptions.contentFilter.pg = tpg; this.getPage(pagerOptions.contentFilter.pg, callback); } else { return; }
	}

	// GET THE PREV PAGE
	this.getPrev = function( callback )
	{
		if( totalPages > 0 && pagerOptions.contentFilter.pg > 1 ){ pagerOptions.contentFilter.pg = pagerOptions.contentFilter.pg - 1; this.getPage(pagerOptions.contentFilter.pg,callback); } else { return; }
	}

	// SET AN OPTION IN THE pagerOptions object
	this.setPagerOption = function (optName, optValue )
	{
		try { pageOptions[optName] = optValue; } catch(err){ /* PUT IN ERROR HANDLING IF YOU WISTH */  }
	}

	// SET A CONTENT FILTER OPTION
	this.setContentFilterVar = function (optName, optValue)
	{
		try { pageOptions.contentFilter[optName] = optValue; } catch(err){ /* PUT IN ERROR HANDLING IF YOU WISTH */  }
	}

	// DELETE CONTENT FILTER
	this.deleteContentFilterVar	= function (optName)
	{
		try { delete pageOptions.contentFilter[optName]; } catch(err){  /* PUT IN ERROR HANDLING IF YOU WISTH */ }
	}

	// SET MAX PER PAGE
	this.setMaxPerPage = function ( mpp )
	{
		try { pagerOptions.maxPerPage = mpp; this.getPage(1); } catch(err){  /* PUT IN ERROR HANDLING IF YOU WISTH */ }
	}


	// DELETE CONTENT FILTER
	this.getRef	= function (optName)
	{
		return _this;
	}

	// RETRIEVE THE NUMBER OF ITEMS RETURNED BY THE CONTENT SCRIPT
	this.getResultCount = function()
	{
		var contentF	= pagerOptions.contentFilter;
		contentF.action	= 'getResultCount';

		$.ajax({
			url: pagerOptions.contentURL,
			type: "POST",
			data: contentF,
			dataType: "html",
			success: function(msg){ setResultCount(msg); }
		});
	}


	// GET PAGE
	this.getPage	= function(pg, callback)
	{
		//if( pg >= totalPages){ return; }
 		document.getElementById(contentContainer).innerHTML='';
		pagerOptions.contentFilter.page		= pg;
		pagerOptions.contentFilter.limit	= pagerOptions.maxPerPage;
		pagerOptions.contentFilter.sortOrder	= pagerOptions.sortOrder;
		pagerOptions.contentFilter.sortBy	= pagerOptions.sortBy;
		pagerOptions.contentFilter.action	= 'getRecords';

		//alert(pagerOptions.contentFilter.sortBy);

		if( loadIndicator != undefined ){ showLoadIndicator(); }

		if( pagerOptions.pgCaching == 'on')
		{
			if(pgCache[pg]==undefined)
			{
				$.ajax({
					url: pagerOptions.contentURL,
					type: "POST",
					data: pagerOptions.contentFilter,
					dataType: "html",
					success: function(msg){ pgCache[pg] = msg; presentContent(msg); },
					error: function(r,t,v){ alert(v); return false; }
				});
			}
			else
			{
				presentContent(pgCache[pg]); 
			}
		}
		else
		{
			$.ajax({
				url: pagerOptions.contentURL,
				type: "POST",
				data: pagerOptions.contentFilter,
				dataType: "html",
				success: function(msg){ presentContent(msg); },
				error: function(r,t,v){ alert(v); return false; }
			});
		}

		if( typeof callback == 'function' ){ callback(); }
	}


	function showLoadIndicator ()
	{
		if( loadIndicator == undefined){ return; }else{ document.getElementById(loadIndicator).style.display='block'; }
	}

	function hideLoadIndicator ()
	{
		if( loadIndicator == undefined){ return; }else{ document.getElementById(loadIndicator).style.display='none '; }
	}

	function presentContent(content)
	{
		if( loadIndicator != undefined ){ hideLoadIndicator(); }

		if(pagerOptions.prevButton != undefined && pagerOptions.contentFilter.pg == 1)
			{  $('#'+pagerOptions.prevButton).fadeTo('fast',.2); }
		else if(pagerOptions.prevButton != undefined && pagerOptions.contentFilter.pg > 1)
			{  $('#'+pagerOptions.prevButton).fadeTo('fast',1); }


		if(pagerOptions.nextButton != undefined && pagerOptions.contentFilter.pg == totalPages)
			{  $('#'+pagerOptions.nextButton).fadeTo('fast',.2); }
		else if(pagerOptions.nextButton != undefined && pagerOptions.contentFilter.pg < totalPages)
			{  $('#'+pagerOptions.nextButton).fadeTo('fast',1);  }

		document.getElementById(contentContainer).innerHTML=content;
		bindActions(contentContainer);
	}

	function setResultCount (msg)
	{
		recordCount	= parseFloat(msg);
		totalPages	= Math.ceil( recordCount / pagerOptions.maxPerPage);
	}

	// FIRST GET THE TOTAL NUMBER OF RECORDS
	try{ this.getResultCount(); }catch(err){ /* PUT IN ERROR HANDLING IF YOU WISTH */ }

	// LOAD THE FIRST PAGE ON INSTANTIATION
	try{ this.getFirst(); }catch(err){ /* PUT IN ERROR HANDLING IF YOU WISTH */ }


	// SET A VAR THAT CAN BE PASSED AS REFERENCE TO THIS OBJECT
	_this = this;
}


var pagers		= {};
var curPagerKey	= null;

function loadRecentPosts(container, perPage)
{

	if( container != 'favoritePosts')
	{
		var browseObj	= {};

		if( container == 'videoPosts' )
			browseObj.postTypeId	= 1;
		else if( container == 'couponPosts' )
			browseObj.postTypeId	= 4;
		else
			browseObj.postTypeId	= '';

		if( container == 'popularPosts')
		{
			browseObj.favoritesOnly	= '';
			browseObj.sortBy	= 'votes_up';
			browseObj.sortOrder	= 'DESC';
		}
		else if( container == 'favoritePosts')
		{
			browseObj.favoritesOnly	= 'true';
			//browseObj.postTypeId	= '';
			browseObj.sortBy	= '';
			browseObj.sortOrder	= '';
		}
		else
		{
			browseObj.favoritesOnly	= '';
			browseObj.sortBy	= 'publish_datetime';
			browseObj.sortOrder	= 'DESC';
		}


		curPagerKey			= container;
		browseObj.postFilter		= container;
		browseObj.perPage		= perPage ? perPage : 8;
		browseObj.page			= 1;
		browseObj.container		= container;
		browseObj.loadIndicator		= 'loadingTicker';
		var brwsr = buildFilter(browseObj);
		pagers[container] = new pager(brwsr);
	}
	else if( container == 'favoritePosts' )
	{
		if( checkSession() == false )
		{
			presentMemberSignin();
		}
		else
		{
			var browseObj	= {};
			browseObj.favoritesOnly	= 'true';
			browseObj.postTypeId	= '';
			browseObj.sortBy	= '';
			browseObj.sortOrder	= '';

			
			curPagerKey			= container;
			browseObj.perPage		= perPage ? perPage : 8;
			browseObj.page			= 1;
			browseObj.container		= container;
			browseObj.loadIndicator		= 'loadingTicker';
			var brwsr = buildFilter(browseObj);
			pagers[container] = new pager(brwsr);
		}
	}
}



function isBadUsername(fld)
{
	var error="";

	var usernameFilter = /^\w{4,16}$/ ;

	if (fld == "")
	{
		error = "Please enter a Username.\n";
	}
	else if (!usernameFilter.test(fld))
	{
		error = "Please enter a valid Username (between 4 and 16 characters, no spaces or punctuation marks).\n";
	}
	
	
	return error ? error : false;
}



function isBadEmail(fld)
{
	var error="";

	var emailFilter = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;

	if (fld == "")
	{
		error = "Please enter your Email address.\n";
	}
	else if (!emailFilter.test(fld))
	{
		error = "Please enter a valid email address.\n";
	}
	
	return error ? error : false;
}




function isBadPassword(fld)
{
	var error="";

	var passFilter = /^\w{4,16}$/ ;

	if (fld == "")
	{
		error = "Please enter a password between 4 and 16 characters.\n";
	}
	else if (!passFilter.test(fld))
	{
		error = "Please enter a valid pasword 4 and 16 characters.\n";
	}
	
	
	return error ? error : false;
}





