var tribescape = {};

	tribescape.Handler = {};

	if(document.addEventListener){
	
		tribescape.Handler.add = function(element, eventType, handler){
			element.addEventListener(eventType, handler, false);
		};

		tribescape.Handler.remove = function(element, eventType, handler){
			element.removeEventListener(eventType, handler, false);
		};	
	}
	else if(document.attachEvent){
		
		tribescape.Handler.add = function(element, eventType, handler){

			if(tribescape.Handler._find(element, eventType, handler) != -1){ return; }
			
			var wrappedHandler = function(e){
				
			if(!e){ e = window.event; }
				
				var event = {
				
					_event: e,
					type: e.type,
					target: e.srcElement,
					currentTarget: element,
					relatedTarget: e.fromElement?e.fromElement:e.toElement,
					eventPhase: (e.srcElement==element)?2:3,
					
					clientX: e.clientX,
					clinetY: e.clientY,
					screenX: e.screenX,
					screenY: e.screenY,
					
					altKey: e.altKey,
					ctrlKey: e.ctrlKey,
					shiftKey: e.shiftKey,
					charCode: e.keyCode,
					
					stopPropagation: function(){ 	this._event.cancelBubble = false; },
					preventDefault: function(){ 	this._event.returnValue  = false;}
				
				}; // var event
				
				if(Function.prototype.call){ 
					
					handler.call(element, event); 
				
				}
				else {
				
					element._currentHandler = handler;
					element._currentHandler(event);
					element._currentHandler = null;
				}
				
			}; // var wrappedHandler 
			
			
			element.attachEvent("on" + eventType, wrappedHandler);
			
			var h = {
			
				element: element,
				eventType: eventType,
				handler: handler,
				wrappedHandler: wrappedHandler
			
			};
			
			
			var d = element.document || element;
			
			var w = d.parentWindow;
			
			var id = tribescape.Handler._uid();
			
			if(!w._allHandlers){ w._allHandlers = {};  }
			
			w._allHandlers[id] = h;
			
			if(!w._onunloadHandlerRegistration) {
			
				w._onunloadHandlerRegistration = true;
				w.attachEvent("onunload", tribescape.Handler._removeAllHandlers);
				
			}

		}; // tribescape.Handler.add 
		
		
		tribescape.Handler.remove = function(element, eventType, handler){
		
			var i = tribescape.Handler._find(element, eventType, handler);
			
			if(i == -1) { return; }
			
			var d = element.document || element;
			
			var w = d.parentWindow;
			
			var handlerId = element._handlers[i];
			
			var h = w._allHandlers[handlerId];
			
			element.detachEvent("on" + eventType, h.wrappedHandler);
			
			element._handlers.splice(i, 1);
			
			delete w._allHandlers[handlerId];
		
		}; // tribescape.Handler.remove

			
		tribescape.Handler._find = function(element, eventType, handler){
		
			var handlers = element._handlers;
			
			if(!handlers){  return -1; }
			
			var d = element.document || element;
			
			var w = d.parentWindow;
			
			for( var i = handlers.length - 1;  i >= 0;  i-- ){
			
				var handlerId = handlers[i];
				
				var h = w._allHandlers[handlerId];
				
				if(h.eventType == eventType && h.handler == handler){  return 1;  } 			
			}
			
			return -1;
		
		};
		
		
		tribescape.Handler._removeAllHandlers = function(){
		
			var w = this;
			
			for( var id in w._allHandlers ) {
			
				var h = w._allHandlers[id];
				
				h.element.detachEvent("on" + h.eventType, h.wrappedHandler);
				
				delete w._allHandlers[id];
				
			}

		};
			
		tribescape.Handler._counter = 0;
			
		tribescape.Handler._uid = function(){ 	return "h" + tribescape.Handler._counter++;  }; 
		
	}
	
	tribescape.showContainer = function(e){

		var doc = document;

		if(!e){ e = window.event; }
		var elem = e.currentTarget;
										
		switch(  "" + elem.getAttribute("id") + ""){
		
			case "demo-trigger": 	doc.getElementById("demo-container").style.display = "block";
									break;
			case "auth-trigger":  	doc.getElementById("auth-container").style.display = "block";
									break;
		}

	};


	tribescape.hideContainer = function(e){

		var doc = document;

		if(!e){ e = window.event; }
		var elem = e.currentTarget;
										
		switch(  "" + elem.getAttribute("id") + ""){
		
			case "demo-close": 	doc.getElementById("demo-container").style.display = "none";
								break;
			case "auth-close":  doc.getElementById("auth-container").style.display = "none";
								break;
		}

	};


	tribescape.getById = function(elem){	return document.getElementById(elem);	};
		

	tribescape.clear	= function(e){

		if(!e){ e = window.event; }
		var elem = e.currentTarget;
		
		if(elem.getAttribute("id") == "user"){
			if (elem.value == "username"){
				elem.value = "";
			}		
		}
		else if(elem.getAttribute("id") == "pass"){
			if (elem.value == "password"){
				elem.value = "";
			}				
		}
		
	};


	tribescape.recall	= function(e){

		if(!e){ e = window.event; }
		var elem = e.currentTarget;
		
		if(elem.getAttribute("id") == "user"){
			if (elem.value == ""){
				elem.value = "username";
			}		
		}
		else if(elem.getAttribute("id") == "pass"){
			if (elem.value == ""){
				elem.value = "password";
			}				
		}
		
	};	
	

	tribescape.HTTP = {};
	
	tribescape.HTTP._factories = [
	
		function() { return new XMLHttpRequest(); },
		function() { return new ActiveXObject("Microsoft.XMLHTTP"); },
		function() { return new ActiveXObject("MSXML2.XMLHTTP.3.0"); },
		function() { return new ActiveXObject("MSXML2.XMLHTTP"); }
	
	];
	
	tribescape.HTTP._factory = null;
	
	tribescape.HTTP.newRequest = function(){
	
		if(tribescape.HTTP._factory != null) { return tribescape.HTTP._factory(); }
		
		for( var i = 0;  i  <  tribescape.HTTP._factories.length;  i++ ){
			try{
				var factory = tribescape.HTTP._factories[i];	// Select a XMLHttp factory
				
				var request = factory();						// Invoke currently selected factory
				
				if(request != null){
					tribescape.HTTP._factory = factory;
					return request;
				}
			}
			catch(e){
				continue;
			}
		}
	
		tribescape.HTTP._factory = function(){	throw new Error("XMLHttpRequest not supported");	};

		tribescape.HTTP._factory();							//	XMLHttpRequest not supported, thow Error

	};
	
	
 	tribescape.HTTP.post = function(url, values, callback, errorHandler){
 	
 		var request = tribescape.HTTP.newRequest(); 		
 		request.open("POST", url, true);
 		request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      	request.setRequestHeader("Content-length", tribescape.HTTP.encodeFormData(values).length);
      	request.setRequestHeader("Connection", "close");
 		
 		request.onreadystatechange = function(){

 			if(request.readyState == 4){
 			 			
 				if(request.status == 200){ 	
 					
 					callback(tribescape.HTTP._getResponse(request));	

 				}
 				else{	

	 				if(errorHandler){ errorHandler(request.readyState, request.status);  }
					else{  callback(null);	}

 				}
 				
 			}
 			else{
 			
 				tribescape.getById("flashlogin").innerHTML = "Authenticating<img src='presentation/img/loading.gif' alt='...' />";
 			
 			}
 		
 		};
 		
 		request.send(tribescape.HTTP.encodeFormData(values));
 	
 	};
 	
 	
 	tribescape.HTTP.encodeFormData = function(data){
 	
 		var pairs  = [];
 		var regexp = /%20/g;
 		
 		for(var name in data){
 		
 			var value = data[name].toString();
 			
 			var pair = encodeURIComponent(name).replace(regexp, "+") + "=" + encodeURIComponent(value).replace(regexp, "+");
 			
 			pairs.push(pair);
 		
 		}
 		 		
 		return pairs.join("&");
 	
 	};
 	
 	
 	tribescape.HTTP._getResponse = function(request){
 	
 		switch(request.getResponseHeader("Content-Type")){
 		
 		//	case "text/xml": return request.responseXML;
 		//	case "text/json": 
 		//	case "application/x-javascript": return eval( "(" + request.responseText + ")" );
 			default: return request.responseText;
 		
 		}
 	
 	};
 	
 	
 	tribescape.bind = function(){
 	
 		var userVal = tribescape.getById("user").value,
 			passVal = tribescape.getById("pass").value; 		
 		
 		var values = { 	"u":userVal, "p":passVal	};	
 		 		
 		var url = "./model/login.php",
 			callback = tribescape.authPass,
 			errorHandler = tribescape.authFail;
					 	
 		tribescape.HTTP.post(url, values, callback, errorHandler);			
 	
 	};
 	
 	
 	tribescape.authPass = function(message){  
 		
 		if(message == "Authentication Successful"){
 		
 				tribescape.getById("flashlogin").innerHTML = "Redirecting<img src='presentation/img/loading.gif' alt='...' />";
				window.location = "t/";	

 		}	
	    else{
 				tribescape.getById("flashlogin").innerHTML = message;
	    }
 	
 	};
 	
 	tribescape.authFail = function(readyState, status){  

 		tribescape.getById("flashlogin").innerHTML = "Please try again.";
 		
 	};
 	
 	tribescape.returnFalse = function(e){ 	
 	
 		e.preventDefault();
 		return false;	
 	
 	};