/*************************** Slideshow JS ****************************/
function showNextSlide(event)
{
	var targ;
	if (event.target) {targ = event.target;}
	else if (event.srcElement){ targ = event.srcElement;}

	var slideContainer = $(targ).parent();

	if(slideContainer.find(".AOLP_slides li:first").attr("class") == "noNext")
		return;

	slideContainer.find(".AOLP_slides .AOLP_mKrRovtD").focus();

	slideContainer.find(".slideshow-next").unbind("click", showNextSlide);
	slideContainer.find(".AOLP_slides li:first").clone().appendTo(slideContainer.find(".AOLP_slides"));
	slideContainer.find(".AOLP_slides li:first").css("margin-left","0px").animate({marginLeft:'-'+ slideContainer.find(".AOLP_slides li:last").css("width")},
																				"fast", "linear" ,
																				function(){
																						$(this).remove();
																						slideContainer.find(".slideshow-next").bind("click", showNextSlide);
																				});
}

function showPrevSlide(event)
{
	var targ;
	if (event.target) {targ = event.target;}
	else if (event.srcElement){ targ = event.srcElement;}

	var slideContainer = $(targ).parent();

	if(slideContainer.find(".AOLP_slides li:first").attr("class") == "noPrev")
		return;

	slideContainer.find(".AOLP_slides .AOLP_mKrRovtD").focus();

	slideContainer.find(".slideshow-prev").unbind("click", showPrevSlide);
	slideContainer.find(".AOLP_slides li:last").clone().css("margin-left",'-'+ slideContainer.find(".AOLP_slides li:last").css("width")).prependTo(slideContainer.find(".AOLP_slides"));
	slideContainer.find(".AOLP_slides li:first").animate({ marginLeft:'0px' }, "fast",  "linear" , function(){
																	slideContainer.find(".slideshow-prev").bind("click", showPrevSlide);
																});
	slideContainer.find(".AOLP_slides li:last").remove();

}

function showNextHoverSlide(targ, containerHeight)
{
	var slideUL = $(targ).parent().find("ul.AOLP_slides");
	//alert(slideUL.css("height"));
	slideUL.animate({ marginTop : "-" + (parseInt(slideUL.css("height")) - containerHeight) + "px" } , (parseInt(slideUL.css("height")) - containerHeight + parseInt(slideUL.css("margin-top")))*9 , "linear" );
}

function showPrevHoverSlide(targ, containerHeight)
{
	var slideUL = $(targ).parent().find("ul.AOLP_slides");
	slideUL.animate({ marginTop : "0px" } , parseInt(slideUL.css("margin-top"))*(-9), "linear" );
}



$(document).ready(	function(){
	$(".slideshow-prev").click( showPrevSlide );
	$(".slideshow-next").click( showNextSlide );

	var ulAOLPSlides = $(".AOLP_alphaCityList ul.AOLP_slides li").length * 21;
	$("ul.AOLP_slides li a").each(function(i){
		if($(this).text().length > 39)
		{
			ulAOLPSlides +=21;
		}
	});
	$(".AOLP_alphaCityList ul.AOLP_slides").css("height",ulAOLPSlides +"px");

	$("div.hovershow-prev").mouseover( function(){ showPrevHoverSlide(this,292); } );
	$("div.hovershow-next").mouseover( function(){ showNextHoverSlide(this,292);  } );
	$("div.hovershow-prev").mouseout( function(){ $(this).parent().find("ul.AOLP_slides").stop(); } );
	$("div.hovershow-next").mouseout( function(){ $(this).parent().find("ul.AOLP_slides").stop();  } );

});
/*************************** Slideshow JS ****************************/

/*************************** Validation JS ****************************/
function randomString(string_length)
{
	var chars = "ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
	var randomstring = '';
	for (var i=0; i<string_length; i++) {
		var rnum = Math.floor(Math.random() * chars.length);
		randomstring += chars.substring(rnum,rnum+1);
	}
	return randomstring;
}

function showErrorMessage(field,html,quick)
{
	var assID = randomString(8);
	while($(assID).length)	{
		assID = randomstring(8);
	}

	var valField = $(field);
	var genStyle =	'border:' + valField.css('border') + '; width:' + valField.css("width") + '; left:' + valField.css("left") + '; top:' + valField.css("top") + '; position:' + valField.css("position") + '; height:' + valField.css("height") + '; font-size:9px; border-color:#f00; border-style:solid; background-color:#fff; color:#f00; display:none;';

	var genHtml = '<'+ html.tag +' id="'+ assID +'" class="AOLP_mKrRovtD" style="' + genStyle +'"';
	if(!html.closeTag)
	{ genHtml += ' value="'+ html.value +'" />'; }
	else
	{ genHtml += '>' + html.value +'</'+ html.tag +'>'; }

	if(!quick && !(field.css("display") == "none") )
	{
		field.after(genHtml);
		field.hide();
		$('#' + assID).fadeIn("slow");
		$('#' + assID).bind("focus",function() { $('#' + assID).remove(); $(field).show(); $(field).focus(); });
	}
	return true;
}

function BPMFormValidation(form)
{
	var error = false;
	var zip1 = /^[0-9]{5}$/;
	var zip2 = /^[a-zA-Z][0-9][a-zA-Z][0-9][a-zA-Z][0-9]$/;
	var zip3 = /^[a-zA-Z][0-9][a-zA-Z] [0-9][a-zA-Z][0-9]$/;
	var formId = jQuery(form).attr("id");

	var zipField = $(form).find("#Zip");

	// ZIP CHECK

	if (zipField.attr("value") == null || zipField.attr("value") == "")
	{
		showErrorMessage(zipField, {tag:'input', value:'Please enter your ZIP code'});
		error = true;
	}
	else if (!zipField.attr("value").match(zip1) && !zipField.attr("value").match(zip2) && !zipField.attr("value").match(zip3))
	{
		showErrorMessage(zipField, {tag:'input', value:'Please enter correct Zip code'});
		error = true;
	}
	else if(zipField.attr("value").indexOf('D') != -1 || zipField.attr("value").indexOf('d') != -1 || zipField.attr("value").indexOf('F') != -1 || zipField.attr("value").indexOf('f') != -1 || zipField.attr("value").indexOf('I') != -1 || zipField.attr("value").indexOf('i') != -1 || zipField.attr("value").indexOf('O') != -1 || zipField.attr("value").indexOf('o') != -1 || zipField.attr("value").indexOf('Q') != -1 || zipField.attr("value").indexOf('q') != -1 || zipField.attr("value").indexOf('U') != -1 || zipField.attr("value").indexOf('u') != -1)
	{
		showErrorMessage(zipField, {tag:'input', value:'Please enter correct Zip code'});
		error = true;
	}

	return !error;
}

function MatchFormValidationSEOHub(form)
{
	var error = false;
	var zip1 = /^[0-9]{5}$/;
	var zip2 = /^[a-zA-Z][0-9][a-zA-Z][0-9][a-zA-Z][0-9]$/;
	var zip3 = /^[a-zA-Z][0-9][a-zA-Z] [0-9][a-zA-Z][0-9]$/;
	var formId = jQuery(form).attr("id");

	var zipField = $(form).find("#qsearch_near_zip");

	// ZIP CHECK

	if (zipField.attr("value") == null || zipField.attr("value") == "")
	{
		showErrorMessage(zipField, {tag:'input', value:'Please enter a ZIP'});
		error = true;
	}
	else if (!zipField.attr("value").match(zip1) && !zipField.attr("value").match(zip2) && !zipField.attr("value").match(zip3))
	{
		showErrorMessage(zipField, {tag:'input', value:'Invalid Zip Code'});
		error = true;
	}
	else if(zipField.attr("value").indexOf('D') != -1 || zipField.attr("value").indexOf('d') != -1 || zipField.attr("value").indexOf('F') != -1 || zipField.attr("value").indexOf('f') != -1 || zipField.attr("value").indexOf('I') != -1 || zipField.attr("value").indexOf('i') != -1 || zipField.attr("value").indexOf('O') != -1 || zipField.attr("value").indexOf('o') != -1 || zipField.attr("value").indexOf('Q') != -1 || zipField.attr("value").indexOf('q') != -1 || zipField.attr("value").indexOf('U') != -1 || zipField.attr("value").indexOf('u') != -1)
	{
		showErrorMessage(zipField, {tag:'input', value:'Invalid Zip Code'});
		error = true;
	}

	return !error;
}

function MatchFormValidation(form)
{
	var error = false;
	var zip1 = /^[0-9]{5}$/;
	var zip2 = /^[a-zA-Z][0-9][a-zA-Z][0-9][a-zA-Z][0-9]$/;
	var zip3 = /^[a-zA-Z][0-9][a-zA-Z] [0-9][a-zA-Z][0-9]$/;
	var formId = jQuery(form).attr("id");

	var zipField = $(form).find("#matchZip");

	// ZIP CHECK

	if (zipField.attr("value") == null || zipField.attr("value") == "")
	{
		showErrorMessage(zipField, {tag:'input', value:'Please enter your ZIP code'});
		error = true;
	}
	else if (!zipField.attr("value").match(zip1) && !zipField.attr("value").match(zip2) && !zipField.attr("value").match(zip3))
	{
		showErrorMessage(zipField, {tag:'input', value:'Please enter correct Zip code'});
		error = true;
	}
	else if(zipField.attr("value").indexOf('D') != -1 || zipField.attr("value").indexOf('d') != -1 || zipField.attr("value").indexOf('F') != -1 || zipField.attr("value").indexOf('f') != -1 || zipField.attr("value").indexOf('I') != -1 || zipField.attr("value").indexOf('i') != -1 || zipField.attr("value").indexOf('O') != -1 || zipField.attr("value").indexOf('o') != -1 || zipField.attr("value").indexOf('Q') != -1 || zipField.attr("value").indexOf('q') != -1 || zipField.attr("value").indexOf('U') != -1 || zipField.attr("value").indexOf('u') != -1)
	{
		showErrorMessage(zipField, {tag:'input', value:'Please enter correct Zip code'});
		error = true;
	}

	return !error;
}

function eHarmonyFormValidation(form)
{
	var user = /^[a-zA-Z0-9-']+$/;
	var pass = /^[a-zA-Z0-9]+$/;
	var zip1 = /^[0-9]{5}$/;
	var zip2 = /^[a-zA-Z][0-9][a-zA-Z][0-9][a-zA-Z][0-9]$/;
	var zip3 = /^[a-zA-Z][0-9][a-zA-Z] [0-9][a-zA-Z][0-9]$/;
	var email  = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
	var error = false;

	var frmName = $(form).find("#fName");
	var frmgender = $(form).find("#gender");
	var zipField = $(form).find("#Zip");
	var frmemail = $(form).find("#Email");
	var frmcemail = $(form).find("#cEmail");
	var frmpassword = $(form).find("#Password");

	// USERNAME CHECK
	if (frmName.attr("value") == null || frmName.attr("value") == "") {
		showErrorMessage(frmName, {tag:'input', value:'Please enter your first name'});
		error = true;
	}
	else if (!frmName.attr("value").match(user)) {
		showErrorMessage(frmName, {tag:'input', value:'Username incorrect'});
		error = true;
	}

	// GENDER CHECK
	if (frmgender.attr("value") == "Please select...") {
		frmgender.css("border","#FF0000 1px solid");
		error = true;
	}
	else
			{
		frmgender.css("border","#333333 1px solid");
	}

		   // ZIP CHECK

	if (zipField.attr("value") == null || zipField.attr("value") == "")
	{
		showErrorMessage(zipField, {tag:'input', value:'Please enter your ZIP code'});
		error = true;
	}
	else if (!zipField.attr("value").match(zip1) && !zipField.attr("value").match(zip2) && !zipField.attr("value").match(zip3))
	{
		showErrorMessage(zipField, {tag:'input', value:'Please enter correct Zip code'});
		error = true;
	}
	else if(zipField.attr("value").indexOf('D') != -1 || zipField.attr("value").indexOf('d') != -1 || zipField.attr("value").indexOf('F') != -1 || zipField.attr("value").indexOf('f') != -1 || zipField.attr("value").indexOf('I') != -1 || zipField.attr("value").indexOf('i') != -1 || zipField.attr("value").indexOf('O') != -1 || zipField.attr("value").indexOf('o') != -1 || zipField.attr("value").indexOf('Q') != -1 || zipField.attr("value").indexOf('q') != -1 || zipField.attr("value").indexOf('U') != -1 || zipField.attr("value").indexOf('u') != -1)
	{
		showErrorMessage(zipField, {tag:'input', value:'Please enter correct Zip code'});
		error = true;
	}

	// E-MAIL CHECK
	if (frmemail.attr("value") == null || frmemail.attr("value") == "")
	{
		showErrorMessage(frmemail, {tag:'input', value:'Please enter your email'});
		error = true;
	}
	else if (!frmemail.attr("value").match(email))
	{
		showErrorMessage(frmemail, {tag:'input', value:'Email address incorrect'});
		error = true;
	}
	else if(frmemail.attr("value") != frmcemail.attr("value"))
	{
		showErrorMessage(frmcemail, {tag:'input', value:'Please confirm your email'});
		error = true;
	}

	// PASSWORD CHECK
	if (frmpassword.attr("value") == null || frmpassword.attr("value") =="") {
		showErrorMessage(frmpassword, {tag:'input', value:'Please enter a password'});
		error = true;
	}
	else if (frmpassword.attr("value").length < 5){
		showErrorMessage(frmpassword, {tag:'input', value:'Password too short'});
		error = true;
	}
	else if (!frmpassword.attr("value").match(pass)) {
		showErrorMessage(frmpassword, {tag:'input', value:'No specical characters'});
		error = true;
	}

	return !error;
}


/*************************** Validation JS ****************************/

// ----------------------------------------------------------------------
// ------------ Start Script for Gallery Detailed View ------------------
// ----------------------------------------------------------------------

var city_singles =
{
	// Array storing all profiles and their details for sorting purposes
	singlesArray : [],

	// Global vars to store the current profile info
	sgender : '',
	minage : '20',
	maxage : '40',

	// Sort the profiles in order of ANY column of the array
	sortSingles : function (profileArray, colNum, order)
	{
		if( order === undefined )
			order = true;
		for(i=0; i<profileArray.length-1; i++)
		{
			for(j=i+1; j<profileArray.length; j++)
			{
				if((profileArray[i][colNum] > profileArray[j][colNum] && order) || (profileArray[i][colNum] < profileArray[j][colNum] && !order))
				{
					for(k=0; k<profileArray[i].length; k++)
					{
						var tmp = profileArray[i][k];
						profileArray[i][k] = profileArray[j][k];
						profileArray[j][k] = tmp;
					}
				}
			}
		}
		return profileArray;
	},

	// Populate both the gallery view and detailed view DIV's
	populateGalleryDetailedView : function (arr)
	{
		// note that arr length and galViewSize should result in an integer on division
		var finHtml = "";
		var galViewSize = 12;
		var detailedViewSize = 4;
		var arrLength = arr.length;

		// find the current selected gallery
		var selectedGallery =  $("div.AOLP_galleryViewDiv > span").index($("div.AOLP_galleryViewDiv > span.selected")[0]);
		if(selectedGallery == -1)
			selectedGallery = 0;

		// find the current selected detail
		var selectedDetail =   $("div.AOLP_detailedViewDiv > span").index($("div.AOLP_detailedViewDiv > span.selected")[0]);
		if(selectedDetail == -1)
			selectedDetail = 0;

		// Gallery view
		finHtml = '<div class="prev">Previous</div> <center><div>Page ';
		for(j=0;j<arrLength/galViewSize;j++)
			finHtml += '<span class="AOLP_matchProfilesPaging'+ (j==selectedGallery?' selected':'') +'" >'+(j+1)+'</span>';
		finHtml += '</div></center>  <div class="next">Next</div>';
		for(j=0;j<arrLength/galViewSize;j++)
		{
			finHtml += '<ul class="'+ (j==selectedGallery?' selected':'') +'">';
			for(i=j*galViewSize;i<j*galViewSize+galViewSize;i++)
			{
				finHtml += '<li><h4><a href="http://webcenter.match.love.aol.com/profile/showprofile.aspx?lid=1000005&TP=PRTBK&Handle=' + arr[i][5] + '&TrackingID=525516&BannerID=663937">' + arr[i][5] + '</a></h4><h6>' + arr[i][1] + ' - ' + arr[i][2] + '</h6><a href="http://webcenter.match.love.aol.com/profile/showprofile.aspx?lid=1000005&TP=PRTBK&Handle=' + arr[i][5] + '&TrackingID=525516&BannerID=663937"><img src="' + arr[i][3] + '" /></a><h5><a href="http://webcenter.match.love.aol.com/profile/showprofile.aspx?lid=1000005&TP=PRTBK&Handle=' + arr[i][5] + '&TrackingID=525516&BannerID=663937">' + arr[i][4] + ' more photo(s)</a></h5></li>';
			}
			finHtml += '</ul>';
		}
		$("div.AOLP_galleryViewDiv").html(finHtml);

		// Detailed view
		finHtml = '<div class="prev">Previous</div> <center><div>Page ';
		for(j=0;j<arrLength/detailedViewSize;j++)
			finHtml += '<span class="AOLP_matchProfilesPaging'+ (j==selectedDetail?' selected':'') +'" >'+(j+1)+'</span>';
		finHtml += '</div></center>  <div class="next">Next</div>';
		for(j=0;j<arrLength/detailedViewSize;j++)
		{
			finHtml += '<ul class="'+ (j==selectedDetail?' selected':'') +'">';
			for(i=j*detailedViewSize;i<j*detailedViewSize+detailedViewSize;i++)
			{
				finHtml += '<li><a href="http://webcenter.match.love.aol.com/profile/showprofile.aspx?lid=1000005&TP=PRTBK&Handle=' + arr[i][5] + '&TrackingID=525516&BannerID=663937"><img src="' + arr[i][3] + '" /></a> <span style="width:110px" ><h5><a href="http://webcenter.match.love.aol.com/profile/showprofile.aspx?lid=1000005&TP=PRTBK&Handle=' + arr[i][5] + '&TrackingID=525516&BannerID=663937">' + arr[i][5] + '</a></h5><h6>' + arr[i][1] + ' - ' + arr[i][2] + '</h6><h6><a href="http://webcenter.match.love.aol.com/profile/showprofile.aspx?lid=1000005&TP=PRTBK&Handle=' + arr[i][5] + '&TrackingID=525516&BannerID=663937">' + arr[i][4] + ' more photo(s)</a></h6></span><span style="width:190px; padding:0;" ><h5 style="color:inherit; font-size:12px;" >'+arr[i][7]+'</h5><br/>'+arr[i][6]+'</span></li><hr style="clear:both; border:none; border-bottom:1px solid #D7F0E2; width: 409px; " />';
			}
			finHtml += '</ul>';
		}
		$("div.AOLP_detailedViewDiv").html(finHtml);

	},

	// Sort the profiles using the given change in select box
	changeProfileSorting : function (value)
	{
		var order = true;
		if( value == 4)
			order = false;
		city_singles.sortSingles(city_singles.singlesArray,parseInt(value), order);
		city_singles.populateGalleryDetailedView(city_singles.singlesArray);
	},

	// function for calling the JSON request for changing list of profiles using the selction
	getProfilesMatch: function ()
	{
		if(city_singles.gender == "male" && city_singles.sgender === ''){ city_singles.sgender = "female"; }
		if(city_singles.gender == "female" && city_singles.sgender === ''){ city_singles.sgender = "male"; }

		$('#removeit').remove();
		$("div.AOLP_searchSingles ul").append('<li id="removeit" style="font-size:1.5em; float:right; "><img style="height:auto; width:auto; border:0; margin:0;" src="http://www.aolcdn.com/personals_redesign/loading.gif"> Loading </li>');

		$.getJSON("/api/getProfiles.jsp", {'zipCode': city_singles.zip, 'gender': city_singles.gender, 'sgender': city_singles.sgender, 'minage': city_singles.minage, 'maxage' : city_singles.maxage },
		function(response) {
			//console.log(response);
			var profiles = response.profiles;
			for(i=0;i<profiles.length;i++)
			{
				var thisProfile = [];
				thisProfile[0] = i;
				thisProfile[1] = profiles[i].age;
				thisProfile[2] = profiles[i].city + ", " + profiles[i].state;
				thisProfile[3] = profiles[i].photouri;
				thisProfile[4] = profiles[i].photocount - 1;
				thisProfile[5] = profiles[i].handle;
				thisProfile[6] = profiles[i].eassaytext;
				thisProfile[7] = profiles[i].headline;

				city_singles.singlesArray[i] = thisProfile;
			}

			$('#removeit').remove();
            city_singles.populateGalleryDetailedView(city_singles.singlesArray);
			if(profiles.length == 0)
				$("div.AOLP_searchSingles ul").append("<li style='float:right' id='removeit'><span style='color:#FF0000;display:block;font-size:1.2em;text-align:right;'>Unexpected error<br/>Please try again</span></li>");

		});
	},

	init : function()
	{
		// check the window hash location to set the div
		if(window.location.hash == "#Detailed")
		{
			$("div.AOLP_threeColHead li").removeClass("selected");
			$("#AOLP_detailedView").addClass("selected");
			$("div.AOLP_detailedViewDiv").show();
			$("div.AOLP_galleryViewDiv").hide();
		}
		else
		{
			$("div.AOLP_threeColHead li").removeClass("selected");
			$("#AOLP_galleryView").addClass("selected");
			$("div.AOLP_detailedViewDiv").hide();
			$("div.AOLP_galleryViewDiv").show();
		}


		// bind the change sorting function to the change button
		$("#searchSortBy").change(function() { city_singles.changeProfileSorting($(this).attr("value")); });

		// load the feed for the first time
		city_singles.getProfilesMatch();

		// bind the pageNum for changing pagination
		$("div.AOLP_galleryViewDiv div > span, div.AOLP_detailedViewDiv div > span").live('click', function() {

				var pageNum = parseInt($(this).html())-1;

				$(this).parent().children("span").removeClass('selected');
				$($(this).parent().children("span")[pageNum]).addClass('selected');

				$(this).parent().parent().parent().children("ul").removeClass('selected');
				$($(this).parent().parent().parent().children("ul")[pageNum]).addClass('selected');

		});

		// bind the Prev for changing pagination
		$("div.AOLP_galleryViewDiv > div.prev, div.AOLP_detailedViewDiv > div.prev").live('click', function() {
				var thisParent = $(this).parent();
				var pageNum = parseInt(thisParent.find("div .AOLP_matchProfilesPaging").index(thisParent.find("div .AOLP_matchProfilesPaging.selected")[0]));

				if(pageNum > 0)
				{
					$(thisParent.find("div > span")[pageNum-1]).click();
				}
		});

		// bind the Next for changing pagination
		$("div.AOLP_galleryViewDiv > div.next, div.AOLP_detailedViewDiv > div.next").live('click', function() {
				var thisParent = $(this).parent();
				var pageNum = parseInt(thisParent.find("div .AOLP_matchProfilesPaging").index(thisParent.find("div .AOLP_matchProfilesPaging.selected")[0]));

				if(pageNum < thisParent.find("div > span").length-1 )
				{
					$(thisParent.find("div > span")[pageNum+1]).click();
				}
		});

		// bind the Gallery Detailed View Handles for switching between detail and gallery view
		$("li#AOLP_galleryView, li#AOLP_detailedView").bind('click', function() {

				$("div.AOLP_galleryViewDiv, div.AOLP_detailedViewDiv").hide();
				$('.'+$(this).attr("id")+'Div').show();

				$("#AOLP_galleryView, #AOLP_detailedView").removeClass('selected');
				$('#'+$(this).attr("id")).addClass('selected');

		});


		// bind the gallery reload on form submission
		$("div.AOLP_searchSingles input[type=button]").bind('click', function() {
			if(MatchFormValidationSEOHub($("div.AOLP_searchSingles")))
			{
				var superParent = $(this).parent().parent();
				city_singles.zip = superParent.find("#qsearch_near_zip").attr("value");
				city_singles.sgender = superParent.find("#qsearch_gender_is").attr("value");
				city_singles.gender = superParent.find("#qsearch_gender_wants").attr("value");
				city_singles.minage = superParent.find("#qsearch_minage").attr("value");
				city_singles.maxage = superParent.find("#qsearch_maxage").attr("value");
				city_singles.getProfilesMatch();
			}
		});
	}
};

// ----------------------------------------------------------------------
// ------------ Stop Script for Gallery Detailed View -------------------
// ----------------------------------------------------------------------

