﻿// XMLRequest 
var XmlReq;
// Server based page name
var AjaxServerPageName = "BapsAjaxServer.aspx";
// Gloabl variable to hold table id since HandleResponse can not handle parameter
var tableid;
// Gloabl variable to hold table name / type
var tablename;
// Hold value of cms pages
var cmspage_overview;
var cmspage_booking;
// Last sort direction
var centresortlast;
// Page Group
var pagegroup = 1;
// Current Page Number
var currentpage = 1;
// Last Sort Direction
var lastsortdirection = '';
// div name
var divname = '';
// delegate div name
var delegatediv = '';
// new text box (used after name change)
var globalnewtextbox = '';

function CreateXmlReq()
{
	try
	{
		XmlReq = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(e)
	{
		try
		{
			XmlReq = new ActiveXObject("Microsoft.XMLHTTP");
		} 
		catch(oc)
		{
			XmlReq = null;
		}
	}
	if(!XmlReq && typeof XMLHttpRequest != "undefined") 
	{
		XmlReq = new XMLHttpRequest();
	}
}

// Function to move page groups along forward
// Used by a number of functions???
function AjaxCourseNextPages(increment)
{
    // Add one to next page group, or take off one
    pagegroup = pagegroup + increment;
    
    // If not on first batch of page groups, put out less link
    //if (pagegroup > 1)
    //{
    //    turnoncontrol(prefix + 'lesspages');
    //}
    //else
    //{
    //    turnoffcontrol(prefix + 'lesspages');
    //}
      
    
    // Prevent number going over max page groups
    if (pagegroup > maxpagegroups)
    {
       pagegroup = maxpagegroups;
    }
    
    var startpagegroup;
    startpagegroup = ((pagegroup - 1) * 10) + 1;
    endpagegroup = pagegroup * 10;
   
    // Prevent page max going over maximum number pages possible
    if (endpagegroup > maxpages)
    {  
       // Save max pages when not full
       //lastpagemaxpage = maxpages - startpagegroup + 1;
    
       // Need to make invisible those page numbers not needed
       // and the <more> tag
       var baseoffcount;
       
       for (var i=maxpages + 1;i<=endpagegroup;i++)
       { 
          baseoffcount = i - startpagegroup + 1;
          turnoffcontrol(prefix + 'pgroup' + baseoffcount);
          turnoffcontrol(prefix + 'pipe' + baseoffcount);          
       }       
           
       // Turn off more link(s)
       //turnoffcontrol(prefix + 'morepages');      
           
       // Set top of range to max pages
       endpagegroup = maxpages;
    }     
    else
    {
       // Turn on more link
       //turnoncontrol(prefix + 'morepages');     
    
       // Turn on all page links as catch all
       for (var i=1;i<=10;i++)
       {
         turnoncontrol(prefix + 'pgroup' + i);
         turnoncontrol(prefix + 'pipe' + i);         
       }
       
       //lastpagemaxpage = 10;
    } 
    
   
    // Now change the text of the page link
    // to be the new page number
    var basecount = 0;
    
    for (var i=startpagegroup;i<=endpagegroup;i++)
    {
      basecount = basecount + 1;
      changenumber(prefix + 'pgroup' + basecount, i);
      changepipe(prefix + 'pipe' + basecount);
    }
   
}

function changenumber(basename, newtext)
{
    var linkobj = document.getElementById(basename);
    linkobj.innerHTML = newtext;
}

function changepipe(basename)
{
    var linkobj = document.getElementById(basename);
    linkobj.innerHTML = "&nbsp;|&nbsp;";
}

function AjaxCoursePageGet(tableidin, basepage, orderby, sortorderchange)
{
    // Override global order by with one passed
    courseorderby = orderby;
    
    var pageid = ((pagegroup - 1) * 10) + basepage;
   
    // Save table name in gloabl variable to use later
    tableid = tableidin;
    tablename = 'Courses';
        
    // Blank the class for all the numbers
    // Needs to be in own function since call twice...    
    var startpagegroup;
    var lastpagemaxpage = 10;
    startpagegroup = ((pagegroup - 1) * 10) + 1;    
    lastpagemaxpage = maxpages - startpagegroup + 1;
    
    if (lastpagemaxpage > 10)
    {
       lastpagemaxpage = 10; 
    }
      
    // Blank the class for all the numbers
    for (var i=1;i<=lastpagemaxpage;i++)
    {
       setclasscontrol(prefix + 'pgroup' + i, "");
    }
    
    // set class for the selected number
    setclasscontrol(prefix + 'pgroup' + basepage, "selectedpage");
    
    // set current page
    currentpage = basepage;
    
    // From record and to record
    //changenumber(prefix + 'LabelRecordFrom', ((pagegroup - 1) * 10) + currentpage);
    //changenumber(prefix + 'LabelRecordFrom', (((basepage - 1) * pagegroup * 10) + 1));
    var recordfrom = ((((pagegroup - 1) * 10) + basepage - 1) * 10) + 1
    var recordto = recordfrom + 9;
    
    // Prevent record to going over total records
    if (recordto > totalrecords)
    {
        recordto = totalrecords;
    }
    
    changenumber(prefix + 'LabelRecordFrom', recordfrom);    
    changenumber(prefix + 'LabelRecordTo', recordto);
     
     
	// Asc or Desc only a sort order change is needed,
	// would not be for page change
	if (sortorderchange == 'Y')
	{
	    if (lastsortdirection == 'A') 
	        {lastsortdirection = 'D';}
	    else
	        {lastsortdirection = 'A';}
	}
	
	// If blank assume A
	if (lastsortdirection == '')
	{
	   lastsortdirection = 'A'
	}
			
	var requestUrl = AjaxServerPageName + "?TableName=Courses&SearchText=" + encodeURIComponent(searchtext) + "&ClassCode="  + encodeURIComponent(searchclasscode) + "&TechType="  + encodeURIComponent(searchtechtype) + "&OrderBy=" + encodeURIComponent(orderby) + "&SortOrder=" + encodeURIComponent(lastsortdirection) + "&PageNumber=" + encodeURIComponent(pageid);
	
	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponse;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}   
}

function turnoffcontrol(basename)
{
    var linkobj = document.getElementById(basename);
	linkobj.style.visibility = 'hidden';
    linkobj.innerHTML = "";
}

function turnoncontrol(basename)
{
    var linkobj = document.getElementById(basename);
	linkobj.style.visibility = 'visible';
}

function setclasscontrol(basename, classname)
{
    // set class for the selected number
    var linkobj = document.getElementById(basename);    
    // This line could be "className" but does not work in FF
    //linkobj.setAttribute("class", classname);	
    linkobj.className = classname;
}


function AjaxCourseClassGet(searchclasscode, searchtechtype, tableidin, orderby)
{
    // Gets courses by class code for BapsCourseSearchDropDown plugin
    // Save table name in gloabl variable to use later
    tableid = tableidin;
    tablename = 'CourseClass';
    
    // Asc or Desc only a sort order change is needed,
	// would not be for page change
	if (lastsortdirection == 'A') 
	   {lastsortdirection = 'D';}
	else
	    {lastsortdirection = 'A';}
	
	// If blank assume A
	if (lastsortdirection == '')
	{
	   lastsortdirection = 'A'
	}
			
	var requestUrl = AjaxServerPageName + "?TableName=CourseClass&ClassCode="  + encodeURIComponent(searchclasscode) + "&TechType="  + encodeURIComponent(searchtechtype) + "&OrderBy=" + encodeURIComponent(orderby) + "&SortOrder=" + encodeURIComponent(lastsortdirection);
   	
	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponse;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}
}



function HandleResponse()
{
	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{			
			// Before filling new contents into the DataGrid, clear the cotents by calling this function
			ClearTable();
	
			// Fill the cleared Datagrid with new XML Reponse
	
			//FillTable(XmlReq.responseXML.documentElement);
			//FillTable();
			
			
			// Courses table			
			if (tablename == 'Courses')
			{			
			   CoursesTableFill();
			}		
						
			// Courses by Class table
			if (tablename == 'CourseClass')
			{			
			   CoursesClassTableFill();
			}		
			
			
			// Hides the Process Image Table after displaying the contents
	
			//imgtbl.style.visibility = 'hidden';
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
	}
}


function CoursesClassTableFill()
{
    // Get the table
	var tbl = document.getElementById(tableid).getElementsByTagName("tbody")[0];

	// Iterate through the table and add HTML Rows & contents into it.
	x = XmlReq.responseXML.documentElement.getElementsByTagName("Course");
	
	for (i=0;i<x.length;i++)      
    {
       // Create a HTML Row
	   var row = document.createElement("TR"); 	  
	   
	   // Get course code since used twice
	   xx = x[i].getElementsByTagName("coursecode");    
	   var coursecode = xx[0].firstChild.nodeValue
	    
       // Append the new column into the current row
	   var hlink = document.createElement("A");
	   xx = x[i].getElementsByTagName("title");    	
	   hlink.innerHTML = xx[0].firstChild.nodeValue
	   if (cmspage_overview == 0)
	   {	   
	      hlink.href = "CourseOverview.aspx?coursecode=" + encodeURIComponent(coursecode);
	   }
	   else
	   {
	       hlink.href = "Default.aspx?page=" + cmspage_overview + "&coursecode=" + encodeURIComponent(coursecode);
	   }
	   
	   // Now add to cell
	   var cell = document.createElement("TD"); 
	   cell.appendChild(hlink);
	   row.appendChild(cell); 
	   
	   // Course code which also needs hyper link
	   var hlink = document.createElement("A");
	   hlink.innerHTML = coursecode
	   if (cmspage_overview == 0)
	   {	   
	      hlink.href = "CourseOverview.aspx?coursecode=" + encodeURIComponent(coursecode);
	   }
	   else
	   {
	       hlink.href = "Default.aspx?page=" + cmspage_overview + "&coursecode=" + encodeURIComponent(coursecode);
	   }
	   
	   // Now add to cell
	   var cell = document.createElement("TD"); 
	   cell.appendChild(hlink);
	   row.appendChild(cell); 
	   
	   // Tech Type
       var cell = document.createElement("TD"); 
	   xx=x[i].getElementsByTagName("TechTypeDescript");    
	   cell.innerHTML = xx[0].firstChild.nodeValue
	   row.appendChild(cell); 
	   
	   // Duration
	   var cell = document.createElement("TD"); 
	   xx=x[i].getElementsByTagName("duration");    
	   cell.innerHTML = xx[0].firstChild.nodeValue
	   row.appendChild(cell); 
	   		
	   // List price if not turned off
	   if (coursepricehide == 'N')
	   {	       
	      var cell = document.createElement("TD"); 
	      xx=x[i].getElementsByTagName("list_price");    
	      cell.innerHTML = xx[0].firstChild.nodeValue
	      row.appendChild(cell); 	   
	   }
	   	 
	   // Add row to table
       tbl.appendChild(row);
    }
}




function CoursesTableFill()
{
	// Get the table
	var tbl = document.getElementById(tableid).getElementsByTagName("tbody")[0];

	// Iterate through the table and add HTML Rows & contents into it.
	x = XmlReq.responseXML.documentElement.getElementsByTagName("Course");
	
	for (i=0;i<x.length;i++)      
    {
       // Create a HTML Row
	   var row = document.createElement("TR"); 	  
	   
	   // Get course code since used twice
	   xx = x[i].getElementsByTagName("coursecode");    
	   var coursecode = xx[0].firstChild.nodeValue
	      
	    
       // Append the new column into the current row
	   var hlink = document.createElement("A");
	   xx = x[i].getElementsByTagName("title");    	
	   hlink.innerHTML = xx[0].firstChild.nodeValue
	   if (overviewpage == 0)
	   {	   
	      hlink.href = "CourseOverview.aspx?coursecode=" + encodeURIComponent(coursecode);
	   }
	   else
	   {
	       hlink.href = "Default.aspx?page=" + overviewpage + "&coursecode=" + encodeURIComponent(coursecode);
	   }
	   
	   // Now add to cell
	   var cell = document.createElement("TD"); 
	   cell.appendChild(hlink);
	   row.appendChild(cell); 
	   
	   // Course code which also needs hyper link
	   var hlink = document.createElement("A");
	   hlink.innerHTML = coursecode
	   if (overviewpage == 0)
	   {	   
	      hlink.href = "CourseOverview.aspx?coursecode=" + encodeURIComponent(coursecode);
	   }
	   else
	   {
	       hlink.href = "Default.aspx?page=" + overviewpage + "&coursecode=" + encodeURIComponent(coursecode);
	   }
	   
	   
	   // Now add to cell
	   var cell = document.createElement("TD"); 
	   cell.appendChild(hlink);
	   row.appendChild(cell); 
	   
	   // Tech Type
       var cell = document.createElement("TD"); 
	   xx=x[i].getElementsByTagName("TechTypeDescript");
	   //alert(xx[0].firstChild.nodeValue);  
	   cell.innerHTML = xx[0].firstChild.nodeValue
	   row.appendChild(cell); 
	   
	   // Class / Vendor
       var cell = document.createElement("TD"); 
	   xx=x[i].getElementsByTagName("ClassDescript");    
	   cell.innerHTML = xx[0].firstChild.nodeValue
	   row.appendChild(cell); 
	   	   
	   // Duration
	   var cell = document.createElement("TD"); 
	   xx=x[i].getElementsByTagName("duration");    
	   cell.innerHTML = xx[0].firstChild.nodeValue
	   row.appendChild(cell); 
	   		
	   // List price	
	   // List price if not turned off
	   if (coursepricehide == 'N')
	   {	           
	       var cell = document.createElement("TD"); 
	       xx=x[i].getElementsByTagName("list_price");    
	       cell.innerHTML = xx[0].firstChild.nodeValue
	       row.appendChild(cell); 
	   }    
	   	 
	   // Add row to table
       tbl.appendChild(row);
    }
}


//Fills the datagrid contents with the newly recieved Response content
function FillTable()
{
  
	// Gets the response XML	
	//var auth = scity.getElementsByTagName("Event"); 
	
	// Gets the table type content present in the Response XML and gets the data into a variable tbl
	var tbl = document.getElementById('dgevents').getElementsByTagName("tbody")[0];
				
	// Iterate through the table and add HTML Rows & contents into it.
	
	//var x=scity.childNodes;
	//alert(scity.childNodes.length);
	
	x=XmlReq.responseXML.documentElement.getElementsByTagName("Event");
	
	for (i=0;i<x.length;i++)      
    {
       // Create a HTML Row
	   var row = document.createElement("TR"); 
	   
       	
	   // Set the style
	   row.setAttribute("className","text");
	   row.setAttribute("bgColor","#ECECEC");
	   
       var cell = document.createElement("TD"); 
	   xx=x[i].getElementsByTagName("coursecode");    
	   cell.innerHTML = xx[0].firstChild.nodeValue
	   
	   // Append the new column into the current row
	   var hlink = document.createElement("A");
	   hlink.innerHTML ="wwww"
	   hlink.href = "www.fulcrumsoftware.com"
	   cell.appendChild(hlink);
			
	   row.appendChild(cell); 
	
	   var cell = document.createElement("TD"); 
	   xx=x[i].getElementsByTagName("startdate");    
	   cell.innerHTML = xx[0].firstChild.nodeValue
	   
	   row.appendChild(cell); 
	
	   var cell = document.createElement("TD"); 
	   xx=x[i].getElementsByTagName("centre");    
	   cell.innerHTML = xx[0].firstChild.nodeValue
	   
	   row.appendChild(cell); 
	   
	
       tbl.appendChild(row);

    
       //alert(xx[0].firstChild.nodeValue);
    }
	
	
	//for(var i=0;i<auth.context.childNodes(0).parentNode.childNodes.length;i++)	
	////for(var i=0;i<auth.childNodes.length;i++)	
	//{
//	
	//	// Create a HTML Row
//		var row = document.createElement("TR"); 
		//
		//// Set the style
		//row.setAttribute("className","text");
		//row.setAttribute("bgColor","#ECECEC");
		
		// Iterate thorugh the columns of each row
		
		//for(var j=0;j<auth.context.childNodes(0).childNodes.length;j++)		
	    //{
	    //    // Create a HTML DataColumn
	//		var cell = document.createElement("TD"); 
//			// Store the cotents we got from Response XML into the column
	//		cell.innerHTML = auth.context.childNodes(i).childNodes(j).text;
	//		// Append the new column into the current row
	//		
	//		var hlink = document.createElement("A");
	//		hlink.innerHTML ="wwww"
	//		hlink.href = "www.fulcrumsoftware.com"
	//		cell.appendChild(hlink);
	//		
	//		row.appendChild(cell); 
	//	}
	//	// Append the current row into the HTML Table(i.e DataGrid)
	//	tbl.appendChild(row)
	//}
}

// Clearing the existing contents of the Datagrid
function ClearTable()
{
	var tbl = document.getElementById(tableid).getElementsByTagName("tbody")[0];
	var row = tbl.rows.length
	
	for (var i=1;i<row;i++)
	{
	   tbl.deleteRow(1);		
	}
	
}


// Function to clear a div and put some more table data in.
function AjaxSchedMoveMonth(monthmove)
{
    // Turn on Ajax Div
    showdiv('ajaxtimer');

    //divname = divin;
    var tempdiv = document.getElementById(coursescheddivid);
    // Clear contents
	//tempdiv.innerHTML = '';	
	
	courseschedmonthcount = courseschedmonthcount + monthmove;
	
	// Prevent going back in time
	if (courseschedmonthcount < 0)
	{
	   courseschedmonthcount = 0
	}
	
	// Get page we are on
	var pageid = ((pagegroup - 1) * 10) + currentpage;
	
    // Call Server Page to get data
    var randnum = parseInt(Math.random()*99999999);
    //var requestUrl = AjaxServerPageName + "?TableName=CourseSchedule&MonthMove=" + encodeURIComponent(courseschedmonthcount) + "&SearchText=" + encodeURIComponent(courseschedsearchtext) + "&ClassCode=" + encodeURIComponent(courseschedclass) + "&TechType="  + encodeURIComponent(courseschedtechtype) + "&CentreCode="  + encodeURIComponent(courseschedcentre) + "&randnumn=" + randnum;
    var requestUrl = AjaxServerPageName + "?TableName=CourseSchedule&MonthMove=" + encodeURIComponent(courseschedmonthcount) + "&SearchText=" + encodeURIComponent(courseschedsearchtext) + "&ClassCode=" + encodeURIComponent(courseschedclass) + "&TechType="  + encodeURIComponent(courseschedtechtype) + "&CentreCode="  + encodeURIComponent(courseschedcentre) + "&RegionID=" + encodeURIComponent(courseschedregionid) + "&OrderBy=" + encodeURIComponent(courseschedorderby) + "&SortOrder=" + encodeURIComponent(lastsortdirection) + "&PageNumber="  + encodeURIComponent(pageid) + "&OverviewPage=" + encodeURIComponent(overviewpage) + "&SpecialOfferPageNumber=" + encodeURIComponent(specialofferpagenumber) + "&GuaranteedEventsPageNumber=" + encodeURIComponent(guaranteedeventspagenumber) + "&LateOfferPageNumber=" + encodeURIComponent(lateofferpagenumber) + "&randnum=" + randnum;

	
	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseCourseSchedule;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}   
            	
}

function HandleResponseCourseSchedule()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
			CourseScheduleFill();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
		
	    // Turn off Ajax Div
        hidedivdisplay('ajaxtimer'); 	
	}
}

function CourseScheduleFill()
{
    var tempdiv = document.getElementById(coursescheddivid);   	
    // Clear contents first
    tempdiv.innerHTML = '';	        

	x = XmlReq.responseXML.documentElement.getElementsByTagName("CourseSchedule");
 
    if (x.length > 0)
    {
	   var contentnode = x[0].getElementsByTagName("CourseScheduleHTML")[0];
       contentnode.normalize();
       tempdiv.innerHTML = contentnode.firstChild.nodeValue;    
    }	
}	


function CourseSchedPageGet(basepage, orderby, sortorderchange)
{
    // Turn on Ajax Div
    showdiv('ajaxtimer');

    // Override global order by with one passed
    courseschedorderby = orderby;
    
    var pageid = ((pagegroup - 1) * 10) + basepage;
           
    // Needs to be in own function since call twice...    
    var startpagegroup;
    var lastpagemaxpage = 10;
    startpagegroup = ((pagegroup - 1) * 10) + 1;    
    lastpagemaxpage = maxpages - startpagegroup + 1;
    
    if (lastpagemaxpage > 10)
    {
       lastpagemaxpage = 10; 
    }
      
    // Blank the class for all the numbers
    for (var i=1;i<=lastpagemaxpage;i++)
    {
       setclasscontrol(prefix + 'pgroup' + i, "");
    }
    
    // set class for the selected number
    setclasscontrol(prefix + 'pgroup' + basepage, "selectedpage");
    
    // set current page
    currentpage = basepage;
    
    // From record and to record
    var recordfrom = ((((pagegroup - 1) * 10) + basepage - 1) * 10) + 1
    var recordto = recordfrom + 9;
    
    // Prevent record to going over total records
    if (recordto > totalrecords)
    {
        recordto = totalrecords;
    }
    
    changenumber(prefix + 'LabelRecordFrom', recordfrom);    
    changenumber(prefix + 'LabelRecordTo', recordto);
     
	// Asc or Desc only a sort order change is needed,
	// would not be for page change
	if (sortorderchange == 'Y')
	{
	    if (lastsortdirection == 'A') 
	        {lastsortdirection = 'D';}
	    else
	        {lastsortdirection = 'A';}
	}
	
	// If blank assume A
	if (lastsortdirection == '')
	{
	   lastsortdirection = 'A';
	}
			
	
	// Reset Month when new page called
	courseschedmonthcount = 0;
			
			
	var randnum = parseInt(Math.random()*99999999);
    var requestUrl = AjaxServerPageName + "?TableName=CourseSchedule&MonthMove=" + encodeURIComponent(courseschedmonthcount) + "&SearchText=" + encodeURIComponent(courseschedsearchtext) + "&ClassCode=" + encodeURIComponent(courseschedclass) + "&TechType="  + encodeURIComponent(courseschedtechtype) + "&CentreCode="  + encodeURIComponent(courseschedcentre) + "&RegionID=" + encodeURIComponent(courseschedregionid) + "&OrderBy=" + encodeURIComponent(courseschedorderby) + "&SortOrder=" + encodeURIComponent(lastsortdirection) + "&PageNumber=" + encodeURIComponent(pageid) + "&OverviewPage=" + encodeURIComponent(overviewpage) + "&BookingPage=" + encodeURIComponent(bookingpage) + "&SpecialOfferPageNumber=" + encodeURIComponent(specialofferpagenumber) + "&GuaranteedEventsPageNumber=" + encodeURIComponent(guaranteedeventspagenumber) + "&LateOfferPageNumber=" + encodeURIComponent(lateofferpagenumber) + "&randnum=" + randnum;

	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseCourseSchedule;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}
}
	

function CourseSchedMovePage(increment)
{
    // Add or subtract page number from current page number
    // increment could be +ve or -ve
    currentpage = currentpage + increment;
    
    // Prevent current page going over max in group?
    var lastpagemaxpage = 10;
           
    if (pagegroup >= maxpagegroups)    
    {
       var startpagegroup;
       startpagegroup = ((pagegroup - 1) * 10) + 1;    
       lastpagemaxpage = maxpages - startpagegroup + 1;
                  
       if (currentpage > lastpagemaxpage)
       {
          currentpage = lastpagemaxpage;
       }
    }
    
    // If Page has gone below 1 then previous group
    // but not if pagegroup is 1 i.e. the first one
    if (currentpage < 1) 
    {
       if (pagegroup > 1) 
       {
          // Fire previous set of page groups
          AjaxCourseNextPages(-1);
       
          // Set current page back to 10 to be at end of previous group
          currentpage = 10;
       }
       else
       {
          currentpage = 1;
       }          
    }
       
    // If page has gone over to next set of pages
    if (currentpage > 10)
    {
       // Fire next set of page groups
       AjaxCourseNextPages(1);
       
       // Set current page back to one, as current page means just within group
       currentpage = 1;       
    }
    
    
    // Blank the class for all the numbers
    //for (var i=1;i<=10;i++)
    //{
    //   setclasscontrol(prefix + 'pgroup' + i, "");
    //}
    
    // set class for the selected number
    //setclasscontrol(prefix + 'pgroup' + currentpage, "selectedpage");
    
    // Now reload page
    CourseSchedPageGet(currentpage, courseschedorderby, 'N');
}


//-----------------------------------------------------------------------------------
//   Course Search Results Drop Down Section
//-----------------------------------------------------------------------------------

function CourseDropDownClassGet(divin, classcode, orderby)
{
    // Turn on Ajax Div
    showdiv('ajaxtimer');
    
    // Put div name into global variable divname
    divname = prefix + divin;
    
    // Asc or Desc only a sort order change is needed,
	// would not be for page change
	if (lastsortdirection == 'A') 
	   {lastsortdirection = 'D';}
	else
	    {lastsortdirection = 'A';}
	
	// If blank assume A
	if (lastsortdirection == '')
	{
	   lastsortdirection = 'A'
	}
	
	var randnum = parseInt(Math.random()*99999999);    		
	var requestUrl = AjaxServerPageName + "?TableName=CourseClass&ClassCode="  + encodeURIComponent(classcode) + "&TechType="  + encodeURIComponent(searchtechtype) + "&OrderBy=" + encodeURIComponent(orderby) + "&SortOrder=" + encodeURIComponent(lastsortdirection) + "&OverviewPage=" + encodeURIComponent(overviewpage) + "&RandNum=" + randnum;
   	
   	
	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseCourseClassDropDown;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}
}

function HandleResponseCourseClassDropDown()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
			CourseDropDownClassFill();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
		
		// Turn off Ajax Div
        hidedivdisplay('ajaxtimer');	
	}
}

function CourseDropDownClassFill()
{
    var tempdiv = document.getElementById(divname);   	
    // Clear contents first
    tempdiv.innerHTML = '';	        

	x = XmlReq.responseXML.documentElement.getElementsByTagName("HoldingHTMLTable");
 
    if (x.length > 0)
    {
  	   var contentnode = x[0].getElementsByTagName("WholeHTML")[0];
       contentnode.normalize();
       tempdiv.innerHTML = contentnode.firstChild.nodeValue;    
    }	
}	

//-----------------------------------------------------------------------------------
//   End of Course Search Results Drop Down Section
//-----------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------
//   Course Search Results Keyword Section 
//-----------------------------------------------------------------------------------

function CourseKeywordPageGet(divin, basepage, orderby, sortorderchange)
{
    // Show Ajax Div
    showdiv('ajaxtimer');

    // Put div name into global variable divname
    divname = prefix + divin;    
   
    // Override global order by with one passed
    courseorderby = orderby;
    
    var pageid = ((pagegroup - 1) * 10) + basepage;
   
    // Blank the class for all the numbers
    // Needs to be in own function since call twice...    
    var startpagegroup;
    var lastpagemaxpage = 10;
    startpagegroup = ((pagegroup - 1) * 10) + 1;    
    lastpagemaxpage = maxpages - startpagegroup + 1;
    
    if (lastpagemaxpage > 10)
    {
       lastpagemaxpage = 10; 
    }
      
    // Blank the class for all the numbers
    for (var i=1;i<=lastpagemaxpage;i++)
    {
       setclasscontrol(prefix + 'pgroup' + i, "");
    }
    
    // set class for the selected number
    setclasscontrol(prefix + 'pgroup' + basepage, "selectedpage");
    
    // set current page
    currentpage = basepage;
    
    // From record and to record
    var recordfrom = ((((pagegroup - 1) * 10) + basepage - 1) * 10) + 1
    var recordto = recordfrom + 9;
    
    // Prevent record to going over total records
    if (recordto > totalrecords)
    {
        recordto = totalrecords;
    }
    
    changenumber(prefix + 'LabelRecordFrom', recordfrom);    
    changenumber(prefix + 'LabelRecordTo', recordto);
     
	// Asc or Desc only a sort order change is needed,
	// would not be for page change
	if (sortorderchange == 'Y')
	{
	    if (lastsortdirection == 'A') 
	        {lastsortdirection = 'D';}
	    else
	        {lastsortdirection = 'A';}
	}
	
	// If blank assume A
	if (lastsortdirection == '')
	{
	   lastsortdirection = 'A'
	}
	
	var randnum = parseInt(Math.random()*99999999);    					
	var requestUrl = AjaxServerPageName + "?TableName=Courses&SearchText=" + encodeURIComponent(searchtext) + "&ClassCode="  + encodeURIComponent(searchclasscode) + "&TechType="  + encodeURIComponent(searchtechtype) + "&OrderBy=" + encodeURIComponent(orderby) + "&SortOrder=" + encodeURIComponent(lastsortdirection) + "&PageNumber=" + encodeURIComponent(pageid) + "&OverviewPage=" + encodeURIComponent(overviewpage) + "&RandNum=" + randnum;
	
	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseCourseKeyword;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}   
}


function HandleResponseCourseKeyword()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
			CourseKeywordFill();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
		
		// Show Ajax Div
        hidedivdisplay('ajaxtimer');
	}
}

function CourseKeywordFill()
{
    var tempdiv = document.getElementById(divname);   	
    // Clear contents first
    tempdiv.innerHTML = '';	        

	x = XmlReq.responseXML.documentElement.getElementsByTagName("HoldingHTMLTable");
 
    if (x.length > 0)
    {
	   var contentnode = x[0].getElementsByTagName("WholeHTML")[0];
       contentnode.normalize();
       tempdiv.innerHTML = contentnode.firstChild.nodeValue;
    }	
}


function CourseKeywordPageMove(increment, divin)
{
    // Add or subtract page number from current page number
    // increment could be +ve or -ve
    currentpage = currentpage + increment;
    
    // Prevent current page going over max in group?
    var lastpagemaxpage = 10;
           
    if (pagegroup >= maxpagegroups)    
    {
       var startpagegroup;
       startpagegroup = ((pagegroup - 1) * 10) + 1;    
       lastpagemaxpage = maxpages - startpagegroup + 1;
                  
       if (currentpage > lastpagemaxpage)
       {
          currentpage = lastpagemaxpage;
       }
    }
    
    // If Page has gone below 1 then previous group
    // but not if pagegroup is 1 i.e. the first one
    if (currentpage < 1) 
    {
       if (pagegroup > 1) 
       {
          // Fire previous set of page groups
          AjaxCourseNextPages(-1);
       
          // Set current page back to 10 to be at end of previous group
          currentpage = 10;
       }
       else
       {
          currentpage = 1;
       }          
    }
       
    // If page has gone over to next set of pages
    if (currentpage > 10)
    {
       // Fire next set of page groups
       AjaxCourseNextPages(1);
       
       // Set current page back to one, as current page means just within group
       currentpage = 1;       
    }
    
    
    // Now reload page
    CourseKeywordPageGet(divin, currentpage, courseorderby, 'N');
}

//-----------------------------------------------------------------------------------
//   End of Course Search Results Keyword Section 
//-----------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------
//   Late Events Section 
//-----------------------------------------------------------------------------------

function LateEventsPageGet(divin, classcode, orderby)
{
    // Show Ajax Div
    showdiv('ajaxtimer');

    // Put div name into global variable divname
    divname = prefix + divin;    

    // Sort Direction
    if (lastsortdirection == 'A') 
        {lastsortdirection = 'D';}
    else
	    {lastsortdirection = 'A';}
	
	// If blank assume A
	if (lastsortdirection == '')
	{
	   lastsortdirection = 'A';
	}
	
	var randnum = parseInt(Math.random()*99999999);    						
	var requestUrl = AjaxServerPageName + "?TableName=LateEvents&ClassCode="  + encodeURIComponent(classcode) + "&OrderBy=" + encodeURIComponent(orderby) + "&SortOrder=" + encodeURIComponent(lastsortdirection) + "&OverviewPage=" + encodeURIComponent(overviewpage) + "&BookingPage=" + encodeURIComponent(bookingpage) + "&SpecialOfferMode=" + encodeURIComponent(specialoffermode) + "&RandNum=" + randnum;
	
	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseLateEvents;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}
}

function HandleResponseLateEvents()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
			LateEventsFill();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
		
		// Hide Ajax Div
        hidedivdisplay('ajaxtimer');
	}
}

function LateEventsFill()
{
    var tempdiv = document.getElementById(divname);   	
    // Clear contents first
    tempdiv.innerHTML = '';	
    
   	x = XmlReq.responseXML.documentElement.getElementsByTagName("HoldingHTMLTable");
 
    if (x.length > 0)
    {
	   var contentnode = x[0].getElementsByTagName("WholeHTML")[0];
       contentnode.normalize();
       tempdiv.innerHTML = contentnode.firstChild.nodeValue;  
    }	
}	

//-----------------------------------------------------------------------------------
//   End of Late Events Section 
//-----------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------
//   Guaranteed Events Section 
//-----------------------------------------------------------------------------------

function EventGuaranteeGet(orderby, sortorderchange)
{
    // Turn on Ajax Div
    showdiv('ajaxtimer');

    // Override global order by with one passed
    courseschedorderby = orderby;
     
	// Asc or Desc only a sort order change is needed,
	// would not be for page change
	if (sortorderchange == 'Y')
	{
	    if (lastsortdirection == 'A') 
	        {lastsortdirection = 'D';}
	    else
	        {lastsortdirection = 'A';}
	}
	
	// If blank assume A
	if (lastsortdirection == '')
	{
	   lastsortdirection = 'A';
	}
	
	// Reset Month when new page called
	courseschedmonthcount = 0;
			
	var randnum = parseInt(Math.random()*99999999);
    var requestUrl = AjaxServerPageName + "?TableName=EventsGuaranteed&MonthMove=" + encodeURIComponent(courseschedmonthcount) + "&OrderBy=" + encodeURIComponent(courseschedorderby) + "&SortOrder=" + encodeURIComponent(lastsortdirection) + "&OverviewPage=" + encodeURIComponent(overviewpage) + "&BookingPage=" + encodeURIComponent(bookingpage) + "&randnum=" + randnum;
    
	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseEventGuaranteed;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}
}

function EventGuaranteeMoveMonth(monthmove)
{
    //divname = divin;
    //var tempdiv = document.getElementById(coursescheddivid);
    // Clear contents
	//tempdiv.innerHTML = '';	
	
	// Turn on Ajax Div
    showdiv('ajaxtimer');
	
	courseschedmonthcount = courseschedmonthcount + monthmove;
	
	// Prevent going back in time
	if (courseschedmonthcount < 0)
	{
	   courseschedmonthcount = 0
	}
	
    // Call Server Page to get data
    var randnum = parseInt(Math.random()*99999999);
    var requestUrl = AjaxServerPageName + "?TableName=EventsGuaranteed&MonthMove=" + encodeURIComponent(courseschedmonthcount) + "&OrderBy=" + encodeURIComponent(courseschedorderby) + "&SortOrder=" + encodeURIComponent(lastsortdirection) + "&OverviewPage=" + encodeURIComponent(overviewpage) + "&BookingPage=" + encodeURIComponent(bookingpage) + "&randnum=" + randnum;
	
	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseEventGuaranteed;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}          	
}


function HandleResponseEventGuaranteed()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
			EventGuaranteedFill();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
		
		// Turn off Ajax Div
		hidedivdisplay('ajaxtimer');
	}
}

function EventGuaranteedFill()
{
    var tempdiv = document.getElementById(coursescheddivid);   	
    // Clear contents first
    tempdiv.innerHTML = '';	        

	x = XmlReq.responseXML.documentElement.getElementsByTagName("CourseSchedule");
 
    if (x.length > 0)
    {
	   var contentnode = x[0].getElementsByTagName("CourseScheduleHTML")[0];
       contentnode.normalize();
       tempdiv.innerHTML = contentnode.firstChild.nodeValue;
    }	
}		

//-----------------------------------------------------------------------------------
//   End of Guaranteed Events Section 
//-----------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------
//   Search Delegates Section 
//-----------------------------------------------------------------------------------

function DelegateSearch()
{

    var searchtextbox = document.getElementById('searchtext');
    var searchtextstring = searchtextbox.value;
    var randnum = parseInt(Math.random()*99999999);
    var requestUrl = AjaxServerPageName + "?TableName=DelegateSearch&SearchText=" + encodeURIComponent(searchtextstring) + "&randnum=" + randnum;

	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseDelegateSearch;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}
}

function HandleResponseDelegateSearch()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
			DelegateSearchFill();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
	}
}

function DelegateSearchFill()
{
    var tempdiv = document.getElementById(searchresultslist);   	
    // Clear contents first
    tempdiv.innerHTML = '';	        
   
	x = XmlReq.responseXML.documentElement.getElementsByTagName("DelegateList");
   
    if (x.length > 0)
    {
	   var contentnode = x[0].getElementsByTagName("DelegateListHTML")[0];
       contentnode.normalize();
       tempdiv.innerHTML = contentnode.firstChild.nodeValue;    
    }	
 
}		
//-----------------------------------------------------------------------------------
//   End of Search Delegates Section
//-----------------------------------------------------------------------------------


//-----------------------------------------------------------------------------------
//   Increment Search Delegates Section 
//-----------------------------------------------------------------------------------

function IncrementDelegateSearch(delegatetextbox)
{
    // Make sure any previous search results are removed
    var previousdiv = document.getElementById('searchresultslist');   
    previousdiv.innerHTML = '';                

    // Get the search text
    var searchtextbox = document.getElementById(delegatetextbox);
    var searchtextstring = searchtextbox.value;
    
    // Only do search of at least 3 or more characters entered
    if (searchtextstring.length < 3)
    {
       return;
    }
      
                  
    // Make Search Results visible          
    var tempdiv = document.getElementById('searchresults1');                
    tempdiv.style.visibility = 'visible';
    
    // Save calling text box name
    callingtextbox = delegatetextbox;                               
              
    // set position of search box
    setdivPos(tempdiv, document.getElementById(delegatetextbox));

    // Create URL
    var randnum = parseInt(Math.random()*99999999);
    var requestUrl = AjaxServerPageName + "?TableName=DelegateSearch&SearchText=" + encodeURIComponent(searchtextstring) + "&randnum=" + randnum;

	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseIncrementDelegateSearch;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}
}

function HandleResponseIncrementDelegateSearch()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
			IncrementDelegateSearchFill();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
	}
}

function IncrementDelegateSearchFill()
{
    var tempdiv = document.getElementById(searchresultslist);   	
    // Clear contents first
    tempdiv.innerHTML = '';	        
   
	x = XmlReq.responseXML.documentElement.getElementsByTagName("DelegateList");
   
    if (x.length > 0)
    {
	   var contentnode = x[0].getElementsByTagName("DelegateListHTML")[0];
       contentnode.normalize();
       tempdiv.innerHTML = contentnode.firstChild.nodeValue;  
    }	
 
}		
//-----------------------------------------------------------------------------------
//   End of Search Delegates Section
//-----------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------
//   Add Delegate to Basket 
//-----------------------------------------------------------------------------------

function AddToBasket(eventnumber)
{
    var randnum = parseInt(Math.random()*99999999);
    var requestUrl = AjaxServerPageName + "?TableName=AddToBasket&EventNumber=" + encodeURIComponent(eventnumber) + "&randnum=" + randnum;

	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseAddToBasket;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}
}

function HandleResponseAddToBasket()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
			UpdateBasketDisplay();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
	}
}

function UpdateBasketDisplay()
{
    // if no basket div then the basket cannot be on the page
    // therefore do not attempt to update it.
    
    if (typeof basketdivname != 'undefined')
    {	
        var tempdiv = document.getElementById(basketdivname);   
    
        // Clear contents first
        tempdiv.innerHTML = '';	        
   
    	x = XmlReq.responseXML.documentElement.getElementsByTagName("BasketContents");
   
       if (x.length > 0)
       {
	      var contentnode = x[0].getElementsByTagName("BasketContentsHTML")[0];
          contentnode.normalize();
          tempdiv.innerHTML = contentnode.firstChild.nodeValue;    
  
        }	     
    }
    
    // Tell user booking made it.
    //alert('Your booking has been added to your basket, please continue shopping or click the checkout link to complete your booking.');
    alert(addtobaskettext);
    
}		
//-----------------------------------------------------------------------------------
//   End of Search Delegates Section
//-----------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------
//   Incremental Search Delegates Section (As used on BapsDelegateSelection Plugin)
//-----------------------------------------------------------------------------------
function IncrementalDelegateSearch(delegateinput, eventnumber, cartrecordid, delegatedivin)
{
    // Put delegatediv into global variable
    // for use later in ReloadCart, and other functions
    delegatediv = delegatedivin;
    
    // Save the eventnumber for use on the links within the search div
    // e.g. Add Delegate and save the cartrecordid
    tempeventnumber = eventnumber;
    tempcartrecordid = cartrecordid;

    // Add prefix to delegate input
    var delegatetextbox = prefix + delegateinput;
    
    // Make sure any previous search results are removed
    //var previousdiv = document.getElementById(prefix + 'searchresultslist');   
    //previousdiv.innerHTML = '';   
    
    // Get search term
    var searchtextbox = document.getElementById(delegatetextbox);
    var searchtextstring = searchtextbox.value;
        
    // Only do search of at least 3 or more characters entered
    if (searchtextstring.length < 2)
    {
       hidediv('delegatesearchresults');   			
       return;
    }    
     
    // Make Search Results visible          
    var tempdiv = document.getElementById(prefix + 'delegatesearchresults');                
    tempdiv.style.visibility = 'visible';
        
    // Save calling text box name
    //callingtextbox = delegatetextbox;                               
    
    // set position of search box
    //var tempdelegatetext = document.getElementById(delegatetextbox);       
    setdivPos(tempdiv, document.getElementById(delegatetextbox));
     
    var randnum = parseInt(Math.random()*99999999);
    var requestUrl = AjaxServerPageName + "?TableName=DelegateSearch&SearchText=" + encodeURIComponent(searchtextstring) + "&EventNumber="  + encodeURIComponent(eventnumber) + "&CartRecordID="  + encodeURIComponent(cartrecordid) + "&randnum=" + randnum;
    
	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseIncrementalDelegateSearch;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}
}

function HandleResponseIncrementalDelegateSearch()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
			IncrementalDelegateSearchFill();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
	}
}

function IncrementalDelegateSearchFill()
{
    // Scroll to show whole control          
    var tempinput = document.getElementById('bottommarker');                
    tempinput.scrollIntoView(false)
    
    var tempdiv = document.getElementById(prefix + 'searchresultslist');   	
    // Clear contents first
    tempdiv.innerHTML = '';	        
       
	x = XmlReq.responseXML.documentElement.getElementsByTagName('DelegateList');
   
    if (x.length > 0)
    {	  
       var contentnode = x[0].getElementsByTagName("DelegateListHTML")[0];
       contentnode.normalize();
       tempdiv.innerHTML = contentnode.firstChild.nodeValue;    
    }	
 
}

function hidediv(divin)
     {
        var tempdiv = document.getElementById(prefix + divin);	             
        tempdiv.style.visibility = 'hidden';
        
        if (divin == 'delegatesearchresults')
        {        
            // Make sure any previous search results are removed
            var previousdiv = document.getElementById(prefix + 'searchresultslist');   
            previousdiv.innerHTML = '';
        }
     } 
     
function showdiv(divin)
{
    var tempdiv = document.getElementById(prefix + divin);	             
    tempdiv.style.display = 'block'; 
}     

function hidedivdisplay(divin)
{
    var tempdiv = document.getElementById(prefix + divin);	             
    tempdiv.style.display = 'none';   
} 


function DelegateSelected(DelegateContactID, EventNumber, CartRecordID)
{
    // Now need to Update the existing cart booking record 
    // with this delegate's contact id
    var randnum = parseInt(Math.random()*99999999);
    var requestUrl = AjaxServerPageName + "?TableName=DelegateCartAmend&DelegateContactID=" + encodeURIComponent(DelegateContactID) + "&EventNumber="  + encodeURIComponent(EventNumber) + "&CartRecordID="  + encodeURIComponent(CartRecordID) + "&ControlPrefix="  + encodeURIComponent(prefix) + "&randnum=" + randnum;
    
	CreateXmlReq();
	
    if(XmlReq)
    {
 		XmlReq.onreadystatechange = HandleResponseDelegateSelected;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
    }   
 
}

function HandleResponseDelegateSelected()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
		    hidediv('delegatesearchresults');		  
			ReloadCart();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
	}
}


function ReloadCart()
{
    // Hide the selection div
    //hidediv('delegatesearchresults');
   
    //var temptext = document.getElementById(callingtextbox); 
    //temptext.value = FullName;
    //temptext.setAttribute('disabled', 'true');
    
    // Reload the cart (well, the bit for this event's delegates anyway)
    
    var tempdiv = document.getElementById(prefix + delegatediv);   	
    // Clear contents first
    tempdiv.innerHTML = '';	        
       
	x = XmlReq.responseXML.documentElement.getElementsByTagName('DelegateCart');
   
    if (x.length > 0)
    {
       // Problem here in FF in that seems to only take 3000 char from the xml element, thus cutting it off
       // document.getElementById('TextArea1').value = xx[0].firstChild.nodeValue;  
       var contentnode = x[0].getElementsByTagName("DelegateCartHTML")[0];
       contentnode.normalize();
       tempdiv.innerHTML = contentnode.firstChild.nodeValue;    
    
    }	     	
 }

//-----------------------------------------------------------------------------------
//   End of Search Delegates Section
//-----------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------
//   Add extra to Event basket
//-----------------------------------------------------------------------------------

function AddToEventBasket(eventnumber, delegatedivin)
{
    // Show Ajax Div
    showdiv('ajaxtimer');
    
    // Put delegatediv into global variable
    // for use later in ReloadCart and 
    delegatediv = delegatedivin;

    var randnum = parseInt(Math.random()*99999999);
    var requestUrl = AjaxServerPageName + "?TableName=AddToEventBasket&EventNumber=" + encodeURIComponent(eventnumber) + "&ControlPrefix="  + encodeURIComponent(prefix) + "&randnum=" + randnum;

	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseAddToEventBasket;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}

}

function HandleResponseAddToEventBasket()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
			ReloadCart();
			
			// Re-build the little Basket Display
			ReloadBasketDisplay();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
		
		// Hide Ajax Div
		hidedivdisplay('ajaxtimer');
	}
}


//-----------------------------------------------------------------------------------
//   Add extra to Event in Basket View
//-----------------------------------------------------------------------------------

function AddToEventBasketView(eventnumber, delegatedivin)
{
    // Show Ajax Div
    showdiv('ajaxtimer');

    // Put delegatediv into global variable
    // for use later in ReloadCart and 
    delegatediv = delegatedivin;

    var randnum = parseInt(Math.random()*99999999);
    var requestUrl = AjaxServerPageName + "?TableName=AddToEventBasketView&EventNumber=" + encodeURIComponent(eventnumber) + "&ControlPrefix="  + encodeURIComponent(prefix) + "&randnum=" + randnum;

	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseAddToEventBasketView;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}

}

function HandleResponseAddToEventBasketView()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
			// Re-build the cart 
			ReloadCart();
			
			// Re-build the little Basket Display
			ReloadBasketDisplay();			
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}

        // Hide Ajax Div		
		hidedivdisplay('ajaxtimer');
	}
}

//-----------------------------------------------------------------------------------
//   End of Add extra to Event basket
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
//   If the Bakset Display Plugin is on the page rebuild it
//-----------------------------------------------------------------------------------
function ReloadBasketDisplay()
{
    // Only do this is Basket Display is on the page
    if (typeof basketdivname != 'undefined')
    {	
       var randnum = parseInt(Math.random()*99999999);
       var requestUrl = AjaxServerPageName + "?TableName=RebuildBasketDisplay" + "&randnum=" + randnum;

	   CreateXmlReq();
	
	   if(XmlReq)
	   {
	       XmlReq.onreadystatechange = HandleResponseReloadBasketDisplay;			
		   XmlReq.open("GET", requestUrl,  true);
		   XmlReq.send(null);
	   }
    }
}

function HandleResponseReloadBasketDisplay()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
			UpdateRebuildBasketDisplay();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
	}
}

function UpdateRebuildBasketDisplay()
{
    var tempdiv = document.getElementById(basketdivname);   
    
    // Clear contents first
    tempdiv.innerHTML = '';	        
   
    x = XmlReq.responseXML.documentElement.getElementsByTagName("BasketContents");
   
    if (x.length > 0)
    {	
       var contentnode = x[0].getElementsByTagName("BasketContentsHTML")[0];
       contentnode.normalize();
       tempdiv.innerHTML = contentnode.firstChild.nodeValue;         
    
    }	         
}		

//-----------------------------------------------------------------------------------
//   End of Bakset Display Reload plugin
//-----------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------
//   Remove delegate from basket
//-----------------------------------------------------------------------------------
function RemoveDelegateEventBasket(eventnumber, cartrecordid, delegatedivin)
{
    // Show Ajax Div
    showdiv('ajaxtimer');
    
    // Put delegatediv into global variable
    // for use later in ReloadCart and 
    delegatediv = delegatedivin;

    var randnum = parseInt(Math.random()*99999999);
    var requestUrl = AjaxServerPageName + "?TableName=RemoveDelegateEventBasket&EventNumber=" + encodeURIComponent(eventnumber) + "&CartRecordID="  + encodeURIComponent(cartrecordid) + "&ControlPrefix="  + encodeURIComponent(prefix) + "&randnum=" + randnum;

	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseRemoveDelegateEventBasket;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}
}

function HandleResponseRemoveDelegateEventBasket()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
			ReloadCart();
			
			// Re-build the little Basket Display
			ReloadBasketDisplay();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
		
		// Hide Ajax Div
        hidedivdisplay('ajaxtimer');
	}
}

//-----------------------------------------------------------------------------------
//   Remove delegate from basket - BasketView
//-----------------------------------------------------------------------------------
function RemoveDelegateEventBasketView(eventnumber, cartrecordid, delegatedivin)
{
    // Show Ajax Div
    showdiv('ajaxtimer');
    
    // Put delegatediv into global variable
    // for use later in ReloadCart and 
    delegatediv = delegatedivin;

    var randnum = parseInt(Math.random()*99999999);
    var requestUrl = AjaxServerPageName + "?TableName=RemoveDelegateEventBasketView&EventNumber=" + encodeURIComponent(eventnumber) + "&CartRecordID="  + encodeURIComponent(cartrecordid) + "&ControlPrefix="  + encodeURIComponent(prefix) + "&randnum=" + randnum;

	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseRemoveDelegateEventBasketView;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}
}

function HandleResponseRemoveDelegateEventBasketView()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{		
			ReloadCart();
		    
		    // Re-build the little Basket Display
			ReloadBasketDisplay();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
		
		// Show Ajax Div
        hidedivdisplay('ajaxtimer');
	}
}

//-----------------------------------------------------------------------------------
//   End of remove delegate from basket
//-----------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------
//   Change delegate from basket
//-----------------------------------------------------------------------------------
function ChangeDelegateEventBasket(EventNumber, CartRecordID, delegatedivin, newtextbox)
{
    // Show Ajax Div
    showdiv('ajaxtimer');
    
    // Put delegatediv into global variable
    // for use later in ReloadCart and 
    delegatediv = delegatedivin;
    
    // Put the name of the text box that we need to set the focus of
    // into global variable.  So focus can be set after cart reload
    globalnewtextbox = prefix + newtextbox;
        
    // Now need to Update the existing cart booking record 
    // with this zero for the delegate id.
    var randnum = parseInt(Math.random()*99999999);
    var requestUrl = AjaxServerPageName + "?TableName=DelegateCartAmend&DelegateContactID=0" + "&EventNumber="  + encodeURIComponent(EventNumber) + "&CartRecordID="  + encodeURIComponent(CartRecordID) + "&ControlPrefix="  + encodeURIComponent(prefix) + "&randnum=" + randnum;
    
	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseChangeDelegateEventBasket;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}
}

function HandleResponseChangeDelegateEventBasket()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
			ReloadCart();
			// now set focus of newly created text box
			//document.getElementById(globalnewtextbox).focus();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
		
		// Hide Ajax Div
        hidedivdisplay('ajaxtimer');
	}
}

//-----------------------------------------------------------------------------------
//   End Change delegate from basket
//-----------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------
//   Change Payment Method
//-----------------------------------------------------------------------------------
function ChangePaymentMethod(dropdownin, delegatedivin, EventNumber, CartRecordID)
{
    // Show Ajax Div
    showdiv('ajaxtimer');
    
    // Put delegatediv into global variable
    // for use later in ReloadCart and 
    delegatediv = delegatedivin;
    
    // Get the control itself
    var tempdropdown = document.getElementById(prefix + dropdownin);   	
            
    // Now need to Update the existing cart booking record
    // with the new method of payment
    var randnum = parseInt(Math.random()*99999999);
    var requestUrl = AjaxServerPageName + "?TableName=PaymentMethodAmend&PaymentMethod=" + tempdropdown.value + "&EventNumber="  + encodeURIComponent(EventNumber) + "&CartRecordID="  + encodeURIComponent(CartRecordID) + "&ControlPrefix="  + encodeURIComponent(prefix) + "&ValidateMode=" + encodeURIComponent(validatemode) + "&PrePaymentPackagePage=" + encodeURIComponent(prepaymentpackagepage) + "&randnum=" + randnum;

	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponsePaymentMethodAmend;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}     
}

function HandleResponsePaymentMethodAmend()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
			ReloadPaymentMethod();
			// now set focus of newly created text box
			//document.getElementById(globalnewtextbox).focus();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
		
		// Hide Ajax Div
        hidedivdisplay('ajaxtimer');
	}
}


function ReloadPaymentMethod()
{
    // Reload the payment method part of the cart for this delegate only        
    var tempdiv = document.getElementById(prefix + delegatediv);   	
    // Clear contents first
    tempdiv.innerHTML = '';	        
       
	x = XmlReq.responseXML.documentElement.getElementsByTagName('PaymentCart');
   
    if (x.length > 0)
    {
	   var contentnode = x[0].getElementsByTagName("PaymentCartHTML")[0];
       contentnode.normalize();
       tempdiv.innerHTML = contentnode.firstChild.nodeValue;    
    }	    
}

//-----------------------------------------------------------------------------------
//   End Change Payment Method
//-----------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------
//   Save PO Number Section
//-----------------------------------------------------------------------------------
function SaveOrderNumber(textboxin, delegatedivin, EventNumber, CartRecordID)
{
    // Show Ajax Div
    showdiv('ajaxtimer');

    // Put delegatediv into global variable
    // for use later in ReloadPayment function
    delegatediv = delegatedivin;
    
    // Get the control itself
    var temptextbox = document.getElementById(prefix + textboxin);
                
    // Now need to Update the existing cart booking record
    // with the new method of payment
    var randnum = parseInt(Math.random()*99999999);
    var requestUrl = AjaxServerPageName + "?TableName=OrderNumberAmend&OrderNumber=" + temptextbox.value + "&EventNumber="  + encodeURIComponent(EventNumber) + "&CartRecordID="  + encodeURIComponent(CartRecordID) + "&ControlPrefix="  + encodeURIComponent(prefix) + "&ValidateMode=" + encodeURIComponent(validatemode) + "&PrePaymentPackagePage=" + encodeURIComponent(prepaymentpackagepage) + "&randnum=" + randnum;

	CreateXmlReq();
	
	if(XmlReq)
	{
		XmlReq.onreadystatechange = HandleResponseOrderNumberAmend;			
		XmlReq.open("GET", requestUrl,  true);
		XmlReq.send(null);
	}

}

function HandleResponseOrderNumberAmend()
{	
	if(XmlReq.readyState == 4)
	{
		if(XmlReq.status == 200)
		{				
			ReloadPaymentMethod();
		}
		else
		{
			alert("There was a problem retrieving data from the server." );
		}
		
		// Hide Ajax Div
        hidedivdisplay('ajaxtimer');
	}
}
//-----------------------------------------------------------------------------------
//   End of Save PO Number Section
//-----------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------
//   Add Delegate
//-----------------------------------------------------------------------------------
function adddelegate(adddelegatepagenumber)
{
   // Url of the page to add a user/delegate
   var requestUrl = "ContactID=0&MyDetails=N&EventNumber=" + encodeURIComponent(tempeventnumber) + "&CartRecordID=" + encodeURIComponent(tempcartrecordid) + "&Price=0&dpc=0";
   
   //UserDetails.aspx?  
 
   // Goto CMS page or normal page  
   if (adddelegatepagenumber == 0)
   {	   
	   requestUrl = "ContactAdd.aspx?" + requestUrl;
   }
   else
   {
	   requestUrl = "Default.aspx?page=" + adddelegatepagenumber + "&" + requestUrl;
   }   
   
   // Move to user add page
   window.location.href = requestUrl;

}
//-----------------------------------------------------------------------------------
//   End of add delegate
//-----------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------
//   Add TBA Delegate
//-----------------------------------------------------------------------------------
function addtbadelegate()
{

   // values will already be tempeventnumber and tempcartrecordid
   // Now change cart record to -1 in the delegate number rather than 
   // zero so we can see the difference between those records not 
   // yet with a delegate and those explicitly tba
   DelegateSelected(-1, tempeventnumber, tempcartrecordid);
   
}
//-----------------------------------------------------------------------------------
//   End of add TBA delegate
//-----------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------
//   General Functions
//-----------------------------------------------------------------------------------

 function setdivPos(objtoset, obj) 
      {
        var textboxheight = obj.height;         
        var curleft = curtop = 0;
       
        if (obj.offsetParent) { 
           curleft = obj.offsetLeft
           curtop = obj.offsetTop

        while (obj = obj.offsetParent) { 
            curleft += obj.offsetLeft
             curtop += obj.offsetTop

          }
          }
        
         // set position
         //objtoset.style.top = curtop + textboxheight;
    
         
         objtoset.style.top = curtop + 23 + 'px';
         objtoset.style.left = curleft + 'px';                        
         
         //alert(curleft + " " + curtop);   
         //return [curleft,curtop]; 
      }           

//-----------------------------------------------------------------------------------
//   End of General Functions
//-----------------------------------------------------------------------------------




