var thisDomain = '.mollerne.dk';
var uploaddir = '/chat/upload/';
var getChatUrl = '/chat/getchat.php';
var newMessageUrl = '/chat/message.php';
var deleteMessageUrl = '/chat/deletemessage.php';

var chatIndex = 0;
var activeNode;

	$(function() {
		populateAlias();
		populateChat();
		//$("#chatform").submit(submitMessage);
		window.setInterval(function(){populateChat();},3000);
		
		activeNode = $("#msginput");
		enableInputs(activeNode);
		disableInputs($("#fileinput"));
		
		$("a#mode-call").click( function(e) {
		    $("ul#menu").css({ "top": e.pageY, "left": e.pageX });
		    $("ul#menu").animate({height:"show",opacity:"show"},"fast"); return false;
		  });
		$("ul#menu").hover( function() {},
		  function() { $("ul#menu").animate({opacity:1.0},300).slideUp(100); return false;
		  });
		$("#menu-container").find("a").hover(
		  function() { $(this).css({ backgroundColor:"#ececec", border:"1px solid #1042de"  }) },
		  function() { $(this).css({ border:"none",backgroundColor:"#ffffff"  }) }
		  );
		$("#menu-container").find("a").click(function(e) {
			var modeStr = this.id;
			
			disableInputs(activeNode);
			if(modeStr == 'mode_beskeder') {
				activeNode = $("#msginput");
				$("#chatform").attr("enctype", "application/x-www-form-urlencoded");
			} else if(modeStr == 'mode_filer') {
				activeNode = $("#fileinput");
				$("#chatform").attr("enctype", "multipart/form-data");
			}
			enableInputs(activeNode);
			$("ul#menu").animate({opacity:1.0},10).slideUp(100);
		    return false;
		  });

		var options = { 
		        beforeSubmit:  messageRequest,  // pre-submit callback 
		        success:       messageResponse,  // post-submit callback 
		        dataType: 'json',
		        clearForm: true,
		        resetForm: true,    
		        type: 'post',
		        timeout: 30000
		    }; 
		 
		    // bind form using 'ajaxForm' 
		    $('#chatform').ajaxForm(options); 
		
		
		
		
	 });
	
	function populateAlias() {
		var alias = getCookie("chatalias");
		if($.trim(alias) != "") {
			$("input#alias").val(alias);
		}
	}
	
	function populateChat() {
	 	$.post(getChatUrl, {idx: chatIndex}, function(jsonJavascriptArr, responseStatus){ 	 //getJSON
	 		populateMessages(responseStatus, jsonJavascriptArr);
			
    	}, "json");
	}
	 
    function deleteMessage(msgIndex) {
        $.post(deleteMessageUrl, {idx: msgIndex}, function(success, responseStatus){    
            if(success == '1') {
                removeMessage(msgIndex);
            }
        }, "text");
    }

    function removeMessage(msgIndex) {
        $("#msg" + msgIndex).remove();
    }

	function populateMessages(responseStatus, jsonJavascriptArr) {
		var options = '';

		// First handle deletions
		while(jsonJavascriptArr.length > 0) {
			var first = jsonJavascriptArr[0];
			if(first.type == '999') {
				jsonJavascriptArr.shift();
				removeMessage(first.index);
			} else {
				break;
			}
		}
		
		for (var i = 0; i < jsonJavascriptArr.length; i++) {
			var index = jsonJavascriptArr[i].index;
			
		    if(i == 0) {
				if(index <= chatIndex) { return; } // handle race condition
				chatIndex = jsonJavascriptArr[0].index;  
			}
		    
		    var message = jsonJavascriptArr[i].text;
		    
		    if(jsonJavascriptArr[i].type == '2') {
		    	message = ("<a href=\"" + uploaddir + index + "_" + message +  "\">" + message +"</a>");
		    } else {
				message = message.replace(/(www\.[^\s]*|http:\/\/[^\s]*)/ig,'<a href="http:\/\/$1">$1</a>'); 
				message = message.replace(/http:\/\/http:\/\//ig,'http:\/\/'); 
		    }
		    
			
			options += "<p id=\"msg" + index + "\">" + jsonJavascriptArr[i].time + " <strong>" + jsonJavascriptArr[i].alias + "</strong>: " + message;
            if(jsonJavascriptArr[i].isOwner == '1') {
                options += (" <a href=\"javascript:deleteMessage('" + index + "')\"><img src=\"images/trash.gif\" style=\"border-style: none\"/></a>");
            }
            options += "</p>\r\n";
		}
		$("#chatarea").prepend(options);
		
	}
	
	

	function SubmitFileRequest(alias, filepath, idx) {
		// gather
		this.alias = $.trim(alias);
		this.filepath = $.trim(filepath);
		this.idx = idx;

	    //functions
	    this.validate = validate_SubmitFileRequest;
		this.pushFormData = pushFormData_SubmitFileRequest;
		this.getAlias = getAlias_Request;
	}


	function validate_SubmitFileRequest() {
		if(this.alias == "") {
			throw "alias";
		}
		if(this.filepath == "") {
			throw "filepath";
		}
	}


	function pushFormData_SubmitFileRequest(formData, jqForm) {
		jqForm.find("input[name='idx']").attr("value", this.idx);
		jqForm.find("input[name='a']").attr("value", this.alias);
		jqForm.find("input[name='file']").attr("value", this.filepath);
	}

	function SubmitMessageRequest(alias, message, idx) {
		// gather
		this.alias = $.trim(alias);
		this.message = $.trim(message);
		this.idx = idx;

	    //functions
	    this.validate = validate_SubmitMessageRequest;
		this.pushFormData = pushFormData_SubmitMessageRequest;
		this.getAlias = getAlias_Request;
		
	}

	function getAlias_Request() {
		return this.alias;
	}


	function pushFormData_SubmitMessageRequest(formData, jqForm) {
		var idxPar = { name: 'idx', value: this.idx };
		var aliasPar = { name: 'a', value: this.alias };  
		var messagePar = { name: 'm', value: this.message };
		formData.push(idxPar, aliasPar, messagePar);
	}

	function validate_SubmitMessageRequest() {
		if(this.alias == "") {
			throw "alias";
		}
		if(this.message == "") {
			throw "message";
		}
	}


	// pre-submit callback 
	function messageRequest(formData, jqForm, options) { 
		var request;
	    if(!$("input#newtext").attr("disabled")) {
			request = new SubmitMessageRequest($("input#alias").val(), $("input#newtext").val(), chatIndex);
	    } else if(!$("input#filepath").attr("disabled")) {
	    	request = new SubmitFileRequest($("input#alias").val(), $("input#filepath").val(), chatIndex);
	    }

	    try {
	    	request.validate();
	    } catch(er) {
			//alert("ER: " + er);
		    if(er=="alias") {
		      	alert('Husk at skrive dit navn i feltet \"Dit navn\".');
		      	$("input#alias").focus();
		    }
		    if(er=="message") { }

			if(er=="filepath") { }
		    return false;
	    }

	    setPageCookie("chatalias", request.getAlias());
	    formData.splice(0);
	    request.pushFormData(formData, jqForm);
	    return true; 
	} 


	// post-submit callback
	// bliver ikke kaldt hvis reponse ikke er json
	function messageResponse(responseText, statusText)  { 
	    if(!$("input#newtext").attr("disabled")) {
	    	$("input#newtext").focus();
	    } else if(!$("input#filepath").attr("disabled")) {
	    }
	    populateAlias();
	    populateMessages(statusText, responseText);
	}

	function enableInputs(domElem) {
		handleInputSektion(domElem, false);
	}

	function disableInputs(domElem) {
		handleInputSektion(domElem, true);
	}


	function handleInputSektion(domElem, disabled) {
		if(disabled) {
			$(domElem).find(":input").attr("disabled",disabled);
		} else {
			$(domElem).find(":input").attr("disabled",disabled);
		}

	    if(!disabled) {
	    	domElem.show();
	    } else {
	    	domElem.hide();
	    }
		
	}
	
	
	 
	 //----- COOKIES (http://techpatterns.com/downloads/javascript_cookies.php) -----

function setCookie( name, value, expires, path, domain, secure ) 
{
   // set time, it's in milliseconds
   var today = new Date();
   today.setTime( today.getTime() );

   /* if the expires variable is set, make the correct 
   expires time, the current script below will set 
   it for x number of days, to make it for hours, 
   delete * 24, for minutes, delete * 60 * 24 */

   if ( expires )
   {
      expires = expires * 1000 * 60 * 60 * 24;
   }

    var expires_date = new Date( today.getTime() + (expires) );


    document.cookie = name + "=" +escape( value ) +
    ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + 
    ( ( path ) ? ";path=" + path : "" ) + 
    ( ( domain ) ? ";domain=" + domain : "" ) +
    ( ( secure ) ? ";secure" : "" );
}

// this function gets the cookie, if it exists
function getCookie( name ) {
	
   var start = document.cookie.indexOf( name + "=" );
   var len = start + name.length + 1;
   if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
      return null;
   }
   if ( start == -1 ) { return null; }
   
   var end = document.cookie.indexOf( ";", len );
   if ( end == -1 ) { end = document.cookie.length; }
   
   return unescape( document.cookie.substring( len, end ) );
}
	

// this deletes the cookie when called
   function deleteCookie( name, path, domain ) {
      if ( getCookie( name ) ) {
         document.cookie = name + "=" + ( ( path ) ? ";path=" + path : "") + 
                           ( ( domain ) ? ";domain=" + domain : "" ) + 
                           ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
      }
}

// ------------------ My COOKIE functions ------------------------

function setPageCookie(name, value) {
   setCookie( name, value, 30, '/', thisDomain, '' );
}

function deletePageCookie(name) {
   deleteCookie( name, '/', thisDomain );
}


//_--------------------------
