 /********************************************************
 *	
 *	Developed by Michael P. Schmidt for Lockheed Martin 2007.
 *
 *	contentHeader
 * 		will perform the actions of teh following buttons on the content.
 *			Font Resizing Up & Down
 *			Printing
 *			Email
 *		
 *	Requirements:
 *		prototype
 *			 Version: '1.6.0_rc1',
 *		StyleSheetSwitcher
 *			Version: 0.2.1
 *
 *		FontSwitcher:
 *			will change the style sheet between those listed in fonts array
 *			FontSwitcher.Increase	will increase the font
 *			FontSwitcher.Decrease	will decrease the font
 *			FontSwitcher.Reset		will reset the font to (resetValue)
 *
 *		PageMailer:	
 *			will mail the current page with a link and some page content
 *			PageMailer.email	
 *
 *		PrintPage
 *			will move a pages content into a popped up window with a print
 *			preview
 *
 *			PrintPage.printPreview
 *
 *
 *********************************************************/
var FontSwitcher = 
{
	fonts : new Array("small", "normal", "large", "largest" ),
	Version : '0.0.1',
	resetValue : "normal",
	Increase : function(){
		this.FontChange(1);
	},
	Decrease : function(){
		this.FontChange(-1);
	},
	FontChange : function(amt)
	{
		amt = amt + this.getCurrent();
		if ( amt >= 0 && amt < this.fonts.length)
		{
			StyleSheetSwitcher.setActive(this.fonts[amt]);
		}
	},
	getCurrent : function(){
		var curSize = StyleSheetSwitcher.getActive();
		for (var i = 0; i < this.fonts.length; i++)
		{
			if ( curSize == this.fonts[i] )
				return i;
		}
		return -100;
	}, 
	Reset : function()
	{

		StyleSheetSwitcher.setActive(this.resetValue);
	
	}
	
};

var PageMailer = {
	Version : '0.0.2',
	contentClass: "secondaryPageContent",
	maxLengthOfURL : 2000, /* Actually 2048 but lets play safe */
	templateBody :'A link to #{PageTitle} has been sent to you.\n\n#{PageAddress}\n\n#{PageBody}',
	templateMailTo: 'mailto:?subject=#{PageTitle}&body=#{MailBody}',
		
getElementsByClass:function(searchClass,node,tag) {
	
        var classElements = new Array();
        
        var els = document.all;
        var elsLen = els.length;
        var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
        for (i = 0, j = 0; i < elsLen; i++) {
                if ( pattern.test(els[i].className) ) {
                        classElements[j] = els[i];
                        j++;
                }
        }
        return classElements;
},
trim : function(s)
{
    return s.replace(/^\s+|\s+$/g,"");
},
ltrim: function(s) {
    return s.replace(/^\s+/,"");
},
rtrim: function(s) {
    return s.replace(/\s+$/,"");
},
_htmlUnEncode: function(str)
{
	var temp = document.createElement("div");
	temp.innerHTML = str;
    var result = temp.childNodes[0].nodeValue;
    temp.removeChild(temp.firstChild);
    return result;
},


stripScripts: function(str)
{
	var strReg = /<script[\s\S]*?<\/script>/gi;
	str = str.replace(strReg, "");	
	return str;
},
stripStyles: function(str)
{
	var strReg = /<style[\s\S]*?<\/style>/gi;
	str = str.replace(strReg, "");	
	return str;
},

	email : function(){
		if (Prototype.Browser.IE && parseInt(navigator.appVersion) < 6) {
			elems = this.getElementsByClass(this.contentClass);
		}
		else {
		
			elems = $$("." + this.contentClass);
		}
		var pageBody = "";
		var tmpPage = "";
		var pageTitle = "";
		var mailBody = "";
		var mailTo = ""; 
		var pageAddress = "";
		for ( var i = 0 ; i < elems.length; i++)
		{
			elem = elems[i];
			
					tmpPage = elem.innerHTML;
			tmpPage = this.stripScripts(tmpPage);
			tmpPage = this.stripStyles(tmpPage);
		
			tmpPage = this.trim(tmpPage);
			pageBody = pageBody + tmpPage;
		}
		
		pageBody = pageBody.stripScripts().stripTags();

		pageBody = this._htmlUnEncode(pageBody)
		pageBody = pageBody.strip();
		
		var tBody = new Template(this.templateBody);
		var tMailTo = new Template(this.templateMailTo);
		
		pageTitle = document.title;
		pageAddress = window.location.href;
		mailBody = tBody.evaluate({PageTitle:pageTitle,PageAddress:pageAddress});
		mailTo = tMailTo.evaluate({PageTitle:pageTitle,MailBody:escape(mailBody)});
		
		var lenLeft = this.maxLengthOfURL - mailTo.length;
		
		if ( escape(pageBody).length > lenLeft)
		{
			/* We need to trim off everything beyond lenLeft */
			
			
			pageBody = "snippet from page:\n" + pageBody;
		
			pageBody = pageBody.substring(0, lenLeft-4) + "....";
			
			
		}
		
		mailBody = tBody.evaluate({PageTitle:pageTitle,PageAddress:pageAddress,PageBody:pageBody});

		mailTo = tMailTo.evaluate({PageTitle:pageTitle,MailBody:escape(mailBody)});
		/* Just in case the encoded length is bigger then the maxlength we will trim off the end.
		 * 	We will also make sure we don't have a partial url encoded string by removing the
		 * characters if the string has a % in either of hte last two parts.
		 * 
		 */
		if (mailTo.length > this.maxLengthOfURL) {
			mailTo = mailTo.substring(0, this.maxLengthOfURL);
			if (mailTo.charAt(mailTo.length - 2) == "%") {
				mailTo = mailTo.substring(0, mailTo.length - 2);
			}
			else if (mailTo.charAt(mailTo.length - 1) == "%") {
				mailTo = mailTo.substring(0, mailTo.length - 1);
			} else if (mailTo.charAt(mailTo.length - 3) == "%") {
				mailTo = mailTo.substring(0, mailTo.length - 3);
			}
					
		}	
		window.parent.location.href = mailTo;
		
	}
};

var PrintPage = {
	lastUpdatedDateClass : "modifyDate",
	contentClass: "secondaryPageContent",
	titlesClass: "SaveTitle",
	noPrintClass: "sideBarLinks",
	newWin : undefined,
	getBase : function()
	{
		var oBaseColl = document.getElementsByTagName('BASE');
		var baseHref = ( (oBaseColl && oBaseColl.length) ? oBaseColl[0].href : undefined );
		if ( baseHref )
			return "<base href='" + baseHref + "'>";
		else
			return "";
	},
	
	getStyleSheets : function()
	{
		var oLinkColl = document.getElementsByTagName("LINK");
		var outStr = "";
		for ( var i = 0; i < oLinkColl.length; i++)
		{
			
			if ( oLinkColl[i].rel == "STYLESHEET" && oLinkColl[i].type == "text/css")
			{
				outStr += "<link rel='stylesheet' type='text/css' href='" + oLinkColl[i].href + "'>";
			}
		}
		
		oLinkColl = document.getElementsByTagName("STYLE");
		for ( var i = 0; i < oLinkColl.length; i++)
		{
			
				outStr += "<style>" + oLinkColl[i].innerHTML + "</style>";
				
			
		}
		
		
		outStr += "<style>." + this.noPrintClass +" { display:none }" + "</style>";
				
		
		
		return outStr;
	},
	
	getTitle : function()
	{
		var oTitleColl = document.getElementsByTagName("TITLE");
		if ( oTitleColl.length > 0)
		{
			return "<title>" + oTitleColl[0].innerHTML + "</title>";
		}
	},
	
getElementsByClass:function(searchClass,node,tag) {
	
        var classElements = new Array();
        
        var els = document.all;
        var elsLen = els.length;
        var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
        for (i = 0, j = 0; i < elsLen; i++) {
                if ( pattern.test(els[i].className) ) {
                        classElements[j] = els[i];
                        j++;
                }
        }
        return classElements;
},

	getContent : function()
	{
		var retStr = "<div class='printBackground'>";
		
		var elems = $$("." + this.titlesClass);
		if (Prototype.Browser.IE && parseInt(navigator.appVersion) < 6 ) {
			elems = this.getElementsByClass(this.titlesClass);
		}
		
		var thisTitle = "";
		var prevTitle = "";
		for ( var i = 0; i < elems.length; i++)
		{
			thisTitle = PageMailer.trim(elems[i].innerHTML);
			if ( thisTitle != prevTitle )
					retStr += "<div class='" + this.titlesClass+ " printTitleClass'>" +thisTitle+ "</div><br/>"
			prevTitle = thisTitle;
		}
		if (Prototype.Browser.IE && parseInt(navigator.appVersion) < 6 ) {
			elems = this.getElementsByClass(this.contentClass);
		}
		else {
			elems = $$("." + this.contentClass);
		}
		
		
		for ( var i = 0; i < elems.length; i++)
		{
			if ( i > 0)
				retStr += "<hr>";
			retStr += "<div class='" + this.contentClass+ "'>" + elems[i].innerHTML.stripScripts()+ "</div>"
			
		}
		retStr += "<br />"
		if (Prototype.Browser.IE && parseInt(navigator.appVersion) < 6) {
			elems = this.getElementsByClass(this.lastUpdatedDateClass);
		}
		else {
			elems = $$("." + this.lastUpdatedDateClass);
		}
		
		for ( var i = 0; i < elems.length; i++)
		{
			retStr += "<div class='" + this.lastUpdatedDateClass+ "'>" + elems[i].innerHTML+ "</div>"
		}
		var pageAddress = window.location.href;
		retStr += "<div class='" + this.lastUpdatedDateClass+ "'>" + pageAddress + "</div>"
		
			retStr += "<br />"
	
		return retStr +"</div>";
	},
	createHeader: function()
	{
		return "<head>" + this.getTitle() + this.getBase() + this.getStyleSheets() + "</head>"
	},
	createPage: function()
	{
		return "<html>" + this.createHeader( )+ "<body>" + this.getContent() + "</body></html>";
	},
	printPreview: function(){
		var outStr = this.createPage();
		try {
			this.newWin = window.open("about:blank");
	
			if (!this.newWin.opener){
				this.newWin.opener = window;
			}
		} catch(e) {
				alert("Popup blocker or something else has prevented the printable version from showing.");
				return;
		
		}
		if (!this.newWin) {
			alert("Popup blocker or something else has prevented the printable version from showing.");
			return;
		}
		try  {
			
		this.newWin.document.open();
		this.newWin.document.write(outStr);
		this.newWin.document.close();
		this.newWin.print();
		}catch(e) {
			alert("Popup blocker or something else has prevented the printable version from showing.");
		}
	}
}



