

var SavesCount = 0;

var LastPostInputValue = "";


function MonitorInput( which, event, IsComment )
{
	if( ! event ) event = window.event;

	if( event.keyCode ) keyCode = event.keyCode;
	else if( event.which ) keyCode = event.which;
	
	var PostInputField = document.getElementById("PostInput");
	
	if( keyCode == 13 && ! event.shiftKey )
	{	    
	    var NewPostContent;
	    if( LastPostInputValue != "" )
	    {
	        NewPostContent = LastPostInputValue;
	    }
	    else
	    {
	        NewPostContent = PostInputField.value + "";
	    }
	    NewPostContent = NewPostContent.replace(/[\n\r]+$/g, "" );
	    NewPostContent = NewPostContent.replace(/</g, "&lt;" );
	    NewPostContent = NewPostContent.replace(/>/g, "&gt;" );
	    
	    if( ! ContentValid( NewPostContent ) )
        {
            alert( "Oops, we don't support any blank entries (DUH!) or HTML (greater/less-than signs).  Please try again :)" );
            return;
        }
	    else
	    {
	        PostInputField.value = "";
	        LastPostInputValue = "";
	        
	        SaveNew( NewPostContent, IsComment );
	    }
	    
	    
	    
	    event.cancelBubble = true;
		event.returnValue = false;
		if( event.stopPropagation ) event.stopPropagation();
	    return false;
	}
	else
	{
	    LastPostInputValue = PostInputField.value + "";
	}
}

function SaveButton_Clicked( IsComment )
{
    var PostInputField = document.getElementById("PostInput");
    var NewPostContent = PostInputField.value + "";
    NewPostContent = NewPostContent.replace(/[\n\r]+$/g, "" )
    NewPostContent = NewPostContent.replace(/</g, "&lt;" );
    NewPostContent = NewPostContent.replace(/>/g, "&gt;" );
    
    if( ! ContentValid( NewPostContent ) )
    {
        alert( "Oops, we don't support any blank entries (DUH!) or HTML (greater/less-than signs).  Please try again :)" );
    }
    else
    {
        PostInputField.value = "";
        SaveNew( NewPostContent, IsComment );
    }
    
}


function EditNew( where )
{
    var reasonHolder = where.parentNode;
    reasonHolder.innerHTML = "<input type='text' size='40'><a href='#' onClick='return SaveNew( this )'>Save</a> <a href='#' onClick='CancelNew( this );'>Cancel</a>";
    reasonHolder.getElementsByTagName("input")[0].value = reasonHolder.content;
}


function Edit( PostId, Anchor )
{
    var PostElement = document.getElementById("LiveBlog_Post" + PostId );
    
    if( Anchor.innerHTML == "SAVE" )
    {
        Wiki.Off();
    }
    else
    {
        Wiki.ClickRegion_Beginning( PostElement.firstChild );
        
        Anchor.innerHTML = "SAVE";
    }
    
    
    //alert( "To edit a previous post, just click on the text and start typing!" );
    
    return false;
}

function Delete( PostId )
{
	if( 
	    document.getElementById("LiveBlog_Post" + PostId ) &&
	    confirm( "Are you sure you want to delete this entry?\nAre you SURE sure? :)" ) 
	)
	{
	    var ULElement = document.getElementById("LiveBlog_Post" + PostId ).parentNode;
	    
	    ULElement.removeChild(
	        document.getElementById("LiveBlog_Post" + PostId )
	        );
	        
	    ULElement.innerHTML += "";
    		
	    var req = new XMLHttpRequest();
        req.open("POST", "/Post.aspx", true );
        req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        req.send( "Action=delete&PostId=" + PostId );
    }
	
	return false;
}

function SaveNew( pContent, IsComment )
{
    if( ! ContentValid( pContent ) )
    {
        alert( "Oops, we don't support any blank entries (DUH!) or HTML (greater/less-than signs).  Please try again :)" );
		return;
    }
    
    IsLive = true;
    

    var SaveIndex = ++SavesCount;
    
    var NewItem = document.createElement("li");
    NewItem.id = "Saving" + SaveIndex;
    NewItem.className = "Saving" + ( IsComment ? " Comment" : "" );
    
    if( UserThumbnail )
    {
        NewItem.className += " Thumbnail";
    }
    NewItem.innerHTML = "<div class='Content' " + ( UserThumbnail ? "style='background-image:url(" + UserThumbnail + ")'" : "" ) + ">" + Htmlize( pContent ) + "</div><div class='Meta'>" + ( IsComment ? "you<br />" : "by you" ) + "</div>";
    
    
    ThreadLiveBlog.ConnectNewPost( NewItem );
    
    if( ThreadLiveBlog.NewestAtBottom )
    {
        LiveBlog.ScrollToBottom();
    }
    

    var req = new XMLHttpRequest();
    req.open("POST", "/Post.aspx", true );
    
    req.onreadystatechange = function()
        {
            if( req.readyState == 4 )
            {
            
                if( req.status == 200 )
                {
                    var ResponseObject = eval("(" + req.responseText + ")" );
                    
                    if( ResponseObject.Error && ResponseObject.Error.match( /Spam/i ) )
                    {
                        var Item = document.getElementById("Saving" + SaveIndex );
                    
                        var PostInputField = document.getElementById("PostInput");
                        
                        if( PostInputField.value + "" == "" )
                        {
                            PostInputField.value = pContent;
                            Item.parentNode.removeChild( Item );
                        }
                        else
                        {
                            Item.ContentCache = pContent;
                            Item.lastChild.innerHTML += "  <a href='#' class='Error' onClick='LiveBlog.DestroyElement(this.parentNode.parentNode); return SaveNew(this.parentNode.parentNode.ContentCache, IsComment);'>ERROR SAVING - PLEASE CLICK HERE TO RETRY</a>";
                        }
                        
                        alert( "Oops, your post looked like spam to us for some reason.\nPlease try again." );
					    return false;
                    }
                    
                    var PostId = ResponseObject.Id;
                    var Item = document.getElementById("Saving" + SaveIndex );
                    
                    if( document.getElementById("LiveBlog_Post" + PostId ) == null )
                    {
                        Item.className = Item.className.replace( /Saving/, "" );
                        Item.id = "LiveBlog_Post" + PostId;
                        Item.firstChild.innerHTML = ResponseObject.Content;
                        
                        SetLastPostTime( LiveBlog.ConvertServerTimeToLocalTimeFriendlyString( Time ) );
                        
                        if( !IsComment )
                        {
                            Item.firstChild.onmousedown = Wiki.ClickRegion;
                            Item.lastChild.innerHTML += "  <a href='#' class='Edit' onClick='return Edit(" + PostId + ", this)'>edit</a> <a href='#' onClick='return Delete(" + PostId + ")'>delete</a>";
                        }
                        else
                        {
                            Item.lastChild.innerHTML += "  <a href='#' onClick='return Delete(" + PostId + ")'>delete</a>";
                        }
                    }
                    else
                    {
                        Item.parentNode.removeChild( Item );
                    }
                }
                else
                {
                    var Item = document.getElementById("Saving" + SaveIndex );
                    
                    
                    var PostInputField = document.getElementById("PostInput");
                    
                    if( PostInputField.value + "" == "" )
                    {
                        PostInputField.value = pContent;
                        Item.parentNode.removeChild( Item );
                    }
                    else
                    {
                        Item.ContentCache = pContent;
                        Item.lastChild.innerHTML += "  <a href='#' class='Error' onClick='LiveBlog.DestroyElement(this.parentNode.parentNode); return SaveNew(this.parentNode.parentNode.ContentCache, IsComment);'>ERROR SAVING - PLEASE CLICK HERE TO RETRY</a>";
                    }
                    
                    alert( "Sorry, there was an error saving your entry.\nPlease try again." );
					return false;
                }
            }
        };
    
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    req.send( "Action=newtext&Content=" + encodeURIComponent( Htmlize( pContent ) ) + "&ThreadId=" + ThreadId );

	return false;
    
}




function Htmlize( pContent )
{
    return pContent.replace( /\r?\n/g, "<br/>" );
}



function ContentValid( input )
{
    if( input == "" || input.match( "[<>]" ) )
    {
        return false;
    }
    else
    {
        return true;
    }
}

function SetLastPostTime( pTime )
{
    document.getElementById("LastPostTimeHolder").innerHTML = pTime;
}


function PermalinkFieldFocus( pField )
{
    if( pField.select )
    {
        pField.select();
    }
    
    return false;
}

function AttachBlog( pBlogId )
{
    var ContentElement = document.getElementById( "ExternalBlogBoxContent" );
    
    var AjaxImage = new Image();
    AjaxImage.src = "/AttachBlogToPost.aspx?ThreadId=" + ThreadId + "&BlogId=" + pBlogId;
    
    ContentElement.innerHTML = "This thread has been attached to your blog!<br/>Visit your blog to verify!";
}

function SubmitInviteUrl( pForm )
{
    var Code = document.getElementById("InviteCode").value;
    
    
    // URL already has a query string
    if( ( document.location + "" ).indexOf("?") > 0 )
    {
        document.location = document.location + "&Invite=" + Code;
    }
    else
    {
        document.location = document.location + "?Invite=" + Code;
    }
    
    return false;
}

function Translate( pLang, pLabel )
{
    LiveBlog.GetInstance().TranslateAllPosts( pLang );
    
    document.getElementById("TranslateStatus").innerHTML = "<strong>All posts are being translated into " + pLabel + ".</strong>";
}

function InviteWriter( pUserId )
{
    var PostImage = new Image();
    PostImage.src = "/Post.aspx?action=invite&inviteuserid=" + pUserId + "&threadid=" + ThreadId;
    
    alert( "Your invitation has been sent to that writer!" );
    
    return false;   
}

window.onscroll = function()
{
    if( BrowserDetect.browser == "Explorer" && BrowserDetect.version < 7 )
    {
        return;
    }

    var ThreadTitleElement = document.getElementsByTagName("h2")[0];
    var Column1 = document.getElementById("Column1");
    var Column2 = document.getElementById("Column2");
    var Pagination = document.getElementById("TopPagination");
    
    var FloatingTitleElement = document.getElementById("FloatingTitle");

    if( LiveBlog.YPosition() >= 150 )
    {
        if( !FloatingTitleElement )
        {
            var FloatingTitleElement = document.createElement( "div" );
            FloatingTitleElement.innerHTML = "<h2>" + document.getElementsByTagName("h2")[0].innerHTML + "</h2>"  + Pagination.innerHTML;
            
            FloatingTitleElement.id = "FloatingTitle";
            document.getElementsByTagName("h2")[0].parentNode.insertBefore( FloatingTitleElement, document.getElementsByTagName("h2")[0] );
            document.getElementsByTagName("h2")[1].style.visibility = "hidden";
        }
    }
    else
    {
        if( FloatingTitleElement )
        {
            FloatingTitleElement.parentNode.removeChild( FloatingTitleElement );
            document.getElementsByTagName("h2")[0].style.visibility = "visible";
        }
    }
}


var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();