﻿$(document).ready(function() {
	
	sizeInsuranceServicesContent();
	sizeInsuranceServicesSidebar();
	
	bindZipCodeControlEvents('#inssrvcsb_go', '#inssrvcsb_zip_code');
	bindFranchiseOkClickEvent('#inssrvcsb_franchise_ok');
	
	if(/.*\/InsuranceServices\/Locations\/.*\.aspx/i.test(window.document.location)){
		getFranchiseInfoFromRedirectedUrl();
	} else {
		var zipCode = $.cookie(SESSION_GUID, 'inssvc_zip_code');
		zipCode = zipCode || $.cookie(SESSION_GUID, 'zip_code');
		zipCode = zipCode || $('#inssrvcsb_zip_code').val();
		
		if(zipCode !== null && zipCode.length > 0){
			$('.inssrvcsb_zip_code').val(zipCode);
			getTerritoryFromZip(zipCode);
		} else {
			 showZipCodeDialog();
		} 
	}
});

function sizeInsuranceServicesContent(){
	//630 is what is used for the comm_content css
	if($('.landing_content_container').height() != 630) {
		$('.landing_content_container').height(630);
	}
}

function sizeInsuranceServicesSidebar(){
	var commContentTop = 0; 
	var commContentHeight = 0;
	
	if($('#comm_content').length > 0){
		commContentTop = $('#comm_content').position().top;
		commContentHeight = $('#comm_content').height();
	} else if($('#main_content').length > 0){
		commContentTop = $('#main_content').position().top;
		commContentHeight = $('#main_content').height();
	}
	
	if(commContentHeight === 0){
		return;
	}
	
	var zipContentTop = $('#insurance_services_zip_code').position().top;
	var topOffset = zipContentTop - commContentTop;
	var zipContentNewHeight = commContentHeight - topOffset;
	$('#insurance_services_zip_code').height(zipContentNewHeight);
}

function bindZipCodeControlEvents(goButtonId, zipCodeInputId){
	$(goButtonId).click(function(){
		var zipCode = $(zipCodeInputId).val();
		if((/.*InsuranceServices.aspx/.test(document.location))){
			if(zipCode.length === 5){
				getTerritoryFromZip(zipCode);
			}
		} else {
			$.cookie(SESSION_GUID, 'inssvc_zip_code', zipCode)
			document.location = '/Home/InsuranceServices.aspx';
		}
	})
	
	$(zipCodeInputId).keydown(function(event) {
		if (event.keyCode == 13) {
			$(goButtonId).click();
			return false;
		}
	});
}

function bindFranchiseOkClickEvent(controlId){
	$(controlId).bind('click', insuranceServicesfranchiseOkClick);
}

function showZipCodeDialog(){
	bindZipCodeControlEvents('#inssrvcsb_dialog_go', '#inssrvcsb_dialog_zip_code');
	bindFranchiseOkClickEvent('#inssrvcsb_dialog_franchise_ok');
	
	$('#close_insurance_dialog').bind('click', hideZipCodeDialog);
	
	$('#inssrvcsb_dialog_why_zip').bind('click', function(){
		if($('#inssrvcsb_dialog_why_zip_info').css('display') === 'none'){
			$('#inssrvcsb_dialog_why_zip_info').slideDown('fast');
		} else {
			$('#inssrvcsb_dialog_why_zip_info').slideUp('fast');
		}
	});
	
	$('#inssrvcsb_dialog_contents').dialog({
		modal: true,
		resizable: false,
		minHeight: 100
	});
}

function hideZipCodeDialog(){
	$('#inssrvcsb_dialog_contents').dialog("destroy");
}

function getFranchiseInfoFromRedirectedUrl(){
	var insuranceUrl = JSON.stringify({ url: window.document.location.pathname });
	
	$.ajax({
		url: '/Service.asmx/GetOperationByInsuranceUrl',
		type: 'POST',
		datatype: 'json',
		timeout: 10000,
		async: false,
		data: insuranceUrl,
		contentType: 'application/json; charset=utf-8',
		success: function(result) {
			var operation = JSON.parse(result);
			if(operation.OperationID === 0){
				displayNoFranchiseInfoMessage();
			} else {
				$.cookie(SESSION_GUID, 'inssvc_zip_code', operation.Zip)
				$('#inssrvcsb_zip_code').val(operation.Zip);
				
				setPageForFranchise(operation);
			}
		},
		error: showErrorMessage
	});
}

function getTerritoryFromZip(zipCode){
	hideMultipleFranchiseSelectionContainer()
	$('.inssrvcsb_wait').show();
	
	var territory_request = JSON.stringify({ ZipCode: zipCode });
	
	$.ajax({
		url: '/Service.asmx/GetTerritoryByZip',
		type: 'POST',
		datatype: 'json',
		timeout: 10000,
		async: false,
		data: territory_request,
		contentType: 'application/json; charset=utf-8',
		success: function(results) {
			
			$.cookie(SESSION_GUID, 'inssvc_zip_code', zipCode)
			$('#inssrvcsb_zip_code').val(zipCode);
			
			var franchises = JSON.parse(results);
			if(franchises.length === 0){
				displayNoFranchiseInfoMessage();
			} else if(franchises.length === 1){
				getFranchiseInfo(franchises[0]);
			} else {
				handleMultipleFranchises(franchises);
			}
		},
		error: showErrorMessage
	});
}

function getFranchiseInfo(franchise){
	$.cookie(SESSION_GUID, 'inssrvcsb_territoryID', franchise.TerritoryID)
	
	$.ajax({
		url: '/Service.asmx/GetOperationByTerritory',
		type: 'POST',
		datatype: 'json',
		async: false,
		data: JSON.stringify({ Territory: franchise }),
		contentType: 'application/json; charset=utf-8',
		success: function(results) {
			
			hideZipCodeDialog();
			
			var operationInfo = JSON.parse(results);
			if(operationInfo === undefined || operationInfo == null){
				displayNoFranchiseInfoMessage()
			} else {
				$.cookie(SESSION_GUID, 'inssrvcsb_operationID', operationInfo.OperationID)
				setPageForFranchise(operationInfo);
			}
		},
		error: showErrorMessage
	});
}

function handleMultipleFranchises(franchises){
	var currentTerritoryID = $.cookie(SESSION_GUID, 'inssrvcsb_territoryID') || $.cookie(SESSION_GUID, 'territoryID');
	var currentOperationID = $.cookie(SESSION_GUID, 'inssrvcsb_operationID') ||  $.cookie(SESSION_GUID, 'operationID');
	
	if(currentTerritoryID !== null && currentOperationID !== null){
		for(var index = 0; index < franchises.length; index++){
			if(franchises[index].OperationID.toString() === currentOperationID){
				getFranchiseInfo(franchises[index]);
				return;
			}		
		} 
	}	
	buildMultipleFranchiseSelectionContainer(franchises);
}

function buildMultipleFranchiseSelectionContainer(franchises){
	var franchiseListID = getFranchiseListControlId();
	var franchiseSelectionID = getFranchiseSelectionControlId();
	
	for (var i = 0; i < franchises.length; i++) {				
		/*
			PARSE FORMAT
			City_County_OperationID_State_TerritoryDescription_TerritoryID_Zip_ZoneCode___type
			spaces in names will be replaced with '-'
		*/	
		var id = franchises[i].City + "_" + franchises[i].County + "_" + franchises[i].OperationID + "_" + franchises[i].State + "_" + franchises[i].TerritoryDescription + "_" + franchises[i].TerritoryID + "_" + franchises[i].Zip + "_" + franchises[i].ZoneCode + "_" + franchises[i].__type;	  
		id = id.replace(/ /g, "-");	
		
		$(franchiseListID ).append('<div class="franchise">' + '<input type="radio" class="franchise_select" name="franchise" id="' + id + '"/>' + '<span class="franchise_location">' + franchises[i].City + ', ' + franchises[i].State + ' ' + franchises[i].Zip + '</span><br />' + '<span class="franchise_description">' + franchises[i].TerritoryDescription + '</span>' + '</div>');
	}	
	$(franchiseSelectionID).slideDown('fast')	
	$('#inssrvcsb_search_results').empty();
	$('.inssrvcsb_wait').hide();
}

function insuranceServicesfranchiseOkClick() {
	var id = $('.franchise_select:checked').attr('id');
	
	if(id === undefined){
		return false;
	}
	
	hideMultipleFranchiseSelectionContainer()
	var id = id.replace(/-/g, ' ');
	var data = id.split('_');
	
	/*
		PARSE FORMAT
		City_County_OperationID_State_TerritoryDescription_TerritoryID_Zip_ZoneCode___type
		spaces in names will be replaced with '-'
	*/
	
	//assemble object from the radio buttons id
	var franchise = {
		City: data[0],
		County: data[1],
		OperationID: parseInt(data[2], 10),
		State: data[3],
		TerritoryDescription: data[4],
		TerritoryID: parseInt(data[5], 10),
		Zip: data[6],
		ZoneCode: data[7],
		__type: data[8]
	}	
	getFranchiseInfo(franchise);
}

function getFranchiseSelectionControlId(){
	return $('#inssrvcsb_dialog_contents').dialog("isOpen") ? '#inssrvcsb_dialog_franchise_selection' : '#inssrvcsb_franchise_selection';	 
}

function getFranchiseListControlId(){
	return $('#inssrvcsb_dialog_contents').dialog("isOpen") ? '#inssrvcsb_dialog_franchise_list' : '#inssrvcsb_franchise_list';
}

function hideMultipleFranchiseSelectionContainer(){
	var franchiseListID = getFranchiseListControlId();
	var franchiseSelectionID = getFranchiseSelectionControlId();
	
	$(franchiseSelectionID).slideUp();
	$(franchiseListID).empty();
}

function setPageForFranchise(operationInfo) {

    if (operationInfo.DoesMold) {
        setSidebarLinkVisibility('inssrv_water_damage_item', false);
        setSidebarLinkVisibility('inssrv_water_mold_damage_item', true);
    } else if (operationInfo.DoesWater) {
        setSidebarLinkVisibility('inssrv_water_damage_item', true);
        setSidebarLinkVisibility('inssrv_water_mold_damage_item', false);
    } else {
        setSidebarLinkVisibility('inssrv_water_damage_item', false);
        setSidebarLinkVisibility('inssrv_water_mold_damage_item', false);
    }
    
    setSidebarLinkVisibility('inssrv_water_checklist_item', operationInfo.DoesWater || operationInfo.DoesMold || false);
    setSidebarLinkVisibility('inssrv_fire_damage_item', operationInfo.DoesFireSmoke || false);
    setSidebarLinkVisibility('inssrv_fire_checklist_item', operationInfo.DoesFireSmoke || false);

	if (operationInfo.NewsPageUrl != null && operationInfo.NewsPageUrl.length > 0) {
	    setSidebarLinkVisibility('inssrv_news_item', true);
	    $('#inssrv_news_link').attr('href', operationInfo.NewsPageUrl);
	} else {
	    setSidebarLinkVisibility('inssrv_news_item', false);
	}
		
	setFranchiseAddress(operationInfo);
}

function hideSidebarLinks(){
    setSidebarLinkVisibility('inssrv_water_damage_item', false)
    setSidebarLinkVisibility('inssrv_water_mold_damage_item', false)
	setSidebarLinkVisibility('inssrv_water_checklist_item', false)
	setSidebarLinkVisibility('inssrv_fire_damage_item', false)
	setSidebarLinkVisibility('inssrv_fire_checklist_item', false)
	setSidebarLinkVisibility('inssrv_news_item', false)
}

function setSidebarLinkVisibility(linkId, isVisible){
	if(isVisible){
		$('#' + linkId).show();
	} else {
		$('#' + linkId).hide();
	}
}

function setFranchiseAddress(operationInfo){
	var address = common.formatAddress(operationInfo);
	showMessageInSearchResults(address);
}

function displayNoFranchiseInfoMessage(){
	hideSidebarLinks();
	showMessageInSearchResults("<div>Please call 1-800-STEEMER to speak directly to your local Stanley Steemer Customer Service Representative.</div>");
}

function showErrorMessage(err) {
	hideSidebarLinks();
	showMessageInSearchResults("<div><span class='red'>We're sorry, there was an error looking up your zip code.  Please try again.</span></div>");
}

function showMessageInSearchResults(message)
{
	hideZipCodeDialog();
	$('#inssrvcsb_search_results').empty();
	$('.inssrvcsb_wait').hide();
	$('#inssrvcsb_search_results').append(message);
	$('#inssrvcsb_search_results').fadeIn('slow');
}