var ajaxDisabled = 1;
var errMsg = "";
var ajaxSeqNum;
var freeKid = 0;
var freeKidWarningShowed = 0;
var planCache = {};
var STUDENT_AGE_LIMIT_MSG = "A student must be over the age of 18 years and under 21 years.";


function timeoutHandler() {
    location.replace("/info/product_selector/index.jsp");
}

/**
 * Loads the plan data for the given plan. Maintains a cache of known plan
 * descriptions to reduce latency.
 */
function getUrl(plan) {
    if (planCache[plan[0]] != undefined) {
        document.getElementById("productinfo").innerHTML = planCache[plan[0]];
        return;
    }

    var xmlHttp = GetXmlHttpObject();
    if (xmlHttp==null) {
        alert ("Your browser does not support AJAX!");
        return;
    }

    var ajax_url="/info/AjaxServlet?action=getProductInformation"
        + "&key=" + plan[0]
        + "&Seq="+plan[1];

    xmlHttp.onreadystatechange= function() {
        if (xmlHttp.readyState==4) {
            var result = xmlHttp.responseText;
            result = result.split("<!--AjaxSeq:" );

            var seq= result[1];
            seq = seq.substring(0,seq.indexOf('-->') );
            planCache[plan[0]] = result[0];
            //check the sequence to avoid the messup because of
            // the async communication
            if (seq==ajaxSeqNum) {
                document.getElementById("productinfo").innerHTML=result[0];

            }
        }
    };

    xmlHttp.open("GET",ajax_url,true);
    xmlHttp.send(null);
}


function getQuote(plan) {
    var xmlHttpQuote = GetXmlHttpObject();

    if (xmlHttpQuote==null) {
        alert ("Your browser does not support AJAX!");
        return;
    }

    var ajax_url = "/info/AjaxServlet?action=getQuote"
        + "&productCode=" + plan[2]
        + "&subProductCode=" + plan[3]
        + "&productFamily=" + plan[4]
        + "&membershipType=G"
        + "&age=" + plan[5]
        + "&isStudent=" + plan[6]
        + "&Seq=" + plan[1]
        + "&dob=" + plan[8];


    xmlHttpQuote.onreadystatechange = function() {
        stateChangedQuote(xmlHttpQuote,plan);
    };
    
	xmlHttpQuote.open("GET",ajax_url,true);

    xmlHttpQuote.send(null);

}

function stateChangedQuote(xmlHttpQuote,plan) {
    if (xmlHttpQuote.readyState==4) {

		var quote = xmlHttpQuote.responseText.split("/");
        //check if it is a plan that has free kids
		var zeroPriceAllowed = false;
		if(4 == plan[2] && 7 == plan[3] && 19 > plan[5]) { //0 price kids in this plan for June
		    // allowed for month of June for this plan
			var today = new Date();
	        var freeKidsFromDate = new Date(2010,4,2,0,0,0,0); //Start on the 2nd of May (not the 1st, biz decision).
	        var freeKidsUntilDate = new Date(2010,5,9,0,0,0,0); //June is month 5.  Go until the end of day 1 approx start of day 2.
			if (freeKidsFromDate <= today && freeKidsUntilDate > today) {
		        zeroPriceAllowed = true;
			}
		}
		if ((zeroPriceAllowed || quote[0]>0) && quote[1]==ajaxSeqNum) {
            var price = quote[0];
            if(quote[2] == 'freekid' || zeroPriceAllowed){
                freeKid = 1;
                var relation = document.getElementById("relation").value;
                if( relation=='Daughter' || relation=='Son'){
                    price = 0.00;
                }
            } else {
                freeKid = 0;
                if (quote[2] == '4thkid') {
                    if (!freeKidWarningShowed) {
						/*
                        var pos = objectPosition(document.getElementById("dayOfBirth"));
                        document.getElementById("freeKid").style.left = pos.left + 90;
                        document.getElementById("freeKid").style.top = pos.top;
                        MM_showHideLayers('freeKid','','show');
                        freeKidWarningShowed = 1;
                        */
                        $("#freeKidDialog").dialog('open');
                    }
                }
            }

            setPriceForPerson(price);

            if (saveEnabled == 1) {
                document.getElementById("addButton").disabled = false;
                document.getElementById("formAddtoBasket").style.display = 'inline';
            }
            document.getElementById("CurrentPrice").value=quote[0];


			var gender		= $('#gender option:selected').text();
			var yob			= plan[8].substring(6,10);
			var description = $('#HIsFamily').getValue();
			var cover		= $('#HospitalType').getValue();
			var room		= $('#HRoom').getValue();
			var level		= $('#HDtDLevel').getValue();

			if (description=="0")
			{
				description = $("label[for='singleChoice']").text();
			} else{
				description = $("label[for='familiChoice']").text();
			}

			if (cover=="0"){cover="None";}
			if (cover=="1"){cover="Public";}
			if (cover=="2"){cover="Private";}
			if (cover=="3"){cover="Hi tech";}

			if (room=="2")
			{
				room = $("label[for='SemiRoom']").text();
			} else{
				room = $("label[for='PrivateRoom']").text();
			}

			if (level=="0"){level="None";}
			if (level=="1"){level="Level 1";}
			if (level=="2"){level="Level 2";}

			var price	= $('#CurrentPrice').getValue();

			pageTracker._trackPageview('/virtual/planfinder/app/gender-'+gender+'/yob-'+yob+'/description-'+description+'/cover-'+cover+'/room-'+room+'/level-'+level+'/price-'+price);


        }
    }
}

/**
 * Displays the given price to the user. If the given price is
 * a number, then the euro sign is prepended. If it is not a
 * number it will be displayed as-is. The latter behaviour is
 * used for the "Loading..." string.
 */
function setPriceForPerson(price) {
    var inlineDisplayText = '';
    if (Number(price) || price == 0) {
		var priceEqualsZero = (price == 0);
        price = "&euro;" + price;
        // hardcoded bit to be removed/reverted/commented out after 01/06/2010
	    var coverLevelCode = ''+ document.getElementById("CurrentProductCode").value;//make it a char, not a number
	    coverLevelCode += document.getElementById("CurrentSubProdCode").value;
        //use value of 0 as a determinant for getting a kid's quote => we know to display the discount text / popup
		//alert('coverLevelCode is: ' + coverLevelCode + ', priceEqualsZero: ' + priceEqualsZero);
		if (('47' != coverLevelCode) || priceEqualsZero) {
			var discTextArray = getDiscountLinkText(coverLevelCode);
			var discText = discTextArray[0];
			var discDivIdLeaf = discTextArray[1];
			if (discText.length > 0 && discDivIdLeaf.length > 0) {
				inlineDisplayText = discText + "<br />";
				discDivId = '#discount' + discDivIdLeaf;
				//open the dialog if there is a relevant discount, in the bottom left position
				$(discDivId).dialog("option", "position", ['left', 'bottom']);
				$(discDivId).dialog('open');
			}
	    } //end of hardcoded if
    }
    //alert(inlineDisplayText);
    document.getElementById("productquote").innerHTML = ""
	    + "<div style=\"padding: 0 0 0 0; margin: 0 0 0 0;\">"
		+ inlineDisplayText
        + "<div style=\"font-size: 120%;\">"
        + "<strong>Price for this person:<br />"
        + "<div style=\"font-size: 200%;\">" + price + "</div>"
        + "</strong></div></div>";
    var requestCallbackRow = document.getElementById("requestCallBackRow");
    if (requestCallbackRow) {
        requestCallbackRow.style.display = "block";
    }
}

function checkFreeKid(field){
    if (freeKid ==1){
        if (field.value=='Daughter' || field.value=='Son') {
            setPriceForPerson("0.00");
        } else {
            setPriceForPerson(document.getElementById("CurrentPrice").value);
        }
    }
}

function saveProduct() {
    if (ajaxDisabled==1) return; //disable Ajax after save product submitted.
    var xmlHttpSave=GetXmlHttpObject();
    if (xmlHttpSave==null) {
        alert ("Your browser does not support AJAX!");
        return;
    }

    var ajax_url="/info/AjaxServlet?action=saveProduct"	;

    ajax_url +=	"&HIsFamily=" + document.getElementById("HIsFamily").value
        + "&HospitalType="+ document.getElementById("HospitalType").value
        + "&HRoom="+ document.getElementById("HRoom").value
        + "&HDtDLevel="+ document.getElementById("HDtDLevel").value
        + "&PTitle="+ document.getElementById("PTitle").value
        + "&PFirstName="+ document.getElementById("PFirstName").value
        + "&PSurname="+ document.getElementById("PSurname").value
        + "&PGender="+ document.getElementById("PGender").value
        + "&PPpsNumber="+ document.getElementById("PPpsNumber").value
        + "&PRelation="+ document.getElementById("PRelation").value
        + "&PDateBirth="+ document.getElementById("PDateBirth").value
        + "&PStudent="+ document.getElementById("PStudent").value
        + "&PCollege="+ document.getElementById("PCollege").value
        + "&CurrentKey="+ document.getElementById("CurrentKey").value
        + "&CurrentPrice="+ document.getElementById("CurrentPrice").value
        + "&CurrentProductName="+ document.getElementById("CurrentProductName").value
        + "&FormTimeStamp="+ document.getElementById("FormTimeStamp").value
		+ "&CurrentProductCode="+ document.getElementById("CurrentProductCode").value
		+ "&CurrentSubProdCode="+ document.getElementById("CurrentSubProdCode").value;

    xmlHttpSave.onreadystatechange = function() {
        stateChangedForSave(xmlHttpSave);
    };
    xmlHttpSave.open("GET",ajax_url,true);
    xmlHttpSave.send(null);

    if(sessionBegin){
        clearTimeout(alarm);
        alarm = setTimeout ("timeoutHandler()",3000); //Wait 3 seconds for return
    }
}

function stateChangedForSave(xmlHttpSave) {
    if (xmlHttpSave.readyState==4) {
        var result=xmlHttpSave.responseText;
        result = result.split("<!--Separator>");
        document.getElementById("savedModelDiv").innerHTML=result[0];
        document.getElementById("buyonlineButton").style.display='inline';
        quoteMessage = result[1];
        document.getElementById("emailbutton").className = "button_receive_on";
        document.getElementById("emailbutton").disabled=false;
        document.getElementById("buybutton").className = "button_online_on";
        document.getElementById("buybutton").disabled=false;
        document.getElementById("clearbutton").className = "button_clear_on";
        document.getElementById("clearbutton").disabled=false;
        clearTimeout(alarm);
        alarm = setTimeout ("timeoutHandler()",timeoutValue*1000+15000);
    }
}

function checkBox(field) {
    if (field.checked) {
        document.getElementById("P"+field.name).value=1;
        document.getElementById("college").disabled=false;
    } else {
        document.getElementById("P"+field.name).value=0;
        document.getElementById("college").disabled=true;
        document.getElementById("college").value="";
    }
    loadProduct();
}

function checkRadio(field) {
    document.getElementById("H"+field.name).value  = field.value;
    loadProduct();
}




function GetXmlHttpObject() {
    try {
        // Firefox, Opera 8.0+, Safari
        return new XMLHttpRequest();
    }
    catch (e) {
        // Internet Explorer
        try {
            return new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            return new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    return null;
}

function checkAction() {
    return document.getElementById("action").value != "";
}


function checkPersonInfo(){
    //if it is single type, max 2 people allows. to be added after confirmation

    var err = 0;
    var errMessage = "Please complete the personal information.";

    var title = document.getElementById("title").value;
    if( title ==-1 ){
        if(err ==0){
            err++;
            document.getElementById("title").focus();
        }
    }else{
        document.getElementById("titleCaption").className = "smalltext";
        document.getElementById("PTitle").value = title;
    }

    var firstName = document.getElementById("firstName").value;
    if( /\w+/.test(firstName)){
        document.getElementById("firstNameCaption").className = "smalltext";
        document.getElementById("PFirstName").value = firstName;
    }else{
        if(err ==0){
            err++;
            document.getElementById("firstName").focus();
        }
    }

    var surname = document.getElementById("surname").value;
    if( /\w+/.test(surname)){
        document.getElementById("PSurname").value = surname;
    }else{
        if(err ==0){
            err++;
            document.getElementById("surname").focus();
        }
    }

    if(validDate(document.getElementById("dayOfBirth"))){
        document.getElementById("PDateBirth").value = document.getElementById("dayOfBirth").value;
    } else {
        if(err ==0) {
            err++;
            errMessage = "Invalid date of birth.";
            document.getElementById("dayOfBirth").focus();
            document.getElementById("dayOfBirth").select();
        }
    }

    //Check relation if not policy holder
    if(!isPolicyHolder){

		var ppsno = document.getElementById("ppsno").value;


		if(ppsno.length > 0 ) {

			if(validPPSNumber(ppsno)){
				document.getElementById("PPpsNumber").value = ppsno;
				//alert("PPS Number is Valid");
			} else {
				if(err ==0) {
					err++;
					errMessage = "Invalid PPS Number.";
					document.getElementById("ppsno").focus();
				}
			}
		}

        var relation = document.getElementById("relation").value;
        if( relation != -1){
            document.getElementById("PRelation").value = document.getElementById("relation").value;
        }else{
            //alert(relation);
            if(err ==0){
                err++;
                document.getElementById("relation").focus();
            }
        }

        var studentStatus = document.getElementById("PStudent").value;
        var age = getAge(document.getElementById("dayOfBirth").value);

        if(studentStatus == 1){

            if (age>20 || age<18){
                if(err ==0){
                    err++; 
                    errMessage = STUDENT_AGE_LIMIT_MSG;
                    /*document.getElementById("dayOfBirth").focus();
                    document.getElementById("dayOfBirth").select();*/
                }
            }
            var collegeName = document.getElementById("college").value;
            if( /\w+/.test(collegeName)){
                document.getElementById("PCollege").value = collegeName;
            }else{
                if(err ==0){
                    err++;
                    document.getElementById("college").focus();
                }
            }
        }

        if(age<18){
            var curKey = document.getElementById("CurrentKey").value;
            if( (curKey=="HS_Gold" || curKey=="HS_Silver") && hasHealthSteps==0){
                if(err ==0){
                    err++;
                    errMessage = "Child cannot have Healthsteps if no adults have the same plan.";
                    /*document.getElementById("dayOfBirth").focus();
                    document.getElementById("dayOfBirth").select();*/
                }
            }
        }
    }
    document.getElementById("PGender").value = document.getElementById("gender").value;

    if(err>0){
        showErrAlertOrDialog(errMessage);
        //return false;
    }else{
        document.getElementById("addButton").disabled = true;
        saveEnabled = 0;
        saveProduct();
        sliderHospital.setDisabled(true);
        sliderDayToDay.setDisabled(true);
        disableInput(document.getElementById("selectorInput"));
        ajaxDisabled = 1;
    }
    return false;
}


function validEmailAddress(obj) {
    var addr=obj.value;
    if (/^(.+)@(.+)\.(.+)$/.test(addr)) {
        document.getElementById("sendEmailButton").disabled = false;
    }else{
        document.getElementById("sendEmailButton").disabled = true;
    }
}


function sendEmail() {
    var email =  document.getElementById("emailaddress").value;
    if (emailCheck(email)) {
        getUrlMail();
    }
}

function getUrlMail() {
    var xmlHttpMail=GetXmlHttpObject();
    if (xmlHttpMail==null) {
        alert ("Your browser does not support AJAX!");
        return;
    }

    var ajax_url="/info/AjaxServlet";
    xmlHttpMail.onreadystatechange = function() {};

    xmlHttpMail.open("POST",ajax_url,true);

    var parameters = "recipient=" + encodeURI(document.getElementById("emailaddress").value)
        + "&action=" + encodeURI("sendAjaxEmail")
        + "&fromEmailAddress=" + encodeURI("info@vhi.ie")
        + "&subject=" + encodeURI("Your Quick Quote from Vhi Healthcare")
        + "&msg="+ encodeURI(quoteMessage);

    xmlHttpMail.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlHttpMail.setRequestHeader("Content-length", parameters.length);
    xmlHttpMail.setRequestHeader("Connection", "close");
    xmlHttpMail.send(parameters);
}






function validAlpha(obj) {
  var chr = obj.value;
  if (/[^\w\'\s]/g.test(chr)) {
      obj.value=obj.value.replace(/[^\w\'\s]/g,'');
  }
  if (/\'\'/g.test(chr)) {
      obj.value=obj.value.replace(/\'\'/g,'\'');
  }
}


function validPPSNumber(obj) {

	len = obj.length;
	if(len == 8) {
		if (isValidNumber(obj.substring(0,7))) {
			var chckdigit = "WABCDEFGHIJKLMNOPQRSTUV";
			var indx = (chckdigit.lastIndexOf(obj.substring(7,8).toUpperCase()));
			if (indx < 0 ) {
				return false;
			} else {
				var factor = 2;
				var sum = 0;
				var mod = 0;

				numeric_len = len-1;
				while ( numeric_len > 0 )
				{
					sum    = sum + (obj.substring(numeric_len-1,numeric_len) * factor);
					numeric_len  = numeric_len - 1;
					factor = factor +1;
				}
				mod = sum % 23 ;								
				if ( (chckdigit.substring(mod,mod+1))== ((obj.substring(7,8))) ){
					return true;
				} else {
				return false;
				}
			}

		} else {
			return false;
		}

	} else {
		if(len == 9) {
			var temp = obj.substring(8,9);
			//alert(temp);

				if('W' == temp.toUpperCase() || 'T' == temp.toUpperCase() || 'X' == temp.toUpperCase()) {
					//alert("WWWWWWW");
					obj = obj.substring(0,8);
					//alert(obj);

				// start validation
					if (isValidNumber(obj.substring(0,7))) {
						//alert("WWWWWWW11111");
						var chckdigit = "WABCDEFGHIJKLMNOPQRSTUV";
						var indx = (chckdigit.lastIndexOf(obj.substring(7,8).toUpperCase()));
						//alert(indx);
						if (indx < 0 ) {
							return false;
						} else {
							var factor = 2;
							var sum = 0;
							var mod = 0;

							numeric_len = len-2;
							while ( numeric_len > 0 )
							{
								sum    = sum + (obj.substring(numeric_len-1,numeric_len) * factor);
								numeric_len  = numeric_len - 1;
								factor = factor +1;
							}
							mod = sum % 23 ;								
							if ( (chckdigit.substring(mod,mod+1))== ((obj.substring(7,8))) ){
								return true;
							} else {
							return false;
							}
						}

					} else {
						//alert("WWWWWWW55555");
						return false;
					}

				// end validation
				}

		} else {
			return false;
		}		
	}
}

function isValidNumber(obj) {
	//alert(obj);
	
	for (var i=0; i < obj.length; i++){

		if (obj.charAt(i) >= '0' && obj.charAt(i) <= '9'){
			continue;
		} else {
			return false;
		}
	}

	return true;
}


function validDate(obj) {


  var date=obj.value;
  var test1 = /^\d{1,2}\/?\d{1,2}\/\d{4}$/.test(date);
  date=date.split('/');

  var d = new Date(date[2],date[1]-1,date[0]);
  var test2=(1*date[0]==d.getDate() && 1*date[1]==(d.getMonth()+1) && 1*date[2]==d.getFullYear());
 
  if (test1 && test2) {

	  var age = calage( d.getDate(),(d.getMonth()+1) , d.getFullYear()) ;

	  if(isPolicyHolder) {

          if (age<18){
              errMsg="The first named person, or policyholder, must be aged over 18 years.";
              return false;
          }
      }else{

        var studentStatus = document.getElementById("PStudent").value;

        if(studentStatus == 1){
            if (age>20 || age<18){
                    errMsg = STUDENT_AGE_LIMIT_MSG;
					return false;
            }
		}
	  }


      return true;
  } else {

      if (date=="") {
          errMsg="Please complete the personal details.";
      } else {
          errMsg="The date is not valid.";
      }
      return false;
  }
}

function getAge(str) {
    var date = str.split('/');
    var d = new Date(date[2],date[1]-1,date[0]);
    return calage( d.getDate(),(d.getMonth()+1) , d.getFullYear());
}


function addmore() {
    location.href="/info/product_selector/index.jsp";
}

function disableInput(obj) {
    var nodes = obj.getElementsByTagName("*");
    for(var i=0; i < nodes.length; i++) {
        if (nodes[i].type == "text"
            || nodes[i].type == "radio"
            || nodes[i].type == "checkbox"
            || nodes[i].type == "select-one") {
            nodes[i].disabled=true;
        }
    }
}

function clearBasket() {
    if (confirm('Are you sure? This will clear all the quote information you have entered.')) {
        document.forms.frmClear.submit();
    }
}

function getClientSize() {
    return {
        width: document.body.clientWidth,
        height: document.body.clientHeight
    };
}
function getScrollSize() {
    return {
        width: document.body.scrollWidth,
        height: document.body.scrollHeight
    };
}


function showHelpLayer(layerId) {
//    document.body.style.overflow = "hidden";
    var overlay = document.getElementById("overlayLayer").style;
    // iframe is needed to fix IE bug
    var iframe = document.getElementById("overlayHelper").style;
    var help = document.getElementById(layerId);
    // firefox fix
    document.getElementById("sliderHospitalDiv").style.display="none";
    document.getElementById("sliderDayToDayDiv").style.display="none";

    var resize = function() {
        var clientSize = getClientSize();
        var scrollSize = getScrollSize();
        overlay.width = iframe.width = scrollSize.width;
        overlay.height = iframe.height = Math.max(clientSize.height, scrollSize.height);
        help.style.top = (clientSize.height / 2) - (help.clientHeight / 2);
        help.style.left = (clientSize.width / 2) - (help.clientWidth / 2);
    };

    window.onresize = resize;

    iframe.display = "block";
    overlay.display = "block";
    help.style.display = "block";
    help.style.top = -100000000; // display the help box way off screen, this lets
    help.style.left = -10000000; // us get the size of the box without drawing it
    resize();
}

function hideHelpLayer(layerId) {
    var overlay = document.getElementById("overlayLayer");
    var iframe = document.getElementById("overlayHelper");
    var help = document.getElementById(layerId);
    overlay.style.width = 0;
    overlay.style.height = 0;
    iframe.style.width = 0;
    iframe.style.height = 0;
    // firefox fix
    document.getElementById("sliderHospitalDiv").style.display="block";
    document.getElementById("sliderDayToDayDiv").style.display="block";
    overlay.style.display = "none";
    iframe.style.display = "none";
    help.style.display = "none";
    window.onresize = null;
}


function objectPosition(obj) {
    var left = 0;
    var top = 0;
    while(obj.offsetParent) {
        left += obj.offsetLeft;
        top += obj.offsetTop;
        obj = obj.offsetParent;
    }
    return {
        left: left,
        top: top
    };

}

var startyear = "1950";
var endyear = "2010";
var dat = new Date();

var curday = dat.getDate();
var curmon = dat.getMonth()+1;
var curyear = dat.getFullYear();

function checkleapyear(datea)
{
	if(datea.getYear()%4 == 0)
	{
		if(datea.getYear()% 10 != 0)
		{
			return true;
		}
		else
		{
			if(datea.getYear()% 400 == 0)
				return true;
			else
				return false;
		}
	}
return false;
}
function DaysInMonth(Y, M) {
    with (new Date(Y, M, 1, 12)) {
        setDate(0);
        return getDate();
    }
}
function datediff(date1, date2) {
    var y1 = date1.getFullYear(), m1 = date1.getMonth(), d1 = date1.getDate(),
	 y2 = date2.getFullYear(), m2 = date2.getMonth(), d2 = date2.getDate();

    if (d1 < d2) {
        m1--;
        d1 += DaysInMonth(y2, m2);
    }
    if (m1 < m2) {
        y1--;
        m1 += 12;
    }
    return [y1 - y2, m1 - m2, d1 - d2];
}

function calage(calday,calmon,calyear)
{

var curd = new Date(curyear,curmon-1,curday);
var cald = new Date(calyear,calmon-1,calday);

var diff =  Date.UTC(curyear,curmon,curday,0,0,0) - Date.UTC(calyear,calmon,calday,0,0,0);

var dife = datediff(curd,cald);


return(dife[0]);

}




/* ******************************************************************************   */
/* ******************************************************************************   */
/* ******************************************************************************   */



function init() {
	/*
		document.getElementById("dayOfBirth").value = dob;
		
		document.getElementById("HospitalType").value = htype;
		document.getElementById("HRoom").value = hroom;
		document.getElementById("HDtDLevel").value = hdtdlevel;
			*/				
    document.getElementById("productinfo").innerHTML=document.getElementById("default_productinfo").innerHTML;

		/*
    sliderHospital.setValue(2); //will triger loadProduct if ajax enabled
    sliderDayToDay.setValue(1);
		*/
    ajaxDisabled = 0;
    $dob = $('#dayOfBirth').val();
    if ($dob!='dd/mm/yyyy') {
    	loadProduct();
    }
}

function bsSliderChangeHospital(val) {
    document.getElementById("HospitalType").value  = val;
    if (val < 1) {
        document.getElementById("AccomDiv").style.display  = 'none';
        /*${"#AccomDiv"}.slideUp();*/
        document.getElementById("HRoom").value ='0';
    } else {
        if (document.getElementById("PrivateRoom").checked) {
					document.getElementById("HRoom").value ='3';
        }
        if(document.getElementById("SemiRoom").checked) {
            document.getElementById("HRoom").value ='2';
        }
        document.getElementById("AccomDiv").style.display = 'block';
        /*${'#AccomDiv'}.slideDown();*/
    }
    loadProduct();
}

function bsSliderChangeDayToDay(val) {
  document.getElementById("HDtDLevel").value  = val;
  loadProduct();
}

function loadProduct() {
		$('#right_side_content').slideUp(500, loadProductCallback);
}

function loadProductCallback() {
	if (ajaxDisabled == 1) return; //disable loading after save
		/* validate date, set focus, shows product info msg */
    if (!validDate(document.getElementById("dayOfBirth"))) {
        document.getElementById("productinfo").innerHTML=document.getElementById("default_productinfo").innerHTML;
        showErrAlertOrDialog(errMsg);
        /*document.getElementById("dayOfBirth").select();
        document.getElementById("dayOfBirth").focus();
        */
        return;
    }
		
    if (document.getElementById("HDtDLevel").value == 0 && document.getElementById("HospitalType").value == 0) {
        document.getElementById("productinfo").innerHTML=document.getElementById("default_productinfo").innerHTML;
        document.getElementById("addButton").disabled=true;
        document.getElementById("productquote").innerHTML="";
        document.getElementById("formAddtoBasket").style.display = 'none';
        return;
    }

    //Disable the save button and clear the summary before got key
//    document.getElementById("productquote").innerHTML="Loading";
    setPriceForPerson("Loading...");
    document.getElementById("addButton").disabled=true;
    document.getElementById("CurrentKey").value="";
    getKey();
		
		$('#right_side_content').slideDown(1000,highlight);
    return;
}

function highlight(){
	/*$('#rightSide').effect("highlight", {color:'#EAA9fA'}, 1500);*/
};



function getKey() {
    if (ajaxDisabled==1) return; //disable Ajax after save product submitted.
    var xmlHttp = GetXmlHttpObject();
    if (xmlHttp == null) {
        alert ("Your browser does not support AJAX!");
        return;
    }

    var dob =  document.getElementById("dayOfBirth").value;
    ajaxSeqNum = new Date().getTime();
    var ajax_url="/info/AjaxServlet?action=getProductDef"
        + "&Isfamily=" + document.getElementById("HIsFamily").value
        + "&Hospitaltype=" + document.getElementById("HospitalType").value
        + "&PrivateRoom=" + document.getElementById("HRoom").value
        + "&DtDLevel=" + document.getElementById("HDtDLevel").value
        + "&Dob=" + dob
        + "&IsStudent=" + document.getElementById("PStudent").value
        + "&Seq=" + ajaxSeqNum;

    xmlHttp.onreadystatechange = function() { stateChangedForKey(xmlHttp); };
    xmlHttp.open("GET",ajax_url,true);
    xmlHttp.send(null);
}

function stateChangedForKey(xmlHttp) {
    if (xmlHttp.readyState==4)	{
        var resp = xmlHttp.responseText;
		
        var plan = resp.split('|');
        if (plan[1] == ajaxSeqNum) {
            document.getElementById("CurrentKey").value=plan[0];
            document.getElementById("productinfo").innerHTML="Loading "+ plan[0];
            document.getElementById("CurrentProductName").value=plan[7];
			document.getElementById("CurrentProductCode").value=plan[2];
			document.getElementById("CurrentSubProdCode").value=plan[3];
            if (plan[0]!="null" && plan[2]!="null" && plan[5]>=0) {

				plan[5] = getAge(plan[8]);

                getUrl(plan);

				getQuote(plan);

            }
            if (sessionBegin) {
                clearTimeout(alarm);
            }
            sessionBegin = 1;
            if(sessionBegin){
                alarm = setTimeout ("timeoutHandler()",timeoutValue*1000+15000);
            }
        }
    }
}

/* fired by onChange on date field */
function validDateInput(obj,e) {
    if(e.keyCode == 8 || e.keyCode==46) {
        return;
    }

    var date=obj.value;
    if (/[^\d/]|(\/\/$)/g.test(date)) {
        obj.value=obj.value.replace(/[^\d/]/g,'');
        obj.value=obj.value.replace(/\/{2}/g,'/');
        return;
    }
    if (/^\d{2}$/.test(date)) {
        obj.value=obj.value+'/';
        return;
    }
    if (/^\d{1,2}\/\d{2}$/.test(date)) {
        obj.value=obj.value+'/';
        return;
    }

    var test1= /^\d{1,2}\/?\d{1,2}\/\d{4}$/.test(date);
    date=date.split('/');
    var d = new Date(date[2],date[1]-1,date[0]);
    var test2=(1*date[0]==d.getDate() && 1*date[1]==(d.getMonth()+1) && 1*date[2]==d.getFullYear());
    if (test1 && test2) {
        loadProduct();
    }
}

/*Get any relevant discount text.
Retrieves coverLevelCode.
*/
function getDiscountLinkText() {
	var coverLevelCode = ''+ document.getElementById("CurrentProductCode").value;//make it a char, not a number
	coverLevelCode += document.getElementById("CurrentSubProdCode").value;
	return getDiscountLinkText(coverLevelCode);    
}

/*Get any relevant discount text.
Takes in a non-zero coverLevelCode.
*/
function getDiscountLinkText(coverLevelCode) {
	//show any discount text if a plan has a date-limited discount
	//var discConfig = {plan: [45,47], prodSelectorDisplayText : 'This special offer price is only available for policies commencing between 22 March to 1 May 2010 inclusive.'};
	//discConfig.showFrom
	var displayText = '';
	var displayTextArray = ['',''];
	var discPlans = new getDiscPlanEffDatesArray();// [discConfig];
	//alert(discPlans.toString());
	//coverLevelCode = '45';
	var today = new Date(); //use current date at time of writing, may be changed to effective date in future.
	$.each(discPlans, function(index, discConfig) {
		$.each(discConfig.plan, function(idx, planVal) {
			//check for a match on plan, and on show from / show until dates/times.
			//alert('showFrom is: ' + discConfig.showFrom + ', showUntil is: ' + discConfig.showUntil);
			//alert('loop: ' + (coverLevelCode == planVal && discConfig.showFrom <= effDate && discConfig.showUntil > effDate));
			if (coverLevelCode == planVal && discConfig.showFrom <= today && discConfig.showUntil > today) { 
				 var textPayload = discConfig.prodSelectorDisplayText;//get relevant text if it's a disc plan
				 if (null != textPayload && textPayload.length > 0) {
					 displayText = '<div id="openDiscount' + discConfig.divId + '" href="javascript:void(0);" class="disc_link">';
					 displayText += textPayload;
					 displayText += '</div>';
	                 displayTextArray[0] = displayText;
	                 displayTextArray[1] = discConfig.divId;
					 return false;
				 }
			}
		});
	});
    return displayTextArray;
}

function showErrAlertOrDialog(errMsg) {
	if (null != errMsg && 0 < errMsg.length) { //If the error length is greater than 0, show a message
		if (STUDENT_AGE_LIMIT_MSG == errMsg) { // If it's a student age limit, show a dialog linking to vhibestforless.ie ...
			$("#studentAgeDialog").dialog('open');
		} else { //...otherwise show an alert
			alert(errMsg);
		}
	}
}