var tmp=0;

Array.prototype.indexOf = function (s) {
    var index = -1;
    for (var i in this) {
        if (this[i] == s) {
            index = i;
        }
    }
    index = (isNaN(index)) ? index : Number(index);
    return index;
}

String.prototype.trim = function() {
 // skip leading and trailing whitespace
 // and return everything in between
  var x=this;
  x=x.replace(/^\s*(.*)/, "$1");
  x=x.replace(/(.*?)\s*$/, "$1");
  return x;
}


function setupKeyListeners()
{
	Event.stopObserving(document.body, 'click');
	Event.stopObserving(document.body, 'keyup');
	
	Event.observe(document.body, 'click', function(event) {
  		var element = Event.element(event);
		if (element.tagName.toLowerCase() == 'input' && element.readAttribute('type').toLowerCase() == 'text')
		{
			setObserver(element);
		}
		
		var tagName = element.tagName.toLowerCase()
		if (tagName == 'a' || 
			(tagName == 'span' && (element.parentNode.tagName.toLowerCase() == 'a' || element.parentNode.parentNode.tagName.toLowerCase() == 'a')) || 
			(tagName == 'img' && element.parentNode.tagName.toLowerCase() == 'a'))
		{
			element.blur();
		}
		
		if (element.tagName.toLowerCase() == 'input' && element.readAttribute('type').toLowerCase() == 'checkbox')
		{
			if(element.checked == true)
			{
				var linkPos = oCountryFilters[element.readAttribute('id')];
				if(!linkPos || linkPos.length < 1)
				{
					linkPos = element.readAttribute('id');		
				}
				hitboxLink("SFSearchFilter", linkPos);
			}
		}		
	});
	
	Event.observe(document.body, 'keyup', function(event) {											 
  		var element = Event.element(event);
		if (element.tagName.toLowerCase() == 'input' && element.readAttribute('type').toLowerCase() == 'text' && element.readAttribute('id') != "routeSearchAddress")
		{
			if (event && event.keyCode == 13)
			{
				checkRequiredFields();
			}		
		}
		if (element.readAttribute('id') == "routeSearchAddress")
		{
			if (event && event.keyCode == 13)
			{
				searchRoute();
			}		
		}		
	});
}

function checkRequiredFields()
{
	showSperre(true);
	
	var doSubmit = true;
	if ($('countryList')) {
		$('countryList').removeClassName('required');
	}
	if ($('city')){
		$('city').removeClassName('required');
	}

	var reqField = $('countryList');
	if (reqField && (!reqField.value || reqField.value.length == 0 || reqField.value == 'none')) {
		$('countryList').addClassName('required');
		doSubmit = false;
	}
	
	reqField = $('stateList');
	if (reqField) {
		reqField.removeClassName('required');
		if (iStateSelectorMandatory == 1 && (!reqField.value || reqField.value.length == 0 || reqField.value == 'none')) {
			reqField.addClassName('required');
			doSubmit = false;		
		}
	}

	reqField = $('city');
	if (reqField && (!reqField.value || reqField.value.length == 0 || reqField.value == 'none' || reqField.value == labels["city"] || reqField.value == labels["quicksearchAddress"])) {
		$('city').addClassName('required');
		doSubmit = false;
	}
	if (doSubmit==true) {
		bRefinedSearch = false;
		isAllMiadidasStores = 0;
		isAllOnlineStores = 0;
		$('countryList').removeClassName('required');
		$('city').removeClassName('required');
		//showError(false, false);
		performSearch();
	}
	else
	{
		showError(true, messages["errorRequired"]);
		showSperre(false);
	}
}


function showError(pbStatus, sErrorLabel)
{
	var container = $('search-tab-content');
	if(container)
	{
		if($('errorMsg'))
		{
			container.removeChild($('errorMsg'));
		}
		
		if (pbStatus)
		{
			var error = new Element('div', {id:'errorMsg'}).update(sErrorLabel);
			container.insertBefore(error, container.firstChild);
		}
	}
}


function openPrintPage(psTarget)
{
	hitboxLink("SFPrintButton", psTarget);
	var pWin = window.open( "printPage.asp?action="+psTarget+"&strCountry_adidascom="+store_locator_country+"&strLanguage_adidascom="+store_locator_language+"&countryCode="+countryCode, "PrintPage", "width=700,height=500,left=50,top=50,scrollbars=yes" );
		pWin.focus();
}


function openExternalSl(url, width, height)
{
	var leftStart = (getWindowWidth()-width)/2;
	var topStart = (getWindowHeight()-height)/2;
	var eWin = window.open( url, "externalSl", "width="+width+",height="+height+",left="+leftStart+",top="+topStart+",scrollbars=yes,menubar=no,status=no" );
}


function getWindowWidth() 
{
	var windowWidth = 0;

	if (parseInt(navigator.appVersion)>3) 
	{
		 windowWidth = screen.width;
	} 
	else if (navigator.appName == "Netscape" && parseInt(navigator.appVersion)==3 && navigator.javaEnabled()) 
	{
 		var jToolkit = java.awt.Toolkit.getDefaultToolkit();
 		var jScreenSize = jToolkit.getScreenSize();
 		windowWidth = jScreenSize.width;
	}
	return windowWidth;
}


function getWindowHeight() 
{
	var windowHeight = 0;
	if (parseInt(navigator.appVersion)>3) 
	{
		windowHeight = screen.height;
	} else if (navigator.appName == "Netscape" 
    			&& parseInt(navigator.appVersion)==3
			    && navigator.javaEnabled()) 
	{
 		var jToolkit = java.awt.Toolkit.getDefaultToolkit();
 		var jScreenSize = jToolkit.getScreenSize();
 		windowHeight = jScreenSize.height;
	}
	return windowHeight;
}


function cleanUpForm()
{
	if ($('MultipleMatchesContainer')) {
		$('MultipleMatchesContainer').removeClassName('active');
		$('MultipleMatchesContainer').addClassName('inactive');	
		$('MultipleMatchesContainer').innerHTML = "";
	}
	showError(false, false);
}


function changeCountry(country, pbDiasableOverlay)
{
	if (country) {
		$('countryList').value = country;
	}
	//showSperre(true);
	if(!pbDiasableOverlay) {
		showOverlay(1);
	}
	cleanUpForm();
	$('countryList').removeClassName('required');
	resetContainer($('filterContainer'));
	resetContainer($('distanceContainer'));
	resetContainer($('external'));
	checkCountryType(country);
}

function changeState() {
	if ($("stateList")) {
		var state = $F("stateList");
		if(state != labels["pleaseSelect"] && state.length > 0) {
			setupCitySearch();
		} else {
			if (iStateSelectorMandatory == 1) {
				if ($('citiesContainer')){
					restoreSpecialContent('citiesContainer', '');
				}
			}
		}
	}
}


// checks if the selected country has a city list or not
function checkCountryType(country)
{
	sLastCountryCode = countryCode;
	countryCode = !country ? $F('countryList') : country;
	
	var url = 'service.asp';
	var ajax = new Ajax.Request
				(
					url,
					{
						method: 'get', 
						parameters: 
						{ 
							store_locator_country: store_locator_country, 
							store_locator_language: store_locator_language, 
							store_locator_brand: store_locator_brand,
							cmd: 'getCountryData', 
							countryCode: countryCode,
							searchType: searchType,
							formerCountryCode: sLastCountryCode,
							slfilter: sSlFilter
							//slfilter: (sSlFilter.split(',').concat(aPresetStaticFilter[store_locator_brand])).join(',')
						}, 
						onSuccess: performCountryChange, 
						onFailure: reportError
					}
				);
}


// callback for the checkCountryType()
function performCountryChange(response)
{
	if (checkPageReload('')) {
		var data = getJsonData(response.responseText);
		disableFormElements(false);
		countryType = (parseInt(data.isMultiMap) == 1) ? 1 : 0;
		bMap2Mobile = (parseInt(data.isMap2Mobile) == 1) ? true : false;
		iRouteType = parseInt(data.routeType);
		restoreSpecialContent('stateContainer', data.stateSelector);
		iStateSelectorMandatory =  parseInt(data.stateSelectorMandatory);
		eval(data.js);
		
		if (countryType == 0 && parseInt(data.external) == 0) {
			//oCountryFilters = {};
			if ($("stateList") && iStateSelectorMandatory == 1) {
				if ($('citiesContainer')){
					restoreSpecialContent('citiesContainer', '');
				}
				if (bInitApplication) {
					showOverlay(-1);
				} else {
					showOverlay(0);
				}
			} else {	
				setupCitySearch();
			}
			if (searchType == "advancedsearch") {
				restoreSpecialContent('filterContainer', data.filter);
			}		
		} else {
			//alert('else')
			var sLabel = (searchType == "quicksearch") ? labels["quicksearchAddress"] : labels["city"];
			if ($('city')){
				sLabel = $F('city');
			}
			if ($('citiesContainer')){
				$('citiesContainer').update(new Element('input', {type:'text', tabindex:"3", size:"30", value:sLabel, name:"city", id:"city"}).addClassName("input-text"));
				$("citiesContainer").removeClassName("inactive");
				$("citiesContainer").addClassName("active");
			}
	
			if (data.external.length > 1){
				disableFormElements(true);
				restoreSpecialContent('external', data.external);
			} else {
				if(searchType == "advancedsearch") {
					restoreSpecialContent('distanceContainer', data.distance);
					restoreSpecialContent('filterContainer', data.filter);
				}
			}
			
			if (bInitApplication) {
				showOverlay(-1);
			} else {
				showOverlay(0);
			}
		}
		setDefaultFormValues();
	}
}


function checkPageReload(sAddParam)
{
	if (sLastCountryCode != countryCode  && (sLastCountryCode == "cn" || countryCode == "cn")) {
		var sUrl = window.location.href;
		var aParams = sUrl.split('&');
		
		if (aParams.length >= 1) {
			var aRootParams = aParams[0].split('?');
			if (aRootParams.length > 1) {
				aParams[0] = aRootParams[1];
			} else {
				aParams = new Array();
			}
		}
		
		var aReturnParams = new Array();
		for(var i = 0; i < aParams.length; ++i) {
			if (aParams[i].indexOf("countryCode") == -1 && aParams[i].indexOf("strLanguage_adidascom") == -1 && aParams[i].indexOf("miadidas") == -1) {
				aReturnParams.push(aParams[i]);
			}
		}
		aReturnParams.push("strLanguage_adidascom=" + store_locator_language + "&countryCode=" + countryCode);
		
		if (sAddParam.length > 0) {
			aReturnParams.push(sAddParam);
		}
		
		sUrl = 'index.asp?' + aReturnParams.join('&');
		window.location.href = sUrl;
		return false;
	}
	return true;
}


function setDefaultFormValues()
{
	if(!bPreventFormReset)
	{
		if($('city'))
		{
			//alert(labels["quicksearchAddress"])
			$('city').value = (searchType == "quicksearch") ? labels["quicksearchAddress"] : labels["city"];
		}	
		if($('street'))
		{
			$('street').value = labels["street"];
		}
		if($('zip'))
		{	
			$('zip').value = labels["zip"];
		}	
	}
	bPreventFormReset = false;
}


function resetContainer(poContainer)
{
	if (poContainer) {
		poContainer.innerHTML = "";
	}
}


function disableFormElements(isDisabled)
{
	if ($('city')) 
	{ 
		$('city').disabled = isDisabled;
		if($('city').tagName.toLowerCase() == 'input')
		{
			$('city').className = (isDisabled ? 'input-text-disabled' : 'input-text');
		}
		else
		{
			$('city').className = (isDisabled ? 'select-long-disabled' : 'select-long');
		}
	}
	
	if ($('zip')) 
	{ 
		$('zip').disabled = isDisabled; 
		$('zip').className = (isDisabled ? 'input-text-short-disabled' : 'input-text-short');
	}
	
	if ($('street')) 
	{ 
		$('street').disabled = isDisabled; 
		$('street').className = (isDisabled ? 'input-text-disabled' : 'input-text');
	}
	
	if ($('submit-search')) 
	{
		$('submit-search').className = (isDisabled ? 'inactive' : 'active');
	}
}


// executed on AJAX error
function reportError(request)
{
	alert("Error: " + request.status + "\n" + request.statusText);
} // reportError()


function restoreSpecialContent(psContainer, psContent)
{
	if ($(psContainer)) {
		$(psContainer).removeClassName('active');
		$(psContainer).addClassName('inactive');
		$(psContainer).innerHTML = "";
		if (psContent != undefined && psContent != null) {
			var trimmed = psContent.trim();
			if (trimmed.length>0 && $(psContainer)) {
				$(psContainer).innerHTML = trimmed;
				$(psContainer).removeClassName('inactive');
				$(psContainer).addClassName('active');
			} 	
		}
	}
}

function setupCitySearch()
{
	var url = 'service.asp';
	var ajax = new Ajax.Request
				(
					url,
					{
						method: 'get', 
						parameters: 
						{ 
							store_locator_country: store_locator_country, 
							store_locator_language: store_locator_language, 
							cmd: 'getEnglishCountryName', 
							countryCode: $F('countryList')
						}, 
						onSuccess: performCitySearch, 
						onFailure: reportError
					}
				);
}


function callMiadidasByName(sCountryCode)
{
	countryCode = store_locator_country;
	if (checkPageReload('miadidas=1')) {
		isAllMiadidasStores = 1;
	
		if(!sCountryCode || sCountryCode.length == 0) {
			sCountryCode = countryCode;
		}
	
		countryCode = sCountryCode = sCountryCode.toLowerCase();
		
		if (isPrintWindow !=1) {
			//hitbox("MiAdidasStores", "/"+pathBrand+"/shopfinder/miadidas_stores", new Date().getTime());
			if ($('countryList')) {
				if ($F('countryList') != sCountryCode) {
					//$('countryList').value = sCountryCode;
					changeCountry(sCountryCode);
				}
			}	
		}
	
		var url = 'service.asp';
		var ajax = new Ajax.Request
					(
						url,
						{
							method: 'get', 
							parameters: 
							{ 
								store_locator_country: store_locator_country, 
								store_locator_language: store_locator_language, 
								cmd: 'getEnglishCountryName', 
								countryCode: sCountryCode
							}, 
							onSuccess: performMiadidasSearch, 
							onFailure: reportError
						}
					);
	}
}


// handles the cities search result
function handleCityList()
{
	inProgress = false;
	
	if (searcher) {
		var citySelectWrapper = new Element('span').addClassName("mmselect");
		var citySelect = new Element('select', {id:'city', tabindex:3}).addClassName("select-long");
		
		if (searcher.error_code || (searcher.record_sets!=null && searcher.record_sets[0].total_record_count!=null && searcher.record_sets[0].total_record_count==0)) {
			citySelect.appendChild(new Element('option').update(messages['noCitiesAvailable']));
		} else if(searcher.record_sets[0].records) {
			var sTown = "";
			var iCount = searcher.record_sets[0].records.length;
			var lastRecord = "";
			var aCities = new Array();
			for (var a = 0; a < iCount; a++) {
				sTown = searcher.record_sets[0].records[a]['town'].toLowerCase();
				if (lastRecord != sTown && sTown != "") {
					aCities.push(searcher.record_sets[0].records[a]);
					//citySelect.appendChild(new Element('option', {value:sTown}).update(getLangLayer(searcher.record_sets[0].records[a], 'town')));
					lastRecord = sTown;
				}
			}
			
			sortKey = (aCities[0]['town_en'] != "" && aCities[0]['town_en'] != undefined) ? 'town_en' : 'town';
			sortDir = "asc";
			aCities.sort(usort);
			citySelect = setCityDropDown(citySelect, aCities);
		}
		$('citiesContainer').innerHTML = "";
		citySelectWrapper.appendChild(citySelect);
		$('citiesContainer').appendChild(citySelectWrapper);	
		$('citiesContainer').removeClassName('inactive');
		$('citiesContainer').addClassName('active');		
	}
	showSperre(false);
	if (bInitApplication) {
		showOverlay(-1);
	} else {
		showOverlay(0);		
	}
}


function setCityDropDown(oParentElement, aData)
{
	var iCount = aData.length;
	for (var a = 0; a < iCount; a++) {
		oParentElement.appendChild(new Element('option', {value:aData[a]['town']}).update(getLangLayer(aData[a], 'town')));
	}	
	return oParentElement;
}


function showSperre(state)
{
	/*
	if(!$("sperre"))
	{
		return true;
	}

	if(state == true)
	{

		var tmpWidth = document.body.scrollWidth;
		//var tmpHeight = document.body.scrollHeight;
		if(tmpWidth > 972)
		{
			var left = parseInt((tmpWidth - 972) / 2);
		}
		else
		{
			var left = 0;
		}
		document.getElementById("sperre").style.left = left;
		document.getElementById("sperre").style.top = 96;
		document.getElementById("sperre").style.display = 'block';
	}
	else
	{
		document.getElementById("sperre").style.display = 'none';
	}
	*/		
}

function showOverlay(piStatus)
{
	var overlay = $('overlay-white');
	if(overlay)
	{
		if($('SortBy')) $('SortBy').disabled = "";
		if($('resultsPerPage')) $('resultsPerPage').disabled = "";
		$('content-inner').removeChild(overlay);
	}

	if(piStatus >= 0)
	{
		if($('SortBy')) $('SortBy').disabled = "disabled";
		if($('resultsPerPage')) $('resultsPerPage').disabled = "disabled";
		var sLoader  = '<div id="disable_background_white">&nbsp;</div>';
		if(piStatus == 1)
		{
			sLoader += '<img src="img/loader.gif" alt="'+ labels["loading"] +'"/><br/>';
			sLoader += '<span>'+ labels["loading"] +'</span>';			
		}
		var wrap = new Element('div', {id:'overlay-white'}).update(sLoader);
		$('content-inner').insertBefore(wrap, $('content-inner').firstChild);
	}
}


// prueft, ob fuer das aktuell ausgewaehlte Land die Hybrid-Map angezeigt werden soll, oder nicht
function isHybridMapForCountry()
{
	return true;
	/*
	if ($('countryList'))
	{
		switch ($F('countryList').toLowerCase())
		{
			case 'cn':
				return false;
			default:
				return true;
		}
	}
	return false;
	*/
}


// prueft die Verfuegbarkeit der aerial-Karten fuer das entsprechende Zoom-Level
function checkAerialCoverage( type, target, old_zoom, new_zoom, reason )
{
	if (reason == 'nocoverage')
    {
//		mapviewer.setMapType( MM_WORLD_MAP );
//		mapviewer.removeMapType( MM_WORLD_HYBRID );
    }
//	alert(reason);
} // checkAerialCoverage()


function getJsonData (psData) 
{
	//String in ein Objekt umwandeln
	var json = eval ( "(" + psData + ")" );
	return json.data[0];
}


function setObserver(poElement) 
{
	if(poElement)
	{
		if((poElement.value == labels[poElement.id] || poElement.value == labels[poElement.id] || poElement.value == labels["quicksearchAddress"]) && poElement.className != "input-text-disabled"  && poElement.className != "input-text-short-disabled")
		{
			poElement.value = "";
		}		
		poElement.observe('blur', restoreDefaultInput);
	}		
}


function restoreDefaultInput(event)
{
	if(Event.element(event).value == "")
	{
		if(Event.element(event).id == "city")
		{
			Event.element(event).value = (searchType == "quicksearch") ? labels["quicksearchAddress"] : labels["city"];
		}
		else
		{
			Event.element(event).value = labels[Event.element(event).id];
		}
	}
}


// diese funktion zaehlt die statistik
// wird normalerweise vom flash aus aufgerufen,
// hier im javascript
function hitbox(param_site, param_rand)
{
	try {
		_hbPageView(param_site, "/"+pathBrand+"/storefinder/");
	}
	catch(e){}
	/*
	param_url = parse_url(param_url);
	if(param_url)
	{
		_hbPageView(param_site, param_url);
	}
	*/
}


function hitboxLink(linkID, linkPos)
{
	try {
	_hbLink(linkID, linkPos+"_"+pathBrand);
	}
	catch(e){}
}


function parse_url(param_url)
{
	if(param_url)
	{
		while(param_url.match(" "))
		{
			param_url=param_url.replace(" ","+");
		}

	}
	return param_url;
}


//Vergleichsfunktion für sort:
function usort (a, b)
{
	var key1, key2;
	switch (sortKey)
	{
		case "distance":
			if(a["distance"] && b["distance"])
			{
				// ie-fix: der ie steigt hier aus, wenn ein wert 0 ist?!
				key1 = parseFloat(a["distance"]["miles"])+1;
				key2 = parseFloat(b["distance"]["miles"])+1;
			}
		break;
		case "address.postal_code":
			if(a["address"] && b["address"])
			{			
				key1 = a["address"]["postal_code"];
				key2 = b["address"]["postal_code"];
			}
		break;
		case "address.display_name":
			if(a["address"] && b["address"])
			{
				key1 = a["address"]["display_name"];
				key2 = b["address"]["display_name"];
			}
		break;	
		default:
			key1 = a[sortKey]+" "; 
			key2 = b[sortKey]+" ";
		break;
	}

	key1 = key1 + " ";
	key2 = key2 + " ";

	//if(key1 && key2)
	//{
		if(typeof key1 == "string" || typeof key1 == "string")
		{
			key1 = key1.toLowerCase(); 
			key2 = key2.toLowerCase(); 				
		}
		if (key1 == key2) {
			return 0;
		}
		if (sortDir == 'desc') {
			return (key1 > key2) ? -1 : 1;
		} else {
			return (key1 < key2) ? -1 : 1;
		}
	//}	
}

function adjustLatLon(latlon) 
{  
	return latlon;
}

/*
function adjustLatLon(latlon) 
{     
	// The argument contains the new lat and lon. Format: (lat,lon)
	var positionString = latlon.toString();
	// Truncate left and right brackets
	positionString = positionString.substr(1,positionString.length-2);
	// Split lat and lon into an array
	var positionArray = positionString.split(",");
	
	var positionLat = positionArray[0];
	var positionLon = positionArray[1];        
					
	// Add the offset (eval() is more widely accepted than parseFloat())
	var positionLatNew = eval(positionLat + "+" + 0.1894); 
	var positionLonNew = eval(positionLon + "-" + 0.0001665); 
			
	// The new coordinates-object 
	var pos = new MMLatLon( positionLatNew, positionLonNew );
			
	return pos;
}
*/

function switchLanguage(sLang)
{
	initApplication(sLang, countryCode);
}