$(document).ready(function() {
	C.init();
})

var C={
	init: function(){
		C.style();
		//C.cover.init();
		C.faq.init();
		C.maps.init();
		$('#districtSelect').bind('change', function(evt){
			$('#cityMetroSelect').empty();
			$.ajax({
				url: '/connect/',
				dataType: 'json',
				data: {dealers_district_id: $(this).val()},
				success: function(json){
					if(json.cities){
						var items=json.cities;
						var sbox_attr={name:'dealers_city_id', id:'citySelect'}
						var all_text='Все города'
					}else if(json.metro){
						var items=json.metro;
						var sbox_attr={name:'dealers_metro_id', id:'metroSelect'}
						var all_text='Любая станция метро'
					}
					if(items){
						$('#cityMetroSelect').empty().
							append($(document.createElement('p')).
								append($(document.createElement('span')).addClass('tag sbox').
									append($(document.createElement('select')).attr(sbox_attr).
										append($(document.createElement('option')).attr({value: 'all'}).text(all_text)))));
						var $select=$('#'+ sbox_attr.id);
						for(var i=0; i<items.length; i++){
							var $option = $(document.createElement('option')).attr({value:items[i][0]}).html(items[i][1]).appendTo($select);
						}
					}
				}
			});
		})

		$('a.popup').bind('click', function(e) {
			var href = $(this).attr('href');
			var title = $(this).attr('title');
			var win = window.open(href, '', "resizable,width=700,height=500");
			win.focus();
			return false;
		});

		$('a.popup_d').bind('click', function(e) {
			var href = $(this).attr('href');
			var title = $(this).attr('title');
			var win = window.open(href, '', "resizable,width=700,height=740,scrollbars=1");
			win.focus();
			return false;
		});

		var iframe = $('#megafonMap').contents().find('body');
		iframe.css('background', 'nonne transparent');
	},

	style: function(){
/*		if($.browser.msie){
			var items='tariff,service,subscribers,faq';
			for(var i=0; i<items.split(',').length; i++){
				$('#menu li.'+items.split(',')[i]+' a').bind('mouseover mouseout',function(event){
					event.preventDefault();
					var item=$(this).parent().attr('className');
					if(event.type=='mouseout'){
						var hash={
							background: 'transparent',
							filter: 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=/img/menu/'+item+'.ie.png, sizingMethod=image)'
						};
					}else if(event.type=='mouseover'){
						var hash={
							filter: 'none',
							background: 'url(/img/menu/'+item+'.gif) no-repeat left bottom'
						};
					}
					$(this).css(hash);
				}).trigger('mouseout');
			}
		}*/
		C.sboxInit('regionsSbox');
		$('#regionsForm input[type=submit]').remove();
	},

	stylePost: function(){
	},

	sboxInit: function(id){
		if($('#'+id).length){
			var action=($('#'+id).parents('form').eq(0).attr('action') || '');
			var name=$('#'+id).attr('name');
			var wrap=$('#'+id).wrap('<span class="sboxStyled"></span>').parent().get(0);
			var ops='';
			var first='';
			var selected=$('#'+id).get(0).selectedIndex;
			$('#'+id+' option').each(function(i){
				var text=$(this).text();
				var val=$(this).val();
				if(i!=selected){
					ops+='<a href="'+action+'?'+name+'='+val+'">'+text+'</a>';
				}else{
					ops+='<b>'+text+'</b>';
					first='<b class="first">'+text+'</b><a class="arr" id="'+id+'_arr" href="javascript:C.sboxToggle(\''+id+'\');"></a>';
				}
			})
			$(wrap).empty().append('<span class="options">'+ops+'</span>').attr('id',id);
			$(first).prependTo($(wrap));
			var last_e_index=$('.options *', wrap).length - 1;
			$('.options *', wrap).eq(last_e_index).addClass('btm');
			$('body').click(function(evt){C.sboxTry2Hide(id,evt)});
		}
	},

	sboxTry2Hide: function(id,evt){
		//определяем, имеется ли видимый sbox
		var $sbox=$('#'+ id);
		if($sbox.length){
			var target=evt.target;
			var body=$('body').get(0);
			//перебираем родителей target-a, пока не дойдем до sbox или до body
			//предполагаем, что нужно будет скрыть элемент и отменить действие по умолчанию
			var hide=true;
			var cancel=true;
			while(target!=body){
				if(target==$sbox[0]){
					//произошел клик по текущему sbox
					hide=false;
					cancel=false;
					break;
				}else if(target.tagName=='SPAN' && target.className=='sboxStyled'){
					//произошел клик по другому sbox
					cancel=false;
					break;
				}
				target=target.parentNode;
			}
			if($sbox.children('span.options')[0].offsetHeight){
				if(hide){
					//скрываем sbox
					C.sboxToggle(id);
				}
				if(cancel){
					//запрещаем действие по-умолчанию
					evt.preventDefault();
				}
			}
		}
	},
	
	sboxToggle: function(id){
		var $sbox=$('#'+ id);
		if($sbox.length){
			$sbox.children('a.arr').toggleClass('active');
			$sbox.children('span.options').toggle();
			if($sbox.children('span.options')[0].offsetHeight){
				$sbox.children('b.first').text('Выберите регион');
			}else{
				var region=$sbox.children('span.options').children('b').text();
				$sbox.children('b.first').text(region);
			}
		}
	},

	maps: {
		init: function(){
			if($('#moscowRegionCoverBox').length){
				C.maps.draw();
				C.maps.tile();
				C.maps.geocoding();
			}
		},

		draw: function(){
			C.maps.map2 = new GMap2(document.getElementById('moscowRegionCoverBox'));
			C.maps.map2.setCenter(new GLatLng(55.75580103347015,37.617820501327515), 8);
			C.maps.map2.addControl(new GLargeMapControl3D());
			//C.maps.map2.addControl(new GScaleControl());
			//C.maps.map2.addControl(new GSmallMapControl());
			C.maps.map2.addControl(new GMapTypeControl());
			//C.maps.map2.setUIToDefault();
			C.maps.map2.enableScrollWheelZoom();
			C.maps.map2.addMapType(G_PHYSICAL_MAP);
			C.maps.map2.removeMapType(G_HYBRID_MAP);
			G_DEFAULT_MAP_TYPES.getMinimumResolution = function(){return 6};
			G_DEFAULT_MAP_TYPES.getMaximumResolution = function(){return 14}; 
			G_SATELLITE_MAP.getMinimumResolution = function(){return 6};
			G_SATELLITE_MAP.getMaximumResolution = function(){return 14}; 
			G_NORMAL_MAP.getMinimumResolution = function(){return 6};
			G_NORMAL_MAP.getMaximumResolution = function(){return 14}; 
			G_PHYSICAL_MAP.getMinimumResolution = function(){return 6};
			G_PHYSICAL_MAP.getMaximumResolution = function(){return 14}; 
		},

		tile: function(){
      // Set up the copyright information
      // Each image used should indicate its copyright permissions
      var myCopyright = new GCopyrightCollection("© ");
			myCopyright.addCopyright(new GCopyright('МегаФон', new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)),0,'2007 Google'));

			// Create the tile layer overlay and 
			// implement the three abstract methods                 
			var tilelayer = new GTileLayer(myCopyright);
			tilelayer.getTileUrl = function(coords,zoom) {
				var subd=(coords.x+coords.y)%4;
				if(subd==0){
					subd='';
				}
				var url='http://gimg'+subd+'.uniq.ru';
        if(zoom<=12){
          url+='/img/z'+zoom+'/'+coords.x+'_'+coords.y+'.png'; 
        }else{
          url+='/img/z'+zoom+'/'+coords.y+'/'+coords.x+'.png';
        }
				return url;
      }
			//tilelayer.tileUrlTemplate='http://maps.local/test.png';
			//tilelayer.tileUrlTemplate='http://maps.local/img/z{Z}/{X}_{Y}.png';
			tilelayer.isPng = function() { return true;};
			tilelayer.getOpacity = function() {return 1;}

			var myTileLayer = new GTileLayerOverlay(tilelayer);
			//var map = new GMap2(document.getElementById("map_canvas"));
			//map.setCenter(new GLatLng(37.4419, -122.1419), 13);
			C.maps.map2.addOverlay(myTileLayer);
		},

		geocoding: function(){
			var $form=$('#geocodingForm');
			$('#geocodingForm').bind('submit',function(event){
				event.preventDefault();
				var $overlays=$('#moscowRegionCoverBox').children('div').eq(0).children('div').eq(0).children('div');
				if($overlays.length){//скрываем информационное окно и маркеры прежнего поиска
					$overlays.eq(4).children().remove();
					$overlays.eq(6).children().remove();
					$overlays.eq(8).children().remove();
					C.maps.map2.getInfoWindow().hide();
				}
				var $results=$('#geocodingForm ul');
				if(C.maps.geocoding_query && C.maps.geocoding_query==$form.find('input[name=q]')[0].value){
					$results.parent().css({zIndex:'2147483647'}).show();
					return;
				}
				C.maps.geocoding_query=$form.find('input[name=q]')[0].value;
				$(this).ajaxSubmit({
					dataType: 'json',
					success: function(json){
						//C.maps.map2.clearOverlays();
						if (!json || json.Status.code != 200) {
							var $results=$('#geocodingForm ul');
							if($results.length){
								$results.parent().remove();
							}
						} else {
							var $results=$('#geocodingForm ul');
							if($results.length==0){
								$form.
									append($(document.createElement('div')).addClass('results').
										append($(document.createElement('div')).addClass('bg')).
										append($(document.createElement('a')).attr({href:'#'}).addClass('cross')).
										append($(document.createElement('ul'))));
								var $results=$('#geocodingForm ul');
								$results.parent().children('a').bind('click',function(event){
									event.preventDefault();
									$results.parent().hide();
								})
							}
							$results.empty().height('auto');
							for(var i=0; i<json.Placemark.length; i++){
								var place = json.Placemark[i];
								$(document.createElement('a')).attr({href:'#'}).text(place.address).
								appendTo($(document.createElement('span')).appendTo($(document.createElement('li')).appendTo($results)));
							}
							$results.parent().show();
							if($results[0].offsetHeight>94){
								$results.height(94);
							}
							$results.parent().children('div.bg').height($results.parent()[0].offsetHeight-2);
							$results.find('a').each(function(i){
								$(this).bind('click',function(event){
									event.preventDefault();
									$results.parent().hide();
									var place = json.Placemark[i];
									var point = new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);
									var marker = new GMarker(point);
									C.maps.map2.addOverlay(marker);
									marker.openInfoWindowHtml(place.address);
								})
							})
							/*
							point = new GLatLng(place.Point.coordinates[1],
																	place.Point.coordinates[0]);
							marker = new GMarker(point);
							C.maps.map2.addOverlay(marker);
							marker.openInfoWindowHtml(place.address + '<br>' + 
								'<b>Country code:</b> ' + place.AddressDetails.Country.CountryNameCode);
							*/
						}
					}
				});
			})
		}
	},


	faq: {
		active_qa_id: null,//id вопроса, ответ которого показывается пользователю в данный момент
		init: function(){
			if(!$('#faqBox').length){return;}
			//скрываем все ответы
			$('#faqBox dd>div').hide();
			//делаем вопросы ссылками
			$('#faqBox dt').each(function(){
				var id=$(this).attr('id');
				id=parseInt(id.substr(2));
				var question=$('strong.box',this).html();
					$(this).empty().append(
						$('<a></a>').attr({href:'#'}).click(
							function(){C.faq.show(id);this.blur();return false;}
						).append(question)
					);
			})
		},

		show: function(id){
			//если вопрос является активным, то не обрабатываем его
			if(C.faq.active_qa_id && C.faq.active_qa_id==id){return;}
			//скрываем предыдущий активный ответ, если есть
			if(C.faq.active_qa_id){
				$('#dt'+C.faq.active_qa_id+'').removeClass('active');
				$('#dd'+C.faq.active_qa_id+'>div').hide('fast',function(){
					//показываем новый ответ
					C.faq.performShow(id)
				});
			}else{
				//сразу показываем новый ответ
				C.faq.performShow(id)
			}
			//в конце запоминаем активный вопрос
			C.faq.active_qa_id=id;
		},

		performShow: function(id){
			$('#dt'+id).addClass('active');
			$('#dd'+id+'>div').addClass('active').show('fast');
		}
	}
}

