(function($) {
	//Helper Function for Caret positioning
	$.fn.caret=function(begin,end)
	{
		if(this.length==0) return;
		if (typeof begin == 'number')
		{
      end = (typeof end == 'number')?end:begin;
			return this.each(function()
			{
				if(this.setSelectionRange)
				{
					this.focus();
					this.setSelectionRange(begin,end);
				}
				else
				if (this.createTextRange)
				{
					var range = this.createTextRange();
					range.collapse(true);
					range.moveEnd('character', end);
					range.moveStart('character', begin);
					range.select();
				}
			});
		}
		else
		{
    	if (this[0].setSelectionRange)
    	{
				begin = this[0].selectionStart;
				end = this[0].selectionEnd;
			}
			else
			if (document.selection && document.selection.createRange)
			{
				var range = document.selection.createRange();
				begin = 0 - range.duplicate().moveStart('character', -100000);
				end = begin + range.text.length;
			}
			return {begin:begin,end:end};
  	}
	};
})(jQuery);

$(document).ready(function()
{
  $("#phone").keypress( function(e)
  {
  	e = e || window.event;
		var k = e.charCode || e.keyCode || e.which;
		var pos = $(this).caret();
		if(e.ctrlKey || e.altKey || k == 8 || ( ((k >= 40 && k <= 57) || k == 32) && pos.begin < 20 )) return true;
		return false;
  });

  $("#house").keypress( function(e)
  {
  	e = e || window.event;
		var k = e.charCode || e.keyCode || e.which;
		var pos = $(this).caret();
		if(e.ctrlKey || e.altKey || k == 8 || ( ( (k >= 40 && k <= 122) || k == 32 || k > 186) && pos.begin < 10 )) return true;
		return false;
  });

	$("#auth_pass").keypress( function(e){ if(e.keyCode == 13) $('#auth_form').submit(); });
	$('#commentform').submit(function()
	{
		$('#new_comment').hide();
		$('#comment_loading').show();
		$.getJSON( this.action, { comment: $('#comment', this).val(), mid: $('#mid', this).val(), cid: $('#cid', this).val()}, add_comment );
		return false;
	})
});

function del(table, id)
{
	$.post('/sys/ajax/delete/',{ name: table, cid : id }, onAjaxSuccess);
	$('#'+table+'-'+id).remove();
	return false;
}

function onAjaxSuccess(data)
{
  // Здесь мы получаем данные, отправленные сервером
  //alert(data);
}

function toggle(cid, name)
{
	if($("li").find("#text"+cid+":hidden").length) { $('#more'+cid).html($('#text'+cid).html()); $('#text'+cid).remove(); return; }
	$("li p[id^='text']").each( function(i) { var id = this.id.substr(4); $('#more'+id).html($('#text'+id).html()); $('#text'+id).remove(); });
	$.scrollTo( $('#li_'+cid), 800, { offset:{ top: -50, left: 0 }} );
	$('#more'+cid).before('<p id="text'+cid+'" style="display: none;">'+$('#more'+cid).html()+'</p>');
	$('#more'+cid).html('Грузим, ждите...');

  $.getJSON('/sys/ajax/catlist/', {id: cid}, onAjaxSuccess );
	function onAjaxSuccess(obj)
	{
		$('#more'+cid).html('');
		for(var i=0; i<obj.titles.length; i++)
		{
			if(obj.ids[i] != -1)
			{
				$('#more'+cid).append('<a style="color: #2E87D3;" href="/adv/'+name+'/'+obj.names[i]+'/">'+obj.titles[i].toLowerCase()+' ('+obj.count[i]+')</a><br />');
			}
			else
			{

				$('#more'+cid).append('<br /><h3>'+obj.titles[i]+'</h3>');
				for(var j=0; j<obj.subs[i][2].length; j++) $('#more'+cid).append('<a style="color: #2E87D3;" href="/adv/'+name+'/'+obj.names[i]+'/'+obj.subs[i][1][j]+'/">'+obj.subs[i][2][j].toLowerCase()+' ('+obj.subs[i][3][j]+')</a><br />');
        $('#more'+cid).append('<br />');
			}
		}
	}
}

function load_ref(parent, name)
{
	var cid = $('#'+parent+' option:selected').val();
	$('#'+name).attr("disabled", "disabled");
	$('#'+name+' option:selected').html('Грузим, ждите...');
  $.getJSON('/sys/ajax/ref/', {id: cid}, onAjaxSuccess );
	function onAjaxSuccess(obj)
	{
		$('#'+name).html('');
		for(var i=0; i<obj.ids.length; i++) $('#'+name).append('<option value="'+obj.ids[i]+'">'+obj.titles[i]+'</option>');
	}
	$('#'+name).removeAttr("disabled");
}

function load_region(parent, name)
{
	var cid = $('#'+parent+' option:selected').val();
	$('#'+name+' option:selected').show();
	$('#'+name+' option:selected').html('Грузим, ждите...');

  $.getJSON('/sys/ajax/region/', {id: cid}, onAjaxSuccess );
	function onAjaxSuccess(obj)
	{
		$('#'+name).html('');
		if(name != 'div') $('#div_box').hide();
		if(obj.ids.length > 0 && name == 'div') $('#div_box').show();
		if(obj.ids.length == 0 && name == 'div') $('#div_box').hide();
		for(var i=0; i<obj.ids.length; i++) $('#'+name).append('<option value="'+obj.ids[i]+'">'+obj.titles[i]+'</option>');
		$('#'+name).append('<option value="0" selected="selected">Любой</option>');
	}
}

function subcat_selector(parent_id, level)
{
	var title = $('#subcat_body select option:selected').text();
	var cid = $('#subcat_body select option:selected').val();
  if(cid.length == 0) return false;
  $('#subcat_body select').remove();
	$('#subcat_body').append('<a id="subcatlink_'+level+'" class="arr_right" href="javascript:void(0);" onclick="selector_back('+parent_id+', '+level+', \'subcat\')" style="margin-right:12px;">Грузимся, ждите...</a>');
  $.getJSON('/sys/ajax/subcat/', {id: cid, lvl: level}, onAjaxSuccess );
	function onAjaxSuccess(obj)
	{
		if(typeof(obj.id) !== 'undefined') //Если конец, то...
		{
			$('#subcatlink_'+level).html(title);
			if(obj.id == 2) { $('#form_simple').hide(); $('#form_estate').hide(); $('#form_car').show(); }
			if(obj.id == 3) { $('#form_simple').hide(); $('#form_estate').show(); $('#form_car').hide(); }
			if(obj.id >= 4) { $('#form_simple').show(); $('#form_estate').hide(); $('#form_car').hide(); }
			$('#import_file').enable(true);
			$('#import_submit').enable(true);
		}
		else // Если ещё не конец, то...
		{
			$('#form_simple').hide();
			$('#form_estate').hide();
			$('#form_car').hide();
			if($('#form_type').val() == 'search_ex') $('#form_simple').show();
			if($('#form_type').val() == 'add_new' && level == 1)
			{
				if (cid == 11 || cid ==  20 || cid ==  414 || cid ==  422) $('.priceless').hide();
			}

			$('#subcatlink_'+level).html(title);
			$('#subcat_body').append('<select id="subcat_lvl'+(level+1)+'" onchange="subcat_selector('+cid+','+(level+1)+')"></select>');
			for(var i=0; i<obj.titles.length; i++) $('#subcat_body select').append('<option value="'+obj.ids[i]+'">'+obj.titles[i]+'</option>');
			$('#subcat_body select').append('<option value="">Выберите подраздел...</option>');
		}
	}
	return false;
}

function region_selector(parent_id, level)
{
	var title = $('#region_body select option:selected').text();
	var cid = $('#region_body select option:selected').val();
  if(cid.length == 0) return false;
  $('#region_body select').remove();
	$('#region_body').append('<a id="regionlink_'+level+'" class="arr_right" href="javascript:void(0);" onclick="selector_back('+parent_id+', '+level+', \'region\')" style="margin-right:12px;">Грузимся, ждите...</a>');
  if(cid == 1)
  {
	  $('#regionlink_'+level).html(title);
	  return false;
  }
  $.getJSON('/sys/ajax/regionlist/', {id: cid, lvl: level}, onAjaxSuccess );
	function onAjaxSuccess(obj)
	{
		if(typeof(obj.id) !== 'undefined') //Если конец, то...
		{
			$('#regionlink_'+level).html(title);
		}
		else // Если ещё не конец, то...
		{
			$('#regionlink_'+level).html(title);
			$('#region_body').append('<select id="region_lvl'+(level+1)+'" onchange="region_selector('+cid+','+(level+1)+')"></select>');
			for(var i=0; i<obj.titles.length; i++)
				$('#region_body select').append('<option value="'+obj.ids[i]+'">'+obj.titles[i]+'</option>');
			$('#region_body select').append('<option value="">Выберите...</option>');
		}
	}
	return false;
}

function selector_back(cid, level, type)
{
	$('#'+type+'_body select').remove();
	$('#'+type+'link_'+level).remove();
	if(level == 1) { cid = 1; $('#'+type+'link_2').remove(); }
	if(level >= 1) $('#'+type+'link_3').remove();
	$('#'+type+'_body').append('<select id="'+type+'_lvl'+level+'" onchange="'+type+'_selector('+cid+', '+level+')"><option value="">Грузимся, ждите...</option></select>');
  $('#'+type+'_lvl'+level).attr("disabled", "disabled");
	if(type == 'subcat')
	{
		$('#form_simple').show();
		$('#form_estate').hide();
		$('#form_car').hide();
		$.getJSON('/sys/ajax/subcat/', {id: cid, lvl: level}, onAjaxSuccess );
	}
	if(type == 'region') $.getJSON('/sys/ajax/regionlist/', {id: cid, lvl: level}, onAjaxSuccess );
	function onAjaxSuccess(obj)
	{
		$('#'+type+'_body select option').remove();
		if(level == 1) $('#'+type+'_body select').append('<option value="1">Вся Россия</option>');
		for(var i=0; i<obj.ids.length; i++) $('#'+type+'_body select').append('<option value="'+obj.ids[i]+'">'+obj.titles[i]+'</option>');
		$('#'+type+'_body select').append('<option value="">Выберите...</option>');
	}
	$('#'+type+'_lvl'+level).removeAttr("disabled");
	return false;
}

function back(level)
{
	$('#cat_lvl'+(level+1)).remove();
	$('#link_'+level).remove();
	$('#ajax_body').append('<select id="cat_lvl'+(level)+'" onchange="get_subcat('+(level)+')">Грузимся, ждите...</select>');
	$('#cat_lvl'+level+' option:selected').html('Грузимся, ждите...');
  $('#cat_lvl'+level).attr("disabled", "disabled");
  $.getJSON('/sys/ajax/catlist/', {data: 'subcat', lvl: level-2}, onAjaxSuccess );
	function onAjaxSuccess(obj)
	{
		for(var i=0; i<obj.ids.length; i++) $('#ajax_body select').append('<option value="'+obj.ids[i]+'">'+obj.titles[i]+'</option>');
		$('#ajax_body select').append('<option value="">Выберите подраздел...</option>');
	}
	$('#cat_lvl'+level).removeAttr("disabled");
	return false;
}

function get_region(level, type)
{
	var title = $('#ajax_body select option:selected').text();
	var cid = $('#ajax_body select option:selected').val();
  var tmp_lvl = level;
	if(cid.length == 0) return false;
	if(level = 3 && type == 2 && cid == -1)
	{
		$('#ajax_body select').remove();
		$('#ajax_body').append('<a href="javascript:void(0);" onclick="back_region('+cid+', '+type+')">'+title+'</a>');
		$('#division_box').show();
		return false;
	}

	$('#ajax_body select').attr("disabled", "disabled");
	$('#ajax_body select option:selected').html('Грузимся, ждите...');
  $.getJSON('/sys/ajax/regionlist/', {id: cid, lvl: tmp_lvl}, onAjaxSuccess );
	function onAjaxSuccess(obj)
	{
		if(obj.ids.length == 0 || (tmp_lvl == 2 && type == 1))
		{
			$('#ajax_body select').remove();
			$('#ajax_body').append('<a href="javascript:void(0);" onclick="back_region('+cid+', '+type+')">'+title+'</a>');
		}
		else
		{
			$('#ajax_body select').remove();
			$('#ajax_body').append('<a class="arr_right" href="javascript:void(0);" onclick="back_region('+cid+', '+type+')">'+title+'</a>&nbsp;&nbsp;<select id="region_lvl'+(tmp_lvl+1)+'" onchange="get_region('+(tmp_lvl+1)+', '+type+')"></select>');
			for(var i=0; i<obj.ids.length; i++) $('#ajax_body select').append('<option value="'+obj.ids[i]+'">'+obj.titles[i]+'</option>');
			if(tmp_lvl == 2 && type == 2) $('#ajax_body select').append('<option value="-1">Другой</option>');
			$('#ajax_body select').append('<option value="" selected="selected">Выберите...</option>');
		}
	}
	return false;
}

function back_region(level)
{
	$('#cat_lvl'+(level+1)).remove();
	$('#link_'+level).remove();
	$('#ajax_body2').append('<select id="cat_lvl'+(level)+'" onchange="get_region_search('+(level)+')"></select>');
	$('#cat_lvl'+level+' option:selected').html('Грузимся, ждите...');
  $('#cat_lvl'+level).attr("disabled", "disabled");
  $.getJSON('/sys/ajax/regionlist/', {id: cid, lvl: tmp_lvl}, onAjaxSuccess );
	function onAjaxSuccess(obj)
	{
		for(var i=0; i<obj.ids.length; i++) $('#ajax_body2 select').append('<option value="'+obj.ids[i]+'">'+obj.titles[i]+'</option>');
		$('#ajax_body2 select').append('<option value="">Выберите подраздел...</option>');
	}
	$('#cat_lvl'+level).removeAttr("disabled");
	return false;
}

function get_region_header(lvl)
{
	var cid = $('#region_lvl'+(lvl)).val();
  if(cid.length == 0) return false;
	$('#region_lvl'+(lvl+1)).html('Грузимся, ждите...');
  $.getJSON('/sys/ajax/region_header/', {id: cid, level: lvl}, onAjaxSuccess );
	function onAjaxSuccess(obj)
	{
		if(lvl == 1)
		{
			$('#region_lvl'+(lvl+1)+' option').remove();
			for(var i=0; i<obj.ids.length; i++) $('#region_lvl'+(lvl+1)).append('<option value="'+obj.ids[i]+'">'+obj.titles[i]+'</option>');
			$('#region_lvl'+(lvl+1)).append('<option value="">Выберите город</option>');
		}
	}
	return false;
}

function favorites(mid, cid)
{
	$('#favorites_link').html('Ждите...');
  $.getJSON('/sys/ajax/favorites/', {m_id: mid, c_id: cid}, onAjaxSuccess );
	function onAjaxSuccess(obj) { $('#favorites_link').html(obj.title); }
	return false;
}

function rate(cid, aid, vote)
{
	var old = $('#vote'+aid).html();
	$('#vote'+aid).html(vote);
	$.getJSON('/sys/ajax/rate/', {c_id: cid, a_id: aid, nvote: vote, ovote: old}, onAjaxSuccess );
	function onAjaxSuccess(obj) { $('#votep'+aid).hide(); $('#votem'+aid).hide(); $('#vote'+aid).html(vote); }
	return false;
}

function prolong(type, id)
{
	$.getJSON('/sys/ajax/prolong/', {c_id: type, a_id: id}, onAjaxSuccess );
	function onAjaxSuccess(obj) { $('#prolong_'+type+'_'+id).hide(); $('#valid_'+type+'_'+id).html(obj.date); }
	return false;
}


function del_adv(id)
{
	$('#adv_'+id).hide();
	$('#adv_edit_'+id).hide();
  $.getJSON('/sys/ajax/deladv/', {adv_id: id});
	return false;
}

function del_comment(id, cid, mid)
{
	$('#comment'+id).hide();
  $.getJSON('/sys/ajax/delcomment/', {comment_id: id, adv_id: mid, cat_id: cid});
	return false;
}

function del_cat(id)
{
	$('#cat_'+id).hide();
  $.getJSON('/sys/ajax/delcat/', {cat_id: id});
	return false;
}

function print_discount()
{
	var header = '<html><head><title>Купон на скидку</title><body onLoad="window.print();">';
	var footer = '</body></html>';
	var w = window.open('','name','width=500,height=500');
	w.document.write(header+$('#discount_html').html()+footer);
	w.document.close();
}

function search_subscribe()
{
	$.getJSON('/sys/ajax/subscribe/', onAjaxSuccess );
	function onAjaxSuccess(obj) { $('#subscribe_link').hide(); $('#subscribe_link').after('<h1>Подписаны</h1>'); }
  return false;
}

function sumbit_form(form_name)
{
 	var are_we_good = true;
 	var msg = '<h2 style="margin: 0px; color: red">Не все обезательные поля заполнены!</h2>';
  $('#msg').html('Обрабатываем данные...');
  if(form_name == 'submit_simple')
  {
  	if( $('#title').val().length < 1 ) {$('#title').css('border', '1px solid red'); are_we_good = false;}
  	else { $('#title').css('border', ''); }
  	if( $('#description').val().length < 1 ) {$('#description').css('border', '1px solid red'); are_we_good = false;}
  	else { $('#description').css('border', ''); }
  }

  if(form_name == 'submit_car')
  {
  	if( $('#brand option:selected').val() < 0 ) {$('#brand').css('border', '1px solid red'); are_we_good = false;}
  	else { $('#brand').css('border', ''); }
  	if( $('#model option:selected').val() < 0 ) {$('#model').css('border', '1px solid red'); are_we_good = false;}
  	else { $('#model').css('border', ''); }
  	if( $('#price_car').val().length < 1 ) {$('#price_car').css('border', '1px solid red'); are_we_good = false;}
  	else { $('#price_car').css('border', ''); }
  	if( $('#year').val().length < 1 ) {$('#year').css('border', '1px solid red'); are_we_good = false;}
  	else { $('#year').css('border', ''); }
  }

  if(form_name == 'submit_estate')
  {
  	if( $('#sq_all').val().length < 1 ) 
  	{
  		$('#sq_all').css('border', '1px solid red'); 
  		are_we_good = false;
  	}
  	else 
  	{ 
  		$('#sq_all').css('border', ''); 
  	}
   	if( $('#price_estate').val().length < 1  ) 
   	{
   		$('#price_estate').css('border', '1px solid red'); 
   		are_we_good = false;
   	}
  	else 
  	{ 
  		$('#price_estate').css('border', ''); 
  	}
  }

  if(form_name == 'submit_contacts')
  {
  	if( $('#auth_mail').val().length < 1 && $('#auth_password').val().length < 1 ) //Регистрируемся
  	{
  		if( $('#name').val().length < 1 || $('#email').val().length < 1 || $('#password').val().length < 1 || $('#phone').val().length < 1 || ( $('#password').val() != $('#confirm').val() ) )
	   	{
	   		are_we_good = false;
	   	}
  	}
  	else//Авторизуемся
  	{
  		if( $('#auth_mail').val().length < 1 || $('#auth_password').val().length < 1 )
  		{
	   		are_we_good = false;
	   	}
  	}

  	if(are_we_good)
  	{
	  	$('#msg').html('Проверяем введённые данные!');
      //alert('12313');
   		$.getJSON('/sys/ajax/reguser/', {name: $('#name').val(), email: $('#email').val(),
   		 password: $('#password').val(), confirm: $('#confirm').val(), phone: $('#phone').val(), company: $('#company').val(),
   		 discount: $('#discount').val(), discount_type: $('#discount_type').val(), add_contact: $('#add_contact').val(),
   		 usercity: $('#usercity').val(), auth_mail: $('#auth_mail').val(), auth_password: $('#auth_password').val()}, onAjaxSuccessUser );
			msg = '';
			are_we_good = false;
	 	}
  }

  if(!are_we_good && msg.length > 0)
  {
  	$('#msg').html(msg);
  	$.scrollTo( $('#msg'), 800, { offset:{ top: -50, left: 0 }} );
  }
  return are_we_good;
}

function onAjaxSuccessUser(obj)
{
	if(obj.code == 200)
	{
		$('#user_id').val(obj.msg);		
		$('#msg').html('Всё хорошо, продолжаем');
		$('#submit_contacts').unbind();
		$('#submit_contacts').submit();
	}
	else
	{
		$('#msg').html('<span style="color: #FF0000">'+obj.msg+'</span>');		
		$.scrollTo( $('#msg'), 800, { offset:{ top: -50, left: 0 }} );
	}
}

function ajax_sumbit_form(form_name)
{
	var options = { beforeSubmit: before, success: after, url: '/sys/ajax/submit/' };
  function before()
  {
    $('#msg').html('Обрабатываем данные...');
    return true;
  }

 	function after(responseText, statusText)
 	{
    if(statusText == 'success')
		{
			window.location = responseText;
		}
		else
		{
			$('#msg').html('Ошибка!');
		}
	}

	$('#'+form_name).ajaxSubmit(options);
  return false;
}