/*
* show hide an html element
*/
function showHide(id, show) {
        el = document.getElementById(id);
        if (!el) {return; }
        if (show) {
                el.style.display = '';
        }else {
                el.style.display = 'none';
        }
}

/*
 collapse and expand a section
*/
function showHideOption(sectId, aEl){
   	var sectEl = document.getElementById(sectId);
	if (!sectEl){ return; }
	if (!aEl) {return; }
	if (aEl.innerHTML.indexOf("-") >=0){
		sectEl.style.display = "none";
		aEl.innerHTML = "&nbsp;+&nbsp;";
	}else{
		sectEl.style.display = "";
		aEl.innerHTML = "&nbsp;-&nbsp;";
	}
}

/*
 * Collapse expand an section 
 * 180108 changed by Sunny: Removed the dependency on the image
 */
function collapseExpand(sectId, imgEl, noteId){
  	var sectEl = document.getElementById(sectId);
  	var noteEl = document.getElementById(noteId);
	if (!sectEl || !noteEl) { return; }
    if (noteEl.innerHTML == "Don't provide more information") {
            showHide(sectId , false);
            if (imgEl) {
            	imgEl.src = "rsrc/expand.gif";
            	imgEl.alt = "Show";
            }
            noteEl.innerHTML = "Provide more information";
    } else {
            showHide(sectId , true);
            if (imgEl) {
            	imgEl.src = "rsrc/collapse.gif";
            	imgEl.alt = "Hide";
			}
            noteEl.innerHTML = "Don't provide more information";
    }
}


function getNode(which) {
	var node = null;
	// 060608 payment input layout changed
	if (which.name.indexOf('card_from') == 0) {
		node = document.getElementById('tdCardFrom');
	}
	if (node) return node;

	node = which;
	while (node && node.nodeName != 'TD') {
		node = node.parentNode;
	}
	if (!node) return null;
	while (node && node.previousSibling && node.previousSibling.nodeName != 'TD') {
		node = node.previousSibling;
	}
	if (!node) return null;
	node = node.previousSibling;
	if (node && node.nodeName == 'TD') {
		return node;
	}
	return null;
}

function mark(which) {
	var node = getNode(which);
	if (node) {
		node.style.color = 'red';
		return true;
	}
	return false;
}

function unmark(which) {
	var node = getNode(which);
	if (node) {
		node.style.color = 'black';
		return true;
	}
	return false;
}

// unmerk all inputs in the given form
function unmarkAllInputs(frm){
	// unmark all
    for (i=0; i<frm.elements.length; i++) {
		var nodeName = frm.elements[i].nodeName;
		if (nodeName == "INPUT" || nodeName == "SELECT") {
			unmark(frm.elements[i]);
		}
     }

}
// Validate credit card number
//
function isCCNo(cardno) {
  var ccno = cardno.replace(/[^0-9]/g, "");
  if (ccno.length < 12) {
    return false;
  }
  while (ccno.length < 20) {
    ccno = "0" + ccno;
  }
  var checksum = 0;
  for (i=0; i<20; i+=2) {
    checksum += (parseInt((ccno.charAt(i)) * 2) + parseInt(ccno.charAt(i+1)));
    if (parseInt(ccno.charAt(i)) * 2 > 9) {
      checksum -= 9;
    }
  }
  if (checksum % 10) {
    return false;
  }
  return true;
}

// Validate email address
//
function isEmail(address) {
  var parts = address.split('@');
  // must have exactly one '@'
  if (parts.length != 2) {
    return false;
  }
  // must have al least one '.'
  var domain = parts[1].split('.');
  if (domain.length < 2) {
    return false;
  }
  // the top level domain must be at least two characters long
  var tld = domain[domain.length-1];
  if (tld.length < 2) {
    return false;
  }
  return true;
}

// Password strength check
//
function isStrongPassword(password) {
	if (password.length < 6) {
		return false;
	}
	return true;
}

function ToggleIdDisplay(id)
{
	if(id == null)
		return(false);
		
	var element = document.getElementById(id);

	if(!element.className.match("\\bhidden\\b"))
		AddClass(element, "hidden");
	else
		RemoveClass(element, "hidden");

	return(true);
}

function AddClass(element, classname)
{
	if(typeof(element) == "string")				// If they've passed an element id
		element = document.getElementById(element);	// Turn it into a node reference
	
	if(!element || !classname)					// If we can't (or passed element is "null"), or class to add is null, bail out
		return(false);
		
	if(element.className)
		element.className = element.className + " " + classname;
	else
		element.className = classname;
	
	return(true);
}

function RemoveClass(element, classname)
{
	var pattern = new RegExp("\\b"+classname+"\\b", "i");
	
	if(typeof(element) == "string")				// If they've passed an element id
		element = document.getElementById(element);	// Turn it into a node reference
	
	if(!element || !element.className || !classname)		// If we can't (or passed element is "null"), or class to remove or element is null, bail out
		return(false);
	
	if(element.className.match(pattern))
	{
		element.className = element.className.replace(pattern, " ");
		return(true);
	}

	return(false);
}

function get_err_msg(){
	return "Sorry, there appears to be some required information missing.\n\n" + "- Please complete the section(s) marked in red.";
}
function getEventObject(evt) {
  return (evt) ? evt : ((window.event) ? event : null);
}


// allow only real value at input (Nnn)
// usage: <INPUT type="text" ... onkeypress="allowFloat()" ...>
function allowFloat(e){
  e = getEventObject(e);
  if(!isIE && e.keyCode) return true; // if mozilla browser and control key pressed then nothing to check
  var keyCode = 0;
  if(isIE) keyCode = e.keyCode;
  else keyCode = e.charCode;
  if ((keyCode < 45) || (keyCode > 57) || (keyCode == 47)) {
    if(isIE) e.keyCode = 0;
    else e.preventDefault();
  }
}

function format(expr,decplaces){
  //raise incoming value power of 10 times the number of decimal places; rounded
  var val = eval(expr);
  var sign = "";
  if(val < 0.00) sign = "-";
  val = Math.abs(val);
  var str = "" + Math.round(val * Math.pow(10,decplaces) );

  //pad small value strings with zeros to the left of the rounded number
  while(str.length <= decplaces){
    str = "0"+ str;
  }
  //establish location of decimat place
  var decpoint = str.length - decplaces;
  return sign + str.substring(0,decpoint) + "." + str.substring(decpoint,str.length);
}

/*
 * Calculate a passenger's age based on his/her birth date and the departure date
 * The birth date is dd/mm/yyyy and the departure date is yyyy-mm-dd.
 * 311207 added by Sunny
 */
function calculateAge(birthDate, depDate) {
  var age = 0;

  if (birthDate != "" && depDate != "" && birthDate.match(/^\d{2}\/\d{2}\/\d{4}$/) && depDate.match(/^\d{4}-\d{2}-\d{2}$/)) {
    // Parse dates
    var bDay = birthDate.substring(0, 2);
    var bMonth = birthDate.substring(3, 5);
    var bYear = birthDate.substring(6);
    birthDate = new Date(bYear, bMonth, bDay);
    var dYear = depDate.substring(0, 4);
    var dMonth = depDate.substring(5, 7);
    var dDay = depDate.substring(8);
    depDate = new Date(dYear, dMonth, dDay);
    age = depDate - birthDate;
    // Convert milliseconds to years (round down)
    age = Math.floor(age / 1000 / 60 / 60 / 24 / 365);
  }

  return age;
}

/*
 * Clear the date input 
 * 311207 added by Sunny
 */
function clearDate(input) {
  if (input.value == "DD/MM/YYYY") {
    input.value = "";
  }
}
