/**
 * @name Оверлей "Круг"
 * @param {YMaps.GeoPoint) center Географические координаты центра
 * @param {Number} radius Радиус круга (в км)
 * @param {Object} options Опции оверлея
 * @param {Number} options.accuracy Количество граней многоугольника
 */
function Circle (center, radius, options) {
	var _this = this;
	options = YMaps.jQuery.extend({accuracy : 360}, options);

	// Вызывает родительский конструктор
	YMaps.Polygon.call(this, [], options);

	// Вызывается при добавлении круга на карту
	this.onAddToMap = function (map, container) {
		YMaps.Polygon.prototype.onAddToMap.call(this, map, container);
		this.updatePoints();
	}

	// Устанавливает новый центр и радиус
	this.setCenter = function (newCenter, newRadius) {
		if (this.getMap() && (!center.equals(newCenter) || radius != newRadius)) {
			center = newCenter;
			radius = newRadius || radius;
			this.updatePoints();
		}
	}

	// Вычисляет точки окружности
	this.updatePoints = function () {

		var map = this.getMap(),

			// Откладываем геоточку от центра к северу на заданном расстоянии
			northPoint = new YMaps.GeoPoint(center.getLng(), center.getLat() + radius / 112.2),

			// Пиксельные координаты на последнем масштабе
			pixCenter = map.coordSystem.fromCoordPoint(center),

			// Радиус круга в пикселях
			pixRadius = pixCenter.getY() - map.coordSystem.fromCoordPoint(northPoint).getY(),

			// Вершины многоугол
			points = [],

			// Вспомогательные переменные
			twoPI = 2 * Math.PI,
			delta = twoPI / options.accuracy;

		for (var alpha = 0; alpha < twoPI; alpha += delta) {
			points.push(
				map.coordSystem.toCoordPoint(
					new YMaps.Point(
						Math.cos(alpha) * pixRadius + pixCenter.getX(),
						Math.sin(alpha) * pixRadius + pixCenter.getY()
					)
				)
			)
		}

		this.setPoints(points);
		
	}
}
	function imgcycle(id) {
		
		var count = $('#'+id+" .cycle").length;
		if (count == 1) return;
		//alert(count);
		for(var i = 0; i < count; i++) {
			if ($('#'+id+" .cycle:eq("+i+")").is(':visible')) {
				$('#'+id+" .cycle:eq("+i+")").fadeOut(1000);
				if ($('#'+id+" .cycle:eq("+(i+1)+")").length) {
					$('#'+id+" .cycle:eq("+(i+1)+")").fadeIn(1000);
				} else {
					$('#'+id+" .cycle:first").fadeIn(1000);
				}
				break;
			}
		}
		/*$('#'+id+" img").each(function(i) {
			if ($(this).is(':visible')) {
				console.log(i);
				$(this).fadeOut(1000);
				if ($('#'+id+" img:eq("+(i+1)+")")) {
					$('#'+id+" img:eq("+(i+1)+")").fadeIn(1000);
				} else {
					$('#'+id+" img:eq(0)").fadeIn(1000);
				}
				return;
			}
		});*/
		window.setTimeout("imgcycle('"+id+"')", 3000)
	}


$(document).ready(function(){
    
    // Основные
    
    estate_add_init();
    
    
    $('a[rel^="prettyPhoto"], a.prettyPhoto, a.lightbox').prettyPhoto({deeplinking: false});
	
	//поиск по карте
	var wwidth = $(window).width()-200; //600
	var wheight = $(window).height()-200; //450
	
	$("a.search_map").prettyPhoto({
		
		custom_markup: '<div style="width:'+wwidth+'px;height:'+wheight+'px;"><div style="width:'+wwidth+'px;height:50px;">Укажите район поиска.<p>Радиус поиска: <span style="display:inline-block;width:200px;padding:0 5px;"><br /><input id="rslider" type="slider" name="radius" value="5"></span> <a class="" href="#" onClick="javascript:jQuery.prettyPhoto.close();">Выбрать указанный район</a></p></div><div id="YMapsIDs" style="width:'+wwidth+'px;height:'+(wheight-50)+'px"></div></div>',
		default_width: wwidth,
		default_height: wheight,
		allow_resize: false,
		changepicturecallback: function(){ ym_initialize(); }
	});
	$(".coods_clear").click(function() { //сброс поиска по карте
		$(".coods_clear_control").hide();
		$("#search_lng1").val("");
		$("#search_lat1").val("");
		$("#search_radius").val("");
	});
	if ($("#search_lng1").val() && $("#search_lat1").val() && $("#search_radius").val()) {
		$(".coods_clear_control").show();
	}
	function ym_initialize() {
		var map = new YMaps.Map(YMaps.jQuery("#YMapsIDs")[0]);
		var point = new YMaps.GeoPoint(92.87043,56.008697);
		
		YMaps.Utils.extend(Circle, YMaps.Polygon);
		
		map.addControl(new YMaps.TypeControl());
		map.addControl(new YMaps.SmallZoom);
		map.enableScrollZoom();
		
		//смотрим, есть ли начальные данные
		if (
			$("#search_lng1").val() &&
			$("#search_lat1").val() &&
			$("#search_radius").val()
		) {
			var x1 = $("#search_lng1").val();
			var y1 = $("#search_lat1").val();
			var radius = $("#search_radius").val();
			$("#rslider").val(radius);
		} else {
			//var x1 = 92.77;
			//var y1 = 56.10;
			//var x2 = 93.10;
			//var y2 = 55.95;
			var x1 = 92.87043;
			var y1 = 56.008697;
			var radius = 5;
		}
		
		//слайдер радиуса //, skin: "round" 
		$("#rslider").slider(
			{
				from: 1,
				to: 20,
				step: 1,
				round: 1,
				dimension: '&nbsp;км',
				callback: function(value) {
					myCircle.setCenter(user.getGeoPoint(), value);
					
					//сохраняем координаты и радиус в полях
					$("#search_lng1").val(user.getGeoPoint().getX());
					$("#search_lat1").val(user.getGeoPoint().getY());
					$("#search_radius").val($("#rslider").val());
				}
			}
		);
		
		//var bound = new YMaps.GeoBounds(new YMaps.GeoPoint(x1, y1), new YMaps.GeoPoint(x2, y2));
		//map.setBounds(bound);
		map.setCenter(new YMaps.GeoPoint(x1, y1), 10);

		var user = new YMaps.Placemark(map.getCenter(), {
			style: "default#lightblueSmallPoint",
  			draggable : true,
			hasBalloon : false,
			hasHint : true
		});
		user.name = "Перетащи меня";
		map.addOverlay(user);

		var myCircle = new Circle(map.getCenter(), radius, {
			style : {
				polygonStyle : {
					outline : true,
					strokeWidth : 3,
					strokeColor : "0000ff55",
					fillColor : "0000ff22"
				}
			},
			interactive : YMaps.Interactivity.NONE
		});
		map.addOverlay(myCircle);
		//сохраняем координаты и радиус в полях
		$("#search_lng1").val(user.getGeoPoint().getX());
		$("#search_lat1").val(user.getGeoPoint().getY());
		$("#search_radius").val($("#rslider").val());


		YMaps.Events.observe(user, user.Events.DragStart, function (placemark) {
			map.removeOverlay(myCircle);
		});

		YMaps.Events.observe(user, user.Events.DragEnd, function (placemark) {
			map.addOverlay(myCircle);
			myCircle.setCenter(placemark.getGeoPoint());

			//сохраняем координаты и радиус в полях
			$("#search_lng1").val(placemark.getGeoPoint().getX());
			$("#search_lat1").val(placemark.getGeoPoint().getY());
			$("#search_radius").val($("#rslider").val());
		});

		$(".coods_clear_control").show();
		
	}
	/////////////////////////////////////////////////////////////////
    
	//imgcycle
	$('td.imgcycle').each(function(){
		window.setTimeout("imgcycle('"+$(this).attr('id')+"')", 3000);
	});
	
	//search_switch
	$(".search_switch").click(function(){
		var rel = $(this).attr("rel");
		
		$("#inptab").val(rel);
		
		if ($(this).hasClass("nowrap")) { //td'шки
			$(".search_switch").removeClass("search_sel");
			$(this).addClass("search_sel");
		}
		/*$("#search_main").html("");
		$("#search_add").html("");
		$("#search_main").load("/estate/loadsearch/", {rel: rel});
		$("#search_add").load("/estate/loadsearch/", {rel: rel, ext: 1});*/
		
		/*$(':input','#form_search')
		 .not(':button, :submit, :reset, :hidden')
		 .val('')
		 .removeAttr('checked')
		 .removeAttr('selected');
		*/
		
		//всё дисаблим
		$('#form_search input, #form_search select').not(':button, :submit, :reset, .stay').attr("disabled", "disabled");
		
		$(".searchdiv").hide();
		$("#sdiv"+rel).show();
		$("#sdiv"+rel+"_").show();
		
		$("#sdiv"+rel+" .search_switch[rel="+rel+"]").attr("checked", "checked");
		
		//раздисабливаем текущие
		$("#sdiv"+rel+" input, #sdiv"+rel+" select").not(':button, :submit, :reset, .stay').removeAttr("disabled");
		$("#sdiv"+rel+"_ input, #sdiv"+rel+" select").not(':button, :submit, :reset, .stay').removeAttr("disabled");
		
		//console.log(".search_switch[rel="+rel+"]");
	});
	
	//текущую вкладку открываем
	if ($("#inptab").val() != "") $(".search_switch[rel="+$("#inptab").val()+"]").trigger('click');
	else $(".search_switch :first").trigger('click');
	
    $('form.validate').validate();
    
    $('#captcha').click(function(){
        $(this).attr('src', '/captcha/rand-'+parseInt(Math.random()*999999999)+'/');
    });
    
    if ($('body').outerHeight()<$(window).height()) {
        $('#filler').attr('height', $(window).height()+$('#filler').parent().height()-$('body').height()-55);
    }
    
    $('.sms_color').click(function(){
        $('#sms_color_id').html($(this).attr('i'));
        $('#sms_color').css('background-color', $(this).children('img').css('background-color'));
        $('.sms_color').children('img').css('border-color', '#fff');
        $(this).children('img').css('border-color', '#333');
        return false;
    });
    
    $('.convert').each(function(){
        var path = $(this).attr('p') ? $(this).attr('p')+'/' : '';
        var id   = $(this).attr('i') ? 'id-'+$(this).attr('i')+'/' : '';
        $(this).html('<a href="/'+path+id+'">'+$(this).html()+'</a>');
    });
    
    // Регистрация
    
    $('#form_signup').validate({
        rules:{
            email:{required:true, email:true, remote:'/signup/email/free/'},
            phone:'phone',
            keystring:{required:true, remote:'/captcha/check/'}
        },
        messages:{ 
            email:{remote:'Этот e-mail уже зарегистрирован. <a href="/signup/forgot/" target="_blank">Забыли пароль?</a>'}
        }
    });
    
    $('#form_forgot').validate({
        rules:{
            email:{required:true, email:'true'},
            keystring:{required:true, remote:'/captcha/check/'}
        }
    });
    
    // Шаг 1 добавления
    
    $('div.step1_dialog').each(function(i){
        $(this).attr('ttl', $('div.step1_dialog').eq(i).attr('title'));
    }).dialog({
        autoOpen:false,
        modal:true,
        buttons:{
            'Отмена':function(){ $(this).dialog('close'); },
            'Добавить':function(){ location.href = '/estate/add/step2/id-'+$(this).find('input[name=id]:checked').val()+'/'; }
        }
    });
    
    $('a.step1_dialog').click(function(){
        
        $('div.step1_dialog[ttl="'+$(this).attr('title')+'"]').dialog('open');
        return false;
    });
    
    // Шаг 4 добавления
    
    $('#form_estate_reg').validate({
        rules:{
            email:{required:function(){return $('input[name="signup"]:checked').val()=='2';}, email:true, remote:'/signup/email/free/'},
            email2:{required:function(){return $('input[name="signup"]:checked').val()=='1';}, email:true, remote:'/signup/email/registered/'},
            pass:{required:function(){return $('input[name="signup"]:checked').val()=='1'?true:false;}, remote:'/signup/pass/check/'}
        },
        messages:{
            email:{remote:'Этот e-mail уже зарегистрирован. <a href="/signup/forgot/" target="_blank">Забыли пароль?</a>'},
            email2:{remote:'Этот e-mail не зарегистрирован'}
        }
    });
    
    $('input[name="signup"]').change(function(){
        $('.signup_select').css('background-color', '#f6f6f6');
        $('#signup_select'+$('input[name="signup"]:checked').val()).css('background-color', '#eee');
    });
    
    $('#form_estate_reg input[name="email"]').focus(function(){$('input[name="signup"]').val(['2']).change();});
    $('#form_estate_reg input[name="email2"]').focus(function(){$('input[name="signup"]').val(['1']).change();});
    $('#form_estate_reg input[name="pass"]').focus(function(){$('input[name="signup"]').val(['1']).change();});
    
    $('#signup_select0').click(function(){$('input[name="signup"]').val(['0']).change();});
    $('#signup_select1').click(function(){$('input[name="signup"]').val(['1']).change();});
    $('#signup_select2').click(function(){$('input[name="signup"]').val(['2']).change();});
    
    // Загрузка изображений
    
    $('#JsHttpRequest_button').click(function(){
        JsHttpRequest.query(
            '/estate/image/insert/' + ($(this).attr('name') ? 'id-'+$(this).attr('name')+'/' : 'add-1/'),
            {image:document.getElementById('JsHttpRequest')},
            function(result, content) {
                $('#td_images').html(content);
                $('#JsHttpRequest').val('');
            },
            true
        );
    });
    
    // Поиск
    
    /*$('#search td:not(:last-child)').hover(function(){
        $('.search_sel').addClass('search_sel_old');
        $('.search_sel').removeClass('search_sel');
        $(this).addClass('search_sel');
    }, function(){
        $(this).removeClass('search_sel');
        $('.search_sel_old').addClass('search_sel');
        $('.search_sel_old').removeClass('search_sel_old');
    });*/
	
    /*$('#search td, #search td a').click(function(){
        
        var td  = $(this).attr('href') ? $(this).parent() : $(this);
        var id  = td.attr('id')+'_content';
        var num = td.attr('id').substring(11, 12);
        
        // Закладки
        $('.search_sel_old').removeClass('search_sel_old');
        td.addClass('search_sel_old');
        $('.search_tab').hide();
        
        // Радиокнопки
        $('#search_tabs input[name=id]:checked').attr('was_checked', true).attr('checked', false);
        if ($('#'+id+' input[name=id][was_checked]').length) {
            $('#'+id+' input[name=id][was_checked]').attr('was_checked', false).attr('checked', true);
        }
        else {
            $('#'+id+' input[name=id]:first').attr('checked', true);
        }
        
        // Содержимое
        $('.search_subtab').hide().find('input').attr('disabled', true);
        $('#'+id).show().find('#search_subtab_'+parseInt($('#'+id+' input[name=id]:checked').val())).show().find('input').removeAttr('disabled');
        
        // Содержимое дополнительного поиска
        if ($('#form_search input[name=add]').val()==1) { // Если открыт, то тужен ли он для этого содержимого?
            if ($('#'+id).find('.search_add_a').length) {
                $('#search_add3').show();
            }
            else {
                $('#search_add3').hide();
            }
        }
        $('#search_add3 .search_addtab').hide().find('input').attr('disabled', true);
        $('#search_addtab_'+parseInt($('#'+id+' input[name=id]:checked').val())).show().find('input').removeAttr('disabled');
        
        // Помутим с формой
        $('#form_search input[name=tab]').val(num);
        
        return false;
        
    });*/
    
    /*$('#search_tabs input[name=id]').click(function(){
        
        // Содержимое
        $('.search_subtab').hide().find('input').attr('disabled', true);
        $(this).parent().parent().parent().find('#search_subtab_'+parseInt($(this).val())).show().find('input').removeAttr('disabled');
        
        // Содержимое дополнительного поиска
        if ($('#form_search input[name=add]').val()==1) { // Если открыт, то тужен ли он для этого содержимого?
            if ($(this).parent().parent().parent().find('#search_subtab_'+parseInt($(this).val())).find('.search_add_a').length) {
                $('#search_add3').show();
            }
            else {
                $('#search_add3').hide();
            }
        }
        $('#search_add3 .search_addtab').hide().find('input').attr('disabled', true);
        $('#search_addtab_'+parseInt($(this).val())).show().find('input').removeAttr('disabled');
        
    });*/
    
	//расширенный поиск
	$('.search_add_a').live("click", function() {
		if ($("#search_add").is(":visible")) {
			$("#search_add").hide();
			$("#inpadd").val(0);
		} else {
			$("#search_add").show();
			$("#inpadd").val(1);
		}
	});
	//начальная инициализация
	//if ($("#inpadd").val()) $("#search_add").show(); else $("#search_add").hide();
    
    $('.search_check_all').click(function(){
        var div = $(this).closest('table').siblings('div');
        if (div.find('input[type="checkbox"]').length==div.find('input[type="checkbox"][checked]').length) {
            div.find('input[type="checkbox"]').removeAttr('checked');
        }
        else {
            div.find('input[type="checkbox"]').attr('checked', true);
        }
    });
    
});

Number.prototype.number_format = function (fractNum, decSeparator, triadSeparator) {
    
    var num = parseInt(this).toString();
    var numd = this.toString();
    numd = numd.toString().substr(numd.indexOf('.')+1, fractNum);
    while (numd.length<fractNum) {
        numd += '0';
    }
    var regEx = /(-?\d+)(\d{3})/;
    while (regEx.test(num)) {
        num = num.replace(regEx,"$1"+triadSeparator+"$2");
    }
    if (numd) {
        num += decSeparator+numd;
    }
    
    return num;
    
}

$.validator.addMethod('phone', function(ph, element) {
    if (this.optional(element)) {
        return true;
    }
    var stripped = ph.replace(/[\s()+-]|ext\.?/gi, '');
    // 6 is the minimum number of numbers required
    return ((/\d{7,}/i).test(stripped));
}, 'Пожалуйста, введите корректный номер телефона.');

$.validator.addMethod('login', function(value, element) {
    return this.optional(element) || /^[0-9a-z_\-]+$/i.test(value);
}, 'Пожалуйста, введите корректный логин.');

