var req;
var objTimer;
var strLastMenu = "";
var blnDisableHideMenu = false;
var strOpenMenus = "|";

function closeAllMenus(strElementID){
    var arrMenus = strOpenMenus.split("|");
    if (strElementID == ""){
        for (var i=arrMenus.length-2; i>0; i--){
            hideMenu(arrMenus[i], 0);
        }
    }
    else {
        for (var i=arrMenus.length-1; i>0; i--){
            if (arrMenus[i] == strElementID){
                break;
            }
            else {
                hideMenu(arrMenus[i], 0);
            }
        }
    }
}

function showMenu(strElementID, strTargetID, intXOffSet, intYOffSet, intMenuLevel){
    clearTimeout(objTimer);
    var arrMenus = strOpenMenus.split("|");
    var strMenu = "";
    if (intMenuLevel == 0){
        closeAllMenus("");
        strOpenMenus = "|" + strElementID + "|";
    }
    else {
        if (strOpenMenus.indexOf("|" + strElementID + "|") < 0){
            for (var i=0; i<(arrMenus.length); i++){
                if (i == intMenuLevel + 1){
                    strMenu += strElementID + "|";
                }
                strMenu += arrMenus[i] + "|";
                strMenu = strMenu.replace("||","|");
            }
            strOpenMenus = strMenu;
        }
        closeAllMenus(strElementID);
    }

    strLastMenu = strElementID;
    if (!intXOffSet)
        intXOffSet = 0;
        
    if (!intYOffSet)
        intYOffSet = 0;
        
    var objElement = document.getElementById(strElementID);
    if (objElement){
        var objTarget = document.getElementById(strTargetID);
        if (objTarget){
            var intX = findXPos(objTarget) + intXOffSet;
            var intY = findYPos(objTarget) + intYOffSet;
            objElement.style.left = intX + "px";
            objElement.style.top = intY + "px";
        }
        showElement(strElementID);
    }
}

function hideMenu(strElementID, intDelay){

    if (strElementID != ""){
        if (!strElementID){
            strElementID = strLastMenu;
        }

        if (intDelay == 0){
            hideElement(strElementID, true);
        }
        else {
            setTimer("hideElement(\'" + strElementID + "\')", intDelay);
        }
    }
    //alert("strElementID = " + strElementID);
    //hideElement('" + strElementID + "');
    //hideElement(strElementID);
}

function showElement(strElementID){
    var objElement = document.getElementById(strElementID);
    if (objElement){
        objElement.style.display = "inline";
    }
}

function hideElement(strElementID, blnOverrideDisable){
    if (!blnDisableHideMenu || blnOverrideDisable){
        var objElement = document.getElementById(strElementID);
        if (objElement){
            objElement.style.display = "none";
        }
    }
}

function setTimer(strFunctionName, intTimer){
    //alert("strFunctionName = " + strFunctionName);
    objTimer = setTimeout(strFunctionName, intTimer);
}

function findXPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return curleft;
}

function findYPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return curtop;
}


function changeElementClass (strElementID, strClassName){
    var objElement = document.getElementById(strElementID);
    if (objElement){
        objElement.className = strClassName;
    }
}



//------------------------------------------------------------------------------------------
// Calendar
//------------------------------------------------------------------------------------------

var yn = new Array(1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030);
var na = new Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,'01','02','03','04','05','06','07','08','09');
var ml = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

var sday;
var smonth;
var syear;
var sc;
var txtname;
var dn=0;

// Date Format:  1. dd/MM/yyyy  2. MM/dd/yyyy  3. yyyy-MM-dd
var dateformat=1;

var mDivMOver = false;
document.onclick = function(){
    if(document.getElementById("caldiv") != null){ 
        if (mDivMOver == false) {
            dn++;
            if (dn > 1){
                document.getElementById("caldiv").style.visibility='hidden';
                document.getElementById('calshim').style.visibility='hidden';
            }
        }
    }
}

function isdate(day, month, year){
    var nastr = na.join(",")+',';
    var ynstr = yn.join(",")+',';

    if (nastr.indexOf(day + ',') == -1)
    return false;

    if (nastr.indexOf(month + ',') == -1)
    return false;

    if (ynstr.indexOf(year + ',') == -1)
    return false;

    if (month < 1 || month > 12)
    return false;

    if (year/4 == parseInt(year/4)){
        ml[1] = 29;
    }
    else {
        ml[1] = 28;
    }
    if (day < 1 || day > ml[month-1])
        return false;
    return true;
}

function calgo(name,thedate,format){
    txtname=name;
    if (format==1 || format==2 || format==3){
        dateformat=format;
    }

    if (navigator.appName == 'Microsoft Internet Explorer'){
        document.getElementById("caldiv").setAttribute('onmouseover',function anonymous(){mDivMOver=true;});
        document.getElementById("caldiv").setAttribute('onmouseout',function anonymous(){mDivMOver=false});
    }
    else {
        document.getElementById("caldiv").setAttribute('onMouseOver','mDivMOver=true');
        document.getElementById("caldiv").setAttribute('onMouseout','mDivMOver=false');
    }

    var calleft=0;
    var caltop=0;
    objParent = document.getElementById(txtname).offsetParent;
         
    while(objParent && objParent.tagName.toUpperCase() != "BODY"){
        calleft += objParent.offsetLeft;
        caltop += objParent.offsetTop;
        objParent = objParent.offsetParent;
    }

    calleft += document.getElementById(txtname).offsetLeft
    caltop += document.getElementById(txtname).offsetTop + document.getElementById(txtname).offsetHeight + 2;

    var leftpos = (calleft+11) + 'px';
    var toppos = (caltop+35) + 'px';

    document.getElementById("caldiv").style.left = (findXPos(document.getElementById('div_'+txtname))) + 'px';
    document.getElementById("caldiv").style.top = (findYPos(document.getElementById('div_'+txtname))) + 'px';

    var correctdate=false;
    sc='-';
    if (thedate.indexOf("/") != -1){
        sc='/';
    }

    var checkdate=thedate.split(sc);
    if (checkdate.length == 3){
        var cdday;
        var cdmonth;
        var cdyear;

        if (dateformat == 1){
            cdday=checkdate[0];
            cdmonth=checkdate[1];
            cdyear=checkdate[2];
        }
        else if (dateformat == 2){
            cdday=checkdate[1];
            cdmonth=checkdate[0];
            cdyear=checkdate[2];
        }
        else if (dateformat == 3){
            cdday=checkdate[2];
            cdmonth=checkdate[1];
            cdyear=checkdate[0];
        }

        if (isdate(cdday,cdmonth,cdyear) == true){
            correctdate=true;
        }
    }

    if (correctdate == true){
        sday=cdday;
        smonth=cdmonth;
        syear=cdyear;

        calendar(sday,smonth,syear);
    }
    else {
        var d=new Date()
        sday=d.getDate();
        smonth=d.getMonth()+1;
        syear=d.getFullYear();
        calendar(sday,smonth,syear);
    }

    if (format==3){
        sc='-'
    }
    else {
        sc='-'
    }
}

function caldown(day, month, year){
    month = month-1;
    if (month == 0){
        month=12;
        year=year-1;
    }

    if (year < yn[0]){
        month=1;
        year=yn[0];
    }

    calendar(day, month, year);
}

function calup(day, month, year){
    month=month+1;

    if (month == 13){
        month=1;
        year=year+1;
    }

    if (year > yn[yn.length-1]){
        month=12;
        year=yn[yn.length-1];
    }

    calendar(day, month, year);
}

function calmonth(day, month, year){
    calendar(day, month, year);
}

function calyear(day, month, year){
    calendar(day, month, year);
}

function calout(day, month, year){
    var months = new Array(13);
    months[0]  = "January";
    months[1]  = "February";
    months[2]  = "March";
    months[3]  = "April";
    months[4]  = "May";
    months[5]  = "June";
    months[6]  = "July";
    months[7]  = "August";
    months[8]  = "September";
    months[9]  = "October";
    months[10] = "November";
    months[11] = "December";

    var weekdays = new Array(7);
    weekdays[0] = "Sunday";
    weekdays[1] = "Monday";
    weekdays[2] = "Tuesday";
    weekdays[3] = "Wednesday";
    weekdays[4] = "Thursday";
    weekdays[5] = "Friday";
    weekdays[6] = "Saturday";

    var thedate;

    if (day.toString().length==1){
        day='0'+day;
    }

    if (month.toString().length==1){
        month='0'+month;
    }

    if (dateformat == 1){
        thedate = day + sc + month + sc + year;
    }
    else if (dateformat == 2){
        thedate=month + sc + day + sc + year;
    }
    else if (dateformat == 3){
        thedate=year + sc + month + sc + day;
    }
    else if (dateformat == 4){
        thedate=year + sc + month + sc + day;
    }

    if (document.getElementById(txtname + '_Display')){
        var dtmDate = new Date(year, month-1, day)
        document.getElementById(txtname+'_Display').value = day + '/' + month + '/' + year;
    }
    
    if (document.getElementById(txtname)){
        document.getElementById(txtname).value = year + '-' + month + '-' + day;
    }

    document.getElementById("caldiv").style.visibility='hidden';
    document.getElementById('calshim').style.visibility='hidden';
}


function calendar(day, month, year){
    dn = 0;
    var monthnumber = new Array(1,2,3,4,5,6,7,8,9,10,11,12);
    var monthname = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
    var h;
    var DayLoop=0;
    var WeekLoop=0;
    var font='Arial';
    var pday='';
    var pmonth;
    var pyear;
    var ShadeColor='#edf5fe';
    var DayBackColor='#ffffff';
    var DayBorderColor='#eaeaea';
    var BorderColor='#294985';
    var DayHeadingBackColor='#294985';
    var DayBackColor='#ffffff';
    var SelectDayBackColor='#e1e1e1';
    var HoverDayBackColor='#9abce7';
    var DayStyle='style="font-family:' + font + ';font-size:8pt;font-weight:bold;color:#ffffff"';
    var LinkStyle='style="font-family:' + font + ';font-size:8pt;font-weight:normal;color:#294985"';
    var AlternateMonth='style="font-family:' + font + ';font-size:8pt;font-weight:normal;color:#666666"';
    var ArrowStyle='style="font-family:' + font + ';font-size:8pt;font-weight:bold;color:#294985"';
    var HeadingCellAttributes='width="14%" style="border-right-width:0px;border-left-width:0px;color:#FFFFFF;"'

    h='<table border=1 cellpadding=0 cellspacing=0 bordercolor=' + BorderColor +' style="border-collapse:collapse"><tr><td>'
    h+='<table border=1 width=180 cellspacing=0 bordercolor=' + DayBorderColor +' style="border-collapse:collapse">';
    h+='<tr bgcolor=' + ShadeColor + '><td colspan="7"><table border=0 cellpadding=1 cellspacing=1 width="100%"><tr>';
    h+='<td width="10%" onclick="caldown(1,' + month + ',' + year + ')" style="cursor:pointer" ' + ArrowStyle + '>&lt;&lt;</a></td>';
    h+='<td align=center width="80%">';
    h+='<table border=0 cellpadding=0 cellspacing=0>';
    h+='<tr>';

    h+='<td><select name=ddlmonth style="font-size:8pt;" onchange="calmonth(' + day + ',this.options[this.selectedIndex].value, ' + year + ');">'

    for (var a = 0; a < monthnumber.length; a++){
        h+='<option value=' + monthnumber[a]

        if (month == monthnumber[a]){
            h+=' selected=selected';
        }
        h+='>' + monthname[a] + '</option>';
    }
    h+='</select></td>'
    h+='<td>&nbsp;</td>';
    h+='<td><select name=ddlyear style="font-size:8pt;" onchange="calyear(' + day + ',' + month + ',this.options[this.selectedIndex].value);">'

    for (var a = 0; a < yn.length; a++){
        h+='<option value=' + yn[a]

        if (year == yn[a]){
            h+=' selected=selected';
        }

        h+='>' + yn[a] + '</option>';
    }

    h+='</select></td>'

    h+='</tr>';
    h+='</table>';
    h+='</td>';
    h+='<td align=right width="10%" onclick="calup(1,' + month + ',' + year + ')" style="cursor:pointer" ' + ArrowStyle + '>&gt;&gt;</a></td>';
    h+='</tr></table></td></tr>'
    h+='<tr align=center bgcolor=' + DayHeadingBackColor + ' ' + DayStyle + '>';
    h+='<td ' + HeadingCellAttributes + '>Sun</td>';
    h+='<td ' + HeadingCellAttributes + '>Mon</td>';
    h+='<td ' + HeadingCellAttributes + '>Tue</td>';
    h+='<td ' + HeadingCellAttributes + '>Wed</td>';
    h+='<td ' + HeadingCellAttributes + '>Thu</td>';
    h+='<td ' + HeadingCellAttributes + '>Fri</td>';
    h+='<td ' + HeadingCellAttributes + '>Sat</td>';
    h+='</tr>';

    for(CellLoop=0; ;CellLoop++){
        DayLoop++;
        WeekLoop++;

        if (isdate(DayLoop, month, year) == false){
            break;
        }

        var TheDate=new Date(year, month-1, DayLoop);

        if (WeekLoop == 1){
            h+='<tr>'
        }

        if (CellLoop < TheDate.getDay()){
            if (pday==''){
                pmonth=month-1;
                pyear=year;

                if (pmonth == 0){
                    pmonth=12;
                    pyear=year-1;
                }

                if (pyear/4 == parseInt(pyear/4)){
                    ml[1] = 29;
                }
                else {
                    ml[1] = 28;
                }

                pday = ml[pmonth-1]-TheDate.getDay()-CellLoop+1;
            }
            else {
                pday++;
            }

            h+='<td onclick="calout(' + pday + ',' + pmonth + ',' + pyear + ')" style="cursor:pointer" width="14%" bgcolor=' + ShadeColor + ' onmouseover="this.style.background=\'' + HoverDayBackColor + '\'" onmouseout="this.style.background=\'' + ShadeColor + '\'"><table border=0 cellpadding=1 cellspacing=0 width="100%"><tr><td align=right ' + AlternateMonth + '>' + pday + '</td></tr></table></td>';
            DayLoop=0;
        }
        else {
            h+='<td onclick="calout(' + DayLoop + ',' + month + ',' + year + ')" width="14%" style="cursor:pointer" valign=top'

            if (sday==DayLoop && smonth==month && syear==year){
                h+=' bgcolor="' + SelectDayBackColor + '" onmouseover="this.style.background=\'' + HoverDayBackColor + '\'" onmouseout="this.style.background=\'' + SelectDayBackColor + '\'">';
            }
            else {
                h+=' bgcolor="' + DayBackColor + '" onmouseover="this.style.background=\'' + HoverDayBackColor + '\'" onmouseout="this.style.background=\'' + DayBackColor + '\'">';
            }

            h+='<table border=0 cellpadding=1 cellspacing=0 width="100%"><tr><td align=right ' + LinkStyle + '>' + DayLoop + '</td></tr></table></td>';
        }

        if (WeekLoop == 7){
            h+='</tr>';
            WeekLoop=0;
        }
    }

    var CellFill=TheDate.getDay()

    if (CellFill != 7){
        var nmd=0;
        month++;

        if (month == 13){
            month=1;
            year++;
        }

        for (i = CellFill+2; i <= 7; i++){
            nmd++;
            h+='<td onclick="calout(' + nmd + ',' + month + ',' + year + ')" style="cursor:pointer" width="14%" bgcolor=' + ShadeColor + ' onmouseover="this.style.background=\'' + HoverDayBackColor + '\'" onmouseout="this.style.background=\'' + ShadeColor + '\'"><table border=0 cellpadding=1 cellspacing=0 width="100%"><tr><td align=right ' + AlternateMonth + '>' + nmd + '</td></tr></table></td>';
        }

        h+='</tr>';
    }

    h+='</table>';
    h+='</td></tr></table>';

    document.getElementById("caldiv").innerHTML = h;
    document.getElementById("caldiv").style.visibility = 'visible';
	var IfrRef = document.getElementById('calshim');
	IfrRef.style.width = document.getElementById("caldiv").offsetWidth;	IfrRef.style.height = document.getElementById("caldiv").offsetHeight;    IfrRef.style.top = document.getElementById("caldiv").style.top;    IfrRef.style.left = document.getElementById("caldiv").style.left;    IfrRef.style.zIndex = document.getElementById("caldiv").style.zIndex - 1;    IfrRef.style.display = "block";    IfrRef.style.visibility='visible';}
function calmultiple(){	if (document.getElementById("datediv").style.visibility == 'visible'){        document.getElementById("datediv").style.visibility = 'hidden';		document.getElementById("txtDate2").value = '';		document.getElementById("dateimage").src='images/datetype_multiple.gif';		document.getElementById("datediv").style.width='1px';	}	else {		document.getElementById("datediv").style.visibility = 'visible';		document.getElementById("txtDate2").value = document.getElementById("dd").value;		document.getElementById("dateimage").src='images/datetype_single.gif';		document.getElementById("datediv").style.width=130;	}}function clearDates(){
    var objFromDate1 = document.getElementById('txtFromDate');
    var objFromDate2 = document.getElementById('txtFromDate_Display');
    var objToDate1 = document.getElementById('txtToDate');
    var objToDate2 = document.getElementById('txtToDate_Display');
    
    if (objFromDate1){
        objFromDate1.value = "";
    }

    if (objFromDate2){
        objFromDate2.value = "";
    }

    if (objToDate1){
        objToDate1.value = "";
    }

    if (objToDate2){
        objToDate2.value = "";
    }
}

function goToParticipantsList(){
    var objPartFName = document.getElementById("partFName");
    if (objPartFName){
        objPartFName.focus();
    }
    var objParticipantsListEnd = document.getElementById("divParticipantsListEnd");
    if (objParticipantsListEnd){
        objParticipantsListEnd.focus();
    }
}


/*-----------------------------------------------
BOOKING JAVASCRIPTS
-----------------------------------------------*/

var sglTotalAmount = 0.0;

function addParticipant(){
	var objForm = document.objForm;

	if (checkContactDetails()){
		if (objForm.partFName.value == "" && objForm.partLName.value == ""){
			return false
		}

		if (objForm.partFName.value == "" || objForm.partLName.value == ""){
			alert("Please provide new participants first and last name!")
			return false
		}

		objForm.action = objForm.action + '#plist';
		//alert("objForm.action = " + objForm.action );
		return true;
	}
	else {
			return false
	}
}

function checkForm(){
	if (checkContactDetails()){
		if (checkCCDetails()){
			if (confirm('SUBMIT BOOKING CONFIRMATION!\n\nYour are about to submit you booking for processing.\n\nClick \'OK\' to confirm or \'Cancel\' to abort and make some changes!')){
				alert("PROCESSING YOUR BOOKING NOW!\n\nYour payment will now be processed and may take a few moments to complete.\n\nPlease wait for a confirmation message before performing any other actions to ensure that you do not get multiple charges.\n\nClick OK to Proceed!");
				return true;
			}
			else {
				return false;
			}
		}
		else
			return false
	}
	else
		return false
}

function checkContactDetails(){
	var objForm = document.objForm;
	
	if (objForm.ddCourse1){
		if (objForm.ddCourse1.selectedIndex == 0){
			alert("Please choose a date for the first course!")
			objForm.ddCourse1.focus();
			return false;
		}
	}

	if (objForm.ddCourse2){
		if (objForm.ddCourse2.selectedIndex == 0){
			alert("Please choose a date for the second course!")
			objForm.ddCourse2.focus();
			return false;
		}
	}

	if (objForm.ddCourse3){
		if (objForm.ddCourse3.selectedIndex == 0){
			alert("Please choose a date for the third course!")
			objForm.ddCourse3.focus();
			return false;
		}
	}

	if (objForm.ddCourse4){
		if (objForm.ddCourse4.selectedIndex == 0){
			alert("Please choose a date for the fourth course!")
			objForm.ddCourse4.focus();
			return false;
		}
	}

	if (objForm.txtFirstname.value == ""){
		alert("Please enter the contacts first name!")
		objForm.txtFirstname.focus();
		return false;
	}

	if (objForm.txtLastname.value == ""){
		alert("Please enter the contacts last name!")
		objForm.txtLastname.focus();
		return false;
	}

	if (objForm.txtAddrLn1.value == ""){
		alert("Please enter the contacts street address!")
		objForm.txtAddrLn1.focus();
		return false;
	}

	if (objForm.txtCity.value == ""){
		alert("Please enter the city address!")
		objForm.txtCity.focus();
		return false;
	}

	if (objForm.txtPostcode.value == ""){
		alert("Please enter the post code!")
		objForm.txtPostcode.focus();
		return false;
	}

	if (objForm.txtPhone.value == ""){
		alert("Please enter a contact phone number!")
		objForm.txtPhone.focus();
		return false;
	}

	if (objForm.txtEmail.value == "" || !echeck(objForm.txtEmail.value)){
		alert("Please enter a valid email address!")
		objForm.txtEmail.focus();
		return false;
	}
	
	return true;
}

function checkCCDetails(){
	var objForm = document.objForm;
	
	if (objForm.txtCardName.value == ""){
		alert("Please enter the cardholder's name!")
		objForm.txtCardName.focus();
		return false;
	}
	
	if (objForm.ddCardType.selectedIndex == 0){
		alert("Please select the card type!")
		objForm.ddCardType.focus();
		return false;
	}
	
	if (objForm.txtCardNumber.value == ""){
		alert("Please enter the card number!")
		objForm.txtCardNumber.focus();
		return false;
	}

	var strCardType = objForm.ddCardType[objForm.ddCardType.selectedIndex].value;
	var strCardNumber = objForm.txtCardNumber.value;
	
	if (!isValidCreditCardNumber(objForm.txtCardNumber, objForm.ddCardType[objForm.ddCardType.selectedIndex].value.toUpperCase(), "Card Number", true)){
		return false
	}
	
	if (objForm.ddExpYr.selectedIndex == 0 || objForm.ddExpMth.selectedIndex == 0){
		alert("Please specify a valid credit card expiry date!")
		objForm.ddExpMth.focus();
		return false;
	}
	else
		objForm.tmpCCExp.value = objForm.ddExpMth[objForm.ddExpMth.selectedIndex].value + '/' + objForm.ddExpYr[objForm.ddExpYr.selectedIndex].value

	if (!isValidExpDate(objForm.tmpCCExp, "Expiry Date", true)){
		objForm.ddExpMth.focus();
		return false;
	}

	return true;
}


function echeck(str) {
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (str.indexOf(at)==-1){
		return false
	}

	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		return false
	}

	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		return false
	}

	if (str.indexOf(at,(lat+1))!=-1){
		return false
	}

	if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		return false
	}

	if (str.indexOf(dot,(lat+2))==-1){
		return false
	}

	if (str.indexOf(" ")!=-1){
		return false
	}

	return true					
}


function isEmailAddr(email){
	var result = false;
	var theStr = new String(email);
	var index = theStr.indexOf("@");
	if (index > 0){
		var pindex = theStr.indexOf(".",index);
		if ((pindex > index+1) && (theStr.length > pindex+1))
			result = true;
	}
	return result;
}

function validRequired(formField,fieldLabel){
	var result = true;
	if (formField.value == ""){
		alert('Please enter a value for the "' + fieldLabel +'" field.');
		if (formField)
			formField.focus();
		result = false;
	}
	return result;
}

function validEmail(formField,fieldLabel,required){
	var result = true;
	if (required && !validRequired(formField,fieldLabel))
	result = false;

	if (result && ((formField.value.length < 3) || !isEmailAddr(formField.value)) ){
		alert("Please enter a complete email address in the form: yourname@yourdomain.com");
		if (formField)
			formField.focus();
		result = false;
	}  
	return result;
}

function validNum(formField,fieldLabel,required){
	var result = true;
	if (required && !validRequired(formField,fieldLabel))
		result = false;
	if (result){
		var charset = "0123456789";
		var str = formField.value;
		for (var i=0;i<str.length;i++)
		if (charset.indexOf(str.substr(i,1))<0){
			alert('Please enter a number for the "' + fieldLabel +'" field.');
			if (formField)
				formField.focus();    
			result = false;
			break;
		}
	}   
	return result;
}

function validDate(formField,fieldLabel,required){
	var result = true;
	if (required && !validRequired(formField,fieldLabel))
	result = false;
	if (result){
		var elems = formField.value.split("/");
		result = (elems.length == 3); // should be three components
		if (result){
			var month = parseInt(elems[0],10);
			var day = parseInt(elems[1]);
			var year = parseInt(elems[2],10);
			result = !isNaN(month) && (month > 0) && (month < 13) &&
				!isNaN(day) && (day > 0) && (day < 32) &&
				!isNaN(year) && (elems[2].length == 4);
		}
		if (!result){
			alert('Please enter a date in the format MM/DD/YYYY for the "' + fieldLabel +'" field.');
			if (formField)
				formField.focus();    
		}
	} 
  return result;
}

function allDigits(str){
	return inValidCharSet(str,"0123456789");
}

function inValidCharSet(str,charset){
	var result = true;
	for (var i=0;i<str.length;i++)
	if (charset.indexOf(str.substr(i,1))<0){
		result = false;
		break;
	}
	return result;
}

function isValidExpDate(formField,fieldLabel,required){
	var result = true;
	var formValue = formField.value;
//	if (required && !validRequired(formField,fieldLabel))
//		result = false;

	if (result && (formField.value.length>0)){
 		var elems = formValue.split("/");
 		result = (elems.length == 2); // should be two components
 		var expired = false;
 		if (result){
 			var month = parseInt(elems[0],10);
 			var year = parseInt(elems[1],10);
 			if (elems[1].length == 2)
 				year += 2000;
 			var now = new Date();
 			var nowMonth = now.getMonth() + 1;
 			var nowYear = now.getFullYear();
 			expired = (nowYear > year) || ((nowYear == year ) && (nowMonth > month));
			result = allDigits(elems[0]) && (month > 0) && (month < 13) &&
						allDigits(elems[1]) && ((elems[1].length == 2) || (elems[1].length == 4));
 		}
  		if (!result){
 			alert('Please enter a valid expiry date!');
//			if (formField)
//				formField.focus();
		}
		else if (expired){
 			result = false;
 			alert('The date for "' + fieldLabel +'" has expired.');
//			if (formField)
//				formField.focus();
		}
	} 
	return result;
}

function isValidCreditCardNumber(formField,ccType,fieldLabel,required){
	var result = true;
 	var ccNum = formField.value;
	if (required && !validRequired(formField,fieldLabel))
		result = false;
  	if (result && (formField.value.length>0)){ 
 		if (!allDigits(ccNum)){
 			alert('Please enter only numbers (no dashes or spaces) for the "' + fieldLabel +'" field.');
			if (formField)
				formField.focus();
			result = false;
		}	

		if (result){ 
 			if (!LuhnCheck(ccNum) || !validateCCNum(ccType,ccNum)){
 				alert('Please enter a valid card number for the "' + fieldLabel +'" field.');
				if (formField)
					formField.focus();
				result = false;
			}	
		} 
	} 
	return result;
}

function LuhnCheck(str) 
{
  var result = true;

  var sum = 0; 
  var mul = 1; 
  var strLen = str.length;
  
  for (i = 0; i < strLen; i++) {
    var digit = str.substring(strLen-i-1,strLen-i);
    var tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }
  if ((sum % 10) != 0)
    result = false;
  return result;
}

function validateCCNum(cardType,cardNum){
	var result = false;
	cardType = cardType.toUpperCase();
	
	var cardLen = cardNum.length;
	var firstdig = cardNum.substring(0,1);
	var seconddig = cardNum.substring(1,2);
	var first4digs = cardNum.substring(0,4);

	switch (cardType)
	{
		case "VISA":
			result = ((cardLen == 16) || (cardLen == 13)) && (firstdig == "4");
			break;
		case "AMEX":
			var validNums = "47";
			result = (cardLen == 15) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			break;
		case "MASTERCARD":
			var validNums = "12345";
			result = (cardLen == 16) && (firstdig == "5") && (validNums.indexOf(seconddig)>=0);
			break;
		case "DISCOVER":
			result = (cardLen == 16) && (first4digs == "6011");
			break;
		case "DINERS":
			var validNums = "068";
			result = (cardLen == 14) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			break;
		case "BANKCARD":
			result = true
	}
	return result;
} 




