<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" exclude-result-prefixes="msxsl case" xmlns:case="urn:case" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:Synaptris="urn:schemas2-microsoft-com:xslt">
	<xsl:param name="OrderBy"></xsl:param>
	<xsl:param name="StartRow">1</xsl:param>
	<xsl:param name="EndRow">70</xsl:param>
	<xsl:param name="DataType">string</xsl:param>
	<xsl:param name="MatchPattern"></xsl:param>
  <xsl:param name="LogicalOperator">string</xsl:param>
  <xsl:param name ="getcheckvalue">SetBackValue(this)</xsl:param>
  <xsl:param name="Inputtypeparam">checkbox</xsl:param>
 
  
  
	<xsl:template match="/NewDataSet">
		<table width="100%">
			<xsl:element name="tr">
				
				<td>
          _$ListOf_ <b>_$RootCaption1_</b></td>
				<td align="right">
          _$Results_ <span id="TotalRecCount"></span></td>
			</xsl:element>
      <xsl:choose>
        <xsl:when test="$LogicalOperator='='">
          
              <xsl:element name="tr">
                <xsl:element name="td">
                  <input ID="chkselectall" name="selectall" onclick="SetBackValue(this)" type="checkbox" value="Select All"></input>
                  <b>_$Selectall_</b>
                </xsl:element>
              </xsl:element>
              <xsl:element name="tr">
                <xsl:element name="td">
                  <input ID="chkblank" name="Blank" onclick="SetBackValue(this)" type="checkbox" value="Null"></input>
                  <b>_$Blank_</b>
                </xsl:element>
              </xsl:element>
              <xsl:element name="tr">
                <xsl:element name="td">
                  <input ID="chknotblank" name="Notblank" onclick="SetBackValue(this)" type="checkbox" value="Not Null"></input>
                  <b>_$Notblank_</b>
                </xsl:element>
              </xsl:element>

        </xsl:when>
      </xsl:choose>
			<!--xsl:variable name="DistinctData">
				<Data>
					<xsl:call-template name="distinct">
						<xsl:with-param name="items" select="_$RootNode_" />
					</xsl:call-template>
				</Data>
			</xsl:variable-->
			<!--xsl:variable name="matcheNodes">
				<Data>
					<xsl:call-template name="matcheNodes">
						<xsl:with-param name="items" select="//CustomerID" />
					</xsl:call-template>
				</Data>
			</xsl:variable-->
			<xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
			<xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
			<xsl:element name="tr">
				<xsl:element name="td">
          
					<xsl:attribute name="colspan"><xsl:value-of select="2"></xsl:value-of></xsl:attribute>
					<Total>
						<xsl:attribute name="TotalCount">
							<xsl:choose>
								<xsl:when test="string-length($MatchPattern)>0 ">
									<xsl:value-of select="count(//MatchNode[starts-with(translate(.,$ucletters,$lcletters) , translate($MatchPattern,$ucletters,$lcletters))])" />
									<!--xsl:value-of select="count(Synaptris:node-set($matcheNodes1)/Data)" /-->
								</xsl:when>
								<xsl:when test="string-length($MatchPattern)=0 ">
									<xsl:value-of select="count(//MatchNode)" />
								</xsl:when>
							</xsl:choose>
							<!--xsl:value-of select="count(//MatchNode[starts-with(translate(.,$ucletters,$lcletters) , translate($MatchPattern,$ucletters,$lcletters))])" /-->
							<!--xsl:value-of select="count(Synaptris:node-set($matcheNodes1)/Data)" /-->
						</xsl:attribute>
					</Total>
				</xsl:element>
			</xsl:element>
			<!--xsl:for-each select="Synaptris:node-set($DistinctData)/Data/distinct"[starts-with(. , $MatchPattern)]-->
			<xsl:choose>
				<xsl:when test="string-length($MatchPattern)=0 ">
					<xsl:for-each select="//MatchNode">
						<xsl:call-template name="HTMLConverter">
							<xsl:with-param name="items" select="." />
						</xsl:call-template>
					</xsl:for-each>
				</xsl:when>
				<xsl:when test="string-length($MatchPattern)>0 ">
					<!--xsl:for-each select="//CustomerID[starts-with(case:NodeToUpperCase(.) , case:TextToUpperCase($MatchPattern))]"-->
					<xsl:for-each select="//MatchNode[starts-with(translate(.,$ucletters,$lcletters) , translate($MatchPattern,$ucletters,$lcletters))]">
						<xsl:call-template name="HTMLConverter">
							<xsl:with-param name="items" select="." />
						</xsl:call-template>
					</xsl:for-each>
				</xsl:when>
			</xsl:choose>
      
		</table>
	</xsl:template>
	<xsl:template name="HTMLConverter">
		<xsl:param name="items" select="." />
		<xsl:if test="position()&gt;=$StartRow">
			<xsl:if test="position()&lt;=$EndRow">
				<xsl:element name="tr">
					<xsl:element name="td">
           	<xsl:attribute name="colspan"><xsl:value-of select="2"></xsl:value-of></xsl:attribute>
            <xsl:choose>
              <xsl:when test="$LogicalOperator='='">
                <xsl:element name="input">
                <xsl:attribute name="ID">
                  <xsl:choose>
                    <xsl:when test="$DataType='SYSTEM.DATETIME' ">
                      <xsl:value-of select="case:datetimddd(string(.))" />
                    </xsl:when>
                    <xsl:otherwise>
                      <xsl:value-of select="." />
                    </xsl:otherwise>
                  </xsl:choose>
                </xsl:attribute>
                <xsl:attribute name="type">
                  <xsl:value-of select="$Inputtypeparam"/>
                </xsl:attribute>
                <xsl:attribute name="onclick"><xsl:value-of select="$getcheckvalue"/>
                </xsl:attribute>
                <xsl:attribute name="value">
                <xsl:choose>
                  <xsl:when test="$DataType='SYSTEM.DATETIME' ">
                    <xsl:value-of select="case:datetimddd(string(.))" />
                  </xsl:when>
                  <xsl:otherwise>
                    <xsl:value-of select="." />
                  </xsl:otherwise>
                </xsl:choose>
                </xsl:attribute>
              </xsl:element>
             <a>
						  <xsl:choose>
							  <xsl:when test="$DataType='SYSTEM.DATETIME' ">
								  <xsl:value-of select="case:datetimddd(string(.))" />
							  </xsl:when>
							  <xsl:otherwise><xsl:value-of select="." /></xsl:otherwise>
						  </xsl:choose>
						  </a>
              </xsl:when>
              <xsl:otherwise>
                <a onclick="SetBackValueIfNotString(this)" class="Pointer NoDecoration">
                  <xsl:choose>
                    <xsl:when test="$DataType='SYSTEM.DATETIME' ">
                      <xsl:value-of select="case:datetimddd(string(.))" />
                    </xsl:when>
                    <xsl:otherwise>
                      <xsl:value-of select="." />
                    </xsl:otherwise>
                  </xsl:choose>
                </a>
              </xsl:otherwise>

            </xsl:choose>
            
					</xsl:element>
				</xsl:element>
			</xsl:if>
		</xsl:if>
	</xsl:template>
	<xsl:template name="matcheNodes">
		<xsl:param name="items" select="." />
		<data>
			<xsl:value-of select="." />
		</data>
	</xsl:template>
	<xsl:template name="distinct">
		<xsl:param name="items" select="." />
		<xsl:choose>
			<xsl:when test="not($items)" />
			<xsl:otherwise>
				<xsl:apply-templates select="$items[1][not(. = $items[position() > 1])]" />
				<xsl:call-template name="distinct">
					<xsl:with-param name="items" select="$items[position() > 1]" />
				</xsl:call-template>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	<xsl:template match="node()|@*">
		<distinct>
			<xsl:value-of select="." />
		</distinct>
	</xsl:template>
	<msxsl:script language="JScript" implements-prefix="case"> 
	<![CDATA[
		
		function NodeToUpperCase(TextNode) 
		{ 
			return (TextNode.nextNode().text).toUpperCase(); 
		}
	  function Getcheckvalue()
    {
      return 'SetBackValue(this)';
    }
		function TextToUpperCase(TextNode) 
		{ 
			return TextNode.toUpperCase(); 
		}
		
		function datetimddd(strDate)
		{
       // return strDate;
		   if ( strDate == null || strDate == ""  )
				   return "";
	
		var CurrentDate  =strDate;// (datetimddd2(strDate)).toString();
		CurrentDate = strDate.toUpperCase();

		CurrentDate = CurrentDate.replace('T',' ');
    CurrentDate = CurrentDate.replace('+05:30',' ');
    CurrentDate = CurrentDate.replace('-07:00',' ');
    CurrentDate = CurrentDate.replace('-08:00',' ');
    CurrentDate = CurrentDate.replace('-','/');
    var datesplit = CurrentDate.split('.');
    CurrentDate =datesplit[0]; 
		//var Zonetime = CurrentDate.substring(CurrentDate.indexOf('.'),CurrentDate.length);
		//Zonetime = Zonetime.substring(0,4);
		//CurrentDate=CurrentDate.substring(0,CurrentDate.indexOf('.'));
		//return formatDate(new Date(getDateFromFormat(CurrentDate,'yyyy-MM-dd HH:mm:ss')),'MM/dd/yyyy HH:mm:ss');
    //return formatDate(new Date(CurrentDate),'MM/dd/yyyy HH:mm:ss');
    var now = new Date(CurrentDate);
    CurrentDate = now.getMonth()+1 + "-" + now.getDate() + "-" + now.getFullYear() + " " + now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds();
      return CurrentDate;
		}

		var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
		var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
		function LZ(x) {return(x<0||x>9?"":"0")+x}

		function isDate(val,format) {
			var date=getDateFromFormat(val,format);
			if (date==0) { return false; }
			return true;
			}

		function compareDates(date1,dateformat1,date2,dateformat2) {
			var d1=getDateFromFormat(date1,dateformat1);
			var d2=getDateFromFormat(date2,dateformat2);
			if (d1==0 || d2==0) {
				return -1;
				}
			else if (d1 > d2) {
				return 1;
				}
			return 0;
			}

		function formatDate(date,format) {
			format=format+"";
			var result="";
			var i_format=0;
			var c="";
			var token="";
			var y=date.getYear()+"";
			var M=date.getMonth()+1;
			var d=date.getDate();
			var E=date.getDay();
			var H=date.getHours();
			var m=date.getMinutes();
			var s=date.getSeconds();
			var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;

			var value=new Object();
			if (y.length < 4) {y=""+(y-0+1900);}
			value["y"]=""+y;
			value["yyyy"]=y;
			value["yy"]=y.substring(2,4);
			value["M"]=M;
			value["MM"]=LZ(M);
			value["MMM"]=MONTH_NAMES[M-1];
			value["NNN"]=MONTH_NAMES[M+11];
			value["d"]=d;
			value["dd"]=LZ(d);
			value["E"]=DAY_NAMES[E+7];
			value["EE"]=DAY_NAMES[E];
			value["H"]=H;
			value["HH"]=LZ(H);
			if (H==0){value["h"]=12;}
			else if (H>12){value["h"]=H-12;}
			else {value["h"]=H;}
			value["hh"]=LZ(value["h"]);
			if (H>11){value["K"]=H-12;} else {value["K"]=H;}
			value["k"]=H+1;
			value["KK"]=LZ(value["K"]);
			value["kk"]=LZ(value["k"]);
			if (H > 11) { value["a"]="PM"; }
			else { value["a"]="AM"; }
			value["m"]=m;
			value["mm"]=LZ(m);
			value["s"]=s;
			value["ss"]=LZ(s);
			while (i_format < format.length) {
				c=format.charAt(i_format);
				token="";
				while ((format.charAt(i_format)==c) && (i_format < format.length)) {
					token += format.charAt(i_format++);
					}
				if (value[token] != null) { result=result + value[token]; }
				else { result=result + token; }
				}
			return result;
			}
			
		function _isInteger(val) {
			var digits="1234567890";
			for (var i=0; i < val.length; i++) {
				if (digits.indexOf(val.charAt(i))==-1) { return false; }
				}
			return true;
			}
		function _getInt(str,i,minlength,maxlength) {
			for (var x=maxlength; x>=minlength; x--) {
				var token=str.substring(i,i+x);
				if (token.length < minlength) { return null; }
				if (_isInteger(token)) { return token; }
				}
			return null;
			}
			
		function getDateFromFormat(val,format) {
			val=val+"";
			format=format+"";
			var i_val=0;
			var i_format=0;
			var c="";
			var token="";
			var token2="";
			var x,y;
			var now=new Date();
			var year=now.getYear();
			var month=now.getMonth()+1;
			var date=1;
			var hh=now.getHours();
			var mm=now.getMinutes();
			var ss=now.getSeconds();
			var ampm="";
			
			while (i_format < format.length) {
				
				c=format.charAt(i_format);
				token="";
				while ((format.charAt(i_format)==c) && (i_format < format.length)) {
					token += format.charAt(i_format++);
					}
				
				if (token=="yyyy" || token=="yy" || token=="y") {
					if (token=="yyyy") { x=4;y=4; }
					if (token=="yy")   { x=2;y=2; }
					if (token=="y")    { x=2;y=4; }
					year=_getInt(val,i_val,x,y);
					if (year==null) { return 0; }
					i_val += year.length;
					if (year.length==2) {
						if (year > 70) { year=1900+(year-0); }
						else { year=2000+(year-0); }
						}
					}
				else if (token=="MMM"||token=="NNN"){
					month=0;
					for (var i=0; i<MONTH_NAMES.length; i++) {
						var month_name=MONTH_NAMES[i];
						if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) {
							if (token=="MMM"||(token=="NNN"&&i>11)) {
								month=i+1;
								if (month>12) { month -= 12; }
								i_val += month_name.length;
								break;
								}
							}
						}
					if ((month < 1)||(month>12)){return 0;}
					}
				else if (token=="EE"||token=="E"){
					for (var i=0; i<DAY_NAMES.length; i++) {
						var day_name=DAY_NAMES[i];
						if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()) {
							i_val += day_name.length;
							break;
							}
						}
					}
				else if (token=="MM"||token=="M") {
					month=_getInt(val,i_val,token.length,2);
					if(month==null||(month<1)||(month>12)){return 0;}
					i_val+=month.length;}
				else if (token=="dd"||token=="d") {
					date=_getInt(val,i_val,token.length,2);
					if(date==null||(date<1)||(date>31)){return 0;}
					i_val+=date.length;}
				else if (token=="hh"||token=="h") {
					hh=_getInt(val,i_val,token.length,2);
					if(hh==null||(hh<1)||(hh>12)){return 0;}
					i_val+=hh.length;}
				else if (token=="HH"||token=="H") {
					hh=_getInt(val,i_val,token.length,2);
					if(hh==null||(hh<0)||(hh>23)){return 0;}
					i_val+=hh.length;}
				else if (token=="KK"||token=="K") {
					hh=_getInt(val,i_val,token.length,2);
					if(hh==null||(hh<0)||(hh>11)){return 0;}
					i_val+=hh.length;}
				else if (token=="kk"||token=="k") {
					hh=_getInt(val,i_val,token.length,2);
					if(hh==null||(hh<1)||(hh>24)){return 0;}
					i_val+=hh.length;hh--;}
				else if (token=="mm"||token=="m") {
					mm=_getInt(val,i_val,token.length,2);
					if(mm==null||(mm<0)||(mm>59)){return 0;}
					i_val+=mm.length;}
				else if (token=="ss"||token=="s") {
					ss=_getInt(val,i_val,token.length,2);
					if(ss==null||(ss<0)||(ss>59)){return 0;}
					i_val+=ss.length;}
				else if (token=="a") {
					if (val.substring(i_val,i_val+2).toLowerCase()=="am") {ampm="AM";}
					else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") {ampm="PM";}
					else {return 0;}
					i_val+=2;}
				else {
					if (val.substring(i_val,i_val+token.length)!=token) {return 0;}
					else {i_val+=token.length;}
					}
				}
			// If there are any trailing characters left in the value, it doesn't match
			if (i_val != val.length) { return 0; }
			// Is date valid for month?
			if (month==2) {
				// Check for leap year
				if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
					if (date > 29){ return 0; }
					}
				else { if (date > 28) { return 0; } }
				}
			if ((month==4)||(month==6)||(month==9)||(month==11)) {
				if (date > 30) { return 0; }
				}
			// Correct hours value
			if (hh<12 && ampm=="PM") { hh=hh-0+12; }
			else if (hh>11 && ampm=="AM") { hh-=12; }
			var newdate=new Date(year,month-1,date,hh,mm,ss);
			return newdate.getTime();
			}

		function parseDate(val) {
			var preferEuro=(arguments.length==2)?arguments[1]:false;
			generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d');
			monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d');
			dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M');
			var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst');
			var d=null;
			for (var i=0; i<checkList.length; i++) {
				var l=window[checkList[i]];
				for (var j=0; j<l.length; j++) {
					d=getDateFromFormat(val,l[j]);
					if (d!=0) { return new Date(d); }
					}
				}
			return null;
			}
	]]> 
	
	</msxsl:script>
</xsl:stylesheet>