/*
Search box code for mano
*/
var enableSearch = false;
var monthId = 'selMonth';
var durId = 'selDur';
var destId = 'selDest';
var advSearch = 'advSearch';
var searchId ='searchButton';
var fromDate = 'fromDate';
var maxPriceId = 'maxPrice';
var toDate = 'toDate';
var advSearchHidden = 'idAdvSearch';
var searchContainer = 'searchBoxContainer';

/*Return values from search componenet*/
var rvMonth = null;
var rvDur = null;
var rvDest = null;
var rvFrom = null;
var rvTo = null;
var rvPrice = null;
var rvType = null;

function updateWelcomeSearchFields()
{
	enableSearch = true;
	if (!availMonth || !availDuration || !availDest)
		return;


	var mObj = document.getElementById('selMonth');
	var durObj = document.getElementById(durId);
	var destObj = document.getElementById(destId);
	var searchObj = document.getElementById(searchContainer);

	if (!searchObj || !mObj || !durObj || !destObj)
		return;

	//fill everyting
	var i = 0;

	var orgLength = mObj.options.length;
	for (i=0; i<availMonth.length; i++) {
		mObj.options[i + orgLength] = new Option(month_arr[availMonth[i]], availMonth[i]);
	}

	orgLength = destObj.options.length;
	var dstData = {};
	for (i=0; i<availDest.length; i++) {
		var s = destName[availDest[i]].split("-");
		if (s.length == 0)
			continue;
		
		s[0] = s[0].replace(/^\s+|\s+$/g,"");
		if (dstData[s[0]] == undefined || dstData[s[0]] == null)
			dstData[s[0]] = { id : [availDest[i]]};
		else
			dstData[s[0]].id[dstData[s[0]].id.length] = availDest[i];				
	}
	
	//add option to select box
	i=0;
	for (var k in dstData) {
		destObj.options[i + orgLength] = new Option(k, dstData[k].id.join(";"));
		i++;
	}
}
/*
function updateSearchFields()
{
	enableSearch = true;
	if (!availMonth || !availDuration || !availDest)
		return;


	var mObj = document.getElementById('selMonth');
	var durObj = document.getElementById(durId);
	var destObj = document.getElementById(destId);
	var searchObj = document.getElementById(searchContainer);

	if (!searchObj || !mObj || !durObj || !destObj)
		return;

	//fill everyting
	var i = 0;

	var orgLength = mObj.options.length;
	for (i=0; i<availMonth.length; i++) {
		mObj.options[i + orgLength] = new Option(month_arr[availMonth[i]], availMonth[i]);
		if (rvMonth && rvMonth == availMonth[i])
			mObj.selectedIndex = i + orgLength;
	}

	var orgLength = durObj.options.length;
	for (i=0; i<availDuration.length; i++) {
		durObj.options[i + orgLength] = new Option(availDuration[i] + ' ' + _srch_nights, availDuration[i]);
		if (rvDur && rvDur == availDuration[i])
			durObj.selectedIndex = i + orgLength;
	}
	var orgLength = destObj.options.length;
	for (i=0; i<availDest.length; i++) {
		destObj.options[i + orgLength] = new Option(destName[availDest[i]], availDest[i]);
		if (rvDest && rvDest == availDest[i])
			destObj.selectedIndex = i + orgLength;
	}

	if (rvPrice && rvPrice != '-1') {
		//this is the only item generated by php
		var pObj = document.getElementById(maxPriceId);
		if (pObj) {
			for (i=0; i<pObj.options.length; i++) {
				if (pObj.options[i].value == rvPrice) {
					pObj.selectedIndex = i;
					break;
				}
			}
		}
	}

	var obj = document.getElementById(fromDate);
	if (obj) {
		if (rvFrom)
			obj.value = rvFrom;
		else
			obj.value = _srch_from_date;
	}

	var obj = document.getElementById(toDate);
	if (obj) {
		if (rvTo)
			obj.value = rvTo;
		else
			obj.value = _srch_to_date;
	}

	searchObj.style.display = "block";		//show box only when done updating
}
*/

function updateSearchFields()
{
	enableSearch = true;
	if (!availMonth || !availDuration || !availDest)
		return;


	var mObj = document.getElementById('selMonth');
	var durObj = document.getElementById(durId);
	var destObj = document.getElementById(destId);
	var searchObj = document.getElementById(searchContainer);

	if (!searchObj || !mObj || !durObj || !destObj)
		return;

	//fill everyting
	var i = 0;

	updateWelcomeSearchFields();
	
	//restore month
	if (rvMonth && rvMonth != -1) {
		for (i=0; i<mObj.options.length; i++) {
			if (mObj.options[i].value == rvMonth) {
				mObj.selectedIndex = i;
				break;
			}
		}
	}
	
	//restore cruise type
	if (rvType && rvType != -1) {
		for (i=0; i<durObj.options.length; i++) {
			if (durObj.options[i].value == rvType) {
				durObj.selectedIndex = i;
				break;
			}
		}
	}
	
	//restore destination
	if (rvDest && rvDest != -1) {
		for (i=0; i<destObj.options.length; i++) {
			if (destObj.options[i].value == rvDest) {
				destObj.selectedIndex = i;
				break;
			}
		}
	}	

	//restore price
	if (rvPrice && rvPrice != '-1') {
		//this is the only item generated by php
		var pObj = document.getElementById(maxPriceId);
		if (pObj) {
			for (i=0; i<pObj.options.length; i++) {
				if (pObj.options[i].value == rvPrice) {
					pObj.selectedIndex = i;
					break;
				}
			}
		}
	}

	//restore from date
	var obj = document.getElementById(fromDate);
	if (obj) {
		if (rvFrom)
			obj.value = rvFrom;
		else
			obj.value = _srch_from_date;
	}

	//restore to date
	obj = document.getElementById(toDate);
	if (obj) {
		if (rvTo)
			obj.value = rvTo;
		else
			obj.value = _srch_to_date;
	}

	searchObj.style.display = "block";		//show box only when done updating
}

function toggleSearchType()
{
	if (!enableSearch)
		return;
	var obj = document.getElementById(advSearch);
	var objcruise = document.getElementById("advSearchcruise");
	var ref = document.getElementById(searchId);
	var advFlag = document.getElementById(advSearchHidden);

	if (!obj || !ref || !advFlag)
		return;

	if (obj.style.display == 'block') {
		obj.style.display = 'none'
		advFlag.value = 'false';
		ref.innerHTML = _advanceSearch;
		var obj = document.getElementById(fromDate);
		if (obj)
			obj.value = _srch_from_date;

		var obj = document.getElementById(toDate);
		if (obj)
			obj.value = _srch_to_date;
	}
	else {
		obj.style.display = 'block';
		ref.innerHTML = _normalSearch;
		advFlag.value = 'true';
	}
}

function toggleSearchTypeCruise()
{
	if (!enableSearch)
		return;
	var obj = document.getElementById("advSearchcruise");
	var ref = document.getElementById(searchId);
	var advFlag = document.getElementById(advSearchHidden);

	if (!obj || !ref || !advFlag)
		return;

	if (obj.style.display == 'block') {
		obj.style.display = 'none'
		advFlag.value = 'false';
		ref.innerHTML = _advanceSearch;
		var obj = document.getElementById(fromDate);
		if (obj)
			obj.value = _srch_from_date;

		var obj = document.getElementById(toDate);
		if (obj)
			obj.value = _srch_to_date;
	}
	else {
		obj.style.display = 'block';
		ref.innerHTML = _normalSearch;
		advFlag.value = 'true';
	}
}

addLoadEvent(updateSearchFields);




/**
Calendar
**/
var cal1 = null;
var cal2 = null;



function openCal1(day, month, year, obj_name, obj, target, className)
{
	if (cal2 != null && cal2.isOpen()) {
//		cal2.showCaption();
		cal2.destroyCalendar();
	}


	if (cal1 != null && cal1.isOpen())
		return;
	cal1 = new cCalendar(parseInt(day, 10) ,parseInt(month, 10), parseInt(year, 10), obj_name, obj, target, className);
	cal1.setCaption(_start_date);
	cal1.buildCalendar();
}


function openCal2(day, month, year, obj_name, obj, target, className)
{
	if (cal1 != null && cal1.isOpen()) {
	//	cal1.showCaption();
		cal1.destroyCalendar();
	}

	if (cal2 != null && cal2.isOpen())
		return;
	cal2 = new cCalendar(parseInt(day, 10) ,parseInt(month, 10), parseInt(year, 10), obj_name, obj, target, className);
	cal2.setCaption(_end_date);
	cal2.buildCalendar();
}



function cCalendar(_day, _month, _year, _obj_name, _call_obj, _target, _className) {
	var day = 1;
	var month = _month;
	var year = _year;
	var oday = _day;
	var omonth = _month;
	var oyear = _year;
	var cnt =  _call_obj.parentNode;		//will hold the html data for the conatiner
	var target = _target;
	var objName = _obj_name;
	var opened = false;
	var call_obj = obj;
	var className = _className;
	var caption = "";
	var hSelects = new Array();				//will hold all selects, needed to be remove for IE6
	//IE6 detection from http://www.thefutureoftheweb.com/blog/detect-ie6-in-javascript
	var IE6=(navigator.userAgent.toLowerCase().indexOf('msie 6') != -1) && (navigator.userAgent.toLowerCase().indexOf('msie 7') == -1);

	var obj = null;
	obj = document.createElement('div');
	obj.className = className;
	cnt.appendChild(obj);

	function isLeap()
	{
		var is_leap;
		var year4 = year/4;
		var year100 = year/100;
		var year400 = year/400;

		if (Math.round(year4) != year4)
			return false;		//cant be leap

		if (Math.round(year100) != year100)
			return true;

		if (Math.round(year400) == year400)
			return true;

		return false;
	}

	function totalDays()
	{
		if (month == 2)	//february on leap year or not
			return (isLeap(year)) ? 29 : 28;
		if (month == 4 || month == 6 || month == 9 || month == 11)
			return 30;

		return 31;
	}


	//Taken from: http://www.sislands.com/coin70/week3/dayofwk.htm
	function dayOfWeek() {
	    var a = Math.floor((14 - month) / 12);
	    var y = year - a;
	    var m = month + 12 * a - 2;
	    var d = (day + y + Math.floor(y / 4) - Math.floor(y / 100) +
	             Math.floor(y / 400) + Math.floor((31 * m) / 12))  % 7;
	    return d;
	}

	this.buildCalendar = function()
	{
		var positions = findPos(cnt);

		if (!obj)
			return;

		obj.style.display = "none";

		var days = totalDays();
		var myDate = new Date(year,month-1,1);

		var first_day = myDate.getDay() + 1;

		var temp = document.createElement('a');
		temp.className = 'closeCal';
		temp.setAttribute('href', "javascript:"+objName+".closeCalendar()");
		temp.innerHTML = '&nbsp;';
		obj.appendChild(temp);

		temp = document.createElement('span');
		temp.className = 'closeCalLine';
		obj.appendChild(temp);

		temp = document.createElement('a');
		temp.className = 'next_box';
		temp.setAttribute('href', "javascript:"+objName+".changeMonth('"+(parseInt(month, 10) + 1)+"')");
		temp.innerHTML = '&nbsp;';
		obj.appendChild(temp);

		temp = document.createElement('span');
		temp.className = 'desc_box';
		temp.innerHTML = month_arr[month] + ' ' + year;
		obj.appendChild(temp);

		temp = document.createElement('a');
		temp.className = 'prev_box';
		temp.setAttribute('href', "javascript:"+objName+".changeMonth('"+(parseInt(month, 10) - 1)+"')");
		temp.innerHTML = '&nbsp;';
		obj.appendChild(temp);

		var i, total_elements = 0;
		for (i=1; i<=7; i++ ) {
			temp = document.createElement('span');
			temp.className = 'cal_item_day';
			temp.innerHTML = days_arr[i];
			obj.appendChild(temp);
		}
		//pad with nulls till first day
		for (i=1; i<first_day; i++ ) {
			temp = document.createElement('span');
			temp.className = 'cal_item_empty';
			obj.appendChild(temp);
			total_elements ++;
		}

		i=1;
		//past?
		if ((month <= omonth && year == oyear) || year < oyear) {
			if (month == omonth && year == oyear) {
				var t = oday;
				var today = true;
			}
			else {
				var t = days;
				var today = false;
			}
			while (i<=t) {
				temp = document.createElement('span');
				temp.className = 'cal_item';
				temp.setAttribute('href', "javascript:"+objName+".selectDay('"+i+"')");
				temp.innerHTML = i;
				obj.appendChild(temp);
				total_elements ++;
				i++;
			}

			if (today) {
				temp = document.createElement('a');
				temp.className = 'cal_item_today';
				temp.setAttribute('href', "javascript:"+objName+".selectDay('"+i+"')");
				temp.innerHTML = i;
				obj.appendChild(temp);
				total_elements ++;
				i++;
			}

		}
		for (; i<=days; i++ ) {
			temp = document.createElement('a');
			temp.className = 'cal_item';
			temp.setAttribute('href', "javascript:"+objName+".selectDay('"+i+"')");
			temp.innerHTML = i;
			obj.appendChild(temp);
			total_elements ++;
		}

		if (total_elements%7) {
			for (i=0; i<7-total_elements%7; i++) {
				temp = document.createElement('span');
				temp.className = 'cal_item_empty_bottom';
				obj.appendChild(temp);
			}
		}
		opened = true;
		hideSelects();
		obj.style.position = "absolute";
		obj.style.left = positions[0] + 10 + "px";
		obj.style.top = positions[1] + 10 + "px";
		obj.style.display = "block";
	}

	this.selectDay = function(day)
	{
		var uobj = document.getElementById(target);
		if (!uobj)
			return;

		uobj.value = day + "." + month + "." + year;
		this.destroyCalendar()
	}

	this.destroyCalendar = function()
	{
		showSelects();
		if (!obj) {
			opened = false;
			return;
		}
		obj.style.display = "none";
		for (var i=obj.childNodes.length-1; i>=0; i--)
			obj.removeChild(obj.childNodes[i]);
		opened = false;
	}

	this.closeCalendar = function()
	{
		showSelects();
		obj.style.display = "none";
		for (var i=obj.childNodes.length-1; i>=0; i--)
			obj.removeChild(obj.childNodes[i]);
		cnt.removeChild(obj);
		obj = null;
		opened = false;

		var uobj = document.getElementById(target);
		if (!uobj)
			return;
		uobj.value = caption;

		this.destroyCalendar()
	}

	this.setCaption = function(txt)
	{
		caption = txt;
	}

	this.showCaption = function()
	{
		var uobj = document.getElementById(target);
		if (!uobj)
			return;
		uobj.value = caption;
	}



	this.changeYear = function(_year)
	{
		year = _year;
		this.destroyCalendar();
		this.buildCalendar(cnt, target);
	}

	this.changeMonth = function(_month)
	{
		month = _month;
		if (month < 1) {
			month = 12
			year--;
		}

		if (month > 12) {
			month = 1;
			year++;
		}
		this.destroyCalendar();
		this.buildCalendar(cnt, target);
	}

	this.isOpen = function()
	{
		return opened;
	}

	function findPos(obj)
	{
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			do {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			} while (obj = obj.offsetParent);
		}

		return [curleft,curtop];
	}

	function hideSelects()
	{
		if (!IE6)
			return;
		var tSel = document.getElementsByTagName('select');

		hSelects = new Array();
		var i=0;
		var j=0;
		for (i=0; i<tSel.length; i++) {
			if (tSel[i].style.visibility != 'hidden' && tSel[i].style.display != 'none') {
				hSelects[j++] = tSel[i];
				tSel[i].style.visibility = 'hidden';
			}
		}
	}

	function showSelects()
	{
		if (!IE6)
			return;
		var i=0;
		for (i=0; i<hSelects.length; i++)
			hSelects[i].style.visibility = 'visible';
	}

}

