﻿
threadKey = "/test";

if (typeof XMLHttpRequest == 'undefined') {
 XMLHttpRequest = function () {
   var msxmls = ['MSXML3', 'MSXML2', 'Microsoft'];
   for (var i=0; i < msxmls.length; i++) {
 try {
   return new ActiveXObject(msxmls[i]+'.XMLHTTP');
 } catch (e) { }
   }
   throw new Error("No XML component installed");
 }
}

function ChangeFlag( id )
{
    var reason = document.getElementById("Reason" + id );
    
    var req = new XMLHttpRequest();
    req.open("POST", "/Thread.aspx?thread=" + threadKey, true );
    /*
    req.onreadystatechange = function()
        {
            if( this.readyState == 4 )
            {
                if( this.status == 200 )
                {
                    alert( this.responseText );
                }
                else
                {
                    alert( "Ajax error" );
                }
            }
        };
    */
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    
    // Flagging a reason
    if(  reason.parentNode.id == "UnFlagged" )
    {
        if( ! confirm( "Are you sure you want to flag that item as unsuitable content?  Are you SURE sure? ;-)" ) ) return;
            
        req.send( "ajax=1&flag=" + id );
        
        MoveLi(
            reason,
            document.getElementById("UnFlagged"),
            document.getElementById("Flagged")
            );
            
        reason.getElementsByTagName("a")[1].innerHTML = "<img style='border:0;' src='/images/flag.gif' width='16' height='16' alt='Unflag' title='Unflag' />";
        
    }
    // Unflagging a reason
    else if(  reason.parentNode.id == "Flagged" )
    {
        req.send( "ajax=1&unflag=" + id );
        
        MoveLi(
            reason,
            document.getElementById("Flagged"),
            document.getElementById("UnFlagged")
            );
            
        reason.getElementsByTagName("a")[1].innerHTML = "<img style='border:0;' src='/images/flag.gif' width='16' height='16' alt='Flag' title='Flag' />";
    }
	else if( reason.className == "ReasonImage" )
	{
		req.send( "ajax=1&flag=" + id );
		
		var NewLi = document.createElement("li");
		NewLi.innerHTML = reason.innerHTML;
		document.getElementById("Flagged").appendChild( NewLi );
		reason.parentNode.removeChild( reason );
	}
}

function UnFlag( id )
{
    return MoveLi(
        document.getElementById("Reason" + id ),
        document.getElementById("Flagged"),
        document.getElementById("UnFlagged")
        );
}

function MoveLi( which, from, to )
{
    if( to.firstChild )
        to.insertBefore( which, to.firstChild );
    else
        to.appendChild( which );
}

function Logout( where )
{
	var req = new XMLHttpRequest();
    req.open("POST", "/Login.aspx", true );
	req.onreadystatechange = function() 
	{
		window.location.reload();
	}
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');    
	req.send( "ajax=1&logout=1" );

	return true;
}

function SubmitLogin( where, event )
{
	if( ! event ) event = window.event;

	if( event.keyCode ) keyCode = event.keyCode;
	else if( event.which ) keyCode = event.which;
	
	
	if( keyCode == 13 )
	{
		Login( where );
	}
	
	return true;
}

function Login( where )
{
	var req = new XMLHttpRequest();
    req.open("POST", "/Login.aspx", true );

	var MyPassword = document.getElementById( "Password" ).value;
	var MyUsername = document.getElementById( "Username" ).value;
	
	var LoginArea = where.parentNode;
	
    req.onreadystatechange = function()
        {
            if( req.readyState == 4 )
            {
            
                if( req.status == 200 )
                {
                    var LoginStatus = ( req.responseText ).match( "<login status=\"(.+)\"/>" );
                    if( LoginStatus == undefined )
					{
						alert( "Sorry, there was an error logging you in.  You are being redirected to the login page." );
						document.location = "/Login.aspx";
						return false;
					}
					LoginStatus = LoginStatus[1];

					if( LoginStatus == "1" )
					{
						ShowAddDialog();
					
						LoginArea.innerHTML = "Click here to add your own!";
						LoginArea.onmousedown = ShowAddDialog;
					}
					else
					{
						alert( "Sorry, that username and password was not valid.  Please try again." );
						document.getElementById( "Password" ).focus();
						document.getElementById( "Password" ).select();
					}
                }
                else
                {
                    alert( "Sorry, there was an error logging you in.  You are being redirected to the login page." );
					document.location = "/Login.aspx";
					return false;
                }
            }
        };
    
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    req.send( "ajax=1&username=" + escape( MyUsername ) + "&password=" + escape( MyPassword ) );

	return false;

	
}

function MonitorInput( which, event )
{
	if( ! event ) event = window.event;

	if( event.keyCode ) keyCode = event.keyCode;
	else if( event.which ) keyCode = event.which;
	
	//alert( keyCode );
	
	if( keyCode == 13 && ! event.shiftKey )
	{
		return SaveNew( which );
	}
	else if( 
		( event.shiftKey && keyCode == 13 )
		&& which.tagName == "INPUT" 
		//&& which.value.length > 50 
		//&& ( navigator.userAgent + "" ).match( /(Safari|Firefox)/ )
		)
	{
		var Textarea = document.createElement( "textarea" );
		Textarea.style.width = "320px";
		Textarea.style.height = "80px";
		Textarea.value = which.value;
		Textarea.onkeypress = function( event ) { MonitorInput( this, event ); };
		
		which.parentNode.insertBefore( Textarea, which  );
		
		which.parentNode.removeChild( which );
		
		Textarea.focus();
		
		
	}
}


function ShowAddDialog()
{
    var addDialog = document.createElement("li");
    addDialog.innerHTML = "<input type='text' size='40' onkeypress='MonitorInput( this, event );'><a href='#' onClick='return SaveNew( this );'>Save</a> <a href='#' onClick='return CancelNew( this );'>Cancel</a>";

    document.getElementById("UnFlagged").insertBefore( addDialog, document.getElementById("AddNew") );	

	addDialog.getElementsByTagName("input")[0].focus();
	setTimeout( "SetFocus()", 100 );
	
	return addDialog;
}

function SetFocus()
{
	
	var Inputs = document.body.getElementsByTagName( "input" );
	
	Inputs[Inputs.length - 1].select();
	Inputs[Inputs.length - 1].focus();
}

function CancelNew( where )
{
    where.parentNode.parentNode.removeChild( where.parentNode );
	return false;
}

function PreviewNew( where )
{
    var content;
    var reasonid;
    var reasonHolder = where.parentNode;
    
    if( ( content = reasonHolder.getElementsByTagName("input")[0].value ) && ContentValid( content ) )
    {
        reasonHolder.content = content + "";
        reasonHolder.innerHTML = "<span class='Preview'>" + content + "</span>"
            + " <a href='#' onClick='SaveNew( this );'>Save</a> <a href='#' onClick='EditNew( this );'>Edit</a> <a href='#' onClick='CancelNew( this );'>Cancel</a>";
    }
    else
    {
        alert( "Oops, we don't support any blank entries (DUH!) or HTML (greater/less-than signs).  Please try again :)" );
    }

	return false;
}

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 Undo( where, id )
{
	var OldContent = where.parentNode.getElementsByTagName( "span" )[0].innerHTML;
	
	Delete( where, id );
	
	var newDialog = ShowAddDialog();
	
	newDialog.getElementsByTagName("input")[0].value = OldContent;
	
	return false;
}

function Delete( where, id )
{
	//confirm( "Are you sure you want to delete this reason?\nAre you SURE sure? :)")
	
	where.parentNode.parentNode.removeChild( where.parentNode );
		
	var req = new XMLHttpRequest();
    req.open("POST", "/Thread.aspx?thread=" + threadKey, true );
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    req.send( "ajax=1&delete=" + id );
	
	return false;
}

function SaveNew( where )
{
    var content;
    var reasonid;
    var reasonHolder = where.parentNode;

	
	if( reasonHolder.getElementsByTagName("input").length > 0  )
	{
		content = reasonHolder.getElementsByTagName("input")[0].value;
	}
	else
	{
		content = reasonHolder.getElementsByTagName("textarea")[0].value;
	}
	
	if( ! ContentValid( content ) )
    {
        alert( "Oops, we don't support any blank entries (DUH!) or HTML (greater/less-than signs).  Please try again :)" );
		return;
    }

    reasonHolder.innerHTML = "<span class='Saving'>" + content + " <span class='Dialog'>Saving...</span></span>";
    
    var req = new XMLHttpRequest();
    req.open("POST", "/Thread.aspx?thread=" + threadKey, true );
    
    req.onreadystatechange = function()
        {
            if( req.readyState == 4 )
            {
            
                if( req.status == 200 )
                {
                    AttachNewReason( req.responseText, reasonHolder );
                }
                else
                {
                    //alert( "Sorry, there was an error saving your reason.  Please try again." );
					return false;
                }
            }
        };
    
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    req.send( "ajax=1&newreason=" + encodeURIComponent( content ) );

	return false;
    
}

function PollForNew( LatestReason )
{
	var req = new XMLHttpRequest();
    req.open("GET", "/PollNew.aspx?latestreason=" + LatestReason, true );
    
    req.onreadystatechange = function()
        {
            if( req.readyState == 4 )
            {
            
                if( req.status == 200 )
                {
					if( req.responseText != "" )
					{
						var addDialog = document.createElement("li");
				    	document.getElementById("UnFlagged").insertBefore( addDialog, document.getElementById("AddNew") );	

                    	var NewReason = AttachNewReason( req.responseText, addDialog );

						setTimeout( "PollForNew(" + NewReason + ")", 5000 );
					}
					else
					{
						setTimeout( "PollForNew(" + LatestReason + ")", 5000 );
					}
                }
                else
                {
					return false;
                }
            }
        };
    
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    req.send( null );
}

function AttachNewReason( XmlResponse, reasonHolder )
{
	var newreason = ( XmlResponse ).match( "<newreason id=\"([0-9]+)\" content=\"(.+)\"/>" );
	reasonid = newreason[1];
    content = newreason[2];
    reasonHolder.id = "Reason" + reasonid;
    reasonHolder.innerHTML = "<span>" + content + "</span> <span class='ByYou'>by you</span> <a href='#' onClick='return Undo(this, \"" + reasonid + "\")'><img style='border:0;' src='/images/undo.gif' width='16' height='16' alt='Undo' title='Undo' /></a>";
	return reasonid;
}

function ContentValid( input )
{
    if( input == "" || input.match( "[<>]" ) )
    {
        return false;
    }
    else
    {
        return true;
    }
}