/*  locatr.net JavaScript Effekts, Ajax and Helpers
 *  by Felix Schuchmann (schuchmann@gmail.com)
 *  thanks to mad4milk for moo.fx and to Sam Stephenson for prototype!
/*--------------------------------------------------------------------------*/

var Locatr = Class.create();
Locatr.prototype = {
	//Variables
	rFx: [], //disable buttons when animation is running - array
	divChanged: [],
	
	//constructor
	initialize: function(){	},
	
	//methods
	getCity: function(zip){
		if(zip.length>=5) {
			new ajax ('/getcity.php', {
				postBody: 'city='+zip, 
				onComplete: function(foo){$('cityresult').innerHTML=foo.responseText; show('cityresult')}
			});
		}else hide('cityresult');
		return false;
	},
	
	setCity: function(cityform){
		var cityid = radioWert(cityform);
		if(cityid.value>0) {
			new ajax ('/setcity.php', {
				postBody: 'cityid='+cityid.value+'&zip='+$('zip').value, 
				update: $('container')
			});
		}
		return false;
	},
	
	checkEmail: function(that) {	
		var regex = new RegExp(/[jpg|jpeg|JPG|JPEG|gif|GIF|png|PNG|bmp|BMP]$/);
		result = regex.test($('image').value);
		if(result == 0){
			alert("Please select a Image");
		}else{	
			var email = $('regemail').value;
			if(checkEmailJS(email)) {
				new ajax ('/checkEmail.php', {
					postBody: 'email='+escape(email), 
					onComplete: function(foo){if(foo.responseText=="true"){$('imageForm').submit();}else{ alert(foo.responseText); } }
				});		
			}else{ alert("Enter your EMail Address!"); }
		}
		return false;
	},
		
	spinTheWheel: function(whichcircle, goDistance, goDirection) {
		if((goDirection=='counterclockwise' && users[whichcircle].length<=(User.pos.next[whichcircle]+1))
			|| (goDirection=='clockwise' && User.pos.last[whichcircle]==0)) return false;
		if((typeof this.rFx[whichcircle] == 'undefined') || ((typeof this.rFx[whichcircle] == 'boolean') && (this.rFx[whichcircle] == true))) {	
			eval("$('"+whichcircle+"RotButton"+goDirection+"').disabled=true");
			var elements = document.getElementsByClassName(whichcircle);
			elements.each(function(elm, i){
				tFx[elm] = new fx.Rotate(elm, {elId: i, circle:whichcircle, duration: 5000, distance: goDistance, direction:goDirection,
								onComplete: function(foo){App.resetCircleSpin(whichcircle);}
				});
				tFx[elm].rotate();
			});
			this.rFx[whichcircle] = false;
		}
	},
	
	resetCircleSpin: function(whichcircle) {
		this.divChanged = new Array();
		this.rFx[whichcircle] = true;
		if(User.pos.last[whichcircle]>0)
			eval("$('"+whichcircle+"RotButtonclockwise').disabled=false");
		if(users[whichcircle].length>(User.pos.next[whichcircle]+1))
			eval("$('"+whichcircle+"RotButtoncounterclockwise').disabled=false");
	}
}
var App = new Locatr();

var myUser = Class.create();
myUser.prototype = {
	ajaxActive: [],
	ajaxDisabled: [],
	pos: [],	
	
	initialize: function(){	
		this.pos.next = [];
		this.pos.last = [];
		this.pos.next.inner  = 0;
		this.pos.next.middle = 0;
		this.pos.next.outer  = 0;
		this.pos.last.inner  = 0;
		this.pos.last.middle = 0;
		this.pos.last.outer  = 0;
		this.ajaxDisabled.inner  = false;
		this.ajaxDisabled.middle = false;
		this.ajaxDisabled.outer  = false;
	},
	
	usersLoaded: function() {
		this.pos.next.inner = (users.inner.length<6?users.inner.length:6);
		this.pos.next.middle = (users.middle.length<14?users.middle.length:14);
		this.pos.next.outer = (users.outer.length<22?users.outer.length:22);
	},
	
	logout: function() {
		new ajax ('/logout/', {update:'container', postBody:'ajax=true'});
		$('loginli').style.display='';
		$('logoutli').style.display='none';
		return false;
	},

	login: function() {
		var email = $('lemail').value;
		if(checkEmailJS(email) && $('lpassword').value.length>0) {
			new ajax ('/login/', {
				postBody: 'email='+escape(email)+'&autologin=true&password='+hex_md5($('lpassword').value.replace(/\s+$/,'').replace(/^\s+/,'')),
				onComplete: function(foo){
						if(foo.responseText=="true"){
							$('container').innerHTML = '<h1>Login OK</h1>Loading <strong>The Circle of distance</strong>';
							tFx['login'].toggle();
							$('loginli').style.display='none';
							$('logoutli').style.display='';
							setTimeout("location.href='/';", 1000);
							//new ajax ('/usercircle.php', {update:'container'}); //bug: users JSON wird nicht beim ajax load initialisiert.
						}else{
							$('container').innerHTML = '<h1>'+foo.responseText+'</h1>';
						} 
					}
			});
		}
		return false;
	},
	requestNewPass: function(email) {
		new ajax ('/login/', {
			postBody: 'lostpwd_email='+escape(email),
			onComplete: function(foo){$('container').innerHTML = '<h1>'+foo.responseText+'</h1>';}
		});
		return false;
	},
	
	mail: function(user_id) {
		if($('maildiv')==null) alert("Please log in first!");
		else {
			$('maildiv').innerHTML = 'Mail an: '+user_id+' <div id="spinner"></div><span class="closeX"><a href="#" onclick="mail.toggle(); return false;"><span>X</span></a></span>';
			new ajax ('/getusermail.php', {postBody: 'user='+user_id, update:'maildiv'});
			mail.toggle();
		}
	},
	sendmail: function() {
		/*if($('sendmail_mailtopic')==null || $('sendmail_mailtext')==null || $('sendmail_user_id')==null
			|| $('sendmail_mailtopic').value=="" || $('sendmail_mailtext').value=="" || $('sendmail_user_id').value=="")
			alert("No Mailform filled!");
		else {
			new ajax ('/mail/send/ajax/', {postBody: 'user_id='+$('sendmail_user_id').value+'&mailtopic='+encodeURI($('sendmail_mailtopic').value)+'&mailtext='+encodeURI($('sendmail_mailtext').value)});
			mail.toggle();
		}*/
		return true;
	},
	
	getNext: function(circle) {
		this.pos.next[circle]++;
		this.pos.last[circle]++;
		if(users[circle].length<=this.pos.next[circle]) return "undefined";		
		if(users[circle].length<(this.pos.next[circle]+7) && !User.ajaxDisabled[circle] && ((typeof this.ajaxActive[circle]=="undefined") || ((typeof this.ajaxActive[circle]=="boolean") && this.ajaxActive[circle]==false))) {
			this.ajaxActive[circle] = true;
			new ajax ('/getUsers.php', {
				postBody: 'circle='+circle+"&pos="+users[circle].length,
				onComplete: function(foo){
					eval("var tmp = " + foo.responseText);
					if(tmp.inner.length<6)   User.ajaxDisabled['inner']  = true;
					if(tmp.middle.length<14) User.ajaxDisabled['middle'] = true;
					if(tmp.outer.length<22)  User.ajaxDisabled['outer']  = true;
					for (var i in tmp.inner)  if(typeof tmp.inner[i]=="object")  users.inner.push(tmp.inner[i]);
					for (var i in tmp.middle) if(typeof tmp.middle[i]=="object") users.middle.push(tmp.middle[i]);
					for (var i in tmp.outer)  if(typeof tmp.outer[i]=="object")  users.outer.push(tmp.outer[i]);					
					User.ajaxActive[circle] = false;
				}
			});	
		}
		return users[circle][this.pos.next[circle]];
	},
	
	getLast: function(circle) {
		this.pos.next[circle]--;
		this.pos.last[circle]--;
		if(this.pos.last[circle]<0) return "undefined";
		return users[circle][this.pos.last[circle]];
	}
}
var User = new myUser();



fx.Rotate = Class.create();
Object.extend(Object.extend(fx.Rotate.prototype, fx.Layout.prototype), {	
	increase: function() {
		var mitte	= 350;
		var imageSize	= 60/2;
		var toTop	= mitte+this.options.distance*Math.sin(this.now*Math.PI/180)-imageSize;
		var toLeft	= mitte+this.options.distance*Math.cos(this.now*Math.PI/180)-imageSize;
		this.el.style.top	= toTop +"px";
		this.el.style.left	= toLeft+"px";
		
		if(this.options.direction=='counterclockwise' && toTop>350 && toLeft>320 && toLeft<390 ) {
			this.showUser();
		}else if(this.options.direction=='clockwise' && toTop>350 && toLeft+60<390 && toLeft+60>320 ) {
			this.showUser();
		}
	},
	
	showUser: function() {
		if((typeof App.divChanged[this.options.distance+" "+this.options.elId]=="undefined")) {
			App.divChanged[this.options.distance+" "+this.options.elId] = true;
			if(this.options.direction=='clockwise' && (thisUser=User.getLast(this.options.circle))=="undefined") this.el.innerHTML="";
			else if(this.options.direction=='counterclockwise' && (thisUser=User.getNext(this.options.circle))=="undefined") this.el.innerHTML="";
			else{
				this.el.innerHTML=
					'<a title="'+thisUser['distance']+'km" onclick="return User.mail('+thisUser['user_id']+')" href="#'+thisUser['user_id']+'">\n'+
					'<img class=\"user_img_tiny\" src="'+thisUser['user_image']+'" alt="img"/>\n'+
					'</a>';
			}
		}
	},

	rotate: function() {
		var from = parseInt(this.el.id.substring(3));
		if(this.options.direction=='counterclockwise') {
			this.custom(from, from-360);
		}else
			this.custom(from, from+360);
	}
});

//mail user event handler



//hide and show divs with moo.fx
var tFx = Array();
var hFx = Array();
function initFx(elm) {
	if($(elm).style.display=='none') {
		tFx[elm] = new fx.Height(elm);
		tFx[elm].hide();
		$(elm).style.display='';
	}else if(typeof tFx[elm] == 'undefined') {
		tFx[elm] = new fx.Height(elm);
	}
}

function toggle(elm) {
	initFx(elm);
	tFx[elm].toggle();
	hFx[elm] = false;
	return false;
}

function show(elm) {
	if(typeof hFx[elm] == 'boolean' && hFx[elm]) {
		tFx[elm].toggle();
		hFx[elm] = false;
	}else if(typeof tFx[elm] == 'undefined'){
		initFx(elm);
		tFx[elm].toggle();
		hFx[elm] = false;		
	}
	return false;
}

function hide(elm) {
	if(typeof hFx[elm] == 'boolean' && !hFx[elm]) {
		initFx(elm);
		tFx[elm].toggle();
		hFx[elm] = true;
	}
	return false;
}

function alterNate(elm){
	if (!elm.base) elm.base = elm.value
	if (elm.value == elm.base) elm.value = "";
	else if (elm.value == "") elm.value = elm.base;
}
function radioWert(rObj) {
	for (var i=0; i<rObj.length; i++) if (rObj[i].checked) return rObj[i];
	return false;
}
function checkEmailJS(s) {
	var a = false;
	var res = false;
	if(typeof(RegExp) == 'function'){
	 var b = new RegExp('abc');
	 if(b.test('abc') == true){a = true;}
	}
	
	if(a == true){
	 reg = new RegExp('^([a-zA-Z0-9\\-\\.\\_]+)'+
	                  '(\\@)([a-zA-Z0-9\\-\\.]+)'+
	                  '(\\.)([a-zA-Z]{2,4})$');
	 res = (reg.test(s));
	}else{
	 res = (s.search('@') >= 1 &&
	        s.lastIndexOf('.') > s.search('@') &&
	        s.lastIndexOf('.') >= s.length-5)
	}
	return(res);
}



/* Mail Fuctions */
function showmail(mailid) {
	var viewer = $('mailviewer'+mailid);
	if(viewer.style.visibility=="visible") {
		hidemailbox("mailviewer"+mailid);
	}else{
		if(viewer.innerHTML=='lade Mail...')
			new ajax ('/mail/load/'+mailid, {
					update: 'mailviewer'+mailid,
					//postBody: 'email='+escape(email), 
					onComplete: function(){showmailbox("mailviewer"+mailid)}
				});
		else	showmailbox("mailviewer"+mailid);
	}
}/*
function showmailbox(obj) {
	var viewer = $(obj);
	//hide(viewer);
	toggle(viewer);
}
function hidemailbox(obj) {
	var viewer = $(obj);
	hide(viewer);
}*/

function showmailbox(obj) {
	var viewer = $(obj);	
	hideOld(viewer);
	fadeIn(obj, 0, getObjectHeight(viewer));
	showOld(viewer);
}
function hidemailbox(obj) {
	var viewer = $(obj);
	fadeOut(obj, 100, getObjectHeight(viewer));
}
function fadeIn(objId,opacity,size) {
	obj = $(objId);
	if (opacity <= 100) {
		setOpacity(obj, opacity);
		setHeight(obj, size/100*opacity); //% heigth
		opacity += 10;
		window.setTimeout("fadeIn('"+objId+"',"+opacity+","+size+")", 100);
	}
}
function fadeOut(objId,opacity,size) {
	obj = $(objId);
	if (opacity >= 0) {
		setOpacity(obj, opacity);
		setHeight(obj, size/100*opacity); //% heigth
		opacity -= 10;
		window.setTimeout("fadeOut('"+objId+"',"+opacity+","+size+")", 100);
	}else{	
		hideOld(obj);
	}
}
function hideOld(elem) {
	elem.style.visibility = 'hidden';
	elem.style.position = 'absolute';
	elem.style.height = null; //reset heigth to default max
}
function showOld(elem) {
	elem.style.visibility = 'visible';
	elem.style.position = 'relative';
}
function setHeight(elem, size)  {
	elem.style.height = size+"px";
}
// Retrieve the rendered height of an element
function getObjectHeight(elem)  {
    var result = 0;
	if (elem.offsetHeight) {
        result = elem.offsetHeight;
    } else if (elem.clip && elem.clip.height) {
        result = elem.clip.height;
    } else if (elem.style && elem.style.pixelHeight) {
        result = elem.style.pixelHeight;
    }
    return parseInt(result);
}
function setOpacity(obj, opacity) {
	opacity = (opacity == 100)?99.999:opacity;
	
	// IE/Win
	obj.style.filter = "alpha(opacity:"+opacity+")";
	
	// Safari<1.2, Konqueror
	obj.style.KHTMLOpacity = opacity/100;
	
	// Older Mozilla and Firefox
	obj.style.MozOpacity = opacity/100;
	
	// Safari 1.2, newer Firefox and Mozilla, CSS3
	obj.style.opacity = opacity/100;
}
