var ajaxPageSize = 3;
var numResultsTotal = 0;
var pois = new Array();
var xStoreIds = new Array();
var distances = new Array();
var methods;


function initMapquest() {
	if ($('#showSmallMap').length) { $('.map').css({'hauteur':'154px', 'largeur':'473px'}); }
	$('div.map').each(function(index){
		if($(this).html() == '') { 
			var map = new MQA.TileMap(this,14,pois[index],'carte');
			var poi = new MQA.Poi(pois[index]);
			poi.setIcon(new MQA.Icon(imageDir + "http://www.lenscrafters.ca/images/lc_pin.png",35,45));
			map.addShape(poi);		
			if ($('#noZoom').length == 0) {	
				MQA.withModule('petit zoom', function() {
					map.addControl(
						new MQA.SmallZoom(),
						new MQA.MapCornerPlacement(MQA.MapCorner.TOP_LEFT, new MQA.Size(5,5))
						);
				});
			}
			
		}
	});
}

function initBrandModal() {

 	$('a[name=brandModal]').click(function(e) {
 		$($(this).attr('href')).dialog('ouvert');
 		return false;
	});
	
	$('.window').dialog({
		autoOpen: false,
		width: 520,
		resizable: false,
		draggable: false,
		open: function() {
			$('.service-exam .ui-widget-overlay').wrap('<div class="service-exam" />');
			$('.service-exam .ui-dialog-buttonpane button').each(function(){$(this).removeClass('ui-button-text-only').empty();});
		},
		close: function(){
			location='#';
		},
		modal: true,
		overlay: {
			backgroundColor: '#FFFFFF',
			opacity: 0.5
		}
	});
	
	$('.ui-dialog').parent(':not(.service-exam)').children('.ui-dialog').wrap('<div class="service-exam" />');
}

function clickMore(clicked, onCompleteCallback) {
	var numResults = $('.results .result').length;
	var xStoreIdsToSend = new Array();
	var distancesToSend = new Array();
	
	for(var i = numResults; i < numResults + ajaxPageSize && i < numResultsTotal; i++) {
		xStoreIdsToSend.push(xStoreIds[i]);
		distancesToSend.push(distances[i]);
	}
	
	var params = {
		storeId: $('input[name="storeId"]:first').val(),
		langId: $('input[name="langId"]:first').val(),
		xStoreIds: xStoreIdsToSend,
		distances: distancesToSend
	};
	
	$.get('/eyeglasses/StoreLocatorCmd', params, function(data) {
		$('.results').append(data);
		if(onCompleteCallback) {
			onCompleteCallback();
		}
		initMapquest();
		initBrandModal();
	});
	
	if(numResults + ajaxPageSize >= numResultsTotal) {
		$(clicked).hide();
		$(clicked).parent().css('padding-bottom', '0px');
		$('#no-more').show();
	}
	
	return false;
}

function populateModalStores(result) {

	$('.results').append(result);

	if($('#xStoreIds').length > 0) {
		var latitudes = $('#latitudes').val().split(',');
		var longitudes = $('#longitudes').val().split(',');
		for(var i = 0; i < latitudes.length; i++) {
			pois.push(new MQA.LatLng(latitudes[i], longitudes[i]));
		}
		
		//if first time ajax is called on this page, so we'll be getting ALL of the xStoreIds back
		if(xStoreIds.length == 0) {
			if($('#xStoreIds').val() != '') {
				xStoreIds = $('#xStoreIds').val().split(',');
				distances = $('#distances').val().split(',');
			}
			
			numResultsTotal = xStoreIds.length;
			
			if (numResultsTotal > 0) {
				s.linkTrackVars="\351v\351nements";
				s.eVar34=numResultsTotal;
				s.events='event40';
				$('.product-find-in-store').show(); 
				$('#success').show();
				$('#fail').hide();
				
				$(".modalContent.results").css({"hauteur" : "450px", "overflow-y" : "d\351filer"});
			}
			else {
				$('#success').hide();
				$('#fail').show();
				
				s.events='event41';
				s.eVar34="0";
				$(".modalContent.results").css({"hauteur" : "auto", "overflow-y" : "auto"});
				$(".inStoreNoResults input[name='postalCode']").val($('.findInStoreZipInput:first').val()).focus();
				$('.product-find-in-store').hide();
				
				$("#skuLocatorFormSubmit").click(function(){
					methods.doAjax(this, true);
				});
				
				$("#skuLocatorFormSubmit").siblings("input[name='postalCode']").keypress(function(e){
					if(e.which == 13) methods.doAjax($(this).siblings("#skuLocatorFormSubmit"), true);
				});
			}
		}
		
		initMapquest();
		initBrandModal();
	}
	
	//only display "More" button if there are, in fact, more stores to display
	$('.more-stores-modal').toggle(numResultsTotal > $('.results .result').length);
	$('#no-more').toggle($('.results .result').length == 0);
}

(function( $ ){ //Start jQuery Wrapper

//Start Method Array
methods = {
	init	: 	function(ajaxSubmission){
					that = this;
					var defaultPhrases = ['Veuillez saisir un terme de recherche', 'Entrez la ville et l\047\311tat ou le code postal', 'Ville, province ou code postal'];
					
					// assume ajax submisison if it is not specified
					if (ajaxSubmission === undefined){
						ajaxSubmission = true;
					}
					
					$(this).click(function(){
						var postalCode;
						if ($(this).siblings('.findInStoreInputBg').find("input[name='postalCode']").size() > 0)
							postalCode = $(this).siblings('.findInStoreInputBg').find("input[name='postalCode']").first();
						else
							postalCode = $(this).siblings("input[name='postalCode']").first();
					
						if($(postalCode).val() != "" && $.inArray($(postalCode).val(), defaultPhrases) == -1) {
							$(postalCode).css("couleur","noir");
														
							// perform a normal form submission if not using ajax
							if (ajaxSubmission){
								methods.doAjax(this);
							}else{
								return true;
							}
						} else {
							$(postalCode).css("couleur","orange").blur();
							if (!ajaxSubmission){
								return false;
							}
						}
							
					});
					$(this).siblings('.findInStoreInputBg').find("input[name='postalCode']").first().keypress(function(e){
						that = $(this).parent().siblings(".skuLocatorSubmit").get(0);
						if(e.which == 13){
							var postalCode = $(this).val();
							if(postalCode != "" && $.inArray(postalCode, defaultPhrases) == -1) {
								$(this).css("couleur","noir");
								
								if (ajaxSubmission){
									methods.doAjax(that);
								}else{
									return true;
								}
							} else {
								$(this).blur().css("couleur","orange");
								
								if (!ajaxSubmission){
									return false;
								}
							}
						}
					});
					$(this).siblings("input[name='postalCode']").keypress(function(e){
						that = $(this).siblings(".skuLocatorSubmit").get(0);
						if(e.which == 13){
							var postalCode = $(this).val();
							if(postalCode != "" && $.inArray(postalCode, defaultPhrases) == -1) {
								$(this).css("couleur","noir");
								
								if (ajaxSubmission){
									methods.doAjax(that);
								}else{
									return true;
								}
							} else {
								$(this).css("couleur","orange").blur();
								
								if (!ajaxSubmission){
									return false;
								}
							}
						}
					});

					if($.qString.val('isFail') != '') { //on failures, we want to keep that failed value
						$('#city_state_zip').val($.qString.val('postalCode'));
					}
					else if(getZipCodeCookieValue() != null && getZipCodeCookieValue() != "") {
						$("input[name='postalCode']:not(.do-not-populate)").val(getZipCodeCookieValue());
					}
					
				},
	doAjax	:	function(that, first){
					var sku, storeId, catalogId, postalTerm, destCountry, zipCode = null;
					map = "";
					$(that).siblings("input").each(function(index) {
						if(index !=0) map = map + "&";
						if($(this).attr("name")=="postalCode") {
							 zipCode = $(this).val();
						}
						if($(this).attr("name")=="sku") {
							 sku=$(this).val();
						}
						if($(this).attr("name")=="storeId") {
							storeId=$(this).val();
						}
						if($(this).attr("name")=="catalogId") {
							catalogId=$(this).val();
						}
						if($(this).attr("name")=="postalTerm") {
							postalTerm=$(this).val();
						}
						if($(this).attr("name")=="destCountry") {
							 country=$(this).val();
						}
						map = map + $(this).attr("name") + "=" + $(this).val();
					});
					if ($(that).siblings('.findInStoreInputBg').find("input[name='postalCode']").size() > 0) {
						zipCode = $(that).siblings('.findInStoreInputBg').find("input[name='postalCode']").first().val();
						map = map + "&postalCode=" + zipCode;					
					} 
					s.prop32= zipCode +  '-' + sku;
					s.eVar31 = s.prop32;
					s.prop11="brand site-store locator";
					s.prop12="brand site-store locator-prodlookup";
					s.events='event31';
					s.pageName='recherche de produit en magasin';
					
					
					
					$.get("http://french.lenscrafters.ca/webapp/wcs/stores/servlet/StoreLocatorCmd",
   						map,
    					function(data){
    					
    						if(first) {
    							$('.results').html('');
								numResultsTotal = 0;
								pois = new Array();
								xStoreIds = new Array();
								distances = new Array();
    						}
    					
    						populateModalStores(data);
	    					
	    					//add Omniture
	    					var axel = Math.random() + "";
							var a = axel * 10000000000000;

							if(country == "ca") {
								$("#findInStoreStarcom").html("<div style=\"display:none;\"><iframe src=\"http://fls.doubleclick.net/activityi;src=2558644;type=lensc790;cat=lc_fi343;ord=" + a + "?\" width=\"1\" height=\"1\" frameborder=\"0\"></iframe></div>");
							} else {
								$("#findInStoreStarcom").html("<div style=\"display:none;\"><iframe src=\"http://fls.doubleclick.net/activityi;src=2558490;type=lensc478;cat=lc_fi469;ord=" + a +  "?\" width=\"1\" height=\"1\" frameborder=\"0\"></iframe></div>");								
							}
	    					$(".btnStoreDetails").toggle(
  								function(e){
  									e.preventDefault();
  									$(this).closest("ul").siblings(".storeHours").slideDown("fast");
  									$(this).addClass("btnStoreDetails-open");
  								},function(e){
  									e.preventDefault();
  									$(this).closest("ul").siblings(".storeHours").slideUp("fast");
  									$(this).removeClass("btnStoreDetails-open");
  							});
  							
  							jQuery.fn.centerFindStore = function () {
							    this.css("position","absolu");
							    this.css("haut", "110px");
							    this.css("gauche", (($("#container").offset().left +105 + "px")) );
							    return this;
							}
							
							// populate the brand information
							var hiddenContainer = $('.product-info-' + sku);
							if (hiddenContainer.length > 0){
								var modalProduct = $('#findInStoreResults .product-find-in-store');
								modalProduct.find('.p-image').attr('src', hiddenContainer.find('.p-image').html());
								modalProduct.find('.p-image').attr('alt', hiddenContainer.find('.p-image-alt').html());
								modalProduct.find('.brand-image').attr('src', hiddenContainer.find('.p-brand-image').html());
								modalProduct.find('.number').html(hiddenContainer.find('.number').html());
								modalProduct.find('.sku').html(hiddenContainer.find('.sku').html());
								modalProduct.find('.prod-in-store-description').html(hiddenContainer.find('.prod-in-store-description').html());
							}

	    					if($("#findInStoreResults").css("display") != "block"){
	    						$(".btnPrint").attr("href","/eyeglasses/StoreLocatorCmd?langId=-1&storeId="+storeId+"&catalogId="+catalogId+"&navCategory=&pageName=StoreLocator&destCountry="+country+"&postalTerm="+postalTerm+"&units=mi&mqLocale="+country+"&sku="+sku+"&postalCode="+getZipCodeCookieValue()+"&print=on");
	    						//$("#findInStoreResults").center().after("<div id='modalBackground' style='opacity: 0.55;'>&nbsp;</div>").show();
	    						$("#findInStoreResults").centerFindStore().show();
	    						$("#card2_products_open").addClass("opacit\351")
	  							$("#closeFindResults").click(function(){
	  								$(".modalContent.results").css({"hauteur":"450px", "overflow-y":"d\351filer"});
	  								$("#card2_products_open").removeClass("opacit\351")
	  								//$("#modalBackground").remove();
	  								$("#findInStoreStarcom").html("");
	  								$('.product-find-in-store').show();
	  								$("#findInStoreResults").hide();
	  								$('.results').html('');
	  								numResultsTotal = 0;
									pois = new Array();
									xStoreIds = new Array();
									distances = new Array();
	  							});
	  							
	  							//omniture events for find-in-store pop-up
	  							s.events=s.events + "," + "event31";
								s.pageName="recherche de produit en magasin"
								
	  						} 
  						void(s.t());
  					});
  					
				}// End Methods
};// End Methed Array

// Start Method Fetch
$.fn.findInStore = function( method ) {
    if ( methods[method] ) {
      return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist in catalogNavigation' );
    }    
};//End Method Fetch


})(jQuery);//End jQuery Wrapper

$(document).ready(function() {
	
	numResultsTotal = xStoreIds.length;

	$('.more-stores').click(function() {
		clickMore(this, function() {
			$('.results').append();
			initMapquest();
			initBrandModal();
		});
		return false;
	});
	
	$('.more-stores-modal').click(function() {
		clickMore(this, populateModalStores);
		return false;
	});
	
	if($('#errors-to-display').length == 1) {
		var errorMsgContent = $.trim($('#errors-to-display').html());
		$('.errormsg').not('.countryMismatch').html(errorMsgContent).toggle(errorMsgContent != '');
		$('.errormsg').addClass('trouvermagasin');
		$('.error.zipcitystate').css('haut', '50px');
	}
	
	if($('#extra-errors-to-display').length == 1) {
		var errorMsgContent = $.trim($('#extra-errors-to-display').html());
		$('.countryMismatch .error').html(errorMsgContent);
		$('.countryMismatch').toggle(errorMsgContent != '');
	}
});

