// blog_lib.js - functions for the blog

//sets variables with browser type and version

var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var clientVer = parseInt(navigator.appVersion); // Get browser version

var agt=navigator.userAgent.toLowerCase();

// *** BROWSER VERSION ***
// Note: On IE5, these return 4, so use is_ie5up to detect IE5.
var is_major = parseInt(navigator.appVersion);
var is_minor = parseFloat(navigator.appVersion);

// Note: Opera and WebTV spoof Navigator.  We do strict client detection.
// If you want to allow spoofing, take out the tests for opera and webtv.
var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
			&& (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
			&& (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));
var is_nav2 = (is_nav && (is_major == 2));
var is_nav3 = (is_nav && (is_major == 3));
var is_nav4 = (is_nav && (is_major == 4));
var is_nav4up = (is_nav && (is_major >= 4));
var is_navonly      = (is_nav && ((agt.indexOf(";nav") != -1) ||
					  (agt.indexOf("; nav") != -1)) );
var is_nav6 = (is_nav && (is_major == 5));
var is_nav6up = (is_nav && (is_major >= 5));
var is_gecko = (agt.indexOf('gecko') != -1);

var is_ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
var is_ie3    = (is_ie && (is_major < 4));
var is_ie4    = (is_ie && (is_major == 4) && (agt.indexOf("msie 4")!=-1) );
var is_ie4up  = (is_ie && (is_major >= 4));
var is_ie5    = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")!=-1) );
var is_ie5_5  = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.5") !=-1));
var is_ie5up  = (is_ie && !is_ie3 && !is_ie4);
var is_ie5_5up =(is_ie && !is_ie3 && !is_ie4 && !is_ie5);
var is_ie6    = (is_ie && (is_major == 4) && (agt.indexOf("msie 6.")!=-1) );
var is_ie6up  = (is_ie && !is_ie3 && !is_ie4 && !is_ie5 && !is_ie5_5);

var is_opera = (agt.indexOf("opera") != -1);
var is_opera2 = (agt.indexOf("opera 2") != -1 || agt.indexOf("opera/2") != -1);
var is_opera3 = (agt.indexOf("opera 3") != -1 || agt.indexOf("opera/3") != -1);
var is_opera4 = (agt.indexOf("opera 4") != -1 || agt.indexOf("opera/4") != -1);
var is_opera5 = (agt.indexOf("opera 5") != -1 || agt.indexOf("opera/5") != -1);
var is_opera5up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4);

var is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
var is_mac = (clientPC.indexOf("mac")!=-1);

//constants for javascript
var isStarted = new Array();

isStarted[0] = 'n';
isStarted[1] = 'n';
isStarted[2] = 'n';
isStarted[3] = 'n';
isStarted[4] = 'n';
isStarted[5] = 'n';
isStarted[6] = 'n';
isStarted[7] = 'n';

function help( type )
{
	//function to output short message explaining the use of the button
	switch( type )
	{
		case( 'linkButton' ):
			//for a link button
			message = "Insert URL: [URL=http://url]URL text[/URL]";
			break;
		case( 'imgButton' ):
			//
			message = "Insert image: [IMG]http://image_url[/IMG]";
			break;
		case( 'bButton' ):
			//
			message = "Make bold text: [B]desired text[/B]";
			break;
		case( 'iButton' ):
			//
			message = "Make italic text: [I]desired text[/I]";
			break;
		case( 'uButton' ):
			//
			message = "Make underlined text: [U]desired text[/U]";
			break;
		case( 'qButton' ):
			//
			message = "Quote someone: [Q]desired text[/Q]";
			break;
		case( 'eButton' ):
			//
			message = "Make email link: [email=email addr]name[/email]";
			break;
		case( 'sButton' ):
			//
			message = "strikethrough text: [s]desired text[/s]";
			break;
	}
	
	helpArea.innerHTML = message;
	
}

function bAddTag( mode, val )
{
	//adds start and stop tags to selected text
	
	var x = 0;	//variable holds key for isStarted array for each type of tag
	
	var txtarea = document.getElementById( 'post' );
	
	switch( mode )
	{
		case( 'b' ):
			//add bb code to make bold
			var bbopen = '[B]';
			var bbclose = '[/B]';
			var b_close = "/b";
			var b_open = "b";
			var target = document.getElementById( 'bButton' );
			x = 0;
			break;
		case( 'u' ):
			//add bbcode to make underlined
			var bbopen = '[U]';
			var bbclose = '[/U]';
			var b_close = "/u";
			var b_open = "u";
			var target = document.getElementById( 'uButton' );
			x = 2;
			break;
		case( 'i' ):
			//add bbcode to make italic
			var bbopen = '[I]';
			var bbclose = '[/I]';
			var b_close = "/i";
			var b_open = "i";
			var target = document.getElementById( 'iButton' );
			x = 1;
			break;
		case( 'l' ):
			//add bbcode to make link
			var bbopen = '[URL='+prompt( 'Enter URL:', 'http://' )+']';
			var bbclose = '[/URL]';
			var b_close = "/l";
			var b_open = "l";
			var target = document.getElementById( 'linkButton' );
			x = 3;
			break;
		case( 'img' ):
			//add bbcode to make link
			var bbopen = '[IMG]';
			var bbclose = '[/IMG]';
			var b_close = "/i";
			var b_open = "i";
			var target = document.getElementById( 'imgButton' );
			x = 4;
			break;
		case( 'q' ):
			//add bbcode to make italic
			var bbopen = '[quote]';
			var bbclose = '[/quote]';
			var b_close = "/q";
			var b_open = "q";
			var target = document.getElementById( 'qButton' );
			x = 5;
			break;
		case( 'e' ):
			//add bbcode to make italic
			var bbopen = '[email=]';
			var bbclose = '[/email]';
			var b_close = "/e";
			var b_open = "e";
			var target = document.getElementById( 'eButton' );
			x = 6;
			break;
		case( 's' ):
			//add bbcode to make italic
			var bbopen = '[s]';
			var bbclose = '[/s]';
			var b_close = "/s";
			var b_open = "s";
			var target = document.getElementById( 'sButton' );
			x = 7;
			break;
	}

	
	if( is_ie4up && is_win )
	{
		//if broswer is IE
		sel_text = document.selection.createRange().text;
		if( !sel_text )	//if range of text not selected
		{
			if( isStarted[x] == 'n' )
			{
				//if tag isn't started, start it, and swap button image
				isStarted[x] = 'y';
				target.value = b_close;
				insertAtCaret ( txtarea, bbopen )
			}
			else
			{
				//if tag is started end it, and swap button back again
				isStarted[x] = 'n';
				target.value = b_open;
				insertAtCaret ( txtarea, bbclose )
				//txtarea.value += bbclose;
				//alert( 'woo!' );
			}
		}
		else
		{
			//if range is selected*/
			document.selection.createRange().text = bbopen + sel_text + bbclose;
			//sel_text = bbopen + sel_text + bbclose;
		}
	}
	else if( is_nav )
	{
		//if broswer is NN/firefox
		
		var selLength = txtarea.textLength;
		var selStart = txtarea.selectionStart;
		var selEnd = txtarea.selectionEnd;
		
		if (selEnd == 1 || selEnd == 2)
		{
			selEnd = selLength;
		}
		
		if( selStart == selEnd )
		{
			//there is no text selected
			
			var s1 = (txtarea.value).substring(0,selStart);
			var s2 = (txtarea.value).substring(selStart,selLength);
			
			if( isStarted[x] == 'n' )
			{
				//if tag isn't started, start it, and swap button image
				isStarted[x] = 'y';
				target.value = b_close;
				txtarea.value = s1 + bbopen + s2;
			}
			else
			{
				//if tag is started, and it, and swap button image back
				isStarted[x] = 'n';
				target.value = b_open;
				txtarea.value = s1 + bbclose + s2;
			}
		}
		else
		{
			//there is  some text selected
			var s1 = (txtarea.value).substring(0,selStart);
			var s2 = (txtarea.value).substring(selStart, selEnd);
			var s3 = (txtarea.value).substring(selEnd, selLength);
			txtarea.value = s1 + bbopen + s2 + bbclose + s3;
		}
	}
	else
	{
		//browser is not IE or netwcape or firefox - probably opera
		if( isStarted[x] == 'n' )
		{
			//if tag hasn't been started
			target.value = b_close;
			txtarea.value += bbopen;
			isStarted[x] = 'y';
		}
		else
		{
			target.value = b_open;
			txtarea.value += bbclose;
			isStarted[x] = 'n';
		}
	}
	
	txtarea.focus();

	return;
}

function storeCaret ( textEl )
{
	if (textEl.createTextRange)
	{
		textEl.caretPos = document.selection.createRange().duplicate();
	}
}

function setCaret (textObj) {
  if (textObj.createTextRange) {
    textObj.caretPos = document.selection.createRange().duplicate();
  }
}

function insertAtCaret (textObj, textFeildValue) {
  if(document.all){  
     if (textObj.createTextRange && textObj.caretPos) {
       var caretPos = textObj.caretPos;
       caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ?textFeildValue + ' ' : textFeildValue;
     }else{
       textObj.value  = textFeildValue;
     }
  }else{
    if(textObj.setSelectionRange){
      var rangeStart = textObj.selectionStart;
      var rangeEnd   = textObj.selectionEnd;
      var tempStr1 = textObj.value.substring(0,rangeStart);
      var tempStr2 = textObj.value.substring(rangeEnd);
      textObj.value = tempStr1 + textFeildValue + tempStr2;
    }else{
      //alert("This version of Mozilla based browser does not support setSelectionRange");
    }
  }
}

function sAddTag( mode, val )
{
	//adds start and stop tags to selected text
		
	txtarea = document.postForm.post
	
	switch( mode )
	{
		case( 'fc' ):
			//add bbcode to set font colour
			var bbopen = '[color=' + val + ']';
			var bbclose = '[/color]';
			break;
		case( 'fs' ):
			//add bbcode to set font colour
			var bbopen = '[size=' + val + ']';
			var bbclose = '[/size]';
			break;
	}
	
	if( is_ie4up && is_win )
	{
		//if broswer is IE
		sel_text = document.selection.createRange().text;
		if( !sel_text )	//if range of text not selected
		{
			
			//txtarea.value += bbopen + bbclose;
			insertAtCaret( txtarea, bbopen + bbclose );
			
		}
		else
		{
			//if range is selected
			//add tags to the end
			document.selection.createRange().text = bbopen + sel_text + bbclose;
		}
	}
	else if( is_nav )
	{
		//if broswer is NN/firefox
		
		var selLength = txtarea.textLength;
		var selStart = txtarea.selectionStart;
		var selEnd = txtarea.selectionEnd;
		
		if (selEnd == 1 || selEnd == 2)
		{
			selEnd = selLength;
		}
		
		if( selStart == selEnd )
		{
			//there is no text selected
			
			var s1 = (txtarea.value).substring(0,selStart);
			var s2 = (txtarea.value).substring(selStart,selLength);
			txtarea.value = s1 + bbopen + bbclose + s2;
		}
		else
		{
			//there is  some text selected
			var s1 = (txtarea.value).substring(0,selStart);
			var s2 = (txtarea.value).substring(selStart, selEnd);
			var s3 = (txtarea.value).substring(selEnd, selLength);
			txtarea.value = s1 + bbopen + s2 + bbclose + s3;
		}
	}
	else
	{
		//browser is not IE or netscape or firefox - probably opera
		txtarea.value += bbopen + bbclose;
	}
	
	txtarea.focus();
	return;
}