// JavaScript Document
// Phil Whitehurst
// March 2009
// For HMC Forum Common Functions

function dispDate(d) {
	 
   var months = new Array ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
   
   var dd = d.substr(6,2);
   var mon = d.substr(4,2) - 1;
   var hh = d.substr(8,2);
   var mm = d.substr(10,2); 
   
   var mydate = dd + ' ' + months[mon] + ' ' + hh + ':' + mm;
   
   return mydate;
 }
 
 function gotoTopic(membertitle,topicID,forumID)
{
	var topic = "serverside/topic2json.asp?ID=" + topicID + '&cache=' + (new Date()).valueOf();
	
	mytopic.setURL(topic);
	mytopic.loadData();
	// Add the title and hidden form fields for topic
	Spry.$$("#topicSubject")[0].innerHTML = unescape(membertitle);
	Spry.$$('#rforumID')[0].value = forumID;
	Spry.$$('#rtopicID')[0].value = topicID;
	Collapsecp0.close();
	cancelreply();
	TabbedPanels1.showPanel(1);
}
function myForum(Rgn,phil)
 { 
 
 var forum = phil("{forum_id}").toString();
  
 fID = ' Fid="' + forum + '"';
 
 switch (forum) 
 	{
		case '1':
		 {return '<img src="images/forum/start.gif" title="New Members"' + fID + '/>' ;}
		case '5':
		 {return '<img src="images/forum/climb.gif" title="Climbing"' + fID + '/>';}
		case '6':
		 {return '<img src="images/forum/bike.gif" title="Mountain Biking"' + fID + ' />';}
		case '7':
		 {return '<img src="images/forum/walk.gif" title="Walking / Scrambling"' + fID + '/>';}
		case '9':
		 {return '<img src="images/forum/events.gif" title="Events"' + fID + '/>';}
		 case '10':
		 {return '<img src="images/forum/committee.gif" title="Committee"' + fID + '/>';}
		 case '13':
		 {return '<img src="images/forum/chat.gif" title="General Chat"' + fID + '/>';}
		 case '14':
		 {return '<img src="images/forum/forsale.gif" title="For Sale"' + fID + '/>';}
		 case '17':
		 {return '<img src="images/forum/website.gif" title="Help"' + fID + '/>';}
		default: 
		 {return 'Unknown Forum';}
	}
 
 }
 function myForumFilt(Rgn,phil)
 { 
 
 var forum = phil("{forum_id}").toString();
  
 ftID = ' ftID="' + forum + '"';
 
 
 switch (forum) 
 	{
		case '1':
		 {return '<img src="images/forum/start.gif" title="New Members"' + ftID + '"/>' ;}
		case '5':
		 {return '<img src="images/forum/climb.gif" title="Climbing"' + ftID + '/>';}
		case '6':
		 {return '<img src="images/forum/bike.gif" title="Mountain Biking"' + ftID + '/>';}
		case '7':
		 {return '<img src="images/forum/walk.gif" title="Walking / Scrambling"' + ftID + '/>';}
		case '9':
		 {return '<img src="images/forum/events.gif" title="Events"' + ftID + '/>';}
		 case '10':
		 {return '<img src="images/forum/committee.gif" title="Committee"' + ftID + '/>';}
		 case '13':
		 {return '<img src="images/forum/chat.gif" title="General Chat"' + ftID + '/>';}
		 case '14':
		 {return '<img src="images/forum/forsale.gif" title="For Sale"' + ftID + '/>';}
		 case '17':
		 {return '<img src="images/forum/website.gif" title="Help"' + ftID + '/>';}
		default: 
		 {return 'Unknown Forum';}
	}
 
 
 }
 
 function getText(myele) {
// Get selected text form post 	
// used by bold, italic, etc functions	
	    
	if (myele.createTextRange && myele.caretPos) {
		return myele.caretPos.text;
	} else if (typeof myele.selectionStart != 'undefined'){
		return myele.value.substr(myele.selectionStart,myele.selectionEnd-myele.selectionStart)
	}
	return '';

}

function addText(myele,text) {
// Replace the text orginally selected by select text	
//	
	if (typeof myele.selectionStart != 'undefined'){ // if it supports DOM2
		start = myele.selectionStart;
		end = myele.selectionEnd;
		myele.value = myele.value.substr(0,myele. selectionStart)
			+ text + myele.value.substr(myele. selectionEnd);
		myele.focus();
		myele.selectionStart = ((start - end) == 0) ? start + text.length : start;
		myele.selectionEnd = start + text.length;
	} else {
		if (myele.createTextRange && myele.caretPos) {
			var caretPos = myele.caretPos;
			caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ?   text + ' ' : text;
		}
		else {
			myele. value += text;
		}
		myele.focus(caretPos);
	}
}

 function applyBold(myele)
 {
	 
	 applyStyle(myele,'b');
	  
 }
 
 function applyItalic(myele)
 {
	 applyStyle(myele,'i');
	  
 }
 function applyUnderline(myele)
 {
	 applyStyle(myele,'u');
	  
 }
  function applyQuote(myele)
 {
	 applyStyle(myele,'q');
	  
 }
  function addEmoticon(myele,emoticon)
 {
	 
	 addText(myele,emoticon);
	  
 }
 function applyStyle(myele,style)
 	{
		txt = getText(myele);
	 	
		openStyle = '[' + style + ']';
		closeStyle = '[/' + style + ']';
	    if (txt!= '')
	 		{
				txt = openStyle + txt + closeStyle;
	 			addText(myele,txt);
			}
		else
		{
		alert('First you must select the text to apply the style to!');
		}
 }
function storeCaret() {
	
	mytext = this;
	if (mytext.createTextRange) {
		mytext.caretPos = document.selection.createRange().duplicate();
	}
}

//
// The code in this section is about formatting forum posts
//

function formatPost(msg)
{
// Format posts in required HTML for topic page

// Replace linefeeds with html equivalent

var br = '<br />';
var regEx = /\r\n/g;

var tmp = msg.replace(regEx,br); 

tmp = Spry.Utils.decodeEntities(tmp);

tmp = delimit(tmp);

tmp = youTube(tmp);
tmp = vHoldr(tmp);
tmp = googleMaps(tmp);
tmp = myImages(tmp);
tmp = myLinks(tmp);
tmp = tmp.join(' ');
tmp = QuoteReply(tmp);
tmp = myfontTags(tmp);
tmp = myEmoticons(tmp);

regEx = /\[br\]/g;

tmp = tmp.replace(regEx,'<br />');


// Return Result
return tmp;

}


function delimit(msg)
{

// Place spaces around all the tags so we can nicely identify and reformat into youtube, google maps, images, links etc 
// Replace <> with [] to stop hackers inserting HTML code
// Replace multiple spaces with a single space
var regEx = /[ \t\v]{2,}/g;
var tmp = msg.replace(regEx," ");

// Replace <> with [] to prevent HTML injection

regEx = /</g;
tmp = tmp.replace(regEx,"[");

regEx = />/g;						  
tmp = tmp.replace(regEx,"]");

regEx = /&lt;/g;						  
tmp = tmp.replace(regEx,"[");
						  
						  
regEx = /&gt;/g;						  
tmp = tmp.replace(regEx,"]");

regEx = /&amp;lt;/g;						  
tmp = tmp.replace(regEx,"[");
						  
						  
regEx = /&amp;gt;/g;						  
tmp = tmp.replace(regEx,"]");
						  
// Spaces around [] tags
regEx = /\[/g;
tmp = tmp.replace(regEx," [");

regEx = /]/g;						   
tmp = tmp.replace(regEx,"] ");

// Ensure when we split by space that the [] appear in the resultant array together with the tag name

regEx = /\[ /g;						   
tmp = tmp.replace(regEx,"[");

regEx = / ]/g;						   
tmp = tmp.replace(regEx,"]");

// Spaces around http (ignoring google map http with kml links of format http://......?=http )

regEx = /[^=]http/g;
tmp = tmp.replace(regEx, " http");


// Spaces around line feeds

newline = String.fromCharCode(13);
linefeed = String.fromCharCode(10);

//regEx = /[\r\n]/g;
//tmp = tmp.replace(regEx," " + newline + " ");

// Return results from function as one dimensional array that was delimited / split by space 

return tmp.split(' ');

}

function youTube(msg)
{
// Convert youtube video link to embed HTML
var youTubeText = '<br /><br /><div class="youtube"><object><param name="movie" value="{Replace}?version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="false"></param><embed src="{Replace}?version=3" type="application/x-shockwave-flash" allowScriptAccess="false" allowfullscreen="true"></embed></object></div><br /><br />';
var content;
for (i=0;i<msg.length;i++)
  {
	 var content = msg[i].toLowerCase();
	  
// Remove youtube tags
   if ((content == "[tube]") || (content == "[/tube]"))
  { 
  msg[i] = '';
  }
   	
// You tube link in this array occurence ?	
   
   if (content.indexOf(".youtube.") > -1)
   {
   
   regEx = /watch\?v=/g;
   tmp = msg[i].replace(regEx,"v/");
   
   regEx = /{Replace}/g;
   msg[i] = youTubeText.replace(regEx,tmp); 
   
   } 
  }
// Return results
return msg;
}
function vHoldr(msg)
{
// Convert VHolder video link to embed HTML
var VHoldrText = '<embed type="application/x-shockwave-flash" src="http://vholdr.com/videoPlayer/embedPlayer.swf" allowfullscreen="true" allowscriptaccess="always" flashvars="height=393&width=700&plugins=yourlytics-1&yourlytics.callback=http://vholdr.com/callback.php&repeat=list&file={Replace}/emb" height="393" width="700"></embed>';


var content;
for (i=0;i<msg.length;i++)
  {
	 var content = msg[i].toLowerCase();
	 

// You vholder link in this array occurence ?	
   
   if (content.indexOf(".vholdr.") > -1)
   {
   regEx = /www.vholdr.com/
   tmp = msg[i].replace(regEx,"vholdr.com/xspf"); 
   regEx = /{Replace}/g;
   msg[i] = VHoldrText.replace(regEx,tmp);
   
   } 
  }
// Return results
return msg;
}

function googleMaps(msg)
{
// Convert Google Maps to embed HTML

var googleMapsText = '<br /><br /><div class="gmap"><iframe scrolling="no" src="{Replace}&amp;output=embed"></iframe></div><br /><br />'
var googleMapsTextSV = '<br /><br /><div class="gmap"><iframe scrolling="no" src="{Replace}"></iframe></div><br /><br />'

for (i=0;i<msg.length;i++)
{
   var content = msg[i];
// Is Google Maps link in this array occurence ?	
   if (content.indexOf("http://maps.google") > -1)  
     {   
		regEx = /\{Replace\}/g;
		if (content.indexOf("maps/sv") > -1) 
		{
		
	 // Google Street view needs to be handled differently
	 	msg[i] = googleMapsTextSV.replace(regEx,msg[i]);
	 	}
	  	else 
	  	{
	 	msg[i] = googleMapsText.replace(regEx,msg[i]);
	  	}
	 }
}
	

// Return results
	
return msg;

}  
 
function myImages(msg)
// Search for images and convert into required HTML for embedding into post
// .jpg .gif or .png
{
var myImageText = '<p><img src="{Replace}" class="fImg" /></p>'

for (i=0;i<msg.length;i++)
{
   var content = msg[i].toLowerCase();
   // Strip out any image tags
   if ((content == "[img]") || (content == "[/img]"))
   {
     msg[i] = '';  
   }
   
	// Look for jpg, gif or png images in array occurences
   jpg = content.indexOf(".jpg") + 1;
   gif = content.indexOf(".gif") + 1;
   png = content.indexOf(".png") + 1;
 // Did we find an image ?
   if (jpg + gif + png > 0)
   {
     var regEx = /{Replace}/g;
	 msg[i] = myImageText.replace(regEx,msg[i]);
   }
}

// Return results of function

return msg

}
 
 function myLinks(msg)
 {
// Search for http links and convert into required HTML

 
var myLinkText = '<a href="{ReplaceLink}" target="_blank" title="{ReplaceLink}" >{ReplaceText}</a>'

 var linkCount = 0;
 var http = "http://";
 var https = "https://";
 var www = "www.";
  
 for (i=0;i<msg.length;i++)
 {
  var content = msg[i].toLowerCase();
  // Strip out URL tags
   if ((content == "[url]") || (content == "[/url]")) 
   {
     msg[i] = '';
   }	 
  // http or https link found ?
    
  if ((content.substr(0,7) == http) || (content.substr(0,8) == https) || (content.substr(0,4) == www))
	{												   
    
	regEx = /\{ReplaceLink\}/g;
	content.substr(0,4) == www ? mylink = myLinkText.replace(regEx,'http://' + msg[i]) : mylink = myLinkText.replace(regEx,msg[i]);
	
	//linkCount = linkCount + 1;
	//linkno = "Link" + linkCount; 
	linkno = msg[i];
	regEx = /\{ReplaceText\}/g;
	msg[i] = mylink.replace(regEx,linkno) 
	
	}
 }
// Return results of function
return msg;

 }

function QuoteReply(msg)
{
// Search for quote text and remove markup
// Use regular expressions \ escapes the next character (used for special cahracters) 

var myfontText = /\[font.*?\]/g;
var myfontText2 = /\[\/font.*?\]/g;  
var myhrText = /\[hr.*?\]/g;
 

var myblockText = /\[blockquote.*?\]/g;
var myblockText2 = /\[\/blockquote.*?\]/g;


msg = msg.replace(myfontText,'');

msg = msg.replace(myfontText2,'');

msg = msg.replace(myhrText,'');

msg = msg.replace(myblockText,"[q]");

msg = msg.replace(myblockText2,"[/q]");

// Quotes final bit

regEx = /quote:/g
msg = msg.replace(regEx,'');
regEx = /\[q\]/g;
msg = msg.replace(regEx,'<blockquote> quote:<hr />')
regEx = /\[\/q\]/g;
msg = msg.replace(regEx,'<hr /></blockquote>')

return msg;

}

function myfontTags(msg)
// Search for font tags and replace as required 
{
// Line breaks
var regEx = /\[br\s*\/\]/g; 
msg = msg.replace(regEx,"<br />");
// Bold
regEx = /\[\s*b\s*\]/g;
msg = msg.replace(regEx,"<strong>");
regEx = /\[\s*\/b\s*\]/g;
msg = msg.replace(regEx,"</strong>");
// Italic
regEx = /\[\s*i\s*\]/g;
msg = msg.replace(regEx,"<i>");
regEx = /\[\s*\/i\s*\]/g;
msg = msg.replace(regEx,"</i>");
// Underline
regEx = /\[\s*u\s*\]/g;
msg = msg.replace(regEx,"<u>");
regEx = /\[\s*\/u\s*\]/g;
msg = msg.replace(regEx,"</u>");





// Return result
return msg
}

function myEmoticons(msg)
{
// Search for emoticon tags and replace with image link 
 
var Afraid = '<img src="images/emoticons/afraid.gif" title="Afraid" />';
var Aloof = '<img src="images/emoticons/aloof.gif" title="Aloof" />'; 
var Angry = '<img src="images/emoticons/angry.gif" title="Angry" />';
var Approve = '<img src="images/emoticons/approve.gif" title="Approve" />';  

var Blush = '<img src="images/emoticons/blush.gif" title="Blush" />';
var Beer = '<img src="images/emoticons/beer.gif" title="Mine is a pint" />';

var Callme = '<img src="images/emoticons/callme.gif"  title="Call me" />';
var Confused = '<img src="images/emoticons/confused.gif" title="Confused" />';
var Cool = '<img src="images/emoticons/cool.gif" title="Cool" />';

var Disappointed = '<img src="images/emoticons/disappointed.gif" title="Disappointed" />'; 
var Disapprove = '<img src="images/emoticons/disapprove.gif" title="Disapprove" />'; 

var Exhausted = '<img src="images/emoticons/exhausted.gif" title="Exhausted" />';

var Joker = '<img src="images/emoticons/joker.gif" title="Joker" />';

var Lovesick = '<img src="images/emoticons/lovesick.gif" title="Lovesick" />';

var Notlistening = '<img src="images/emoticons/notlistening.gif" title="Not listening" />';

var Peace = '<img src="images/emoticons/peace.gif" title="Peace" />';
var Raspberry = '<img src="images/emoticons/raspberry.gif" title="Raspberry" />';

var Shock = '<img src="images/emoticons/suprise.gif" title="Shock" />';
var Sick = '<img src="images/emoticons/sick.gif" title="Sick" />'; 
var Sleepy = '<img src="images/emoticons/sleepy.gif" title="Sleepy" />';

var Smile = '<img src="images/emoticons/smile.gif" title="Smile" />';
var Speakup = '<img src="images/emoticons/speakup.gif" title="Speakup" />';
var Suprise = '<img src="images/emoticons/suprise.gif" title="Suprise" />';

var Upset = '<img src="images/emoticons/upset.gif" title="Upset" />';

var Wink = '<img src="images/emoticons/wink.gif" title="Wink" />';


// Tag List

var AfraidTag = /\[afraid\]/g;
var AloofTag = /\[aloof\]/g;
var AngryTag = /\[:\(!\]/g;
var AngryTag1 = /\[angry\]/g;
var ApproveTag = /\[\^\]/g;
var ApproveTag1 = /\[approve\]/g;

var BeerTag = /\[beer\]/g;
var BlushTag = /\[blush\]/g;

var CallmeTag = /\[callme\]/g;
var ConfusedTag = /\[confused\]/g;
var CoolTag = /\[8D\]/g;
var CoolTag1 = /\[cool\]/g;

var DisappointedTag = /\[disappointed\]/g;

var DisapproveTag = /\[V\]/g;
var DisapproveTag1 = /\[disapprove\]/g;

var ExhaustedTag = /\[exhausted\]/g;

var JokerTag = /\[joker\]/g;

var LovesickTag = /\[lovesick\]/g;

var NotlisteningTag = /\[notlistening\]/g;

var PeaceTag = /\[peace\]/g;

var RaspberryTag = /\[raspberry\]/g;


var ShockTag = /\[:0\]/g;
var ShockTag1 = /\[shock\]/g;

var SickTag = /\[:p\]/g;
var SickTag1 = /\[sick\]/g;

var SleepyTag = /\[\|\)\]/g;
var SleepyTag1 = /\[sleepy\]/g;

var SmileTag = /\[:\)\]/g;
var SmileTag2 = /\[:D\]/g;
var SmileTag3 = /\[smile\]/g;
var SpeakupTag = /\[speakup\]/g;

var SupriseTag = /\[suprise\]/g;

var UpsetTag = /\[upset\]/g;

var WinkTag = /\[;\)\]/g;
var WinkTag1 = /\[wink\]/g;

msg = msg.replace(AfraidTag,Afraid);
msg = msg.replace(AloofTag,Aloof);

msg = msg.replace(AngryTag,Angry);
msg = msg.replace(AngryTag1,Angry);
msg = msg.replace(ApproveTag,Approve);
msg = msg.replace(ApproveTag1,Approve);

msg = msg.replace(BeerTag,Beer);
msg = msg.replace(BlushTag,Blush);

msg = msg.replace(CallmeTag,Callme);
msg = msg.replace(ConfusedTag,Confused);

msg = msg.replace(CoolTag,Cool);
msg = msg.replace(CoolTag1,Cool);

msg = msg.replace(DisappointedTag,Disappointed);

msg = msg.replace(DisapproveTag,Disapprove);
msg = msg.replace(DisapproveTag1,Disapprove);

msg = msg.replace(ExhaustedTag,Exhausted);

msg = msg.replace(JokerTag,Joker);

msg = msg.replace(LovesickTag,Lovesick);

msg = msg.replace(NotlisteningTag,Notlistening);

msg = msg.replace(PeaceTag,Peace);

msg = msg.replace(RaspberryTag,Raspberry);

msg = msg.replace(ShockTag,Shock);
msg = msg.replace(ShockTag1,Shock);

msg = msg.replace(SickTag,Sick);
msg = msg.replace(SickTag1,Sick);

msg = msg.replace(SleepyTag,Sleepy);
msg = msg.replace(SleepyTag1,Sleepy);

msg = msg.replace(SmileTag,Smile);
msg = msg.replace(SmileTag2,Smile);
msg = msg.replace(SmileTag3,Smile);

msg = msg.replace(SpeakupTag,Speakup);

msg = msg.replace(SupriseTag,Suprise);

msg = msg.replace(UpsetTag,Upset);


msg = msg.replace(WinkTag,Wink)
msg = msg.replace(WinkTag1,Wink)

return msg;

}




