function initialise ()
{
	setSource();
	loadTourBoxesAjax();
	populateMonthYearBox(document.getElementById("holiday-travel-month"));
	getTextSizeStyleSheet();
	SetTypeDateBoxes();
}

function setSource() {



	var AgentID = readCookie("AgentID");



	if (AgentID){
		var element = document.getElementById("source-image");
		if(element){
			element.src=readCookie("AgentLogo");
			element.alt=readCookie("AgentName");
			element = document.getElementById("source");
			element.style.display="block";
			
		}
	}
        else
	{
		var element = document.getElementById("source-image");
                element.style.display="none";
                element = document.getElementById("tabFavourites");
			element.style.display="block";

	}

}


function setSourceSecure() {



	var AgentID = readCookie("AgentID");
    if (!AgentID){
     AgentID = getQueryVariable("AgentID");
    }


	if (AgentID){
		var element = document.getElementById("source-image");
		if(element){
			element.src=readCookie("AgentLogo");
			element.alt=readCookie("AgentName");
			element = document.getElementById("source");
			element.style.display="block";
		}
	}
        else
	{
		var element = document.getElementById("source-image");
                element.style.display="none";

	}

}


function setLastSearch()
{
	if (document.getElementById('lastsearch') != null)
	{
		if (readCookie('lastsearch') !=  null)
		{
			document.getElementById('lastsearch').href = readCookie('lastsearch');		
		}
		else
		{
			document.getElementById('container_lastsearch').style.display = 'none';
		}

	}
}

function SetSelectedValue(options, value)
{
	for (var i=0; i< options.length; i++) {
		if (options[i].value == value ) {
			options[i].selected = true;
			}
		}
}


//set a cookie value, storing the users text size adjustment preference
function adjustTextSize(adjustment,max,min){
    var textadjustValue ;

    if (adjustment == 0){ //reset 
         textadjustValue = 0;
    }
    else{ //adjustment
       textadjustValue = convertToInteger(readCookie('textadjustment')) + parseInt(adjustment);
       if (textadjustValue > max || textadjustValue  < min) { return; } //return if we have reached the max or min adjustment
    } 
 
    //create or override exsiting cookie
    createCookie('textadjustment', textadjustValue, 365 * 10);
        
    //update css link
    getTextSizeStyleSheet();
}

//reads the cookie value and set the correct stylesheet
function getTextSizeStyleSheet(){
    
    //get the current adjust value
    var textadjustValue = convertToInteger(readCookie('textadjustment'));

    //repoint css
    document.getElementById('textadjuster').href = '/common/stylesheets/adjustments/textadjust_' + textadjustValue + '.css';
}

//cookie functions are written by ALA author Peter-Paul Koch http://www.quirksmode.org/.
 function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

function eraseCookie(name)
{
	createCookie(name,"",-1);
}

function convertToInteger(value){
    if (value == null){
        return 0;
    }
    else{ 
        return parseInt(value);
    }   
        
}

function popup(URL, winwidth, winheight, scrollbars, resizable) {
	if (arguments.length > 5)
		id = arguments[5];
	else{
		day = new Date();
		id = day.getTime();
	}
	pleft=(screen.width-winwidth)/2;
	ptop=(screen.height-winheight)/2;
	eval("page" + id + " = window.open('"+URL+"', '" + id + "', 'toolbar=0,scrollbars="+scrollbars+",location=0,statusbar=0,menubar=0,resizable="+resizable+",width="+winwidth+",height="+winheight+",left="+pleft+",top="+ptop+"');");
}


function SetDate(){

	var today = new Date();
	var y=today.getFullYear();
	var m=today.getMonth();

	months = new Array(
	"January ",
	"February ",
	"March ",
	"April ",
	"May ",
	"June ",
	"July ",
	"August ",
	"September ", 
	"October ",
	"November ",
	"December ")

	for (i = 0; i < (18); i++){
		document.getElementById('search_monthyear').options[i+1] = new Option(months[m] + y, y + '-' +(m+1) + '-01');
		m = m + 1;
		if(m == 12){
			m = 0;
			y = y + 1;
		}
	}
}

function loadTourBoxesAjax()  {
	makeRequest('ajax-event-type.aspx', 'loadQuickSearch');
}

function makeRequest(url, reqtype) {

     
    //  document.getElementById('dropdowns').innerHTML = '<div class="loading"><img id="loading" src="images/loadingAnimation.gif"/><h3>Please wait</h3></div>';

	var httpRequest;

	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
		httpRequest = new XMLHttpRequest();
		if (httpRequest.overrideMimeType) {
			httpRequest.overrideMimeType('text/xml');
			// See note below about this line
		}
        } 
        else if (window.ActiveXObject) { // IE
		try {
			httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
                } 
                catch (e) {
			try {
                        	httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                        } 
                        catch (e) {}
 		}
        }

	if (!httpRequest) {
		alert('Giving up :( Cannot create an XMLHTTP instance');
		return false;
	}


	if (reqtype == "loadQuickSearch")  {        
		httpRequest.onreadystatechange = function() { alertContentsLoadQuickSearch(httpRequest); };
	}
	else  {
		httpRequest.onreadystatechange = function() { alertContents(httpRequest); };
	}
        httpRequest.open('GET', url, true);
	httpRequest.send(null);

}

function alertContentsLoadQuickSearch(httpRequest) {

	if (httpRequest.readyState == 4) {
		if (httpRequest.status == 200) {
			var strReturnXML;
			strReturnXML = httpRequest.responseText;
			populateSelectBox(document.getElementById("holiday-event"), strReturnXML, "events", 1);
			populateSelectBox(document.getElementById("holiday-type"), strReturnXML, "types", 0);
			setQuickSearchValues();
		} 
        	else {
			
		}
	}
}

function alertContents(httpRequest) {

	if (httpRequest.readyState == 4) {
		if (httpRequest.status == 200) {
			var strReturnXML;
			strReturnXML = httpRequest.responseText;
			// standard stuff goes here
	        } 
		else {
                	
		}
	}
}


function getFirstTagInnerContent (strReturnXML, strTag)  {
	var strInnerXML, pos1, pos2;
	pos1 = strReturnXML.indexOf("<" + strTag + ">");
	pos2 = strReturnXML.indexOf("</" + strTag + ">");
	if (pos1 > -1 && pos2 > -1)  {
		// move pos1 to end of opening tag declaration
		pos1 = pos1 + strTag.length + 2;
		strInnerXML = strReturnXML.substring(pos1, pos2);
	}
	else strInnerXML = "0";
	return strInnerXML;
}


function getInnerTagContent(strReturnXML, strTag) {
var strIndex;
if (arguments[2]) strIndex=arguments[2];
else strIndex = 1

  var re = new RegExp("(<"+strTag+"(.|\n)*?>)(.*?)(</"+strTag+">)");
//(<body(.|\n)*?>)(.*?)(</body>)
  var m = re.exec(strReturnXML);
  if (m == null) {
    //alert("No match");
  } else {
    /*
    var s = "Match at position " + m.index + ":\n";
    for (i = 0; i < m.length; i++) {
      s = s + m[i] + "\n";
    }
    alert(s);
    */

	return m[strIndex];

  }
}


function getFirstTagOuterContent (strReturnXML, strTag)  {
	var strInnerXML, pos1, pos2;
	pos1 = strReturnXML.indexOf("<" + strTag + ">");
	pos2 = strReturnXML.indexOf("</" + strTag + ">");
	if (pos1 > -1 && pos2 > -1)  {
		// move pos1 to end of opening tag declaration
		pos2 = pos2 + strTag.length + 3;
		strInnerXML = strReturnXML.substring(pos1, pos2);
	}
	else strInnerXML = "0";
	return strInnerXML;
}

function compareOptionText(record1,record2){
var value1 = record1;
var value2 = record2;
if (value1 > value2) return(1);
if (value1 < value2) return(-1);
return(0);
}


function populateSelectBox(selBox, strReturnXML, type)  {

	var xmlDoc
	if (document.implementation && document.implementation.createDocument)
	{
		xmlDoc = document.implementation.createDocument("", "", null);
		xmlDoc.async="false";
		var parser = new DOMParser();
		var xmlDoc = parser.parseFromString(getFirstTagOuterContent(strReturnXML,"root"), "text/xml");
		/*
		xmlDoc.load(getFirstTagOuterContent(strReturnXML,"root"));
		xmlDoc.xml(getFirstTagOuterContent(strReturnXML,"root"));
		xmlDoc.innerXml(getFirstTagOuterContent(strReturnXML,"root"));
		xmlDoc.outnerXml(getFirstTagOuterContent(strReturnXML,"root"));
		*/
	}
	else if (window.ActiveXObject)
	{
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(getFirstTagOuterContent(strReturnXML,"root"));
 	}

	//var selBox1.options[0] = new Option("Any", "");
	var xmlParent = xmlDoc.getElementsByTagName(type);
	var x = xmlParent[0].getElementsByTagName("Name");
     selBox.options[0] = new Option("Any", "");
	 
	for(var i=0;i<x.length;i++){
		if (document.implementation && document.implementation.createDocument)
		{
			selBox.options[i+1] = new Option(x[i].firstChild.nodeValue, x[i].firstChild.nodeValue);
			
		}
		else
		{
			selBox.options[i+1] = new Option(x[i].text, x[i].text); // new Option(x[i].innerXML, x[i].innerXML);
		}
	}
	var copyoption = new Array();
	for (var i=0;i<selBox.options.length;i++)
	copyoption[i] = new Array(selBox[i].value,selBox[i].text);
	
	copyoption.sort(compareOptionText);
	
	for (var i=selBox.options.length-1;i>-1;i--)
	selBox.options[i] = null;
	
	for (var i=0;i<copyoption.length;i++)
	  selBox.options[i] = new Option(copyoption[i][1],copyoption[i][0]);
	
	
}

var monthName=new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");

function populateMonthYearBox(monthyearBox)  {

	var today = new Date();
	var strMonth, strYear, j, strName, strText;

	intMonth = today.getMonth();
		intYear = today.getFullYear();
		monthyearBox.options[0] = new Option("Any", "");
		for (j = 1; j < 18; j++)  {
			strMonth = monthName[intMonth];
			strName = intYear + "-" + zeroPrefix(intMonth+1) + "-01";
			strText = strMonth + " " + intYear;
			monthyearBox.options[j] = new Option(strText, strName);
			intMonth++;
			if (intMonth == 12)  {
				intMonth = 0;
				intYear++;
		}
	}
}
    
function configTypeDateBoxes(thisbox)  {
	var selval;
	selval=thisbox.selectedIndex;
	if (selval > 0)  {
		document.getElementById("holiday-type").disabled = true;
		document.getElementById("holiday-travel-month").disabled = true;
		eraseCookie('holiday-type');
	} 
	else  {
		document.getElementById("holiday-type").disabled = false;
		document.getElementById("holiday-travel-month").disabled = false;
	} 
}

function configEventBoxes(thisbox)  {
	var selval;
	selval=thisbox.selectedIndex;
	if (selval > 0)  {
		document.getElementById("holiday-event").disabled = true;
		eraseCookie('holiday-event');
		if (thisbox.value =='Self Drive ')
		{
		//document.getElementById("postcode-distance").disabled= true;
		document.getElementById("postcode-distance").options[0].value='';
		}
		else document.getElementById("postcode-distance").options[0].value='30';
		
	} 
	else  {
		document.getElementById("holiday-event").disabled = false;
		} 
}

function SetTypeDateBoxes()
     {
    var qs1 = new Querystring();
	var EventType = readCookie('holiday-event');
	var HolidayType = readCookie('holiday-type');
	if (EventType)
	{

	document.getElementById("holiday-type").disabled = true;
	document.getElementById("holiday-travel-month").disabled = true;
	}
	else  {
		document.getElementById("holiday-type").disabled = false;
		document.getElementById("holiday-travel-month").disabled = false;
		if (HolidayType)document.getElementById("holiday-event").disabled = true;
     	}
	} 
	
     
function zeroPrefix(thing)  {
	var newthing = "" + thing;
	if (newthing.length < 2)  {
		newthing = "0" + newthing;
	} 
	return newthing;
}


var qs;
    
function setQuickSearchValues()  {
	qs = new Querystring();

	setSelectValueIfExists("holiday-type",readCookie('holiday-type'));
	setSelectValueIfExists("holiday-event",readCookie('holiday-event'));
	setSelectDateIfExists("holiday-travel-month",readCookie('holiday-travel-month'));
	setTextboxValueIfExists("passengers",readCookie('Passengers'));

	//setTextboxValueIfExists("template-postcode",'postcode');
	setTextboxValueIfExists("template-postcode",readCookie('postcode'));
	setTextboxValueIfExists("postcode-distance",readCookie('postcode-distance'));
}

function setTextboxValueIfExists(elementid,elementvalue)  {
	if (!elementvalue) elementvalue = qs.get(elementid);
	var element = document.getElementById(elementid);
	if(element && elementvalue)	
	{
	element.value = elementvalue;
	if (elementid != 'postcode-distance')element.style.background = '#FFFF99';
	}
	
}

function setSelectValueIfExists(elementid,elementvalue)  {
		if (!elementvalue) elementvalue = qs.get(elementid);
	var element = document.getElementById(elementid);
	if(element && elementvalue){
		for (var i=0; i < element.length; i++) {
			if (element.options[i].value==elementvalue) {
				element.options[i].selected=true;
			}
		}
	}

	//if(element)element.selectedItem = elementvalue;
}
function setSelectDateIfExists(elementid,elementvalue)  {
	var element = document.getElementById(elementid);
	if (qs.get(elementid)== '')
	{
		element.options[0].selected=true;
	}
		else
		{
		if (!elementvalue) elementvalue = qs.get(elementid);
		if(element && elementvalue){
		for (var i=0; i < element.length; i++) {
			if (element.options[i].value==elementvalue) {
				element.options[i].selected=true;
			}
		}
	}
	}

	//if(element)element.selectedItem = elementvalue;
}

function Querystring(qs) { // optionally pass a querystring to parse
	this.params = new Object()
	this.get=Querystring_get
	
	if (qs == null)
		qs=location.search.substring(1,location.search.length)

	if (qs.length == 0) return

// Turn <plus> back to <space>
// See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
	qs = qs.replace(/\+/g, ' ')
	var args = qs.split('&') // parse out name/value pairs separated via &
	
// split out each name=value pair
	for (var i=0;i<args.length;i++) {
		var value;
		var pair = args[i].split('=')
		var name = unescape(pair[0])

		if (pair.length == 2)
			value = unescape(pair[1])
		else
			value = name
		
		this.params[name] = value
	}
}

function Querystring_get(key, default_) {
	// This silly looking line changes UNDEFINED to NULL
	if (default_ == null) default_ = null;
	
	var value=this.params[key]
	if (value==null) value=default_;
	
	return value
}

function setFields(theForm) {

	var seletedIndex = theForm.elements['tour-pickup'].selectedIndex;


	if (theForm.elements['tour-pickup'].options[seletedIndex].innerHTML.indexOf('UNAVAILABLE') > -1)
	{
		alert('Sorry this pickup is currently locked, please try again later.');
		return false;
	}

	if (theForm.elements['tour-pickup'].options[seletedIndex].innerHTML.indexOf('ON REQUEST') > -1)
	{
		alert('Sorry this pickup is currently locked, please try again later.');
		return false;
	}

	

	var tourInfo = theForm.elements['tour-pickup'].value.split("|");
	theForm.elements['ID'].value=tourInfo[1];

	return true;
}

function showResults(requestType,eventName) {

	var postcodeCookie = readCookie('postcode');
	var eventTypeQueryStringItem = requestType + '=' + eventName;
	if(postcodeCookie) {

		document.location.href='search-results.aspx?'+eventTypeQueryStringItem+'&passengers=2&postcode='+postcodeCookie+'&postcode-distance=30'+'&order=Nearest Departure Point';

	}
	else {
		
		//alert(eventTypeQueryStringItem);

		tb_show('Something', '/postcode-select.aspx?'+eventTypeQueryStringItem+'&TB_iframe=true&width=650&height=200&modal=true', null)

	}
}

function showResultsFlat(requestType,eventName) {

	var postcodeCookie = readCookie('postcode');
	var eventTypeQueryStringItem = requestType + '=' + eventName;
	if(postcodeCookie) {

		document.location.href='search-results.aspx?'+eventTypeQueryStringItem+'&passengers=2&postcode='+postcodeCookie+'&postcode-distance=30'+'&order=Nearest Departure Point';

	}
	else {
		
		//alert(eventTypeQueryStringItem);

		document.location.href='/postcode-select-main.aspx?'+eventTypeQueryStringItem;

	}
}


function getQueryVariable(variable)
{
    var query = window.location.search.substring(1);
        var vars = query.split("&");
    for (var i=0;i<vars.length;i++)
    {
        var pair = vars[i].split("=");
        if (pair[0] == variable)
        {
        return pair[1];
        }
    }
} 
