/*No show twice variable 33-126*/
var noShowAgain=0;

/*The TSIPE Class*/
var TSEditor = Class.create();
TSEditor.prototype = {
   /*Initialize the editable*/
   initialize: function(editDivId_, URL_, hoverColor)
   {
      /*Check for browser specs*/
      if(BrowserDetect.browser=="Firefox" && noShowAgain==0)
      {
         alert("You are currently using the Firefox browser which does not support InlineEdit, please use Safari or Internet Explorer to do your editing.  Please note that the content can viewed in firefox with no problems."); 
         noShowAgain=1;
         return;
      }
      else if(BrowserDetect.browser=="Firefox")
      {
         return;
      }
        
      /*Setup local variables*/
      this.docSelect = 0;
      var elf = this;
      this.startText = $(editDivId_).innerHTML;
      this.editDiv = $(editDivId_);
      this.URL = URL_;
      if(this.editDiv.style.backgroundColor == "")
      {
         this.initColor="transparent";
      }
      else
      {
         this.initColor = this.editDiv.style.backgroundColor;
      }
      this.hoverColor = hoverColor;
      var DClick = this.DClick;
      var MOver = this.MOver;
      var MOut = this.MOut;
      
      /*Check for empty selection, use addtext.png*/
      if(this.editDiv.innerHTML.trim() == "") 
      {
         this.editDiv.innerHTML = '<IMG SRC="../images/addtext.png">';
      }
      
      /*Setup the hover*/
      if(hoverColor==undefined) hoverColor="yellow";
      setHover(this, hoverColor);
      
      /*Setup the paste handler*/
      this.editDiv.onpaste=function(e)
      {
         setTimeout("StripGiven('"+elf.editDiv.id+"');", 100); 
      }
      
      /*Setup the goEdit mode on the click event*/
      Event.observe(this.editDiv.id, 'click', DClick=
         function()
         {
            unsetHover(elf);
            elf.editDiv = MakeEditable(elf.editDiv);
            buildButtons(elf);
            assignButtonFunction(elf);
            Event.stopObserving(elf.editDiv.id, 'click', DClick);
            elf.editDiv.focus();
         }
      ); 
   }
}

/*StripGiven function*/
function StripGiven(elem)
{
   var toStrip = $(elem);
   if(BrowserDetect.browser=="Explorer")
   {
      toStrip.innerHTML = IEStripHtml(toStrip.innerHTML);
   }
   else
   {
      toStrip.innerHTML = StripHtml(toStrip.innerHTML);
   }
}

/*Assign the button functions for a given elem*/
function assignButtonFunction(obj)
{
   Event.observe(obj.ok_button, 'click', DClick=
      function()
      {        
         var holdText = obj.editDiv.innerHTML;
         obj.editDiv.innerHTML = "Saving, please do not refresh the page...";
         obj.editDiv.contentEditable="false";
         removeButtons(obj);
         var sendURL;
         if(BrowserDetect.browser=="Explorer")
         {
            sendURL = obj.URL + "?page=" + $("page_name").value + "&id=" + obj.editDiv.id  + "&-session=member:" + $F("sid") + '&rd=1'+ "&aText=" + escape(IEStripHtml(holdText));
         }
         else
         {
            sendURL = obj.URL + "?page=" + $("page_name").value + "&id=" + obj.editDiv.id  + "&-session=member:" + $F("sid") + '&rd=1'+ "&aText=" + escape(StripHtml(holdText));
         }
         new Ajax.Updater(obj.editDiv,sendURL,{onComplete: 
            function()
            {
               obj.initialize(obj.editDiv.id, obj.URL, obj.hoverColor);
            }
         });
      }
   );
   Event.observe(obj.cancel_button, 'click', CClick=
      function()
      {
          obj.editDiv.innerHTML = obj.startText;
          obj.editDiv.contentEditable="false";
          removeButtons(obj);
          obj.initialize(obj.editDiv.id, obj.URL, obj.hoverColor);
      }
   );
   Event.observe(obj.clear_button, 'click', LClick=
      function()
      {
          obj.editDiv.innerHTML = "";
          obj.editDiv.focus();
      }
   );
   Event.observe(obj.addlink_button, 'click', AClick=
      function()
      {
         var anchorText = prompt("Enter the text the link will display:\nExample:\nClick Here");
         var anchorURL = prompt("Enter the address the link will go to:\nExample:\nhttp://www.tennissource.net\nor\nmailto:person@domain.com (for email links)");
         if(anchorText.trim() == "")
         {
            alert("You have entered nothing for the link text.  Please try again.");
         }
         else if(anchorURL.substring(0,7) != "http://" && anchorURL.substring(0,7) != "mailto:")
         {
            alert("You have entered an invalid address for the link.  Please try again.\nNote: Links must begin with 'http://'.");
         }
         else
         {
            alert("Your new link will appear at the bottom of the current editable area you are working on.  You can then copy and paste it whereever it needs to go.");
            obj.editDiv.innerHTML = obj.editDiv.innerHTML + "<BR><BR>" + "<a href="+anchorURL+">"+anchorText+"</a>";
         }
      }
   );
}
   
/*Remove the buttons*/
function removeButtons(obj)
{
   obj.editDiv.parentNode.removeChild(obj.ok_button);
   obj.editDiv.parentNode.removeChild(obj.cancel_button);
   obj.editDiv.parentNode.removeChild(obj.clear_button);
   obj.editDiv.parentNode.removeChild(obj.addlink_button);
   obj.ok_button = undefined;
   obj.cancel_button = undefined;
   obj.clear_button = undefined;
}


/*Makes the text inside the area editable*/
function MakeEditable(elem)
{
   elem.contentEditable="true";
   var chkAT = elem.innerHTML.substring(elem.innerHTML.length - 13);
   if(chkAT.toLowerCase()=="addtext.png\">")
   {
      elem.innerHTML = "";
   }
   return elem;
}

/*Sets up the editing of the div*/
function buildButtons(obj)
{
   /*Generate button series: OK, Cancel, Clear*/
   var ok_button = document.createElement("input");
   var cancel_button = document.createElement("input");
   var clear_button = document.createElement("input");
   var addlink_button = document.createElement("input");
   
   /*Assign apptitudes to buttons*/
   ok_button.type="submit";
   ok_button.value="Submit";
   cancel_button.type="submit";
   cancel_button.value="Cancel";
   clear_button.type="submit";
   clear_button.value="Clear";
   addlink_button.type="submit";
   addlink_button.value="Add Link";
   
   /*Place buttons (Note: Order matters here)*/
   obj.editDiv.parentNode.appendChild(cancel_button);
   obj.editDiv.parentNode.appendChild(ok_button);
   obj.editDiv.parentNode.appendChild(clear_button);
   obj.editDiv.parentNode.appendChild(addlink_button);
   obj.ok_button = ok_button;
   obj.cancel_button = cancel_button;
   obj.clear_button = clear_button;
   obj.addlink_button = addlink_button;
}   
 
/*Unset the hovering color of an element*/
function unsetHover(obj)
{
   Event.stopObserving(obj.editDiv.id, 'mouseover', obj.MOver);
   Event.stopObserving(obj.editDiv.id, 'mouseout', obj.MOut);
   obj.editDiv.style.backgroundColor=obj.initColor;
}  

/*Sets the hovering color of an element*/
function setHover(obj, color)
{
   var MOver = obj.MOver;
   var MOut  = obj.MOut;
   Event.observe(obj.editDiv.id, 'mouseover', obj.MOver=
      function()
      {
         obj.editDiv.style.background = color;
      }
   );
   Event.observe(obj.editDiv.id, 'mouseout', obj.MOut=
      function()
      {
         obj.editDiv.style.background = obj.initColor;
      }
   );
}

/*HTML Stripper*/
function StripHtml(toStrip)
{
   var output = '';
   var endpos = toStrip.length;
   var foundSwitch=0; 
   
   for(var i=0; i<endpos; i++)
   {
      if(toStrip[i]=="<" && toStrip[i+1]!="/" && (toStrip.substring(i+1,i+4).toUpperCase() == "DIV" || toStrip.substring(i+1,i+4).toUpperCase() == "<BR") && toStrip.substring(i+1,i+6).toUpperCase() != "<BR C")
      {
         while(toStrip[i] != ">")
         {
            i=i+1;
         }
         output=output+'<br>';
      }
      else if(toStrip[i]=="<" && toStrip[i+1].toUpperCase()=="A")
      {
         while(toStrip.substring(i,i+4).toUpperCase() != "</A>")
         {
            output=output+toStrip[i];
            i++;
         }
         output=output+"</A>";
         i=i+3;
      }
      else if(toStrip[i]=="<")
      { 
         if(toStrip.substring(i+1,i+3).toUpperCase()=="BR" && toStrip.substring(i+1,i+5).toUpperCase()!="BR C") 
         {
            output=output+'<br>';
            while(toStrip[i] != ">")
            {
               i=i+1;
            }
         }
         else if(toStrip.substring(i,i+3).toUpperCase()=="<I>") 
         {
            output=output+"<I>";
            i=i+2;
         }
         else if(toStrip.substring(i,i+4).toUpperCase()=="</I>") 
         {
            output=output+"</I>";
            i=i+3;
         }
         else if(toStrip.substring(i,i+3).toUpperCase()=="<B>") 
         {
            output=output+"<B>";
            i=i+2;
         }
         else if(toStrip.substring(i,i+4).toUpperCase()=="</B>") 
         {
            output=output+"</B>";
            i=i+3;
         }
         else
         {
            while(toStrip[i] != ">")
            {
               i=i+1;
            }   
         }
      }
      else 
      {
         output=output + toStrip[i];
      }
   }   
   return output;
}

/*IE Html Stripper*/
/*HTML Stripper*/
function IEStripHtml(toStrip)
{
   var output = '';
   var endpos = toStrip.length;
   var foundSwitch=0; 
   
   for(var i=0; i<endpos; i++)
   {
      if(toStrip.charAt(i)=="<" && toStrip.charAt(i+1)!="/" && (toStrip.substring(i+1,i+4).toUpperCase() == "DIV" || toStrip.substring(i+1,i+4).toUpperCase() == "<BR") && toStrip.substring(i+1,i+6).toUpperCase() != "<BR C")
      {
         while(toStrip.charAt(i) != ">")
         {
            i=i+1;
         }
         output=output+'<br>';
      }
      else if(toStrip.charAt(i)=="<" && toStrip.charAt(i+1).toUpperCase()=="A")
      {
         while(toStrip.substring(i,i+4).toUpperCase() != "</A>")
         {
            output=output+toStrip.charAt(i);
            i++;
         }
         output=output+"</A>";
         i=i+3;
      }
      else if(toStrip.charAt(i)=="<")
      { 
         if(toStrip.substring(i+1,i+3).toUpperCase()=="BR" && toStrip.substring(i+1,i+5).toUpperCase()!="BR C") 
         {
            output=output+'<br>';
            while(toStrip.charAt(i) != ">")
            {
               i=i+1;
            }
         }
         else if(toStrip.substring(i,i+3).toUpperCase()=="<I>") 
         {
            output=output+"<I>";
            i=i+2;
         }
         else if(toStrip.substring(i,i+4).toUpperCase()=="</I>") 
         {
            output=output+"</I>";
            i=i+3;
         }
         else if(toStrip.substring(i,i+3).toUpperCase()=="<B>") 
         {
            output=output+"<B>";
            i=i+2;
         }
         else if(toStrip.substring(i,i+4).toUpperCase()=="</B>") 
         {
            output=output+"</B>";
            i=i+3;
         }
         else
         {
            while(toStrip.charAt(i) != ">")
            {
               i=i+1;
            }   
         }
      }
      else 
      {
         output=output + toStrip.charAt(i);
      }
   }   
   return output;
}


/*Trimmer function*/
String.prototype.trim = function() {
   a = this.replace(/^\s+/, '');
   return a.replace(/\s+$/, '');
};


/*Function run to make all lasso tags of type edit_html editable*/
/*Method: Seeks all tags with id e_ or pg_e_ for the newsletter*/
function initEditables()
{
   var paras = document.getElementsByTagName("div");
   for(var i=0;i<paras.length;i++)
   {
      if(paras[i].id.substring(0,2)=="e_"){
         var thisEditor = new TSEditor(paras[i], "../lasso/update.lasso");
      }
      if(paras[i].id.substring(0,5)=="pg_e_"){
         var thisEditor = new TSEditor(paras[i], "../lasso/pg_update.lasso");
      }
   }
} 

/*Broswer Detector Code*/
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();
