
// Main User class for 4TM.biz website

if (typeof(JS4TM)=="undefined")
	JS4TM = function(){};
if (typeof(JS4TM.Site)=="undefined")
	JS4TM.Site = function(){};
	
JS4TM.Site.User = {
	/**
	 * Constructor
	 */
	initialize: function() {
		
		// get current url
		var base_url = getCookie('BASE_URL');
		
		if (typeof(base_url)=='undefined' || !base_url) {
			window.location = 'index.php';
			return;
		}
		
		// init Language
		var current_lang = getCookie('LANG');
		if (typeof(current_lang)=='undefined' || ['es','en'].indexOf(current_lang) < 0) {
			current_lang = 'es';
		}
		
		lang = new JS4TM.Language(current_lang);
		
		// get logged_in cookie
		var logged_in = getCookie('logged_in');
		
		// world cup!
		$('header').down('ul').insert(
			new Element('li').insert(
				new Element('span').insert('•')
			).insert(
				new Element('a',{href: base_url + '/mundial'}).insert(
					new Element('span',{style: 'cursor: pointer;  background:url(../mundial/images/futbol.png) no-repeat; padding-left: 18px; margin-left: 2px;'}).insert('&nbsp;')
				).insert(
					new Element('b').insert(lang.say('World Cup Special'))
				)
			)
		)
		
		// is used logged in ?
		if (logged_in == 'true') {
			
			// update header
			$('header').down('ul').insert(
				new Element('li').insert(
					new Element('span').insert('•')
				).insert(
					new Element('a',{href: base_url + '/html/profile.php'}).insert(
						lang.say('Profile')
					)
				)
			).insert(
				new Element('li').insert(
					lang.say('Logged in as ')
				).insert(
					new Element('span', {
						className: 'username-'+ getCookie('logged_user_type')
					}).insert(
						getCookie('logged_user_id')
					)
				).insert(
					new Element('a',{href: base_url + '/auth/'+getCookie('logged_user_type')+'/auth.php?logout=true&goto='+encodeURIComponent(window.location)}).insert(
						lang.say('Logout')
					)
				)
			);
			
			// enable message form submition
			var form = $('footer').down('div.form').down('form');
			var email = form.down('input.email_message_text');
			email.value = lang.say('Your e-mail');
			var message = form.down('textarea.email_message_textarea');
			message.value = lang.say('Ask you question');
			var button = form.down('input.btn');
			button.value = lang.say('Send');
			if (form) {
				// disable form submit
				form.observe('submit',function(event){
					Event.stop(event);
				});
				email.observe('click',function(event){
					var ele = event.element();
					if (ele.value == lang.say('Your e-mail')) {
						ele.value = '';
						ele.focus();
					}
				});
				message.observe('click',function(event){
					var ele = event.element();
					if (ele.value == lang.say('Ask you question')) {
						ele.value = '';
						ele.focus();
					}
				});
				button.observe('click',function(){
					// send comment
					new Ajax.Request(base_url+'/html/ajax/send_message.php', { 
						method: 'get',
						parameters: form.serialize(),
						onCreate: function(){
							button.value = lang.say('Sending... please wait.');
							form.disable();
						},
					  	onSuccess: function(transport){
							// before calling the call back function, check for syntax errors
							var response;
							try {
								response = transport.responseText.evalJSON();
							} catch (e) {
								alert(lang.say('Error submitting comment, invalid response.'));
								return false;
							};
							if (response.status=='error') {
								if (response.errors[0].reason == 'USER_NOT_LOGGED_IN') {
									alert(lang.say('Your session expired.'));
								} else {
									alert(lang.say('Errors found during ajax load') + ': ' + "\n" + lang.say(response.errors[0].reason));
								};
								button.value = lang.say('Send');
								form.enable();
								return;				
							}
							// when ok!
							form.hide();
							form.update('<br/><br/>'+lang.say('Message was sent.'));
							form.appear();														
					    },
						onFailure: function() {
							alert(lang.say('Error submitting message.'));
							button.value = lang.say('Send');
							form.enable();
						}
						
					 });
				});
			};
			
			// in profile webpage enable form action
			if ($('user_profile_form')) {
				$('user_profile_form').observe('submit',function(event){
					Event.stop(event);
				});
				$('user_profile_form').down('input.btn').observe('click',function(){
					$('user_profile_form').down('div.message').update('').hide();
					
					new Ajax.Request(base_url+'/html/ajax/update_profile.php', { 
						method: 'get',
						parameters: $('user_profile_form').serialize(),
						onCreate: function(){
							$('user_profile_form').disable();
							$('user_profile_form').down('span.loading').show();
						},
						onComplete: function(){
							$('user_profile_form').enable();
							$('user_profile_form').down('span.loading').hide();
						},
					  	onSuccess: function(transport){
							
							var response;
							
							// before calling the call back function, check for syntax errors
							try {
								response = transport.responseText.evalJSON();
							} catch (e) {
								alert(lang.say('Error submitting comment, invalid response.'));
								return false;
							};
							
							if (response.status=='error') {
								if (response.errors[0].reason == 'USER_NOT_LOGGED_IN') {
									$('user_profile_form').down('div.message').update(lang.say('Your session expired.'));
								} else {
									$('user_profile_form').down('div.message').update(lang.say('Errors found: ') + "<br/>" + lang.say(response.errors[0].reason));
								};
								$('user_profile_form').down('div.message').show().shake();
								return;				
							}
							
							// when ok!
							$('user_profile_form').down('div.message').update(lang.say('Profile updated.'));
							
							if (response.status=='warning') {
								$('user_profile_form').down('div.message').insert("<br/>" + lang.say(response.warnings[0].reason));
							}
							
							$('user_profile_form').down('div.message').appear();
							
					    },
						onFailure: function() {
							alert(lang.say('Unexpected error submitting profile form.'));
							$('user_profile_form').enable();
						}
						
					 });
					
				});
			}
						
		} else {
			// if not logged, prepare the login button in the header
			$('header').down('ul').insert(
				new Element('li',{id: 'login-provider-container'}).insert(
					new Element('span',{id: 'login-provider-loading', className: 'username-loading'}).insert('&nbsp;').hide()
				).insert(
					new Element('a',{id: 'login-provider-title', href: 'javascript:'}).insert(
						lang.say('Login')
					).observe('click',function(){
						$('login-provider-container').hide();
						$('login-provider-title').replace(lang.say('Choose your provider: ')+'&nbsp;'); //.addClassName('choose-provider');
						$('login-provider-icons').show();
						Effect.Appear('login-provider-container');
					})
				).insert(
					new Element('span',{id: 'login-provider-icons'}).insert(
						new Element('span', {title: 'Twitter', className: 'username-twitter'}).insert('&nbsp;').observe('click',function(){
							$('login-provider-loading').show();
							setTimeout('window.location = "'+base_url+'/auth/twitter/auth.php?goto="+encodeURIComponent(window.location);',1000);
						})
					).insert(
						new Element('span', {title: 'Facebook', className: 'username-facebook'}).insert('&nbsp;').observe('click',function(){
							$('login-provider-loading').show();
							setTimeout('window.location = "'+base_url+'/auth/facebook/index.php?goto="+encodeURIComponent(window.location);',1000);
						})
					).hide()
				)
			);
			
			// disable send comment form
			$('footer').down('div.form').down('form').observe('click',function(){
				alert(lang.say('You need to login to send a message.'));
			});
								
		}
		
		
	},
	init: function(engine) {
		
	}
};

JS4TM.Site.User = Class.create(JS4TM.Site.User);


/**
 * Other common functions
 */


/**
 * get a cookie value
 * @param {Object} name
 */
function getCookie(name) {
	var start = document.cookie.indexOf(name+"=");
    if(start >= 0) {
        var len = start + name.length + 1;   
        var end = document.cookie.indexOf(';', len);
        if(end == -1) {
            end = document.cookie.length;
        } 
		var ret = document.cookie.substring(len, end);
        return decodeURIComponent(ret.replace(/\+/g, '%20'));
    } else {
		return null;
	}
}

/**
 * padd a number with 0
 * @param {Number} number: the number to pad
 * @param {Int} length: how many chars to pad
 */
function pad(number, length) {
    var str = '' + number;
    while (str.length < length) {
        str = '0' + str;
    }
    return str;
}

/**
 * Month translations
 */
var mmToMonthES = new Array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
var mmToMonthEN = new Array("Januart", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

/**
 * Format timestamp function
 * @param {Int} timestamp: A unix timestamp
 * @param {Int} format: 1 | 2,  a predefined format to apply
 */
function getLocalDate(timestamp,format) {
  
  if (typeof(format)=='undefined') {
  	format = 1;
  }
  
  var ts = parseInt(timestamp);
  ts = ts * 1000;
  
  var dt = new Date( ts );
  var lang = getCookie('LANG');
  var mm = '';
  // month translation
  switch (lang) {
  	case 'en': mm = mmToMonthEN[dt.getMonth()]; break;
	case 'es': 
	default: 
		mm = mmToMonthES[dt.getMonth()]; break;
  }
  
  switch(format) {
  	case 2:
  		switch (lang) {
  			case 'es':
  				return dt.getDate() + " de " + mm + " de " + dt.getFullYear() + ",  " + dt.getHours() + ":" + pad(dt.getMinutes(),2);
  			case 'en':
  				return mm + " " + dt.getDate() + " " + dt.getFullYear() + ",  " + dt.getHours() + ":" + pad(dt.getMinutes(),2);
  		}
	case 1:
	default:
		switch (lang) {
			case 'es':
				return dt.getDate() + " de " + mm + " de " + dt.getFullYear(); 
			case 'en':
				return mm + " " + dt.getDate() + " " + dt.getFullYear(); 
		}
  }
  
} 

function printLocalDate(timestamp,format) {
  document.write(getLocalDate(timestamp,format));
}

function getPrettyDate(timestamp){
	
	var ts = parseInt(timestamp);
  	ts = ts * 1000;
	
	var date = new Date( ts );
	var diff = (((new Date()).getTime() - date.getTime()) / 1000);
	var day_diff = Math.floor(diff / 86400);
			
	if ( isNaN(day_diff) || day_diff < 0 )
		return;
	
	var lang = getCookie('LANG');
  	switch (lang) {
  		case 'es': 
			var ret =  
				day_diff == 0 
				&& 	(
					diff < 60 && 'hace un momento' ||
					diff < 120 && 'hace un minuto' ||
					diff < 3600 && 'hace '+Math.floor( diff / 60 )+ ' minutos' ||
					diff < 7200 && 'hace una hora' ||
					diff < 86400 && 'hace '+Math.floor( diff / 3600 )+' horas' 
					)
				||
					day_diff == 1 && 'ayer' ||
					day_diff < 7 && 'hace '+day_diff+' días' ||
					day_diff < 60 && 'hace '+Math.ceil( day_diff / 7 )+ ' semanas' ||
					day_diff < 366 && 'hace '+Math.ceil( day_diff / 30 )+ ' meses' ||
					day_diff < 730 && 'hace un año' ||
					'hace '+Math.floor( day_diff / 365 )+' años';
			return ret;
		case 'en':
		default: 
			var ret = 
				day_diff == 0 
				&&	(
					diff < 60 && "just now" ||
					diff < 120 && "one minute ago" ||
					diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
					diff < 7200 && "one hour ago" ||
					diff < 86400 && Math.floor( diff / 3600 ) + " hours ago"
					)
				||
					day_diff == 1 && "Yesterday" ||
					day_diff < 7 && day_diff + " days ago" ||
					day_diff < 60 && Math.ceil( day_diff / 7 ) + " weeks ago"||
					day_diff < 366 && Math.ceil( day_diff / 30 )+ ' months ago' ||
					day_diff < 730 && 'one year ago' ||
					Math.floor( day_diff / 365 )+' years ago';
			return ret;
  	}
}

function printPrettyDate(timestamp) {
  document.write(getPrettyDate(timestamp));
}

function updateTextAreaSize(element) {
	if (typeof(document.viewport) != 'undefined') {
		// if scrollbars appear then make it bigger, unless it's bigger then the user's browser area minus 200px
		if (Element.getHeight(element) < $(element).scrollHeight && Element.getHeight(element) < (document.viewport.getHeight() - 200)) {
			$(element).style.height = $(element).getHeight() + 15 + 'px';
			if (Element.getHeight(element) < $(element).scrollHeight) {
				window.setTimeout("updateTextAreaSize('" + element + "')", 5);
			}
		}
	}
}

