(function() {
	if(!Window.onDomReady) { return false; }// en postulantes solo tenemos MooTools...
	Window.onDomReady(function() {
		if( typeof XMLHttpRequest == "undefined" ) XMLHttpRequest = function() {
		  try { return new ActiveXObject("Msxml2.XMLHTTP.6.0") } catch(e) {}
		  try { return new ActiveXObject("Msxml2.XMLHTTP.3.0") } catch(e) {}
		  try { return new ActiveXObject("Msxml2.XMLHTTP") } catch(e) {}
		  try { return new ActiveXObject("Microsoft.XMLHTTP") } catch(e) {}
		};
		
		if (document.getElementById("pregunta_submit")) {
			var xmlhttp = new XMLHttpRequest();
			xmlhttp.open('GET', document.URL+'?checkSession', true);
			xmlhttp.onreadystatechange = function(e) {
				if(xmlhttp.readyState === 4 && xmlhttp.status === 200) {
					if(parseInt(xmlhttp.responseText) === 0) {
						// no tenemos sesión, vamos a mostrar la caja de login
						if(document.getElementById('boxFormPreguntasLogin') != null)
						{
							document.getElementById('boxFormPreguntasLogin').className = '';
						}
						// como ahora necesito usuario y pass, voy a pedir que al momento
						// de enviar una pregunta, me completen ambos campos
						if(document.getElementById('pregunta_submit') != null)
						{
							document.getElementById('pregunta_submit').onclick = function(e) {
								var campoUsuario = document.getElementById('pregunta_usuario');
								var campoPassword = document.getElementById('pregunta_password');
								var campoTexto = document.getElementById('pregunta_contenido');
								
								var error = false;
								if(campoUsuario.value === "") {
									campoUsuario.className = 'erroredField';
									error = true;
								} else {
									campoUsuario.className = '';
								}
								
								if(campoPassword.value === "") {
									campoPassword.className = 'erroredField';
									error = true;
								} else {
									campoPassword.className = '';
								}
								
								if(campoTexto.value === "") {
									campoTexto.className = 'erroredField';
									error = true;
								} else {
									if(campoTexto.value.length > 140) {
										campoTexto.className = 'erroredField';
										error = true;
									} else {
										campoTexto.className = '';
									}
								}
								
								
								return !error;
							};
						}
					} else {
						if(document.getElementById('pregunta_submit') != null)
						{
							document.getElementById('pregunta_submit').onclick = function(e) {
								var campoTexto = document.getElementById('pregunta_contenido');
								var error = false;
								if(campoTexto.value === "") {
									campoTexto.className = 'erroredField';
									error = true;
								} else {
									campoTexto.className = '';
								}
								
								return !error;
							}
						}
					}
				}
			};
			xmlhttp.send(null);
		}
		
		// Eso fue para controlar que el flaco tenga sesión, dado que se cachea mucho en
		// producción. Ahora, vamos a ponerle un poco de onda al proceso de publicación
		// de la pregunta...
		
		var commentPublishingListener = function(e) {
			
			var generatePostedCommentHTML = function(comment) {
			
				var newdiv = document.createElement('div');
				newdiv.className = 'oldComment';
				newdiv.innerHTML = comment.content;
				
				var tuPregunta = document.createElement('div');
				tuPregunta.className = 'oldCommentLabel';
				tuPregunta.innerHTML = comment.tupregunta;
				
				var container;
				if(container = document.getElementById('oldCommentContainer')) {
					jQuery(container).append(tuPregunta).append(newdiv);
				} else {
					var commentContainer = document.createElement('div');
					commentContainer.className = 'oldCommentContainer';
					commentContainer.id = 'oldCommentContainer'; // solo puede haber uno
					
					commentContainer.appendChild(tuPregunta);
					commentContainer.appendChild(newdiv);
					
					jQuery('.boxFormPreguntas > form > table').before(commentContainer);
				}
			};
			
			
			var url = document.URL;
			if(url.match('html')) {
				url += '?cb=' + Math.random()*1e17;
			} else {
				url += '&cb=' + Math.random()*1e17;
			}
			var errordiv = document.getElementById('error_comentarios');
			errordiv.innerHTML = ''; //'<img src="/images/preguntas/ajax-loader.gif" />';
			errordiv.style.border = '';
			var xmlhttp = new XMLHttpRequest();
			xmlhttp.open('POST', url);
			xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=iso-8859-1');
			xmlhttp.onreadystatechange = function() {
				if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
					// la request llegó bien. El objeto que recibimos es
					// un json, con las propiedades 'result' (bool, si completó bien),
					// y una de 'msg' (string, que mostrar al usuario)
					
					// errorcode:
					//		1 => Falta usuario/pass
					//		2 => Usuario/pass incorrecto
					//		3 => Comentario vacío
					var submitButton = 	document.getElementById('pregunta_submit');
					submitButton.disabled = false;
					submitButton.style.color = '#000000';
					var obj = eval('('+xmlhttp.responseText+')');
					if(obj.result) {
						jQuery('#subtitle').remove();
						jQuery('.boxFormPreguntas > form > h2').html(obj.title).css({marginBottom: '5px'}).after("<span id='subtitle'>"+obj.subtitle+"</span>");
						generatePostedCommentHTML(obj.comment);
						errordiv.innerHTML = '';
						// como el flaco puso un username y password bien, ya no nos interesa que se loguee.
						// ocultamos esos campos.
						jQuery('#boxFormPreguntasLogin').css({display: 'none'});
						
						jQuery('#mostrarEnviarPregunta').show();
						jQuery('.boxFormPreguntas > form > table').hide('slow');
						jQuery("#pregunta_contenido").val('');
						jQuery('#contador').html(140);
					} else {
						errordiv.style.border = '1px solid #D23B2D';
						errordiv.innerHTML = obj.msg;
					}
					
					jQuery('#preguntasFormCover').fadeOut().remove();
					jQuery('.boxFormPreguntas').fadeTo('fast', 1);
					
				}
			};
			
			
			
			
			var strContenido = 'pregunta_submit=1&ajax=1';
			strContenido += '&pregunta_usuario='+document.getElementById('pregunta_usuario').value;
			strContenido += '&pregunta_password='+document.getElementById('pregunta_password').value;
			strContenido += '&pregunta_contenido='+document.getElementById('pregunta_contenido').value;
			
			
			var submitButton = 	document.getElementById('pregunta_submit');
			submitButton.disabled = true;
			submitButton.style.color = '#FFFFFF';
			var jQElement = jQuery('.boxFormPreguntas');
			
			jQElement.fadeTo('fast', 0.25, function(){
				var coords = jQElement.offset();
				var width = jQElement.width();
				var height = jQElement.height();
	
				var newdiv = jQuery('<div id="preguntasFormCover">');
				newdiv.css({position: 'absolute', left: coords.left+'px', top: coords.top+'px', width: width, height: height});
				newdiv.append('<center><img style="position: absolute; top: 0px; margin-top: 35%;" src="/images/preguntas/ajax-loader-big.gif" /></center>');
				jQuery('body').append(newdiv);
			});
			
			
			//xmlhttp.setRequestHeader('Content-Length', strContenido.length);
			xmlhttp.send(strContenido);
			if(e.preventDefault) {e.preventDefault();}
			if(e.cancel) { e.cancel = true;}
			return false; // no quiero que se dispare la 
						  // accion por default, que es enviar 
			              // el form.
		};
		var textarea = document.getElementById('pregunta_contenido');
		var keyDownListener = function(e) {
			var len = textarea.value.length;
			var code;
			if (e.keyCode) code = e.keyCode;
			else if (e.which) code = e.which;
			if(code == 8 || code == 46 || code == 37 || code == 38 || code == 39 || code == 40) { return true; }

			if(len >= 140) {
				if(e.preventDefault) {
					e.preventDefault();
				}
				e.cancel = true;
				e.returnValue = false;
				return false;
			} else {
				return true;
			}
		};
		
		var keyUpListener = function() {
			var d = document.getElementById('contador');
			if(d && d.innerHTML) {
				var n = 140 - textarea.value.length;
				d.innerHTML = n > 0 ? n : 0;
			}
		}
		
		/*
		 * Bindeo el listener al evento click de publicar
		 */
		var submitButton = document.getElementById('pregunta_submit');
		if(submitButton) {
			if(submitButton.addEventListener) {
				submitButton.addEventListener('click', commentPublishingListener, false);
			} else if(submitButton.attachEvent) {
				submitButton.attachEvent('onclick', commentPublishingListener);
			} else {
				// Eh. Raro. No tiene ni addEventListener (Moz, WebKit, Opera) ni
				// attachEvent (Trident). Uso un metodo DOM 0 como fallback...
				submitButton.onclick = commentPublishingListener;
			}
			
			// le agrego un contador...
			
			if(textarea) {
				if(textarea.addEventListener) {
					textarea.addEventListener('keydown', keyDownListener, false);
					textarea.addEventListener('keyup', keyUpListener, false)
				} else if(textarea.attachEvent) {
					textarea.attachEvent('onkeydown', keyDownListener);
					textarea.attachEvent('onkeyup', keyUpListener);
				} else {
					textarea.onkeydown = keyDownListener;
					textarea.onkeyup = keyUpListener;
				}				
			}
		}
		
		
		jQuery('#mostrarEnviarPregunta').click(function() {
				var thetable = jQuery('.boxFormPreguntas > form > table');
				thetable.show('slow', function() {
					if(!jQuery.browser.msie) {
						thetable.css({display: null});
					}
				});
				jQuery(this).hide();
		});
	});
})();