//Global Variables
var xmlobj=null; // This is for Loading Data Function
var httpRequest = false; //Initially setting the Http Request to false
var nRecordNodes = 0; // No.of RecordNodes
var	nMasterNode = 0; // No.of MasterNodes
var	nTitleNode = 0; // No.of TitleNodes

var aMasterChildNodes=new Array(); // Master Child Nodes
var aMasterChildSibNodes=new Array(); // Master Child Sibling Nodes
var aTitleChildNodes=new Array(); //Title Child Nodes

var countryIDValue=0;
var searchStatus="document.getElementById('status')"; // Status of the Records
var presentPage = 1; //This is for Pagination
var allCountriesListSorted = new Array(); // All Countries List in Sorted Order

// Configuring XML Function
function configureXML()
{
	//Need to give XML file path here
	makeRequest('assets/xml/rolelist.xml');	
}

//Making a request to the xml
function makeRequest(url) 
{
      httpRequest = false;
      if (window.XMLHttpRequest) { // For Mozilla, Safari,... Browser's
         httpRequest = new XMLHttpRequest();
         if (httpRequest.overrideMimeType) {
            httpRequest.overrideMimeType('text/xml');
         }
      } else if (window.ActiveXObject) { // For IE Browser
         try {
            httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!httpRequest) {
         alert('Cannot Create XMLHTTP Instance');
         return false;
      }
      httpRequest.onreadystatechange = RoleListData; //Calling a function RoleListData()
      httpRequest.open('GET', url, true);
      httpRequest.send(null);
}

//If the request is success then RoleListData() function is called
function RoleListData() 
{
  if(httpRequest.readyState == 0) { eval(searchStatus).innerHTML = "<img src='assets/images/loading.gif' border='0' />&nbsp;Sending Request..."; }
  if(httpRequest.readyState == 1) { eval(searchStatus).innerHTML = "<img src='assets/images/loading.gif' border='0' />&nbsp;Loading Response..."; }
  if(httpRequest.readyState == 2) { eval(searchStatus).innerHTML = "<img src='assets/images/loading.gif' border='0' />&nbsp;Response Loaded..."; }
  if(httpRequest.readyState == 3) { eval(searchStatus).innerHTML = "<img src='assets/images/loading.gif' border='0' />&nbsp;Response Ready..."; }
  if(httpRequest.readyState == 4) 
	{
	 if (httpRequest.status == 200)
		{
			nMasterNode = httpRequest.responseXML.getElementsByTagName("master"); // master Tag
			nRecordNodes = httpRequest.responseXML.getElementsByTagName("record"); // record Tag
			nTitleNode = httpRequest.responseXML.getElementsByTagName("Title"); // Title Tag (in Masters)
			nCountryNode = httpRequest.responseXML.getElementsByTagName("Country"); // Country Tag (in Masters)
			
			var i=0;
			for (var j=0;j<nTitleNode[0].childNodes.length;j++)
			{
				if (nTitleNode[0].childNodes[j].nodeType != 1) 
				{continue;}
				else
				{
					var titlecodeValue = nTitleNode[0].childNodes[j].getAttribute('titlecode'); //Getting titlecode attribute
					var titlecodeID = nTitleNode[0].childNodes[j].getAttribute('id'); //Getting title id attribute
					//Adding Options and Values to the select box	
					var length=document.getElementById('roles').options.length;
					document.getElementById('roles').options.length=length;
					document.getElementById('roles').options[document.getElementById('roles').options.length]=new Option(titlecodeValue,Number(titlecodeID)+1);
				}
				i++;
			}

			for (var j=0;j<nCountryNode[0].childNodes.length;j++)
			{
				if (nCountryNode[0].childNodes[j].nodeType != 1) 
				{continue;}
				else
				{
					var countriescodeValue = nCountryNode[0].childNodes[j].firstChild.nodeValue; //Getting titlecode attribute
					var countriescodeID = nCountryNode[0].childNodes[j].getAttribute('id'); //Getting title id attribute
					//Adding Options and Values to the select box
					var length=document.getElementById('countries').options.length;
					document.getElementById('countries').options.length=length;
					document.getElementById('countries').options[document.getElementById('countries').options.length]=new Option(countriescodeValue,Number(countriescodeID)+1);
				}
			}

			// Check whether resultsDIV is in hidden mode or not, if yes make it visible
			if(document.getElementById('resultsDIV').style.display=="none")
			document.getElementById('resultsDIV').style.display="";
			
			deleteRows("resultsTable");
			var count=0;
			for(var i=0;i<nRecordNodes.length;i++)
			{		
				addAllRowsInitially(i,count);
				count++;
			}
			addingRowsToTable();
			pagination();
		}else
		{
			alert('There was a problem with the XML request.');
		}
	}
}

function deleteRowsFromTableArray()
{
	if(allCountriesListSorted.length!=0)
	allCountriesListSorted.length=0;
}

function addingRowsToTable()
{
	resultTable=document.getElementById("resultsTable");

	allCountriesListSorted.sort(function(a,b){return compare(a[0],b[0]);});
	
	for(x=0;x<allCountriesListSorted.length;x++)
	{
		var rowLength=resultTable.rows.length;
		tr1=resultTable.insertRow(Number(rowLength));
		tr1.setAttribute("vertical-align","top");
		tr1.setAttribute("valign","top");
		tr1.setAttribute("class","no-border");
		tr1.setAttribute("className","no-border");	
		for(y=0;y<4;y++)
		{
			trCells=tr1.insertCell(y);
			if(y==0)
			{trCells.setAttribute("class","td-content-left");trCells.setAttribute("className","td-content-left");}
			else if(y==1 || y==2)
			{trCells.setAttribute("class","td-content-center");trCells.setAttribute("className","td-content-center");}
			else if(y==3)
			{trCells.setAttribute("class","td-content-right");trCells.setAttribute("className","td-content-right");}
			trCells.setAttribute("vertical-align","top");
			trCells.setAttribute("valign","top");
			trCells.innerHTML=allCountriesListSorted[x][y]; //This will print only first three columns [0][0] "Country", [0][1] "Track Name", [0][2] "Program", [0][3] "Sessions"
		} //Inner For Loop Close
	} //Outer For Loop Close
	pagination();
}

function countryID(countryid)
{

countryIDValue=Number(countryid);
document.getElementById('roles').selectedIndex=0;
document.getElementById('countries').selectedIndex=countryIDValue+1;
document.getElementById('countryNames').innerHTML="<h1>"+document.getElementById('countries').options[document.getElementById('countries').selectedIndex].text+"</h1>";

var recordsnotmatched=true;

	deleteRows("resultsTable"); //Initially Delete all the rows present
	deleteRowsFromTableArray(); // Delete elements from an array if present
	
	var count=0;
	for(var i=0;i<nRecordNodes.length;i++)
	{
		var countryId=nRecordNodes[i].getAttribute("Country");
		if(Number(countryId)==Number(countryIDValue))
		{
			recordsnotmatched=false;
			addAllRowsInitially(i,count); //Adding Rows
			count++;
		}
	}
	addingRowsToTable(); // Add elements into array

	if(recordsnotmatched)
	{
		recordNotFound();
	}
	window.scrollTo(0,5000);
}

function filterCountries(thisObj)
{
	var recordsnotmatched=true;

	if(Number(thisObj.value)==0)
	{
		recordsnotmatched=false;
		document.getElementById('roles').selectedIndex=0;				
		alert("Please Select Country from the List");
		return;
	}
	else if(Number(thisObj.value)==1)
	{
		deleteRows("resultsTable"); //Initially Delete all the rows present
		deleteRowsFromTableArray(); // Delete elements from an array if present

		countryIDValue=(Number(thisObj.value)-1);
		document.getElementById('countryNames').innerHTML="<h1></h1>";
		document.getElementById('roles').selectedIndex=0;		

		recordsnotmatched=false;
		var count=0;
		for(var i=0;i<nRecordNodes.length;i++)
		{		
			addAllRowsInitially(i,count);
			count++;
		}
		addingRowsToTable();
		window.scrollTo(0,5000);
		return;
	}
	
	deleteRows("resultsTable"); //Initially Delete all the rows present
	deleteRowsFromTableArray(); // Delete elements from an array if present

	countryIDValue=(Number(thisObj.value)-1);
	document.getElementById('countryNames').innerHTML="<h1>"+document.getElementById('countries').options[thisObj.value].text+"</h1>";
	document.getElementById('roles').selectedIndex=0;

	var recordsnotmatched=true;
		
	var count=0;
	for(var i=0;i<nRecordNodes.length;i++)
	{
		var countryId=nRecordNodes[i].getAttribute("Country");
		if(Number(countryId)==Number(countryIDValue))
		{
			recordsnotmatched=false;
			addAllRowsInitially(i,count); //Adding Rows
			count++;
		}
	}
	addingRowsToTable(); // Add elements into array

	if(recordsnotmatched)
	{
		recordNotFound();
	}
	window.scrollTo(0,5000);
}

function filterRoles(thisObj)
{
	var recordsnotmatched=true;

	if(Number(thisObj.value)==0)
	{
		recordsnotmatched=false;
		alert("Please Select Role from the List");
		return;
	}
	else if(Number(thisObj.value)==1)
	{
		document.getElementById('countries').selectedIndex=0;
		document.getElementById('countryNames').innerHTML="<h1></h1>";
		
		deleteRows("resultsTable"); //Initially Delete all the rows present
		deleteRowsFromTableArray(); // Delete elements from an array if present

		recordsnotmatched=false;
		var count=0;
		for(var i=0;i<nRecordNodes.length;i++)
		{		
			addAllRowsInitially(i,count);
			count++;
		}
		addingRowsToTable(); // Add elements into array
		window.scrollTo(0,5000);
		return;
	}

	deleteRows("resultsTable"); //Initially Delete all the rows present
	deleteRowsFromTableArray(); // Delete elements from an array if present

	var count=0;
	for(var i=0;i<nRecordNodes.length;i++)
	{
		var titleID=nRecordNodes[i].getAttribute("Title");
		var countryID=nRecordNodes[i].getAttribute("Country");
		if(countryIDValue>0 && countryIDValue!=0)
		{
			document.getElementById('countries').selectedIndex=0;
			document.getElementById('countryNames').innerHTML="<h1></h1>";
			if(Number(titleID)==(Number(thisObj.value)-1))
			{
				recordsnotmatched=false;
				addAllRowsInitially(i,count); //Adding Rows
				count++;
			}
		}else if(countryIDValue==0)
		{
			if(Number(titleID)==(Number(thisObj.value)-1))
			{
				recordsnotmatched=false;
				addAllRowsInitially(i,count); //Adding Rows
				count++;
			}
		}
		
	}
	addingRowsToTable(); // Add elements into array
	
	if(recordsnotmatched)
	{
		recordNotFound(); // This function is called when Records are Not Found 
	}
	window.scrollTo(0,5000);
}

function recordNotFound()
{
	resultTable=document.getElementById("resultsTable");
	var rowLength=resultTable.rows.length;
	tr1=resultTable.insertRow(Number(rowLength));
	trCells=tr1.insertCell(0);
	trCells.setAttribute("vertical-align","top");
	trCells.setAttribute("valign","top");
	trCells.setAttribute("colSpan","4");	
	trCells.setAttribute("class","th-content-both");
	trCells.setAttribute("className","th-content-both");		
	trCells.innerHTML="<strong>No Record(s) Found!</strong>";
	window.scrollTo(0,5000);
}

function deleteRows(resultTableName){
	var resultTable=document.getElementById(resultTableName);
	if(resultTable.rows.length>2){
		for(c=Number(resultTable.rows.length-1);c>=2;c--){
		resultTable.deleteRow(c);		   
		}
	}
}

/* ------------ Add All Rows Initially ------------- */
function addAllRowsInitially(nodeNo,count) 
{
	var recordNodeObj=RecordObject(nodeNo);

	var aValues=new Array(nodeNo);
	aValues[0]=recordNodeObj.countryValue;
	aValues[1]="<a href="+recordNodeObj.titleURL+" target='_blank'>"+recordNodeObj.titleValue+" ("+recordNodeObj.titlecodeValue+")"+"</a>"; //Returns Title Value and stores into an Array
	aValues[2]=recordNodeObj.program; //Returns Program Name and stores into an Array
	aValues[3]="<a href="+recordNodeObj.applynow+" target='_blank'>Apply Now</a>"; //Returns Action(Apply Now) and stores into an Array
	
	allCountriesListSorted[count]=[aValues[0],aValues[1],aValues[2],aValues[3]];
}
/* ------------ Add All Rows Initially ------------ */

/* ----------------------------------------  */
//Two Dimensional Array Sorting
function compare(a,b) {
	if (a<b) {return -1;}
	if (a>b) {return 1;}
	return 0;
}
/* ----------------------------------------  */	

/* ---------------- Creating Record Object -------------- */
function RecordObject(recordNumber)
{
	var recordObject=new Object();
	var searchFieldsValues=new Array();

	//retrieving Program Node Value
	if(nRecordNodes[recordNumber].getElementsByTagName("Program")[0].firstChild.nodeValue=="")
	{recordObject.program=dataIsNull;}
	else{recordObject.program=nRecordNodes[recordNumber].getElementsByTagName("Program")[0].firstChild.nodeValue;} 
	//alert("recordObject.program: "+recordObject.program);

	//retrieving ApplyNow Node Value
	if(nRecordNodes[recordNumber].getElementsByTagName("ApplyNow")[0].firstChild.nodeValue=="")
	{recordObject.applynow=dataIsNull;}
	else{recordObject.applynow=nRecordNodes[recordNumber].getElementsByTagName("ApplyNow")[0].firstChild.nodeValue;} 
	//alert("recordObject.applynow: "+recordObject.applynow);
	
	//retrieving TitleURL Node Value
	if(nRecordNodes[recordNumber].getElementsByTagName("TitleURL")[0].firstChild.nodeValue=="")
	{recordObject.titleURL=dataIsNull;}
	else{recordObject.titleURL=nRecordNodes[recordNumber].getElementsByTagName("TitleURL")[0].firstChild.nodeValue;}
	//alert("recordObject.titleURL: "+recordObject.titleURL);
	
	var country=nRecordNodes[recordNumber].getAttribute("Country");
	var title=nRecordNodes[recordNumber].getAttribute("Title");

	var i=0;
	for (var j=0;j<nMasterNode[0].childNodes.length;j++)
	{
		if (nMasterNode[0].childNodes[j].nodeType != 1) continue;
		aMasterChildNodes[i] = nMasterNode[0].childNodes[j].nodeName; //Master Child Node Names
		aMasterChildSibNodes[i]=nMasterNode[0].childNodes[j].childNodes[j].nodeName; // Master Child Sibling Node Names
		var tagMain=eval(nMasterNode)[0].getElementsByTagName(aMasterChildNodes[i]); //Here <Region>,<Country>,<Title>
		var tagChld=tagMain[0].getElementsByTagName(aMasterChildSibNodes[i]); //<RegionChld>,<CountryChld>,<TitleChld>
		
		if(aMasterChildNodes[i]=="Country")
		{
			for(var iNode=0; iNode<eval(tagChld).length;iNode++)
			{
				var sId=tagChld[iNode].getAttribute("id");
				if(Number(country)==Number(sId))
				{
					recordObject.countryValue=tagChld[iNode].firstChild.nodeValue; //Getting Country Node Value
					//alert("recordObject.countryValue: "+recordObject.countryValue);
				}
			}
		}

		if(aMasterChildNodes[i]=="Title")
		{
			for(var iNode=0; iNode<eval(tagChld).length;iNode++)
			{
				var sId=tagChld[iNode].getAttribute("id");
				if(Number(title)==Number(sId))
				{
					recordObject.titlecodeValue=tagChld[iNode].getAttribute("titlecode"); //Getting titlecode attribute
					recordObject.titleValue=tagChld[iNode].firstChild.nodeValue; //Getting Title Node Value
				}
			}
		}
		i++;
	}
	return recordObject;
}
/* ------ Records Per Page ------ */
var pager = new Pager('resultsTable', 15);

function recordsPerPage(thisObj)
{
	var recordsperPage= Number(thisObj.value);
	pager = new Pager('resultsTable', recordsperPage);
	pagination();
}
/* ------ Records Per Page ------ */

/* ------ Pagination --------- */
function pagination()
{
	presentPage = 1;
	pager.init(); 
	pager.showPageNav('pager', 'pageNavPosition'); 
	pager.showPage(1);
}

function Pager(tableName, itemsPerPage) {
    this.tableName = tableName;
    this.itemsPerPage = itemsPerPage;
    this.currentPage = 1;
    this.pages = 0;
    this.inited = false;
    
    this.showRecords = function(from, to) {        
        var rows = document.getElementById(tableName).rows;
        // i starts from 1 to skip table header row
        for (var i = 2; i < rows.length; i++) {
            if (i < from || i > to)
                rows[i].style.display = 'none';
            else
                rows[i].style.display = '';
        }
    }
    
    this.showPage = function(pageNumber) {
    	if (! this.inited) {
    		alert("not inited");
    		return;
    	}
        this.currentPage = pageNumber;
        
        var from = (pageNumber - 1) * itemsPerPage + 1;
        var to = from + itemsPerPage - 1;
        this.showRecords(from, to);

		var pgNext=document.getElementById('pgNext');
		var pgPrev=document.getElementById('pgPrev');
	
		if(this.currentPage==this.pages)
			{
				pgNext.style.color='gray';
				pgNext.style.textDecoration='none';
			}
		else
			{
				pgNext.style.color='#000000';
				pgNext.style.textDecoration='underline';
			}

		if(this.currentPage==1)
			{
				pgPrev.style.color='gray';
				pgPrev.style.textDecoration='none';
			}
		else
			{
				pgPrev.style.color='#000000';
				pgPrev.style.textDecoration='underline';
			}
    }   
	
    this.prev = function() {
        if (this.currentPage > 1){
           this.showPage(this.currentPage - 1);
		   presentPage=eval(this.currentPage);
		   document.getElementById("presentpage").innerHTML=eval(presentPage);
		   document.pageForm.paginationdropdown.value=eval(this.currentPage);
		   window.scrollTo(0,5000);
		}
    }
    
    this.next = function() {
        if (this.currentPage < this.pages) {
            this.showPage(this.currentPage + 1);
		    presentPage=eval(this.currentPage);
			document.getElementById("presentpage").innerHTML=eval(presentPage);
			document.pageForm.paginationdropdown.value=eval(this.currentPage);
			window.scrollTo(0,5000);
        }
    }                        
    
    this.init = function() {
        var rows = document.getElementById(tableName).rows;
        var records = (rows.length - 1);
        this.pages = Math.ceil(records / itemsPerPage);
        this.inited = true;
    }

    this.showPageNav = function(pagerName, positionId) {
    	if (! this.inited) {
    		alert("not inited");
    		return;
    	}

    	var element = document.getElementById(positionId);

		if(this.pages==0)
		{
			this.pages=1;
		}
		//var totalPages = this.pages;

/*var pagerHtml ='<table border="0"><tr><td valign="middle" style="padding-right:0px;"><div id="presentpage" style="font-family:Arial, Helvetica, sans-serif;font-size:11px;">1</div></td><td valign="middle"><div style="font-family:Arial, Helvetica, sans-serif;font-size:11px;vertical-align:middle;">&nbsp;of&nbsp;&nbsp;'+this.pages+'&nbsp;&nbsp; | &lt; <a href="javascript:void(0)" onclick="' + pagerName + '.prev();" id="pgPrev" style="cursor:pointer;" >Previous</a>&nbsp;&nbsp;&nbsp;<select name="paginationdropdown" id="pageDropDown" style="font-family:Arial, Helvetica, sans-serif;font-size:11px;height:17px;vertical-align:middle;margin:0px;" onchange="' + pagerName + '.showPage(Number(this.value));javascript:document.getElementById(\'presentpage\').innerHTML=eval(this.value);'+pagerName+'.hideDivs();"></select>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0)" onclick="'+pagerName+'.next();" id="pgNext" style="cursor:pointer;vertical-align:middle;">Next</a> &gt;</div></td></tr></table>'*/

var pagerHtml ='<table border="0"><tr><td valign="middle" style="padding-right:0px;"><div id="content" style="font-family:Arial, Helvetica, sans-serif;font-size:11px; float:left;">Showing&nbsp;&nbsp;</div><div id="presentpage" style="font-family:Arial, Helvetica, sans-serif;font-size:11px;float:left;">1</div></td><td valign="middle" style="padding-right:0px;"><div style="font-family:Arial, Helvetica, sans-serif;font-size:11px;vertical-align:middle;">&nbsp;of&nbsp;&nbsp;'+this.pages+'&nbsp;&nbsp; | </div></td><td valign="middle" style="padding-right:0px;"><div style="font-family:Arial, Helvetica, sans-serif;font-size:11px;vertical-align:middle;cursor:pointer;">&lt; <a href="javascript:void(0)" onclick="' + pagerName + '.prev();" id="pgPrev">Previous</a>&nbsp;&nbsp;&nbsp;</div></td><td valign="middle" style="padding-right:0px;"><div style="font-family:Arial, Helvetica, sans-serif;font-size:11px;vertical-align:middle;"><select name="paginationdropdown" id="pageDropDown" style="font-family:Arial, Helvetica, sans-serif;font-size:11px;height:17px;vertical-align:middle;margin:0px;" onChange="' + pagerName + '.showPage(Number(this.value));javascript:document.getElementById(\'presentpage\').innerHTML=eval(this.value);"></select></div></td><td valign="middle" style="padding-right:0px;"><div style="font-family:Arial, Helvetica, sans-serif;font-size:11px;vertical-align:middle;cursor:pointer;vertical-align:middle;">&nbsp;&nbsp;&nbsp;<a href="javascript:void(0)" onclick="'+pagerName+'.next();" id="pgNext">Next</a> &gt;</div></td></tr></table>';

        element.innerHTML = pagerHtml;

        for (var page = 1; page <= this.pages; page++) 
            {
				document.pageForm[1].options[document.pageForm[1].options.length]=new Option(page,page);
			}

	var totalRecords = 0;
	totalRecords=((document.getElementById(tableName).rows.length)-2); 
	document.getElementById("status").innerHTML="<p>Total Records Found: <strong>"+totalRecords+"<strong></p>";
    }
}
/* ----------- End of Pagination ------------ */