/*
window.onload = function () {
	if ( id( 'user' ) ) var strangeMenu = new StrangeMenu( id( 'user' ).getElementsByTagName('ul')[ 0 ] )
}

function StrangeMenu ( element ) {

	var o = this
	o.el = element

	o.setBorder =		function ( e ) {
					var e = e || event
					var t = e.target || e.srcElement
					if ( !/\bover\b/.test( o.el.className ) ) o.el.className += ' over'
					if ( t == o.el ) return true
					if ( t.tagName == 'A' ) t = t.parentNode
					if ( !/\bover\b/.test( t.className ) ) t.className += ' over'
				}

	o.removeBorder =	function ( e ) {
					var e = e || event
					var t = e.target || e.srcElement
					//if ( !/\bover\b/.test( o.el.className ) ) o.el.className += ' over'
					if ( t == o.el ) return true
					if ( t.tagName == 'A' ) t = t.parentNode
					if ( /\bover\b/.test( o.el.className ) ) t.className = t.className.replace( 'over', '' )
				}

	o.go =			function ( e ) {
					var e = e || event
					var t = e.target || e.srcElement
					if ( t.tagName == 'LI' ) t = t.getElementsByTagName( 'a' )[ 0 ]
					else return true
					location.href = t.href
				}

	o.el.onmouseover =	o.setBorder
	o.el.onmouseout =	o.removeBorder
	o.el.onclick =		o.go

}
*/

Rater_backend = '/ajax/rater/';

$(document).ready(function () {
	$('span.R').hover( overRaters, outRaters )

	if ( id('lf') ) {
		var loginField = new MagicField( id( 'lf' ), 'Логин' );
		var passwordField = new MagicField( id( 'pf' ), '******', true );
	}
})

function overRaters () {
	if (!$(this).hasClass('processing') && !$(this).hasClass('Rx')) {
		var Block = document.createElement('b');
		var Up = document.createElement('a');
		var Down = document.createElement('a');
		$(Up).add(Down).attr('href', 'javascript: void(0)');
		$(Up).addClass('up');
		//Block.style.left = Math.round((this.clientWidth - 15) / 2) + 'px';
		Block.appendChild(Down);
		Block.appendChild(Up);
		this.appendChild(Block);
		$(Block).click(rater);
	}
}
function outRaters () {
	var t = $(this);
	if (!t.hasClass('processing') && !t.hasClass('Rx')) {
		t.children("b").remove();
	}
}


function rater() {
	var elem = this.parentNode
	var voteSide = (arguments[0].target.className) ? arguments[0].target.className : 'down'
	if (!$(elem).hasClass(voteSide)) {
		$(elem).removeClass('up').removeClass('down').addClass('processing ' + voteSide)
		var vote = (voteSide == 'up') ? 1 : -1
		var ID = elem.getAttribute('id')
		var area = ID.substring(1,2)
		ID = ID.substring(2)
		$.ajax({
			url:		Rater_backend,
			type:		'POST',
			data:		{ area: area, id: ID, vote: vote },
			dataType:	'json',
			success:	function (response, txt_status) {
						var elem = $('#x' + area + ID).get(0)
						if (response.alert) {
							alert(response.alert)
							elem.removeChild(elem.getElementsByTagName('b')[0])
						} else {
							elem.innerHTML = response.rate;
							var curCls = elem.className.replace('neg', '')
							elem.className = (response.rate < 0) ? curCls + ' neg' : curCls
						}
						$(elem).removeClass('processing')
						/*elem.setAttribute('title', elem.getAttribute('title').substring(0, 9) + response.rate)
						console.log(elem.getAttribute('title').substring(0, 9))*/
					}
		});
	}
}


function TA_insert(myField, myValue) {
    if (document.selection) {
        myField.focus();

        sel = document.selection.createRange();
        sel.text = myValue;

    } else if (myField.selectionStart || myField.selectionStart == '0') {

        myField.focus();

        var startPos = myField.selectionStart;
        var endPos = myField.selectionEnd;
        myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);
        myField.setSelectionRange(endPos+myValue.length, endPos+myValue.length);
    } else {
        myField.value += myValue;
    }
}

function TA_wrap(myField, t1, t2) {
    if (document.selection) {
        myField.focus();
        var sel = document.selection.createRange();
       	sel.text = t1 + sel.text + t2;
    } else if (myField.selectionStart || myField.selectionStart == '0') {
        myField.focus();

        var startPos = myField.selectionStart;
        var endPos = myField.selectionEnd;

        myField.value = myField.value.substring(0, startPos) + t1 + myField.value.substring(startPos, endPos) + t2 + myField.value.substring(endPos, myField.value.length);
        if(startPos == endPos) {
        	var c = endPos + t1.length;
        } else {
        	var c = endPos + t1.length + t2.length
        }
        myField.setSelectionRange(c, c);
    } else {
        myField.value += t1 + t2;
    }
}



function id ( id ) { return document.getElementById( id ) }

function Message(text) {
	alert(text);
}

function Abuse(area, id) {
	$.post("/ajax/abuse", {area:area, id:id}, function(res) {
		if(res == "OK") {
			alert("Модераторы поставлены в известность");
		} else {
			alert(res);
		}
	});
	return false;
}

byClass = function(cl, element) {
	if (document.getElementsByClassName) return element.getElementsByClassName(cl)
	var retnode = []
	var myclass = new RegExp('\\b'+cl+'\\b')
	var elem = element.getElementsByTagName('*')
	for (var i = 0; i < elem.length; i++) {
		var classes = elem[i].className
		if (myclass.test(classes)) retnode.push(elem[i])
	}
	return retnode
};

$(function() {
	var $switches = $('span.switch')
	var switches = {}
	if ($switches[0]) {
		for(var cnt=0; cnt < $switches.length; cnt++) {
			switches[$switches[cnt].id] = new Switcher($switches[cnt], $('#'+$switches[cnt].getAttribute('rel'))[0]);
		}
	}

	if ( id( 'user' ) ) {
		if(window.owner && user.id == owner.id) {
			window.editLink = '<a class="edit" href="http://' + MY_DOMAIN + '/register/edit/avatar/">Изменить аватар</a>';
			$( '#user div.status' )[0].onclick = tagline.init;
		} else if(window.community && user.id == community.uid) {
			window.editLink = "<a class='edit' href='/community/" + community.id + "/ed/avatar/'>Изменить аватар</a>";
		} else {
			window.editLink = "";
		}
		if(window.editLink != "") {
			window.$editObj = $( '#user div.bC' );
			$( '#user .avatar' ).hover( avatarEdit.show, avatarEdit.hide );
		}
	}

})

var avatarEdit = {
	show:	function () { window.$editObj.append( window.editLink ); $( '#user a.edit' ).fadeIn( 180 ) },
	hide:	function () { $( '#user a.edit' ).fadeOut( 180, function () { $( '#user a.edit' ).remove() } ) }
}

var tagline = {

	init:	function ( e ) {
			var e = e || event
			var t = e.target || e.srcElement
			if ( t.tagName == 'A' ) {
				return ( !$( '#user div.status' ).hasClass( 'editing' ) )
					? !! tagline.edit()
					: !! ( t.className == 'save' )
							? !! tagline.save()
							: !! tagline.cancel()
			}
		},

	edit:	function () {
			$( '#user div.status' ).addClass( 'editing' )
			if ( !$( '#user div.status a.cancel' )[0] ) {
				$( '#user div.status div.in a' ).before( '<textarea></textarea>' )
				$( '#user div.status div.in a' ).addClass( 'editStatus' )
				$( '#user div.status div.in' ).append(
					'<a href="#" class="save">Сохранить</a> ' +
					'<a href="#" class="cancel">Отмена</a>'
				)
			}
			$( '#user div.status textarea' ).show( 200 )
			$( '#user div.status span' ).hide( 100 )
			$( '#user div.status textarea' ).val( $( '#user div.status span' ).html() ).keydown( tagline.keydown )[0].focus()
		},

	save:	function () {
			if ( $( '#user div.status span' ).html() == $( '#user div.status textarea' ).val() ) return tagline.cancel()
			$( '#user div.status' ).addClass( 'processing' )
			$( '#user div.status textarea' ).attr( 'disabled', 'disabled' )
			$.post(
				'/ajax/tagline/',
				{ tagline: $( '#user div.status textarea' ).val() },
				function ( response ) {
					$( '#user div.status span' ).html( response ).show( 300 )
					$( '#user div.status textarea' ).hide( 200, function () {
						$( '#user div.status textarea' ).removeAttr( 'disabled' )
						$( '#user div.status' ).removeClass( 'editing' ).removeClass( 'processing' )
					} )
				}
			);
		},

	cancel:	function () {
			$( '#user div.status span' ).show( 300 )
			$( '#user div.status textarea' ).hide( 200, function () {
				$( '#user div.status textarea' ).removeAttr( 'disabled' )
				$( '#user div.status' ).removeClass( 'editing' )
			} )
		},

	keydown:function ( e ) {
			if ( /\b10|13\b/.test( e.keyCode ) ) tagline.save()
			else if ( e.keyCode == 27 ) tagline.cancel()
		}

}

function Switcher (switchCaller, switchableHolder) {
	this.swicthCaller = switchCaller
	this.swicthableHolder = switchableHolder
	var switcher = this

	if (switcher.swicthCaller.getAttribute('rel')) var callerRel = switcher.swicthCaller.getAttribute('rel')
	else return true

	switcher.swicthCaller.onclick = function (e) {
		var e = e || event
		var t = e.target || e.srcElement
		while(t.nodeType == 1 && t.tagName != 'A') t = t.parentNode
		if (t.nodeType == 1 && t.tagName == 'A' && !/\bcur\b/.test(t.className)) return !!switcher.go(t)
		else return (/\bcur\b/.test(t.className)) ? false : true
	}

	switcher.go = function (t) {
		var targetRel = t.getAttribute('rel')

		$( switcher.swicthCaller).children( '.cur' ).removeClass('cur')
		$(t).addClass('cur')
		if (/\bsw\b/.test($( switcher.swicthCaller ).attr('rel'))) {
			var attrs = $( switcher.swicthCaller ).attr('rel').replace('sw ', '');
			attrs = attrs.split(' ')
			var values = t.getAttribute('rel').split(' ')
			for (var attr = 0; attr < attrs.length; attr++) {
				$('#'+ $( switcher.swicthCaller ).attr('rev') )[0].setAttribute(attrs[attr], values[attr].replace('.', ' '))
			}
		} else {
			$('#'+ callerRel +' .cur').removeClass('cur')
			$('#'+ callerRel +' #'+targetRel).addClass('cur')
			var $input = $('#'+ callerRel + ' input[name='+ callerRel +']')
			if ($input[0]) $input.val(targetRel)
		}
		try { dropdownersPrepare(); } catch(e) {}
	}
}


(function($) {
	$.postJSON = function(url, data, callback) {
		$.ajax({
			url: url,
			type: 'POST',
			data: data,
			dataType: "json",
			success: callback,
			error: function(x, t, e) {
				alert("Ошибка связи. Попробуйте ещё раз.\n(" + t + ")");
			}
		});
	}
})(jQuery);


function CreateMap(dom, typ, zoom, lat, lng) {
		Map = new GMap2(dom);
		Map.enableScrollWheelZoom();
		Map.enableContinuousZoom();
		Map.disableDoubleClickZoom();
		Map.addControl(new GSmallMapControl());
		Map.addControl(new GScaleControl());
		Map.addControl(new GHierarchicalMapTypeControl());
		Map.addControl(new GMapTypeControl());

		var Center = new GLatLng(lat, lng);
		Map.setCenter(Center, zoom);

		Marker = new GMarker(Center);
		Map.addOverlay(Marker);

		return {Map:Map, Marker:Marker};
}

function Float2Deg(d) {
	var deg = Math.floor(d);
	var min = (d - deg) * 60;
	var sec = Math.floor((min - Math.floor(min)) * 60);
	min = Math.floor(min);

	return deg + "&deg;" + min + "'" + sec + '"';
}



var hider = {
	add:	function ( action ) {
			if ( hider.el ) return false
			hider.el = document.createElement( 'div' )
			hider.el.id = 'loveHider'
			hider.el.style.height = document.documentElement.scrollHeight + 'px'
			hider.el.onclick = function () { if ( action ) action(); if ( hider.el ) hider.remove() }
			document.body.appendChild( hider.el )
		},
	remove:	function () {
			if ( hider.el )
				document.body.removeChild( hider.el )
			hider.el = null
		}
}

var SmileyBox = {
	$ta: null,

	show: function(sel) {
		var off, html, i;

		SmileyBox.$ta = $(sel);
		if(SmileyBox.$ta.length == 0) return false;

		html = "<div id='SmileyBox'>";
		for(i in Smileys) {
			html += "<img src='/i/smile/1/" + i + ".png' rel=\"" + Smileys[i] + "\" title=\"" + Smileys[i] + "\"/> ";
		}
		html += "</div>";
		hider.add(SmileyBox.close)
		$(document.body).append(html);

		off = SmileyBox.$ta.offset();
		$("#SmileyBox").css("margin-top", off.top + 5).css("left", parseInt(off.left + 5)).css("width", SmileyBox.$ta.width() - 30);
		$("#SmileyBox img").click(SmileyBox.insert);

		return false;
	},

	close: function() {
		$("#SmileyBox").remove();
		hider.remove();
	},

	insert: function() {
		var smile = " " + $(this).attr("rel") + " ";

		TA_insert(SmileyBox.$ta[0], smile);
		SmileyBox.close();

		return false;
	}
}

function MagicField ( element, text ) {
	var obj = this
	obj.field = element
	obj.text = text
	if ( obj.field.value == 0 ) obj.field.value = text
	if ( obj.field.value != obj.text ) obj.field.className = 'focus'

	obj.field.onfocus =	function () {
					if ( this.value == obj.text ) this.value = ''
					if ( this.value != obj.text ) this.className = 'focus'
				}

	obj.field.onblur =	function () {
					if ( this.value != '' ) return
					this.className = ''
					this.value = obj.text
				}

}

function popup(w, h, html) {
	$(document.body).append("<div id='popup'>" + html + "</div>");
	var l = parseInt(($(window).width() - w) / 2);
	var t = $(window).scrollTop() + parseInt(($(window).height() - h) / 2);
	$("#popup").css("width", w).css("height", h).css("top", t).css("left", l);
	hider.add(function() {
		$("#popup").remove();
	})
}

function wink(uid) {
	$.post("/ajax/wink/", {to: uid}, function(data) {
		popup(300, 38, data);
	});

	return false;
}