Broken Reports because of site name change?

I have two great reports that are no longer working and I am wondering if the site rename caused the issue?

Fixlet Fixdate by Computer
Fixlet by date

Any chance of getting these updated so we can use them again?
Thanks,
Scott

Can I confirm that you are referring to this report?

Let me know and I will fix them when I can.

Lee Wei

Lee,

I don’t think it was that report, but that one doesn’t work anymore either. They are older reports from the old bigfix website I think you created. None of the links below work anymore.

Fixlet by date modified date was Mon, 08 Mar 2010
Fixlet Fix Date by Computer Group with Date and Fixlet Name Search
Please see the BigFix Forum for information on this report
http://forum.bigfix.com/viewtopic.php?pid=16225#p16225

Fixlet Fixdate by Computer modified date Wed, 29 Sep 2010
Fixlet Fix Date by Computer with Date and Fixlet Name Search
Please see the BigFix Forum for information on this report
http://forum.bigfix.com/viewtopic.php?pid=22938

We just need to have a report that can provide patches/dates machines applied them. The two reports above were great and provided details even if Bigfix didn’t patch them. One was by computer name and the other was by computer group. I have never used fixlet remediation report, but hopefully it is like the reports above.

I can provide you with anything you need (source)…thanks Lee!!

Scott

Hi Scott,

Sorry that I just wanted to make sure I get the right one.
The links you provided no longer work.
Can you attach the source here?
I can edit and re-post.

1 Like
    Source: Fixlet by date
    
    <!-- 
    Fixlet Fix Date by Computer Group with Date and Fixlet Name Search
    Please see the BigFix Forum for information on this report
    http://forum.bigfix.com/viewtopic.php?pid=16225#p16225
    -->
    <style type="text/css">
	a {
	text-decoration: none;
	}
    
	a:hover {
	color: #FF8000;
	font-weight: bold;
	text-decoration: none;
	}
    
	table.sortable {
	margin: 0;
	border-collapse: collapse;
	color: #222;
	font: 10pt verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;
	}
	
	th.res {
	font: 10pt verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;
	color: navy;
	font-weight: bold;
	background-color: #F2F2F2;
	border: 1px solid #cccccc;
	margin: 0;
	padding: 4px 10px 4px 5px;          
	text-align: left;
	} 
    
	td.res {
	color: #222;
	font: 8pt verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;
	border-bottom: 1px solid #cccccc;
	margin: 0;
	/* padding: 6px 20px 1px 0;  */
	padding: 8px 20px 5px 5px;
	}
    
	td.userinput {
	color: #222;
	font: 10pt verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;
	font-weight: bold;
	border-bottom: 0px;
	margin: 0;
	padding: 6px 20px 1px 0;
	} 
    
	td.errormsg {
	color: red;
	font: 10pt verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;
	font-weight: bold;
	border-bottom: 0px;
	margin: 0;
	padding: 6px 20px 1px 0;
	}
	td.msg {
	color: #747170;
	font: 10pt verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;
	font-weight: bold;
	border-bottom: 0px;
	margin: 0;
	padding: 6px 20px 1px 0;
	}
    
	h3 {
	font: 10pt verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;
	background-color: #747170;
	padding: 4px 4px 4px 4px;
	color: white;
	width: 100%;
	}
	
	#CalendarControlIFrame {
	display: none;
	left: 0px;
	position: absolute;
	top: 0px;
	height: 250px;
	width: 250px;
	z-index: 99;
	}
	#CalendarControl {
	position:absolute;
	background-color:#FFF;
	margin:0;
	padding:0;
	display:none;
	z-index: 100;
	}
	#CalendarControl table {
	font-family: arial, verdana, helvetica, sans-serif;
	font-size: 8pt;
	border-left: 1px solid #336;
	border-right: 1px solid #336;
	}
	#CalendarControl th {
	font-weight: normal;
	}
	#CalendarControl th a {
	font-weight: normal;
	text-decoration: none;
	color: #FFF;
	padding: 1px;
	}
	#CalendarControl td {
	text-align: center;
	}
	#CalendarControl .header {
	background-color: #336;
	}
	#CalendarControl .weekday {
	background-color: #DDD;
	color: #000;
	}
	#CalendarControl .weekend {
	background-color: #FFC;
	color: #000;
	}
	#CalendarControl .current {
	border: 1px solid #339;
	background-color: #336;
	color: #FFF;
	}
	#CalendarControl .weekday,
	#CalendarControl .weekend,
	#CalendarControl .current {
	display: block;
	text-decoration: none;
	border: 1px solid #FFF;
	width: 2em;
	}
	#CalendarControl .weekday:hover,
	#CalendarControl .weekend:hover,
	#CalendarControl .current:hover {
	color: #FFF;
	background-color: #336;
	border: 1px solid #999;
	}
	#CalendarControl .previous {
	text-align: left;
	}
	#CalendarControl .next {
	text-align: right;
	}
	#CalendarControl .previous,
	#CalendarControl .next {
	padding: 1px 3px 1px 3px;
	font-size: 1.4em;
	}
	#CalendarControl .previous a,
	#CalendarControl .next a {
	color: #FFF;
	text-decoration: none;
	font-weight: bold;
	}
	#CalendarControl .title {
	text-align: center;
	font-weight: bold;
	color: #FFF;
	}
	#CalendarControl .empty {
	background-color: #CCC;
	border: 1px solid #FFF;
	}
	
	table.date
	{text-align: center;
	font-family: Verdana, Geneva, Arial, Helvetica, sans-serif ;
	font-weight: normal;
	font-size: 14px;
	color: #fff;
	width: 400px;
	background-color: #777;
	border: 0px;
	border-collapse: collapse;
	border-spacing: 0px;}
	
	table.date td.dateleft
	{background-color: #CCC;
	color: #000;
	padding: 4px;
	text-align: right;
	border: 0px;}
	table.date td.dateright
	{background-color: #CCC;
	color: #000;
	padding: 4px;
	text-align: left;
	border: 0px;}
	table.stats
	{text-align: center;
	font-family: Verdana, Geneva, Arial, Helvetica, sans-serif ;
	font-weight: normal;
	font-size: 14px;
	color: #fff;
	width: 400px;
	background-color: #666;
	border: 0px;
	border-collapse: collapse;
	border-spacing: 0px;}
	table.stats td
	{background-color: #CCC;
	color: #000;
	padding: 4px;
	text-align: left;
	border: 1px #fff solid;}
	table.stats td.result
	{background-color: #CCC;
	color: #000;
	padding: 4px;
	text-align: right;
	border: 1px #fff solid;}
	table.stats td.hed
	{background-color: #666;
	color: #fff;
	padding: 4px;
	text-align: left;
	border-bottom: 2px #fff solid;
	font-size: 14px;
	font-weight: bold;} 
    </style>
    <h3>Select Printable Version on left for printing</h3>
    <table class="stats">
	<tr>
		<td class="userinput" >
			Select&nbsp;Computer&nbsp;Group:
		</td>
		<td class="userinput">
			<select id = "groupName" name = "groupName" size = "1">
				<option value = "default" selected = "true" style = "background-color: #532900; color: white;" > --Select Computer Group-- </option>
				<?relevance (html "<option value=%22" & it & html "%22>" & it & html "</options>") of names of bes computer groups ?>
			</select>
		</td>
		<td class="userinput">
			<input type='button' onclick='search()' value='Generate Report'/>
		</td>
	</tr>
	<tr>
		<td class="userinput" >
				Fixlet Name:
		</td>
		<td colspan=2 class="userinput">
			<input type="text" id="fixletname" name="fixletname" style="width:100%">
		</td>
	</tr>
				
				<tr>
				<td colspan="3">
				<table class="date">
				<tr>
				<td class="dateleft">Fix Date between:</td><td class="dateright"><input id="start_date" name="start_date" onfocus="showCalendarControl(this);" type="text"> (MM-DD-YYYY)</td>
				</tr>
				<tr>
				<td class="dateleft">and:</td><td class="dateright"><input id="end_date" name="end_date" onfocus="showCalendarControl(this);" type="text"> (MM-DD-YYYY)</td>
				</tr>
				</table>
				</td>
				</tr>
				</table>
				<hr />
	
				<div id="resultsDiv">
				</div>
				<script type="text/javascript">
    
				addEvent(window, "load", init_load);
				var divRes = document.getElementById('resultsDiv');
				var computerFilter;
				var res_count
				function search(){
	
				if (document.getElementById('groupName').value == 'default')
				{
				divRes.style.display = 'block';
				divRes.innerHTML = 'Please select a computer group.';
				return;
				}
				else if (document.getElementById('start_date').value == '')
				{
				divRes.style.display = 'block';
				divRes.innerHTML = 'Please enter a start date.';
				return;
				}
				else if (document.getElementById('end_date').value == '')
				{
				divRes.style.display = 'block';
				divRes.innerHTML = 'Please enter an end date.';
				return;
				}
		
				divRes.style.display = 'block';
				divRes.innerHTML = 'Processing...';
		
    // var relevance = '(html "<table id=%22resultsTable%22 class=%22sortable%22><tr class=%22res%22><th class=%22res%22>Fixlet</th><th class=%22res%22>Source Severity</th><th class=%22res%22>Fix Date</th></tr>" & it & html "</table>") of concatenations of trs "class=%22res%22" of (td "class=%22res%22" of name of fixlet of it & td "class=%22res%22" of (if (source severity of fixlet of it as lowercase = "<unspecified>") then ("Unspecified") else (source severity of fixlet of it))  & td "class=%22res%22" of ((year of it as string & "/" & month of it as two digits & "/" & day_of_month of it as two digits) of  date(local time zone) of it & " "& (two digit hour of it as string & ":" & two digit minute of it as string & ":" & two digit second of it as string) of time (local time zone) of it) of last became nonrelevant of it) of results from (bes fixlets whose (display name of site of it contains "Patches for Windows (English)" and fixlet flag of it = true)) whose (exists last became relevant of it and relevant flag of it = false and ((date (local time zone) of last became nonrelevant of it) >= (((last 2 of first 5 of it & " " & first 2 of it as integer as month as three letters & " " & last 4 of it) of "' + start_date.value + '") as date)) and (date (local time zone) of last became nonrelevant of it) <= (((last 2 of first 5 of it & " " & first 2 of it as integer as month as three letters & " " & last 4 of it) of "' + end_date.value + '") as date)) of bes computers whose (id of it = ' + computerName.value + ')';	
		
	var relevance = '(html "<table id=%22resultsTable%22 class=%22sortable%22><tr class=%22res%22><th class=%22res%22>Computer</th><th class=%22res%22>Fixlet</th><th class=%22res%22>Source Severity</th><th class=%22res%22>Fix Date</th></tr>" & it & html "</table>") of concatenations of trs "class=%22res%22" of (td "class=%22res%22" of name of computer of it & td "class=%22res%22" of name of fixlet of it & td "class=%22res%22" of (if (source severity of fixlet of it as lowercase = "<unspecified>") then ("Unspecified") else (source severity of fixlet of it))  & td "class=%22res%22" of ((year of it as string & "/" & month of it as two digits & "/" & day_of_month of it as two digits) of  date(local time zone) of it & " "& (two digit hour of it as string & ":" & two digit minute of it as string & ":" & two digit second of it as string) of time (local time zone) of it) of last became nonrelevant of it) of results from (bes fixlets whose (name of it as lowercase contains "' + document.getElementById('fixletname').value.toLowerCase() + '" and display name of site of it contains "Patches for Windows (English)" and fixlet flag of it = true)) whose (exists last became relevant of it and relevant flag of it = false and ((date (local time zone) of last became nonrelevant of it) >= (((last 2 of first 5 of it & " " & first 2 of it as integer as month as three letters & " " & last 4 of it) of "' + document.getElementById('start_date').value + '") as date)) and (date (local time zone) of last became nonrelevant of it) <= (((last 2 of first 5 of it & " " & first 2 of it as integer as month as three letters & " " & last 4 of it) of "' + document.getElementById('end_date').value + '") as date)) of members of bes computer groups whose (name of it = "' + document.getElementById('groupName').value + '")';
			
	strResponse = EvaluateRelevance(relevance);             
	divRes.innerHTML = strResponse;
	sortables_init();
	stripe('resultsTable', '#fff', '#E6E3E8');
    }
				
	function init_load()
	{
		// stripe('resultsTable', '#fff', '#E6E3E8');
		// sortables_init();
		var currentTime = new Date()
		var year = currentTime.getFullYear();
		var month = currentTime.getMonth() + 1;	
		var day = currentTime.getDate();
		if (month < 10){
			month = "0" + month
		}
		if (day < 10){
			day = "0" + day
		}
		document.getElementById('end_date').value = month + '-' + day + '-' + year;
		document.getElementById('start_date').value = '01-01-2000';
	}
    
	var SORT_COLUMN_INDEX;
	function sortables_init(){
    
	// Find all tables with class sortable and make them sortable
	if (!document.getElementsByTagName) 
	return;
	tbls = document.getElementsByTagName("table");
	for (ti = 0; ti < tbls.length; ti++) {
		thisTbl = tbls[ti];
		if (((' ' + thisTbl.className + ' ').indexOf("sortable") != -1) && (thisTbl.id)) {
		//initTable(thisTbl.id);
		ts_makeSortable(thisTbl);
		}
		}
		}
    
		function ts_makeSortable(table){
		if (table.rows && table.rows.length > 0) {
		var firstRow = table.rows[0];
		}
		if (!firstRow) 
		return;
        
		// We have a first row: assume it's the header, and make its contents clickable links
		for (var i = 0; i < firstRow.cells.length; i++) {
		var cell = firstRow.cells[i];
		var txt = ts_getInnerText(cell);
		cell.innerHTML = '<a href="#" class="sortheader" ' +
		'onclick="ts_resortTable(this, ' +
		i +
		');return false;">' +
		txt +
	'<span class="sortarrow">   </span></a>';
        }
    }
    
    function ts_getInnerText(el){
        if (typeof el == "string") 
            return el;
        if (typeof el == "undefined") {
            return el
        };
        if (el.innerText) 
            return el.innerText; //Not needed but it is faster
        var str = "";
        
        var cs = el.childNodes;
        var l = cs.length;
        for (var i = 0; i < l; i++) {
            switch (cs[i].nodeType) {
                case 1: //ELEMENT_NODE
                    str += ts_getInnerText(cs[i]);
                    break;
                case 3: //TEXT_NODE
                    str += cs[i].nodeValue;
                    break;
            }
        }
        return str;
    }
    
    function ts_resortTable(lnk, clid){
        // get the span
        var span;
        for (var ci = 0; ci < lnk.childNodes.length; ci++) {
            if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') 
                span = lnk.childNodes[ci];
        }
        var spantext = ts_getInnerText(span);
        var td = lnk.parentNode;
        var column = clid || td.cellIndex;
        var table = getParent(td, 'TABLE');
        
        // Work out a type for the column
        if (table.rows.length <= 1) 
            return;
        var itm = ts_getInnerText(table.rows[1].cells[column]);
        sortfn = ts_sort_caseinsensitive;
        if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) 
            sortfn = ts_sort_date;
        if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) 
            sortfn = ts_sort_date;
        if (itm.match(/^[ $]/)) 
            sortfn = ts_sort_currency;
        if (itm.match(/^[\d\.]+$/)) 
            sortfn = ts_sort_numeric;
        SORT_COLUMN_INDEX = column;
        var firstRow = new Array();
        var newRows = new Array();
        for (i = 0; i < table.rows[0].length; i++) {
            firstRow[i] = table.rows[0][i];
        }
        for (j = 1; j < table.rows.length; j++) {
            newRows[j - 1] = table.rows[j];
        }
        newRows.sort(sortfn);
        if (span.getAttribute("sortdir") == 'down') {
            ARROW = ' <img src="/images/besreports/ENU/maximizebutton1.gif" border="0" height="12" width="15" alt="">';
            newRows.reverse();
            span.setAttribute('sortdir', 'up');
        }
        else {
            ARROW = ' <img src="/images/besreports/ENU/minimizebutton1.gif" border="0" height="12" width="15" alt="">';
            span.setAttribute('sortdir', 'down');
        }
        
        // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
        // don't do sortbottom rows
        for (i = 0; i < newRows.length; i++) {
            if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) {
                table.tBodies[0].appendChild(newRows[i]);
                if (i % 2 > 0) 
                    newRows[i].className = 'wr_oddRow';
                else 
                    newRows[i].className = 'wr_evenRow';
            }
        }
        // do sortbottom rows only
        for (i = 0; i < newRows.length; i++) {
            if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) 
                table.tBodies[0].appendChild(newRows[i]);
        }
        
        // Delete any other arrows there may be showing
        var allspans = document.getElementsByTagName("span");
        for (var ci = 0; ci < allspans.length; ci++) {
            if (allspans[ci].className == 'sortarrow') {
                if (getParent(allspans[ci], "table") == getParent(lnk, "table")) { // in the same table as us?
                    allspans[ci].innerHTML = '   ';
                }
            }
        }
        // adds up/down arrow to the column header 
        span.innerHTML = ARROW;
    // Make zebra stripes in table
    stripe('resultsTable', '#fff', '#E6E3E8');
    }
    
    function getParent(el, pTagName){
        if (el == null) 
            return null;
        else 
            if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) // Gecko bug, supposed to be uppercase
                return el;
            else 
                return getParent(el.parentNode, pTagName);
    }
    
    function ts_sort_date(a, b){
        // y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
        aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
        bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
        if (aa.length == 10) {
            dt1 = aa.substr(6, 4) + aa.substr(3, 2) + aa.substr(0, 2);
        }
        else {
            yr = aa.substr(6, 2);
            if (parseInt(yr) < 50) {
                yr = '20' + yr;
            }
            else {
                yr = '19' + yr;
            }
            dt1 = yr + aa.substr(3, 2) + aa.substr(0, 2);
        }
        if (bb.length == 10) {
            dt2 = bb.substr(6, 4) + bb.substr(3, 2) + bb.substr(0, 2);
        }
        else {
            yr = bb.substr(6, 2);
            if (parseInt(yr) < 50) {
                yr = '20' + yr;
            }
            else {
                yr = '19' + yr;
            }
            dt2 = yr + bb.substr(3, 2) + bb.substr(0, 2);
        }
        
        if (dt1 == dt2) 
            return 0;
        if (dt1 < dt2) 
            return -1;
        return 1;
    }
    
    function ts_sort_currency(a, b){
        aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g, '');
        bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g, '');
        return parseFloat(aa) - parseFloat(bb);
    }
    
    function ts_sort_numeric(a, b){
        aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
        if (isNaN(aa)) 
            aa = 0;
        bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
        if (isNaN(bb)) 
            bb = 0;
        return aa - bb;
    }
    
    function ts_sort_caseinsensitive(a, b){
        aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
        bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
        if (aa == bb) 
            return 0;
        if (aa < bb) 
            return -1;
        return 1;
    }
    
    function ts_sort_default(a, b){
        aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
        bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
        if (aa == bb) 
            return 0;
        if (aa < bb) 
            return -1;
        return 1;
    }
    
    function addEvent(elm, evType, fn, useCapture)// addEvent and removeEvent
    // cross-browser event handling for IE5+,  NS6 and Mozilla
    // By Scott Andrew
    {
        if (elm.addEventListener) {
            elm.addEventListener(evType, fn, useCapture);
            return true;
        }
        else 
            if (elm.attachEvent) {
                var r = elm.attachEvent("on" + evType, fn);
                return r;
            }
            else {
                alert("Handler could not be removed");
            }
    }
    // this function is needed to work around 
    // a bug in IE related to element attributes
    function hasClass(obj) {
    var result = false;
    if (obj.getAttributeNode("class") != null) {
        result = obj.getAttributeNode("class").value;
    }
    return result;
    }   
    function stripe(id) {
    // the flag we'll use to keep track of 
    // whether the current row is odd or even
    var even = false;
    // if arguments are provided to specify the colours
    // of the even & odd rows, then use the them;
    // otherwise use the following defaults:
    var evenColor = arguments[1] ? arguments[1] : "#fff";
    var oddColor = arguments[2] ? arguments[2] : "#eee";
    // obtain a reference to the desired table
    // if no such table exists, abort
    var table = document.getElementById(id);
    if (! table) { return; }
    // by definition, tables can have more than one tbody
    // element, so we'll have to get the list of child
    // <tbody>s 
var tbodies = table.getElementsByTagName("tbody");
// and iterate through them...
for (var h = 0; h < tbodies.length; h++) {
// find all the <tr> elements... 
 var trs = tbodies[h].getElementsByTagName("tr");
 
 // ... and iterate through them
 for (var i = 0; i < trs.length; i++) {
     // get all the cells in this row...
     var tds = trs[i].getElementsByTagName("td");
   
     // and iterate through them...
     for (var j = 0; j < tds.length; j++) {
   
       var mytd = tds[j];
         mytd.style.backgroundColor =
           even ? evenColor : oddColor;
     }
   // flip from odd to even, or vice-versa
   even =  ! even;
 }
}
}
// Starting Calendar control section
function positionInfo(object) {
	var p_elm = object;
	this.getElementLeft = getElementLeft;
	function getElementLeft() {
		var x = 0;
		var elm;
		if(typeof(p_elm) == "object"){
			elm = p_elm;
		} else {
			elm = document.getElementById(p_elm);
		}
		while (elm != null) {
			x += elm.offsetLeft;
			elm = elm.offsetParent;
		}
		return parseInt(x) - 60;
	}
	this.getElementWidth = getElementWidth;
	function getElementWidth(){
		var elm;
		if(typeof(p_elm) == "object"){
			elm = p_elm;
		} else {
			elm = document.getElementById(p_elm);
		}
		return parseInt(elm.offsetWidth);
	}
	this.getElementRight = getElementRight;
	function getElementRight(){
		return getElementLeft(p_elm) + getElementWidth(p_elm);
	}
	this.getElementTop = getElementTop;
	function getElementTop() {
		var y = 0;
		var elm;
		if(typeof(p_elm) == "object"){
			elm = p_elm;
		} else {
			elm = document.getElementById(p_elm);
		}
		while (elm != null) {
			y += elm.offsetTop;
			elm = elm.offsetParent;
		}
		return parseInt(y) - 150;
	}
	this.getElementHeight = getElementHeight;
	function getElementHeight(){
		var elm;
		if(typeof(p_elm) == "object"){
			elm = p_elm;
		} else {
			elm = document.getElementById(p_elm);
		}
		return parseInt(elm.offsetHeight);
	}
	this.getElementBottom = getElementBottom;
	function getElementBottom(){
		return getElementTop(p_elm) + getElementHeight(p_elm);
	}
}
function CalendarControl() {
	var calendarId = 'CalendarControl';
	var currentYear = 0;
	var currentMonth = 0;
	var currentDay = 0;
	var selectedYear = 0;
	var selectedMonth = 0;
	var selectedDay = 0;
	var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
	var dateField = null;
	function getProperty(p_property){
		var p_elm = calendarId;
		var elm = null;
		if(typeof(p_elm) == "object"){
			elm = p_elm;
		} else {
			elm = document.getElementById(p_elm);
		}
		if (elm != null){
			if(elm.style){
				elm = elm.style;
				if(elm[p_property]){
					return elm[p_property];
				} else {
					return null;
				}
			} else {
				return null;
			}
		}
	}
	function setElementProperty(p_property, p_value, p_elmId){
		var p_elm = p_elmId;
		var elm = null;
		if(typeof(p_elm) == "object"){
			elm = p_elm;
		} else {
			elm = document.getElementById(p_elm);
		}
		if((elm != null) && (elm.style != null)){
			elm = elm.style;
			elm[ p_property ] = p_value;
		}
	}
	function setProperty(p_property, p_value) {
		setElementProperty(p_property, p_value, calendarId);
	}
	function getDaysInMonth(year, month) {
		return [31,((!(year % 4 ) && ( (year % 100 ) || !( year % 400 ) )) ? 29:28),31,30,31,30,31,31,30,31,30,31][month - 1];
	}
	function getDayOfWeek(year, month, day) {
		var date = new Date(year, month - 1, day)
		return date.getDay();
	}
	this.clearDate = clearDate;
	function clearDate() {
		dateField.value = '';
		hide();
	}
	this.setDate = setDate;
	function setDate(year, month, day) {
		if (dateField) {
			if (month < 10) {month = "0" + month;}
			if (day < 10) {day = "0" + day;}
			var dateString = month + "-" + day + "-" + year;
			dateField.value = dateString;
			hide();
		}
		return;
	}
	this.changeMonth = changeMonth;
	function changeMonth(change) {
		currentMonth += change;
		currentDay = 0;
		if(currentMonth > 12) {
			currentMonth = 1;
			currentYear++;
		} else if(currentMonth < 1) {
			currentMonth = 12;
			currentYear--;
		}
		calendar = document.getElementById(calendarId);
		calendar.innerHTML = calendarDrawTable();
	}
	this.changeYear = changeYear;
	function changeYear(change) {
		currentYear += change;
		currentDay = 0;
		calendar = document.getElementById(calendarId);
		calendar.innerHTML = calendarDrawTable();
	}
	function getCurrentYear() {
		var year = new Date().getYear();
		if(year < 1900) year += 1900;
		return year;
	}
	function getCurrentMonth() {
		return new Date().getMonth() + 1;
	} 
	function getCurrentDay() {
		return new Date().getDate();
	}
	function calendarDrawTable() {
		var dayOfMonth = 1;
		var validDay = 0;
		var startDayOfWeek = getDayOfWeek(currentYear, currentMonth, dayOfMonth);
		var daysInMonth = getDaysInMonth(currentYear, currentMonth);
		var css_class = null; //CSS class for each day
		var table = "<table cellspacing='0' cellpadding='0' border='0'>";
		table = table + "<tr class='header'>";
		table = table + "  <td colspan='2' class='previous'><a href='javascript:changeCalendarControlMonth(-1);'>&lt;</a> <a href='javascript:changeCalendarControlYear(-1);'>&laquo;</a></td>";
		table = table + "  <td colspan='3' class='title'>" + months[currentMonth - 1] + "<br>" + currentYear + "</td>";
		table = table + "  <td colspan='2' class='next'><a href='javascript:changeCalendarControlYear(1);'>&raquo;</a> <a href='javascript:changeCalendarControlMonth(1);'>&gt;</a></td>";
		table = table + "</tr>";
		table = table + "<tr><th>S</th><th>M</th><th>T</th><th>W</th><th>T</th><th>F</th><th>S</th></tr>";
		for(var week = 0; week < 6; week++) {
			table = table + "<tr>";
			for(var dayOfWeek = 0; dayOfWeek < 7; dayOfWeek++) {
				if(week == 0 && startDayOfWeek == dayOfWeek) {
					validDay = 1;
				} else if (validDay == 1 && dayOfMonth > daysInMonth) {
					validDay = 0;
				}
				if(validDay) {
					if (dayOfMonth == selectedDay && currentYear == selectedYear && currentMonth == selectedMonth) {
						css_class = 'current';
					} else if (dayOfWeek == 0 || dayOfWeek == 6) {
						css_class = 'weekend';
					} else {
						css_class = 'weekday';
					}
					table = table + "<td><a class='" + css_class + "' href=\"javascript:setCalendarControlDate(" + currentYear + "," + currentMonth + "," + dayOfMonth + ")\">" + dayOfMonth + "</a></td>";
					dayOfMonth++;
				} else {
					table = table + "<td class='empty'>&nbsp;</td>";
				}
			}
			table = table + "</tr>";
		}
		table = table + "<tr class='header'><th colspan='7' style='padding: 3px;'><a href='javascript:clearCalendarControl();'>Clear</a> | <a href='javascript:hideCalendarControl();'>Close</a></td></tr>";
		table = table + "</table>";
		return table;
	}
	this.show = show;
	function show(field) {
		can_hide = 0;
  
		// If the calendar is visible and associated with
		// this field do not do anything.
		if (dateField == field) {
			return;
		} else {
			dateField = field;
		}
		if(dateField) {
			try {
				var dateString = new String(dateField.value);
				var dateParts = dateString.split("-");
        
				selectedMonth = parseInt(dateParts[0], 10);
				selectedDay = parseInt(dateParts[1], 10);
				selectedYear = parseInt(dateParts[2], 10);
			} catch(e) {}
		}
		if (!(selectedYear && selectedMonth && selectedDay)) {
			selectedMonth = getCurrentMonth();
			selectedDay = getCurrentDay();
			selectedYear = getCurrentYear();
		}
		currentMonth = selectedMonth;
		currentDay = selectedDay;
		currentYear = selectedYear;
		if(document.getElementById){
			calendar = document.getElementById(calendarId);
			calendar.innerHTML = calendarDrawTable(currentYear, currentMonth);
			setProperty('display', 'block');
			var fieldPos = new positionInfo(dateField);
			var calendarPos = new positionInfo(calendarId);
			var x = fieldPos.getElementLeft();
			var y = fieldPos.getElementBottom();
			setProperty('left', x + "px");
			setProperty('top', y + "px");
 
			if (document.all) {
				setElementProperty('display', 'block', 'CalendarControlIFrame');
				setElementProperty('left', x + "px", 'CalendarControlIFrame');
				setElementProperty('top', y + "px", 'CalendarControlIFrame');
				setElementProperty('width', calendarPos.getElementWidth() + "px", 'CalendarControlIFrame');
				setElementProperty('height', calendarPos.getElementHeight() + "px", 'CalendarControlIFrame');
			}
		}
	}
	this.hide = hide;
	function hide() {
		if(dateField) {
			setProperty('display', 'none');
			setElementProperty('display', 'none', 'CalendarControlIFrame');
			dateField = null;
		}
	}
	this.visible = visible;
	function visible() {
		return dateField
	}
	this.can_hide = can_hide;
	var can_hide = 0;
}
var calendarControl = new CalendarControl();
function showCalendarControl(textField) {
	// textField.onblur = hideCalendarControl;
	calendarControl.show(textField);
}
function clearCalendarControl() {
	calendarControl.clearDate();
}
function hideCalendarControl() {
	if (calendarControl.visible()) {
		calendarControl.hide();
	}
}
function setCalendarControlDate(year, month, day) {
	calendarControl.setDate(year, month, day);
}
function changeCalendarControlYear(change) {
	calendarControl.changeYear(change);
}
function changeCalendarControlMonth(change) {
	calendarControl.changeMonth(change);
}
document.write("<iframe id='CalendarControlIFrame' src='javascript:false;' frameBorder='0' scrolling='no'></iframe>");
document.write("<div id='CalendarControl'></div>");
// End Calendar control section
</script>
Source: Fixlet Fixdate by Computer
<!-- 
Fixlet Fix Date by Computer with Date and Fixlet Name Search
Please see the BigFix Forum for information on this report
http://forum.bigfix.com/viewtopic.php?pid=22938
-->
<style type="text/css">
	a {
	text-decoration: none;
	}
    
	a:hover {
	color: #FF8000;
	font-weight: bold;
	text-decoration: none;
	}
    
	table.sortable {
	margin: 0;
	border-collapse: collapse;
	color: #222;
	font: 10pt verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;
	}
	
	th.res {
	font: 10pt verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;
	color: navy;
	font-weight: bold;
	background-color: #F2F2F2;
	border: 1px solid #cccccc;
	margin: 0;
	padding: 4px 10px 4px 5px;          
	text-align: left;
	} 
    
	td.res {
	color: #222;
	font: 8pt verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;
	border-bottom: 1px solid #cccccc;
	margin: 0;
	/* padding: 6px 20px 1px 0;  */
	padding: 8px 20px 5px 5px;
	}
    
	td.userinput {
	color: #222;
	font: 10pt verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;
	font-weight: bold;
	border-bottom: 0px;
	margin: 0;
	padding: 6px 20px 1px 0;
	} 
    
	td.errormsg {
	color: red;
	font: 10pt verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;
	font-weight: bold;
	border-bottom: 0px;
	margin: 0;
	padding: 6px 20px 1px 0;
	}
	td.msg {
	color: #747170;
	font: 10pt verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;
	font-weight: bold;
	border-bottom: 0px;
	margin: 0;
	padding: 6px 20px 1px 0;
	}
    
	h3 {
	font: 10pt verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;
	background-color: #747170;
	padding: 4px 4px 4px 4px;
	color: white;
	width: 100%;
	}
	
	#CalendarControlIFrame {
	display: none;
	left: 0px;
	position: absolute;
	top: 0px;
	height: 250px;
	width: 250px;
	z-index: 99;
	}
	#CalendarControl {
	position:absolute;
	background-color:#FFF;
	margin:0;
	padding:0;
	display:none;
	z-index: 100;
	}
	#CalendarControl table {
	font-family: arial, verdana, helvetica, sans-serif;
	font-size: 8pt;
	border-left: 1px solid #336;
	border-right: 1px solid #336;
	}
	#CalendarControl th {
	font-weight: normal;
	}
	#CalendarControl th a {
	font-weight: normal;
	text-decoration: none;
	color: #FFF;
	padding: 1px;
	}
	#CalendarControl td {
	text-align: center;
	}
	#CalendarControl .header {
	background-color: #336;
	}
	#CalendarControl .weekday {
	background-color: #DDD;
	color: #000;
	}
	#CalendarControl .weekend {
	background-color: #FFC;
	color: #000;
	}
	#CalendarControl .current {
	border: 1px solid #339;
	background-color: #336;
	color: #FFF;
	}
	#CalendarControl .weekday,
	#CalendarControl .weekend,
	#CalendarControl .current {
	display: block;
	text-decoration: none;
	border: 1px solid #FFF;
	width: 2em;
	}
	#CalendarControl .weekday:hover,
	#CalendarControl .weekend:hover,
	#CalendarControl .current:hover {
	color: #FFF;
	background-color: #336;
	border: 1px solid #999;
	}
	#CalendarControl .previous {
	text-align: left;
	}
	#CalendarControl .next {
	text-align: right;
	}
	#CalendarControl .previous,
	#CalendarControl .next {
	padding: 1px 3px 1px 3px;
	font-size: 1.4em;
	}
	#CalendarControl .previous a,
	#CalendarControl .next a {
	color: #FFF;
	text-decoration: none;
	font-weight: bold;
	}
	#CalendarControl .title {
	text-align: center;
	font-weight: bold;
	color: #FFF;
	}
	#CalendarControl .empty {
	background-color: #CCC;
	border: 1px solid #FFF;
	}
	
	table.date
	{text-align: center;
	font-family: Verdana, Geneva, Arial, Helvetica, sans-serif ;
	font-weight: normal;
	font-size: 14px;
	color: #fff;
	width: 400px;
	background-color: #777;
	border: 0px;
	border-collapse: collapse;
	border-spacing: 0px;}
	
	table.date td.dateleft
	{background-color: #CCC;
	color: #000;
	padding: 4px;
	text-align: right;
	border: 0px;}
	table.date td.dateright
	{background-color: #CCC;
	color: #000;
	padding: 4px;
	text-align: left;
	border: 0px;}
	table.stats
	{text-align: center;
	font-family: Verdana, Geneva, Arial, Helvetica, sans-serif ;
	font-weight: normal;
	font-size: 14px;
	color: #fff;
	width: 400px;
	background-color: #666;
	border: 0px;
	border-collapse: collapse;
	border-spacing: 0px;}
	table.stats td
	{background-color: #CCC;
	color: #000;
	padding: 4px;
	text-align: left;
	border: 1px #fff solid;}
	table.stats td.result
	{background-color: #CCC;
	color: #000;
	padding: 4px;
	text-align: right;
	border: 1px #fff solid;}
	table.stats td.hed
	{background-color: #666;
	color: #fff;
	padding: 4px;
	text-align: left;
	border-bottom: 2px #fff solid;
	font-size: 14px;
	font-weight: bold;} 
</style>
<h3>Select Printable Version on left for printing</h3>
<table class="stats">
	<tr>
		<td class="userinput" >
			Select&nbsp;Computer:
		</td>
		<td class="userinput">
			<select id = "groupName" name = "groupName" size = "1">
				<option value = "default" selected = "true" style = "background-color: #532900; color: white;" > --Select Computer -- </option>
				<?relevance (html "<option value=%22" & it & html "%22>" & it & html "</options>") of unique values of names of bes computers ?>
			</select>
		</td>
		<td class="userinput">
			<input type='button' onclick='search()' value='Generate Report'/>
		</td>
	</tr>
	<tr>
		<td class="userinput" >
				Fixlet Name:
		</td>
		<td colspan=2 class="userinput">
			<input type="text" id="fixletname" name="fixletname" style="width:100%">
		</td>
	</tr>
				
				<tr>
				<td colspan="3">
				<table class="date">
				<tr>
				<td class="dateleft">Fix Date between:</td><td class="dateright"><input id="start_date" name="start_date" onfocus="showCalendarControl(this);" type="text"> (MM-DD-YYYY)</td>
				</tr>
				<tr>
				<td class="dateleft">and:</td><td class="dateright"><input id="end_date" name="end_date" onfocus="showCalendarControl(this);" type="text"> (MM-DD-YYYY)</td>
				</tr>
				</table>
				</td>
				</tr>
				</table>
				<hr />
	
				<div id="resultsDiv">
				</div>
				<script type="text/javascript">
    
				addEvent(window, "load", init_load);
				var divRes = document.getElementById('resultsDiv');
				var computerFilter;
				var res_count
				function search(){
	
				if (document.getElementById('groupName').value == 'default')
				{
				divRes.style.display = 'block';
				divRes.innerHTML = 'Please select a computer group.';
				return;
				}
				else if (document.getElementById('start_date').value == '')
				{
				divRes.style.display = 'block';
				divRes.innerHTML = 'Please enter a start date.';
				return;
				}
				else if (document.getElementById('end_date').value == '')
				{
				divRes.style.display = 'block';
				divRes.innerHTML = 'Please enter an end date.';
				return;
				}
		
				divRes.style.display = 'block';
				divRes.innerHTML = 'Processing...';
		
// var relevance = '(html "<table id=%22resultsTable%22 class=%22sortable%22><tr class=%22res%22><th class=%22res%22>Fixlet</th><th class=%22res%22>Source Severity</th><th class=%22res%22>Fix Date</th></tr>" & it & html "</table>") of concatenations of trs "class=%22res%22" of (td "class=%22res%22" of name of fixlet of it & td "class=%22res%22" of (if (source severity of fixlet of it as lowercase = "<unspecified>") then ("Unspecified") else (source severity of fixlet of it))  & td "class=%22res%22" of ((year of it as string & "/" & month of it as two digits & "/" & day_of_month of it as two digits) of  date(local time zone) of it & " "& (two digit hour of it as string & ":" & two digit minute of it as string & ":" & two digit second of it as string) of time (local time zone) of it) of last became nonrelevant of it) of results from (bes fixlets whose (display name of site of it contains "Patches for Windows (English)" and fixlet flag of it = true)) whose (exists last became relevant of it and relevant flag of it = false and ((date (local time zone) of last became nonrelevant of it) >= (((last 2 of first 5 of it & " " & first 2 of it as integer as month as three letters & " " & last 4 of it) of "' + start_date.value + '") as date)) and (date (local time zone) of last became nonrelevant of it) <= (((last 2 of first 5 of it & " " & first 2 of it as integer as month as three letters & " " & last 4 of it) of "' + end_date.value + '") as date)) of bes computers whose (id of it = ' + computerName.value + ')';	
		
	var relevance = '(html "<table id=%22resultsTable%22 class=%22sortable%22><tr class=%22res%22><th class=%22res%22>Computer</th><th class=%22res%22>Fixlet</th><th class=%22res%22>Source Severity</th><th class=%22res%22>Fix Date</th></tr>" & it & html "</table>") of concatenations of trs "class=%22res%22" of (td "class=%22res%22" of name of computer of it & td "class=%22res%22" of name of fixlet of it & td "class=%22res%22" of (if (source severity of fixlet of it as lowercase = "<unspecified>") then ("Unspecified") else (source severity of fixlet of it))  & td "class=%22res%22" of ((year of it as string & "/" & month of it as two digits & "/" & day_of_month of it as two digits) of  date(local time zone) of it & " "& (two digit hour of it as string & ":" & two digit minute of it as string & ":" & two digit second of it as string) of time (local time zone) of it) of last became nonrelevant of it) of results from (bes fixlets whose (name of it as lowercase contains "' + document.getElementById('fixletname').value.toLowerCase() + '" and display name of site of it contains "Patches for Windows (English)" and fixlet flag of it = true)) whose (exists last became relevant of it and relevant flag of it = false and ((date (local time zone) of last became nonrelevant of it) >= (((last 2 of first 5 of it & " " & first 2 of it as integer as month as three letters & " " & last 4 of it) of "' + document.getElementById('start_date').value + '") as date)) and (date (local time zone) of last became nonrelevant of it) <= (((last 2 of first 5 of it & " " & first 2 of it as integer as month as three letters & " " & last 4 of it) of "' + document.getElementById('end_date').value + '") as date)) of bes computers whose (name of it = "' + document.getElementById('groupName').value + '")';
			
	strResponse = EvaluateRelevance(relevance);             
	divRes.innerHTML = strResponse;
	sortables_init();
	stripe('resultsTable', '#fff', '#E6E3E8');
}
				
	function init_load()
	{
		// stripe('resultsTable', '#fff', '#E6E3E8');
		// sortables_init();
		var currentTime = new Date()
		var year = currentTime.getFullYear();
		var month = currentTime.getMonth() + 1;	
		var day = currentTime.getDate();
		if (month < 10){
			month = "0" + month
		}
		if (day < 10){
			day = "0" + day
		}
		document.getElementById('end_date').value = month + '-' + day + '-' + year;
		document.getElementById('start_date').value = '01-01-2000';
	}
    
	var SORT_COLUMN_INDEX;
	function sortables_init(){
    
	// Find all tables with class sortable and make them sortable
	if (!document.getElementsByTagName) 
	return;
	tbls = document.getElementsByTagName("table");
	for (ti = 0; ti < tbls.length; ti++) {
		thisTbl = tbls[ti];
		if (((' ' + thisTbl.className + ' ').indexOf("sortable") != -1) && (thisTbl.id)) {
		//initTable(thisTbl.id);
		ts_makeSortable(thisTbl);
		}
		}
		}
    
		function ts_makeSortable(table){
		if (table.rows && table.rows.length > 0) {
		var firstRow = table.rows[0];
		}
		if (!firstRow) 
		return;
        
		// We have a first row: assume it's the header, and make its contents clickable links
		for (var i = 0; i < firstRow.cells.length; i++) {
		var cell = firstRow.cells[i];
		var txt = ts_getInnerText(cell);
		cell.innerHTML = '<a href="#" class="sortheader" ' +
		'onclick="ts_resortTable(this, ' +
		i +
		');return false;">' +
		txt +
	'<span class="sortarrow">   </span></a>';
        }
    }
    
    function ts_getInnerText(el){
        if (typeof el == "string") 
            return el;
        if (typeof el == "undefined") {
            return el
        };
        if (el.innerText) 
            return el.innerText; //Not needed but it is faster
        var str = "";
        
        var cs = el.childNodes;
        var l = cs.length;
        for (var i = 0; i < l; i++) {
            switch (cs[i].nodeType) {
                case 1: //ELEMENT_NODE
                    str += ts_getInnerText(cs[i]);
                    break;
                case 3: //TEXT_NODE
                    str += cs[i].nodeValue;
                    break;
            }
        }
        return str;
    }
    
    function ts_resortTable(lnk, clid){
        // get the span
        var span;
        for (var ci = 0; ci < lnk.childNodes.length; ci++) {
            if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') 
                span = lnk.childNodes[ci];
        }
        var spantext = ts_getInnerText(span);
        var td = lnk.parentNode;
        var column = clid || td.cellIndex;
        var table = getParent(td, 'TABLE');
        
        // Work out a type for the column
        if (table.rows.length <= 1) 
            return;
        var itm = ts_getInnerText(table.rows[1].cells[column]);
        sortfn = ts_sort_caseinsensitive;
        if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) 
            sortfn = ts_sort_date;
        if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) 
            sortfn = ts_sort_date;
        if (itm.match(/^[ $]/)) 
            sortfn = ts_sort_currency;
        if (itm.match(/^[\d\.]+$/)) 
            sortfn = ts_sort_numeric;
        SORT_COLUMN_INDEX = column;
        var firstRow = new Array();
        var newRows = new Array();
        for (i = 0; i < table.rows[0].length; i++) {
            firstRow[i] = table.rows[0][i];
        }
        for (j = 1; j < table.rows.length; j++) {
            newRows[j - 1] = table.rows[j];
        }
        newRows.sort(sortfn);
        if (span.getAttribute("sortdir") == 'down') {
            ARROW = ' <img src="/images/besreports/ENU/maximizebutton1.gif" border="0" height="12" width="15" alt="">';
            newRows.reverse();
            span.setAttribute('sortdir', 'up');
        }
        else {
            ARROW = ' <img src="/images/besreports/ENU/minimizebutton1.gif" border="0" height="12" width="15" alt="">';
            span.setAttribute('sortdir', 'down');
        }
        
        // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
        // don't do sortbottom rows
        for (i = 0; i < newRows.length; i++) {
            if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) {
                table.tBodies[0].appendChild(newRows[i]);
                if (i % 2 > 0) 
                    newRows[i].className = 'wr_oddRow';
                else 
                    newRows[i].className = 'wr_evenRow';
            }
        }
        // do sortbottom rows only
        for (i = 0; i < newRows.length; i++) {
            if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) 
                table.tBodies[0].appendChild(newRows[i]);
        }
        
        // Delete any other arrows there may be showing
        var allspans = document.getElementsByTagName("span");
        for (var ci = 0; ci < allspans.length; ci++) {
            if (allspans[ci].className == 'sortarrow') {
                if (getParent(allspans[ci], "table") == getParent(lnk, "table")) { // in the same table as us?
                    allspans[ci].innerHTML = '   ';
                }
            }
        }
        // adds up/down arrow to the column header 
        span.innerHTML = ARROW;
// Make zebra stripes in table
stripe('resultsTable', '#fff', '#E6E3E8');
    }
    
    function getParent(el, pTagName){
        if (el == null) 
            return null;
        else 
            if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) // Gecko bug, supposed to be uppercase
                return el;
            else 
                return getParent(el.parentNode, pTagName);
    }
    
    function ts_sort_date(a, b){
        // y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
        aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
        bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
        if (aa.length == 10) {
            dt1 = aa.substr(6, 4) + aa.substr(3, 2) + aa.substr(0, 2);
        }
        else {
            yr = aa.substr(6, 2);
            if (parseInt(yr) < 50) {
                yr = '20' + yr;
            }
            else {
                yr = '19' + yr;
            }
            dt1 = yr + aa.substr(3, 2) + aa.substr(0, 2);
        }
        if (bb.length == 10) {
            dt2 = bb.substr(6, 4) + bb.substr(3, 2) + bb.substr(0, 2);
        }
        else {
            yr = bb.substr(6, 2);
            if (parseInt(yr) < 50) {
                yr = '20' + yr;
            }
            else {
                yr = '19' + yr;
            }
            dt2 = yr + bb.substr(3, 2) + bb.substr(0, 2);
        }
        
        if (dt1 == dt2) 
            return 0;
        if (dt1 < dt2) 
            return -1;
        return 1;
    }
    
    function ts_sort_currency(a, b){
        aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g, '');
        bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g, '');
        return parseFloat(aa) - parseFloat(bb);
    }
    
    function ts_sort_numeric(a, b){
        aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
        if (isNaN(aa)) 
            aa = 0;
        bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
        if (isNaN(bb)) 
            bb = 0;
        return aa - bb;
    }
    
    function ts_sort_caseinsensitive(a, b){
        aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
        bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
        if (aa == bb) 
            return 0;
        if (aa < bb) 
            return -1;
        return 1;
    }
    
    function ts_sort_default(a, b){
        aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
        bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
        if (aa == bb) 
            return 0;
        if (aa < bb) 
            return -1;
        return 1;
    }
    
    function addEvent(elm, evType, fn, useCapture)// addEvent and removeEvent
    // cross-browser event handling for IE5+,  NS6 and Mozilla
    // By Scott Andrew
    {
        if (elm.addEventListener) {
            elm.addEventListener(evType, fn, useCapture);
            return true;
        }
        else 
            if (elm.attachEvent) {
                var r = elm.attachEvent("on" + evType, fn);
                return r;
            }
            else {
                alert("Handler could not be removed");
            }
    }
// this function is needed to work around 
// a bug in IE related to element attributes
function hasClass(obj) {
var result = false;
if (obj.getAttributeNode("class") != null) {
    result = obj.getAttributeNode("class").value;
}
return result;
}   
function stripe(id) {
// the flag we'll use to keep track of 
// whether the current row is odd or even
var even = false;
// if arguments are provided to specify the colours
// of the even & odd rows, then use the them;
// otherwise use the following defaults:
var evenColor = arguments[1] ? arguments[1] : "#fff";
var oddColor = arguments[2] ? arguments[2] : "#eee";
// obtain a reference to the desired table
// if no such table exists, abort
var table = document.getElementById(id);
if (! table) { return; }
// by definition, tables can have more than one tbody
// element, so we'll have to get the list of child
// <tbody>s 
var tbodies = table.getElementsByTagName("tbody");
// and iterate through them...
for (var h = 0; h < tbodies.length; h++) {
// find all the <tr> elements... 
 var trs = tbodies[h].getElementsByTagName("tr");
 
 // ... and iterate through them
 for (var i = 0; i < trs.length; i++) {
     // get all the cells in this row...
     var tds = trs[i].getElementsByTagName("td");
   
     // and iterate through them...
     for (var j = 0; j < tds.length; j++) {
   
       var mytd = tds[j];
         mytd.style.backgroundColor =
           even ? evenColor : oddColor;
     }
   // flip from odd to even, or vice-versa
   even =  ! even;
 }
}
}
// Starting Calendar control section
function positionInfo(object) {
	var p_elm = object;
	this.getElementLeft = getElementLeft;
	function getElementLeft() {
		var x = 0;
		var elm;
		if(typeof(p_elm) == "object"){
			elm = p_elm;
		} else {
			elm = document.getElementById(p_elm);
		}
		while (elm != null) {
			x += elm.offsetLeft;
			elm = elm.offsetParent;
		}
		return parseInt(x) - 60;
	}
	this.getElementWidth = getElementWidth;
	function getElementWidth(){
		var elm;
		if(typeof(p_elm) == "object"){
			elm = p_elm;
		} else {
			elm = document.getElementById(p_elm);
		}
		return parseInt(elm.offsetWidth);
	}
	this.getElementRight = getElementRight;
	function getElementRight(){
		return getElementLeft(p_elm) + getElementWidth(p_elm);
	}
	this.getElementTop = getElementTop;
	function getElementTop() {
		var y = 0;
		var elm;
		if(typeof(p_elm) == "object"){
			elm = p_elm;
		} else {
			elm = document.getElementById(p_elm);
		}
		while (elm != null) {
			y += elm.offsetTop;
			elm = elm.offsetParent;
		}
		return parseInt(y) - 150;
	}
	this.getElementHeight = getElementHeight;
	function getElementHeight(){
		var elm;
		if(typeof(p_elm) == "object"){
			elm = p_elm;
		} else {
			elm = document.getElementById(p_elm);
		}
		return parseInt(elm.offsetHeight);
	}
	this.getElementBottom = getElementBottom;
	function getElementBottom(){
		return getElementTop(p_elm) + getElementHeight(p_elm);
	}
}
function CalendarControl() {
	var calendarId = 'CalendarControl';
	var currentYear = 0;
	var currentMonth = 0;
	var currentDay = 0;
	var selectedYear = 0;
	var selectedMonth = 0;
	var selectedDay = 0;
	var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
	var dateField = null;
	function getProperty(p_property){
		var p_elm = calendarId;
		var elm = null;
		if(typeof(p_elm) == "object"){
			elm = p_elm;
		} else {
			elm = document.getElementById(p_elm);
		}
		if (elm != null){
			if(elm.style){
				elm = elm.style;
				if(elm[p_property]){
					return elm[p_property];
				} else {
					return null;
				}
			} else {
				return null;
			}
		}
	}
	function setElementProperty(p_property, p_value, p_elmId){
		var p_elm = p_elmId;
		var elm = null;
		if(typeof(p_elm) == "object"){
			elm = p_elm;
		} else {
			elm = document.getElementById(p_elm);
		}
		if((elm != null) && (elm.style != null)){
			elm = elm.style;
			elm[ p_property ] = p_value;
		}
	}
	function setProperty(p_property, p_value) {
		setElementProperty(p_property, p_value, calendarId);
	}
	function getDaysInMonth(year, month) {
		return [31,((!(year % 4 ) && ( (year % 100 ) || !( year % 400 ) )) ? 29:28),31,30,31,30,31,31,30,31,30,31][month - 1];
	}
	function getDayOfWeek(year, month, day) {
		var date = new Date(year, month - 1, day)
		return date.getDay();
	}
	this.clearDate = clearDate;
	function clearDate() {
		dateField.value = '';
		hide();
	}
	this.setDate = setDate;
	function setDate(year, month, day) {
		if (dateField) {
			if (month < 10) {month = "0" + month;}
			if (day < 10) {day = "0" + day;}
			var dateString = month + "-" + day + "-" + year;
			dateField.value = dateString;
			hide();
		}
		return;
	}
	this.changeMonth = changeMonth;
	function changeMonth(change) {
		currentMonth += change;
		currentDay = 0;
		if(currentMonth > 12) {
			currentMonth = 1;
			currentYear++;
		} else if(currentMonth < 1) {
			currentMonth = 12;
			currentYear--;
		}
		calendar = document.getElementById(calendarId);
		calendar.innerHTML = calendarDrawTable();
	}
	this.changeYear = changeYear;
	function changeYear(change) {
		currentYear += change;
		currentDay = 0;
		calendar = document.getElementById(calendarId);
		calendar.innerHTML = calendarDrawTable();
	}
	function getCurrentYear() {
		var year = new Date().getYear();
		if(year < 1900) year += 1900;
		return year;
	}
	function getCurrentMonth() {
		return new Date().getMonth() + 1;
	} 
	function getCurrentDay() {
		return new Date().getDate();
	}
	function calendarDrawTable() {
		var dayOfMonth = 1;
		var validDay = 0;
		var startDayOfWeek = getDayOfWeek(currentYear, currentMonth, dayOfMonth);
		var daysInMonth = getDaysInMonth(currentYear, currentMonth);
		var css_class = null; //CSS class for each day
		var table = "<table cellspacing='0' cellpadding='0' border='0'>";
		table = table + "<tr class='header'>";
		table = table + "  <td colspan='2' class='previous'><a href='javascript:changeCalendarControlMonth(-1);'>&lt;</a> <a href='javascript:changeCalendarControlYear(-1);'>&laquo;</a></td>";
		table = table + "  <td colspan='3' class='title'>" + months[currentMonth - 1] + "<br>" + currentYear + "</td>";
		table = table + "  <td colspan='2' class='next'><a href='javascript:changeCalendarControlYear(1);'>&raquo;</a> <a href='javascript:changeCalendarControlMonth(1);'>&gt;</a></td>";
		table = table + "</tr>";
		table = table + "<tr><th>S</th><th>M</th><th>T</th><th>W</th><th>T</th><th>F</th><th>S</th></tr>";
		for(var week = 0; week < 6; week++) {
			table = table + "<tr>";
			for(var dayOfWeek = 0; dayOfWeek < 7; dayOfWeek++) {
				if(week == 0 && startDayOfWeek == dayOfWeek) {
					validDay = 1;
				} else if (validDay == 1 && dayOfMonth > daysInMonth) {
					validDay = 0;
				}
				if(validDay) {
					if (dayOfMonth == selectedDay && currentYear == selectedYear && currentMonth == selectedMonth) {
						css_class = 'current';
					} else if (dayOfWeek == 0 || dayOfWeek == 6) {
						css_class = 'weekend';
					} else {
						css_class = 'weekday';
					}
					table = table + "<td><a class='" + css_class + "' href=\"javascript:setCalendarControlDate(" + currentYear + "," + currentMonth + "," + dayOfMonth + ")\">" + dayOfMonth + "</a></td>";
					dayOfMonth++;
				} else {
					table = table + "<td class='empty'>&nbsp;</td>";
				}
			}
			table = table + "</tr>";
		}
		table = table + "<tr class='header'><th colspan='7' style='padding: 3px;'><a href='javascript:clearCalendarControl();'>Clear</a> | <a href='javascript:hideCalendarControl();'>Close</a></td></tr>";
		table = table + "</table>";
		return table;
	}
	this.show = show;
	function show(field) {
		can_hide = 0;
  
		// If the calendar is visible and associated with
		// this field do not do anything.
		if (dateField == field) {
			return;
		} else {
			dateField = field;
		}
		if(dateField) {
			try {
				var dateString = new String(dateField.value);
				var dateParts = dateString.split("-");
        
				selectedMonth = parseInt(dateParts[0], 10);
				selectedDay = parseInt(dateParts[1], 10);
				selectedYear = parseInt(dateParts[2], 10);
			} catch(e) {}
		}
		if (!(selectedYear && selectedMonth && selectedDay)) {
			selectedMonth = getCurrentMonth();
			selectedDay = getCurrentDay();
			selectedYear = getCurrentYear();
		}
		currentMonth = selectedMonth;
		currentDay = selectedDay;
		currentYear = selectedYear;
		if(document.getElementById){
			calendar = document.getElementById(calendarId);
			calendar.innerHTML = calendarDrawTable(currentYear, currentMonth);
			setProperty('display', 'block');
			var fieldPos = new positionInfo(dateField);
			var calendarPos = new positionInfo(calendarId);
			var x = fieldPos.getElementLeft();
			var y = fieldPos.getElementBottom();
			setProperty('left', x + "px");
			setProperty('top', y + "px");
 
			if (document.all) {
				setElementProperty('display', 'block', 'CalendarControlIFrame');
				setElementProperty('left', x + "px", 'CalendarControlIFrame');
				setElementProperty('top', y + "px", 'CalendarControlIFrame');
				setElementProperty('width', calendarPos.getElementWidth() + "px", 'CalendarControlIFrame');
				setElementProperty('height', calendarPos.getElementHeight() + "px", 'CalendarControlIFrame');
			}
		}
	}
	this.hide = hide;
	function hide() {
		if(dateField) {
			setProperty('display', 'none');
			setElementProperty('display', 'none', 'CalendarControlIFrame');
			dateField = null;
		}
	}
	this.visible = visible;
	function visible() {
		return dateField
	}
	this.can_hide = can_hide;
	var can_hide = 0;
}
var calendarControl = new CalendarControl();
function showCalendarControl(textField) {
	// textField.onblur = hideCalendarControl;
	calendarControl.show(textField);
}
function clearCalendarControl() {
	calendarControl.clearDate();
}
function hideCalendarControl() {
	if (calendarControl.visible()) {
		calendarControl.hide();
	}
}
function setCalendarControlDate(year, month, day) {
	calendarControl.setDate(year, month, day);
}
function changeCalendarControlYear(change) {
	calendarControl.changeYear(change);
}
function changeCalendarControlMonth(change) {
	calendarControl.changeMonth(change);
}
document.write("<iframe id='CalendarControlIFrame' src='javascript:false;' frameBorder='0' scrolling='no'></iframe>");
document.write("<div id='CalendarControl'></div>");
// End Calendar control section
</script>

Thanks!!
Scott

A number of our custom reports broke in the past week as well. It looks like the session relevance was looking for the “Patches for Windows (English)” site. In my environment, the fix was to go in and remove “(English)” from the end of the site name and the reports worked as they used to.

This worked specifically for Lee Wei’s custom report:

Fixlet Compliance by Content

3 Likes

erock,

Thanks! That fixed my two broken reports, now I will have to find out what else is broken and fix them too. Thanks!!

Thanks also Leewei,

Scott

1 Like