﻿// JScript File

//----------------------------------------------------------------------------------
var xmlDoc;
var url = "/products/xml/pentium4.xml";

//create the document wrapper object
if (window.ActiveXObject){	// code for IE
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
} else if (document.implementation && document.implementation.createDocument){ 	// code for Mozilla, etc.
	xmlDoc= document.implementation.createDocument("","",null);
}

//load xml file
xmlDoc.async=false;
xmlDoc.load(url);

//----------------------------------------------------------------------------------
//check for link
if (document.location.search) {
    var str = document.location.search;
    str = str.split("="); 
    getData(str[1]);
} else {
    //default
    getData(1);
}

function getData(p) {

            //name array
            var nameA = new Array();
            nameA[0] = ""; //this item must stay blank
            nameA[1] ="Intel<span class=\"regtitle\">&reg;</span> Pentium<span class=\"regtitle\">&reg;</span> 4 processor supporting Hyper-Threading Technology";
            nameA[2] ="Intel<span class=\"regtitle\">&reg;</span> Pentium<span class=\"regtitle\">&reg;</span> 4 processor";
            var i;

            //create chart links
            var linkstr = "<table width=\"98%\"><tr>";
                linkstr = linkstr + "<td class=\"links\"><span class=\"dot\">&#149;</span>&nbsp;<a href=\"javascript:getData(1)\">Intel&reg; Pentium&reg; 4 processor supporting Hyper-Threading Technology</a></td>";
                linkstr = linkstr + "<td class=\"links\"><span class=\"dot\">&#149;</span>&nbsp;<a href=\"javascript:getData(2)\">Intel&reg; Pentium&reg; 4 processor</a></td>";
            linkstr = linkstr +  "</tr></table>";
            document.getElementById("links").innerHTML = linkstr;       
    
            var ttl = document.getElementById("p_name");
           //set the title, chart selection and processor name display
           //p sets the distinguishing parameter.  right now the primary comparison is whether the P4 has hyperthreading or not.
            if (p==1) {
                ttl.innerHTML = nameA[p] + " specifications"; 
               var ht_chck = "1"; //yes hyperthreading 
               document.title = "Intel Pentium 4 processor supporting Hyper-Threading Technology Specifications"; 
            } else if (p==2) {
                ttl.innerHTML =  nameA[p] + " specifications";
               var ht_chck = "NA";  //no hyperthreading 
                document.title = "Intel Pentium 4 Processor Specifications";
            }

            //arrays 
            var spec = new Array();  //spec id
            var pnum = new Array(); //processor number
            var l2cach = new Array();  //L2 cache
            var clck = new Array(); //clock speed
            var fsb = new Array();  // front side bus
            var sock  = new Array();  //Slot Socket Type 
            var ht = new Array();  //hyperthreading
            var db = new Array();  //disable bit
            var em64 = new Array(); //EM64T
            var dc = new Array(); // dc
            var vt = new Array(); //virtualization technology
            var xd = new Array(); //xd
            var eist = new Array(); //eist

            //architecture array needed for filtering
            var arch = new Array('65-nm Technology','90-nm Technology','0.13 micron Technology','0.18 micron Technology'); //when adding architectures, add them into the array ordered from smallest to largest architecture
            var arch_cnt = arch.length-1;
            var i = 0;

            //create sub arrays
            for (i=0;i<=arch_cnt;i++) {
                spec[i] = new Array();  //spec id
                pnum[i] = new Array(); //processor number
                l2cach[i] = new Array();  //L2 cache
                clck[i] = new Array(); //clock speed
                fsb[i] = new Array();  // front side bus
                sock[i]  = new Array();  //Slot Socket Type 
                xd[i] = new Array();  //disable bit
                em64[i] = new Array(); //EM64T
                vt[i] = new Array(); //virtualization technology
                eist[i] = new Array(); //eist
            }
                
           var xItem = xmlDoc.getElementsByTagName("p4")[0].getElementsByTagName("item");  //returns an array of all nodes	
           var xItemCnt = xItem.length-1;   //loop counter

           var z = 0; //counter for second loop
           var y = 0; //counter for array enumeration

            //loops through architecture array
            for(z=0;z<=arch_cnt;z++) {

                   //loops through xml list
                   for (i=0; i<=xItemCnt; i++) {

   	                     //build the arrays
	                     if ((xItem[i].getElementsByTagName('Architecture')[0].childNodes[0].nodeValue == arch[z]) && (xItem[i].getElementsByTagName("HT")[0].childNodes[0].nodeValue == ht_chck)&& (xItem[i].getElementsByTagName("show")[0].childNodes[0].nodeValue == "1")) {
                            l2cach[z][y] = xItem[i].getElementsByTagName("L2_Cache")[0].childNodes[0].nodeValue;
                            fsb[z][y] = xItem[i].getElementsByTagName("Front_Side_Bus_Speed")[0].childNodes[0].nodeValue;
                            spec[z][y] = xItem[i].getElementsByTagName("sSpec_Number")[0].childNodes[0].nodeValue;
                            clck[z][y] = xItem[i].getElementsByTagName("Clock_Speed")[0].childNodes[0].nodeValue;
                            pnum[z][y] = xItem[i].getElementsByTagName("Processor_Number")[0].childNodes[0].nodeValue;
                            em64[z][y] = xItem[i].getElementsByTagName("EM64T")[0].childNodes[0].nodeValue;
                            vt[z][y]= xItem[i].getElementsByTagName("vt")[0].childNodes[0].nodeValue;
                            xd[z][y]= xItem[i].getElementsByTagName("Execute_Disable_Bit")[0].childNodes[0].nodeValue;
                            eist[z][y]= xItem[i].getElementsByTagName("eist")[0].childNodes[0].nodeValue;
                            
                            y = y + 1;
 	                     } 
     	             } 
     	            y = 0;
                }   


                //----------------------------------------------------------------------------------------
                //build tables 
                var i = 0; //counter
                var y = 0; //2nd counter
                var d = document.getElementById("main");
                var ttl = document.getElementById("p_name"); 

                 var q = clck[2].length;

                //check for results
                if (q < 1) { 
                    d.innerHTML = "<center><h5>We're sorry.<br /><br />There are no processors available that meet your criteria.<br /><br />Please change your selections and click \"Update Chart\" to try again.</h5></center>";
                } else {
                    //build table if results available
                    //column headers
                    var t = "<table  cellspacing=\"0\" cellpadding=\"0\" border=\"0\" summary=\"processor information\" class=\"v3poptable\">";
                    t = t +"<tr class=\"v3poptablerowhdr\">"; 
                    t = t + "<th class=\"v3poptablepad\">Processor Number</th>"; 
                    t = t + "<th  class=\"v3poptablepad2\" >Cache</th>"; 
                    t = t + "<th  class=\"v3poptablepad2\">Clock Speed</th>"; 
                    t = t + "<th  class=\"v3poptablepad2\">Front Side Bus<br />Speed</th>";
					 
 					//attributes only for hyperthreading
                    if (p=="1") {
                        t = t + " <th class=\"v3poptablepad2\">Intel® Virtualization Technology±</th>";
                    }
					
					t = t + "<th  class=\"v3poptablepad2\">Hyper-Threading Technology&dagger;</th>";
					
					//attributes only for hyperthreading
                    if (p=="1") {
                        t = t + " <th class=\"v3poptablepad2\">Enhanced Intel SpeedStep® Technology</th>"; 
                    }
					
                    t = t + "<th  class=\"v3poptablepad2\">Intel® EM64TΦ</th>"; 
					t = t + "<th  class=\"v3poptablepad2\">Execute Disable Bit°</th>";
                    t = t + "<th class=\"v3poptablepad3\">sSpec Number</th>"; 
                    t = t +"</tr>";
                    
                    //get architectures
                    for (i=0;i<=arch_cnt;i++) {
                        //write only if there are matching processors for the architecture
                        if (pnum[i][0]) {
                        
                              t = t + "<tr><td colspan=12 style=\"border-bottom:1px solid #cccccc; font-weight:bold;\">&nbsp;" + arch[i] + "</td></tr>";
                             
                               //get values for each architecture 
                               for (y=0;y<=(l2cach[i].length-1);y++) { 
                              
                                     if (((y/2) + '').split('.').length>1) {
                                        //odd numbered rows
                                        t = t + "<tr class=\"v3poptablerowon\">";
                                        ck_img = "/products/i/checkmark2.gif";
                                    } else {
                                        //even numbered rows
                                        t = t + "<tr>";
                                        ck_img = "/products/i/checkmark.gif";
                                    }
                                    
                                     t = t + "<td class=\"v3poptablepad2\" style=\"text-align:center;\">" + pnum[i][y] + "</td>";
                                     t = t + "<td class=\"v3poptablepad2\" style=\"text-align:center;\">" + l2cach[i][y] + "</td>";
                                    
                                    //add zero to make double digit decimal for clock speed
                                    if (clck[i][y].length == 3) {
                                           t = t + "<td class=\"v3poptablepad2\" style=\"text-align:center;\">" + clck[i][y] + "0&nbsp;GHz</td>";
                                    } else {
                                           t = t + "<td class=\"v3poptablepad2\" style=\"text-align:center;\">" + clck[i][y] + "&nbsp;GHz</td>";
                                    } 

                                     t = t + "<td class=\"v3poptablepad2\" style=\"text-align:center;\">" + fsb[i][y] + "&nbsp;MHz</td>";
                                    
									//attribute only for hyperthreaded p4 
                                    if (p=="1") { 
                                            if ( vt[i][y] == "1") {
                                                t = t + "<td class=\"v3poptablepad2\" style=\"text-align:center;\"><img src=\"" + ck_img + "\" /></td>";
                                             } else {
                                                t = t + "<td class=\"v3poptablepad2\">&nbsp;</td>";
                                             }                                     
                                     }
									
                                    if (ht_chck=="1") {
                                        t = t + "<td class=\"v3poptablepad2\" style=\"text-align:center;\"><img src=\"" + ck_img + "\" /></td>";
                                    } else {
                                        t = t + "<td class=\"v3poptablepad2\">&nbsp;</td>";
                                    }
                                     
									 //attribute only for hyperthreaded p4 
                                    if (p=="1") { 
                                            if (eist[i][y] == "1") {
                                                t = t + "<td class=\"v3poptablepad2\" style=\"text-align:center;\"><img src=\"" + ck_img + "\" /></td>";
                                             } else {
                                                t = t + "<td class=\"v3poptablepad2\">&nbsp;</td>";
                                             }
                                     }
									 
                                     if (em64[i][y] == "1") {
                                        t = t + "<td class=\"v3poptablepad2\" style=\"text-align:center;\"><img src=\"" + ck_img + "\" /></td>";
                                     } else {
                                        t = t + "<td class=\"v3poptablepad2\">&nbsp;</td>";
                                     }
									 
									 if (xd[i][y] == "1") {
                                        t = t + "<td class=\"v3poptablepad2\" style=\"text-align:center;\"><img src=\"" + ck_img + "\" /></td>";
                                     } else {
                                        t = t + "<td class=\"v3poptablepad2\">&nbsp;</td>";
                                     }
                                     
                                     if ((spec[i][y] =="NA") || (spec[i][y].split(' or ').length > 1)) {
                                        t = t + "<td class=\"v3poptablepad3\" style=\"text-align:center;\">" + spec[i][y] + "</td>"; 
                                     }  else {
                                        t = t + "<td class=\"v3poptablepad3\" style=\"text-align:center;\"><a href=\"#\" onclick=\"window.open('http://processorfinder.intel.com/details.aspx?sSpec=" + spec[i][y] + "','')\">" + spec[i][y] + "</a></td>";    
                                     }
                                     t= t +"</tr>";
                               } 
                        }
                    } 
                t = t + "</table>";
                }
                
                //write table to html
                d.innerHTML = t;

                //reset the arrays
                var spec = new Array();  //spec id
                var pnum = new Array(); //processor number
                var l2cach = new Array();  //L2 cache
                var clck = new Array(); //clock speed
                var fsb = new Array();  // front side bus
                var sock  = new Array();  //Slot Socket Type 
                var ht = new Array();  //hyperthreading
                var em64 = new Array(); //EM64T
                var vt = new Array(); //virtualization technology
                var xd = new Array(); //xd
                var eist = new Array(); //eist	
}