//register events for click on the search button

$j( function () {    
		
				$j("#reset1").click(
		function(event) {
		$j("#street2").val("");
			$j("#city2").val("");
			$j("#zip2").val("");
			$j("#state2").val("Select a state");
			$j("#distance").val("50");
         $j("#county2").val("");
         $j("#name2").val("");
			return false;
		}
	);
			
			$j("#reset2").click(
		function(event) {
			$j("#name3").val("");
			$j("#street3").val("");
			$j("#zip3").val("");
			$j("#city3").val("");
			$j("#state3").val("Select a state");
			$j("#county3").val("");
			$j("#county-label3").html ("County");
			return false;
		}
	);
			
	
		  
	/*$j("#agencySearchForm").submit (
		function (e) {
			e.preventDefault ();
			agencyFind( $j("#agencyFind").text() ); 
			$j("div#displayMap").hide();
			$j("div#displaySearch").show(); 
			$j(".switch").show();
			$j("div#locForm").show(); //new
			$j("div#agencyForm").hide(); //new
			$j("div#outerBx").css({backgroundImage:"url(../images.2007/map/form_bground_le.png)"});
			$j("#agencySearchForm2").resetForm();
			$j("#locSearchForm").resetForm();
		} 
                
	);*/
	
	$j("#agencySearchForm2").submit (
		function (e) {			
			e.preventDefault ();
			$j("#street2").val("");
			$j("#city2").val("");
			$j("#zip2").val("");
			$j("#state2").val("Select a state");
			$j("#distance").val("50");
			agencyFind( $j("#agencyFind").text() ); 
			$j("div#displayMap").hide();
			$j("div#switch").show(); 
			$j("div#displaySearch").show(); 
			/*$j("#locSearchForm").resetForm();*/
			
		}                      
	)

	
	$j("#locSearchForm").submit (
		function (e) {
			e.preventDefault ();
			$j("#name3").val("");
			$j("#street3").val("");
			$j("#zip3").val("");
			$j("#city3").val("");
			$j("#state3").val("Select a state");
			var agencyLocZip = $j("#zip2").val();
			var agencyLocCity = $j("#city2").val();
			var agencyLocState = $j("#state2").val();			
			if (agencyLocZip != "" || agencyLocCity != "" && agencyLocState != "" || agencyLocState == "DC" || ($j("#state2").val() != "Select a state" && $j("#county2").val() != '')) {
			locationFind( $j("#locFind").text() ); 
			$j("div#displayMap").hide();
			$j("div#switch").show();
			$j("div#displaySearch").show(); 
			/*$j("#agencySearchForm2").resetForm();*/
			} else {
			alert("Please fill in city and state or zip code!")
			}
			
		}                      
	);
	

	
	$j("#state3").change (
		function (e) {
			changeCountyLabel (this.value); 			  
		}                      
	);


	
	$j(".switchtomap").click(
		function(event) {
			$j("#street2").val("");
			$j("#city2").val("");
			$j("#zip2").val("");
			$j("#state2").val("Select a state");
			$j("#distance").val("50");
			$j("#name3").val("");
			$j("#street3").val("");
			$j("#zip3").val("");
			$j("#city3").val("");
			$j("#state3").val("Select a state");
			$j("#county3").val("");
			$j("#county-label3").html ("County");
			$j("div#switch").hide();
			$j("div#displaySearch").hide();
			$j(".switch").hide(); 
			$j("div#displayMap").show();
			/*$j('#agencySearchForm2').resetForm();*/
			/*$j('#locSearchForm').resetForm();*/
			
		}
	);
});


//Check for empty array
function empty( mixed_var ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philippe Baumann
    // +      input by: Onno Marsman
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: LH
    // *     example 1: empty(null);
    // *     returns 1: true
    // *     example 2: empty(undefined);
    // *     returns 2: true
    // *     example 3: empty([]);
    // *     returns 3: true
    
    if (mixed_var === "" 
        || mixed_var === 0   
        || mixed_var === "0"
        || mixed_var === null  
        || mixed_var === false
        || mixed_var === undefined    
        || ((typeof mixed_var == 'array' || typeof mixed_var == 'object') && mixed_var.length === 0) ){
        return true;
    }
    
    return false;
}

//////// make an ajax call to fetch search results agency & people search
//////
////
//

var currentCountyLabel = "County"
function changeCountyLabel (state) {
	switch (state) {
		case "AK":
			$j("#county-label3").html ("Borough");
			return "Borough";
		case "LA":
			$j("#county-label3").html ("Parish");
			return "Parish";
		default:
			$j("#county-label3").html ("County");
			return "County";
	}
}


/* some variables to keep track of if this is a closest match instead of matching within the radius */
var locationSearch = false;
var closestMatch = false;

function agencyFind(params) {
   locationSearch = false;
   closestMatch = false;
	lastAffiliatesResults = [];
	$j('div#results1').html("<p align='center'><img src='/images/loader.gif' width='16' height='16'></p>");//Loading
	$j('div#results2').html("<p align='center'><img src='/images/loader.gif' width='16' height='16'></p>");//Loading
	
	var agencyName = $j("#name3").val();
	var agencyStreet = $j("#street3").val();
	var agencyCity = $j("#city3").val();
	var agencyState = $j("#state3").val();
	var agencyCounty = $j("#county3").val();
	var agencyZip = $j("#zip3").val();
	
	$j.getJSON(
		"/json/agencySearch?", //Gives us parsed JSON automatically
		{
			agencyName:agencyName, 
			address:agencyStreet, 
			city:agencyCity, 
			state:agencyState, 
			county:agencyCounty, 
			zip:agencyZip
		}, //The params for the query
		renderResults	//The callback function
	);
	
	var searchInput = "";
	if (agencyName != "") {
		searchInput += "<strong>Agency Name: </strong><span>" + agencyName + "</span>";
	}
	if (agencyCity != "") {
		if (searchInput != "") {
			searchInput += ", ";	
		}
		searchInput += "<strong>City: </strong><span>" + agencyCity + "</span>";
	}
	if (agencyState != "") {
		if (searchInput != "") {
			searchInput += ", ";	
		}
		var selIndex = $j("#state2").prop('selectedIndex');
		searchInput += "<strong>State: </strong><span>" + $j("#state3 option[value='selIndex']").text() + "</span>";
	}
	if (agencyCounty != "" && agencyState != "") {
		if (searchInput != "") {
			searchInput += ", ";	
		}
		searchInput += "<strong>" + changeCountyLabel (agencyState) + ": </strong><span>"+ agencyCounty +"</span>";
	}
	if (agencyZip != "") {
		if (searchInput != "") {
			searchInput += ", ";	
		}
		searchInput += "<strong>Zip: </strong><span>"+ agencyZip +"</span>";
	}
	searchInput = "<h2 style='display: inline;'>You searched for:&#xa0;&#xa0;</h2>" + searchInput;

	$j('div#searchInput').html(searchInput);
};

function locationFind(params) {
   locationSearch = true;
   closestMatch = false;
	lastAffiliatesResults = [];
	$j('div#results1').html("<p align='center'><img src='/images/loader.gif' width='16' height='16'></p>");//Loading
	$j('div#results2').html("<p align='center'><img src='/images/loader.gif' width='16' height='16'></p>");//Loading
	
	var agencyName = '';
	var agencyStreet = $j("#street2").val();
	var agencyCity = $j("#city2").val();
	var agencyState = $j("#state2").val();
	var agencyCounty = '';
	var agencyZip = $j("#zip2").val();
	var sRadius = $j("#distance").val();
	
	$j.getJSON(
		"/json/agencySearch?", //Gives us parsed JSON automatically
		{
         agencyName:agencyName,
			address:agencyStreet,
			city:agencyCity,
			state:agencyState,
         county:agencyCounty,
			zip:agencyZip,
			searchRadius:sRadius
		}, //The params for the query
		renderResults	//The callback function
	);
	
	var searchInput = "";
	
	if (agencyCity != "") {
		if (searchInput != "") {
			searchInput += ", ";	
		}
		searchInput += "<strong>City: </strong><span>" + agencyCity + "</span>";
	}
	if (agencyState != "") {
		if (searchInput != "") {
			searchInput += ", ";	
		}
		searchInput += "<strong>State: </strong><span>" + $j("#state2 option:selected").text() + "</span>";
	}
	
	if (agencyZip != "") {
		if (searchInput != "") {
			searchInput += ", ";	
		}
		searchInput += "<strong>Zip: </strong><span>"+ agencyZip +"</span>";
	}
	searchInput = "<h2 style='display: inline;'>You searched for:&#xa0;&#xa0;</h2>" + searchInput;

	$j('div#searchInput').html(searchInput);
};

//////// RENDER RESULTS FROM AJAX CALLS
//////
////
//

var popSearchResults = null;
var lastAffiliatesResults = null;
var lastAffiliatesResultsType = null;
var lastAgentsResults = null;
var lastAgentsResultsType = null;
var currentPage1 = 1;
var currentPage2 = 1;
var resultsInPage1 = 10;
var resultsInPage2 = 10;
var pagesInPager1 = 10;
var pagesInPager2 = 10;


function innerSortComparer (a, b, pname) {
	var aProp = (a[pname]) ? a[pname] : "";	
	var bProp = (b[pname]) ? b[pname] : "";	
	if (aProp > bProp) {
		return 1;
	}
	else if (aProp < bProp) {
		return -1;
	}
	else {
		return 0;
	}
}
function sortComparer (a, b) {
	var aName = (a.name) ? a.name : "";
	var bName = (b.name) ? b.name : "";
	if (aName > bName) {
		return 1;
	}
	else if (aName < bName) {
		return -1;
	}
	else {
		var r = innerSortComparer (a, b, "districtContact");
		if (r != 0) {
			return r;	
		}
		r = innerSortComparer (a, b, "title");
		if (r != 0) {
			return r;	
		}
		r = innerSortComparer (a, b, "state");
		if (r != 0) {
			return r;	
		}
		r = innerSortComparer (a, b, "city");
		if (r != 0) {
			return r;	
		}
		r = innerSortComparer (a, b, "zip");
		if (r != 0) {
			return r;	
		}
		return 0;
	};
}

function renderText (field) {
	return (field === undefined) ? "" : field;	
}

function renderPager (currentPage, results, id) {
	window["currentPage" + id] = currentPage;
	var resultsInPage = window["resultsInPage" + id];
	var pagesInPager = window["pagesInPager" + id];
	var colId = "col" + id;
	
	var resultCount = results.length;
	var pageCount = Math.floor(resultCount/resultsInPage) + ((resultCount%resultsInPage > 0) ? 1 : 0);
	window["currentPage" + id] = parseInt (window["currentPage" + id], 10);
	var startNum = ((window["currentPage" + id] - 1)*resultsInPage) + 1;
	var endNum = startNum + resultsInPage - 1;
	if (endNum < resultCount) {
		$j("#searchStats" + id).html ("Showing " + startNum + "-" + endNum + " out of " + resultCount).show ();
	}
	else {
		$j("#searchStats" + id).html ("Showing " + startNum + "-" + resultCount + " out of " + resultCount).show ();
	}
	var lastPageInPager = window["currentPage" + id] + pagesInPager - 1;
	lastPageInPager = (lastPageInPager > pageCount) ? pageCount + 1 : lastPageInPager;
	var startPage = lastPageInPager - pagesInPager;
	startPage = (startPage < 1) ? 1 : startPage;
	
	var pagesHtml = "";
	for (var i=startPage; i<lastPageInPager; ++i) {
		pagesHtml += '<a href="#page=' + i + '" ';	
		if (i == startPage) {
			pagesHtml += ' style="border: 0px none;"';	
		}
		pagesHtml += ' class="page">' + i + '</a>';	
	}
	$j("#" + colId + " .pagination").show ().find (".pagerPages").html (pagesHtml);
	if (window["currentPage" + id] == 1) {
		$j("#" + colId + " .pagination .firstPage").hide ();
		$j("#" + colId + " .pagination .prevPage").hide ();
	}
	else {
		$j("#" + colId + " .pagination .firstPage").show ().attr ("href", "#page=1");
		$j("#" + colId + " .pagination .prevPage").show ().attr ("href", "#page=" + (window["currentPage" + id] - 1));
	}
	if (window["currentPage" + id] == pageCount) {
		$j("#" + colId + " .pagination .nextPage").hide ();
		$j("#" + colId + " .pagination .lastPage").hide ();
	}
	else {
		$j("#" + colId + " .pagination .nextPage").show ().attr ("href", "#page=" + (window["currentPage" + id] + 1));
		$j("#" + colId + " .pagination .lastPage").show ().attr ("href", "#page=" + pageCount);
	}
	
	$j("#" + colId + " .pagerPages").html ("");
	$j("#" + colId + " .pagerPages").html (pagesHtml).show ();
}

function renderResult (n, results, id) {
	var currentPage = window["currentPage" + id];
	var resultsInPage = window["resultsInPage" + id];
	renderPager (n, results, id);
	
	var resultString = "<div class='results'>";
	for (var i = ((n-1) * resultsInPage), c = (i + resultsInPage); i < c; ++i)
	{
		var currMatch = results[i];
		if (currMatch) {
			resultString +="<div class='result'>";
			if (!currMatch.referral) {
				resultString +="	<div class='row first'>";
				resultString +="		<div class='label'>Agency: </div>";
				resultString +="		<div class='agency value'>"+ renderText (currMatch.name) + "</div>";
				resultString +="	</div>";
			}
			else {
				resultString +="	<div class='row first'>";
				resultString +="		<div class='label'>Name:</div>";
				resultString +="		<div class='name value'>"+ renderText (currMatch.name) + "</div>";
				resultString +="	</div>";
			}
				
				
				if (currMatch.street || currMatch.city || currMatch.state || currMatch.zip) {
				resultString +="	<div class='row'>";
				resultString +="		<div class='label'>Address: </div>";
				resultString +="		<div class='address value'>";
				resultString +="			<div class='addr_line1'>"+ renderText (currMatch.street) +"</div>";
				resultString +="			<div class='addr_line1'>"+ renderText (currMatch.street2) +"</div>";
				resultString +="			<div class='city_state_zip'>";
				resultString +="				<span class='city'>"+ renderText (currMatch.city) +"</span>";
				resultString +="				<span class='state'>"+ renderText (currMatch.state) +"</span>";
				resultString +="				<span class='zip'>"+ renderText (currMatch.zip) +"</span>";
				resultString +="			</div>";
				resultString +="		</div>";
				resultString +="	</div>";
				}
				
				if (currMatch.phone){
				resultString +="	<div class='row'>";
				resultString +="	<div class='label'>Phone:</div>";
				resultString +="     	<div class='phone value'>"+currMatch.phone+"</div>";
				resultString +="	</div>";
				}	
				
				
				if (currMatch.fax){
				resultString +="	<div class='row'>";
				resultString +="	<div class='label'>Fax:</div>";
				resultString +="     	<div class='phone value'>"+currMatch.fax+"</div>";
				resultString +="	</div>";
				}
				
				if (!currMatch.referral && currMatch.officeContacts != ""){
				resultString +="	<div class='row'>";
				resultString +="	<div class='label'>Office Contacts:</div>";
				resultString +="    <div class='phone value'>"+currMatch.officeContacts.join(", ")+"</div>";
				resultString +="	</div>";
				}
			
			if (!currMatch.referral && currMatch.districtContact != ""){ 
			resultString +="	<div class='row'>";
				resultString +="		<div class='label'>Agency Services Manager: </div>";
				resultString +="		<div class='name value'>"+ renderText (currMatch.districtContact) + "</div>";
				resultString +="	</div>";
		}
				
			if (currMatch.radius){
				
				resultString +="	<div class='distance'>"+ Math.round(currMatch.radius*100)/100 + " miles</div>";
            if (locationSearch && currMatch.radius > $j("#distance").val()) {
               closestMatch = true;
            }
			}
			
			resultString +="	<div class='details'>";
			if (currMatch.latitude) {
				resultString +="	<a href='#map=" + i + "' class='mapIt'><img src='/images/buttons/map_bttn.png'/></a>";
			}		
			
			
			if (currMatch.url) {
				currMatch.url = (currMatch.url.indexOf ("http") < 0) ? "http://" + currMatch.url : currMatch.url;
				resultString +="	<a href="+currMatch.url+" target='_blank' class='viewSite'><img src='/images/buttons/view_site_buttn.png'/></a>";
			}
			resultString +="	</div>";
			resultString +="</div>";
		}
	}	
	resultString += "</div>";
	window["currentPage" + id] = n;
	return resultString;
}

function renderResults (response)
{
	if(response) //Do we have a valid response?
	{		
		var resultString = "<div class='results'>";
		
		// set just affiliates and independents to a variable (i.e. a or b) response.searchResult.allVariable.length;
		var affiliates = response.searchResult.affiliates;
		var independents = response.searchResult.independents;
		for (var i=0, c=independents.length; i<c; ++i) {
			independents[i].independent = "true";
		}
		var referrals = response.searchResult.referrals;
		for (var i=0, c=referrals.length; i<c; ++i) {
			referrals[i].referral = "true";
		}
		//var agencies = affiliates.concat (independents);
		var agents = independents.concat (referrals);
		//agents = agents.sort(sortComparer);

		lastAffiliatesResults = affiliates;
		lastAffiliatesResultsType = "Agency";
		if (empty(affiliates)) {
			$j('div#results1').html("<p align='center'><font color ='red'>Your search returned 0 results.</font></p>");
			$j("#searchStats1").hide ();
			$j("#topPagerContainer1").hide ();
			$j("#bottomPagerContainer1").hide ();
		} 
		else {
			$j('div#results1').html(renderResult (1, affiliates, "1"));
			$j("#searchStats1").show ();
			$j("#topPagerContainer1").show ();
			$j("#bottomPagerContainer1").show ();
		}
		
		lastAgentsResults = agents;
		lastAgentsResultsType = "Agency";
		if (empty(agents)) {
			$j('div#results2').html("<p align='center'><font color ='red'>Your search returned 0 results.</font></p>");
			$j("#searchStats2").hide ();
			$j("#topPagerContainer2").hide ();
			$j("#bottomPagerContainer2").hide ();
		} 
		else {
			$j('div#results2').html(renderResult (1, agents, "2"));
			$j("#searchStats2").show ();
			$j("#topPagerContainer2").show ();
			$j("#bottomPagerContainer2").show ();
		}
		if (closestMatch) {
			$j('div#searchInput').html("<p align='center'><font color = 'red'>No issuing offices were found within the search criteria provided. We have provided the closest office to the specified area.</font></p>");
		}
	}
	else	//We have an error, give some feedback
	{
		lastAffiliatesResults = [];
		$j('div#results1').html("<font color = 'red'>Error: Fetch of Data Failed!</font>");
		$j("#searchStats1").hide ();
		$j("#topPagerContainer1").hide ();
		$j("#bottomPagerContainer1").hide ();
		
		lastAgentsResults = [];
		$j('div#results2').html("<font color = 'red'>Error: Fetch of Data Failed!</font>");
		$j("#searchStats2").hide ();
		$j("#topPagerContainer2").hide ();
		$j("#bottomPagerContainer2").hide ();
	}
	
	var totalNum1 = "<div>"+ lastAffiliatesResults.length +" Results</div>"
	$j('div#totalNum1').html(totalNum1);
	
	var totalNum2 = "<div>"+ lastAgentsResults.length +" Results</div>"
	$j('div#totalNum2').html(totalNum2);
};

// render results from the AJAX call in a table
//
var popMapWin = null;
var popMapIndex = -1;
function PagerClick (e, id) {
	var target = e;
	if(e.context.nodeName == "IMG"){
		var target = e.parent();
	}
	if (target) {
		if (target.hasClass('mapIt')) {
			var mapNum = target.attr("href").split ("#map=")[1];
			popMapIndex = mapNum;
			if (popMapWin != null && popMapWin.closed == false) {
				popMapWin.close ();
			}
			popMapWin = window.open ("popMap.jsp", "PopMap", ["width=500,height=400,scrollbars=0,toolbar=0,status=1,resizable=0"]);
			popMapWin.focus ();
		}
		else if (target.hasClass('page')) {
			var pageNum = target.attr("href").split ("#page=")[1];
			if (id == "1") {
				$j('div#results1').html(renderResult (pageNum, lastAffiliatesResults, "1"));
			}
			else if (id == "2") {
				$j('div#results2').html(renderResult (pageNum, lastAgentsResults, "2"));
			}
		}
		else if (target.hasClass('viewSite')) {
			window.open (target.attr("href"));
		}
	}
}

function PagerRightClick (e) {
	popSearchResults = lastAgentsResults;
	PagerClick (e, "2");
}
function PagerLeftClick (e) {
	popSearchResults = lastAffiliatesResults;
	PagerClick (e, "1");
}

$j(document).ready(function() {
	if(document.URL.indexOf("interactivemaps")!= -1){
			$j("#street2").val("");
			$j("#city2").val("");
			$j("#zip2").val("");
			$j("#state2").val("Select a state");
			$j("#distance").val("50");
			$j("#name3").val("");
			$j("#street3").val("");
			$j("#zip3").val("");
			$j("#city3").val("");
			$j("#state3").val("Select a state");
			$j("#county3").val("");
			$j("#county-label3").html ("County");
			
		if ($j("div#displaySearch")) {
			$j("div#displaySearch").hide(); 
			$j("div#switch").hide(); 
		}
		if ($j("#col2")) {
			$j("#col2").find("a").live('click',function(event) {
				event.preventDefault();
				PagerRightClick($j(event.target));
			});
		}
		if ($j("#col1")) {
			$j("#col1").find("a").live('click',function(event) {
				event.preventDefault();
				PagerLeftClick($j(event.target));
			});
		}
	}
});


