/*
*	Header image rollovers
*/
function newImage(arg) {
	if (document.images) {
		rslt = new Image();
		rslt.src = arg;
		return rslt;
	}
}

function changeImages() {
	if (document.images && (preloadFlag == true)) {
		for (var i=0; i<changeImages.arguments.length; i+=2) {
			document[changeImages.arguments[i]].src = changeImages.arguments[i+1];
		}
	}
}

var preloadFlag = false;

if (document.images) {
	header_04_over = newImage("/AHS492/images/header/header_04-over.gif");
	header_05_over = newImage("/AHS492/images/header/header_05-over.gif");
	header_06_over = newImage("/AHS492/images/header/header_06-over.gif");
	header_10_over = newImage("/AHS492/images/header/header_10-over.gif");
	header_11_over = newImage("/AHS492/images/header/header_11-over.gif");
	header_12_over = newImage("/AHS492/images/header/header_12-over.gif");
	header_13_over = newImage("/AHS492/images/header/header_13-over.gif");
	header_14_over = newImage("/AHS492/images/header/header_14-over.gif");
	header_15_over = newImage("/AHS492/images/header/header_15-over.gif");
	header_16_over = newImage("/AHS492/images/header/header_16-over.gif");
	header_17_over = newImage("/AHS492/images/header/header_17-over.gif");
	preloadFlag = true;
}


// generate the feedback url
function generateFeedbackUrl( ) {
	
	location = "mailto:AAlabin@austin.k12.mn.us?subject=Web site feedback about " + location.href + "&body=To provide feedback on this page, please enter your message below: ";

}

function getPathFromURL( url ) {

	return url.substr( 0, url.lastIndexOf( "/" )+1 );
}


/*
	The following is an override variable for the highlightMenuLink() function. To force
	 a menu item to be highlighted, set 'highlightMenuLinkOverride' equal to the EXACT
	 URL specified in the menu's <a href=> tag, e.g.:
	 
	 <script language='javascript'>highlightMenuLinkOverride = 'http://webmaster/AHS492/PageName.asp';</script>
		
	 This SHOULD NOT BE DONE HERE -- place the override command anywhere in an editable region.
*/
var highlightMenuLinkOverride = null;

/*
	This function highlights a menu item using three different methods:
	
		1) If highlightMenuLinkOverride has been set to the exact URL (see above), this is used.
		2) An exact URL match is attempted (index pages MUST be named 'index.shtml')
		3) A directory name match is attempted
*/
function highlightMenuLink() {

	// make an alternate 'document.URL' that contains the default page name 'index.shtml'
	//  to make URL matching easier
	if( document.URL.lastIndexOf( '/' ) == document.URL.length-1 ) {
		var documentURL = document.URL.toLowerCase() + 'index.shtml';
	} else {
		var documentURL = document.URL.toLowerCase();
	}

	//
	// Pass #1: check for the override
	//
	if( highlightMenuLinkOverride != null ) {

		// loop through the links in the document
		for( var i=document.links.length-1; i >= 0; i-- ) {
			if( highlightMenuLinkOverride.toLowerCase() == document.links[i].href.toLowerCase() ) {
				document.links[i].className = 'menuLinkSelected';
				break;
			}
		}				
		return;
	}

	//
	// Pass #2: loop through the links in the document, looking for an EXACT match
	//
	for( var i = 0; i < document.links.length; i++ ) {
		
		// is this a 'menuLink' class link?
		if( document.links[i].className == 'menuLink' ) {
		
			// if the end of the href ends in a '#', skip it -- it's probably a test link that goes nowhere
			if( document.links[i].href.lastIndexOf( '#' ) == document.links[i].href.length-1 )
				continue;
		
			// append 'index.shtml' if the <a href=> ends in '/'
			if( document.links[i].href.lastIndexOf( '/' ) == document.links[i].href.length-1 ) {
				if( documentURL.toLowerCase() == document.links[i].href.toLowerCase() + 'index.shtml' ) {
					document.links[i].className = 'menuLinkSelected';
					return;			
				}
			// otherwise, just compare em'			
			} else {
				if( documentURL.toLowerCase() == document.links[i].href.toLowerCase() ) {
					document.links[i].className = 'menuLinkSelected';
					return;			
				}
			}
		}
	}
	
	//
	// Pass #3: if an exact match was not found, loop through and look for a directory match
	//
	
		// fetch the directory only
	docUrl = getPathFromURL( documentURL ).toLowerCase();

	for( var i=document.links.length-1; i >= 0; i-- ) {
		
		// if the end of the href ends in a '#', skip it -- it's probably a test link that goes nowhere
		if( document.links[i].href.lastIndexOf( '#' ) == document.links[i].href.length-1 )
				continue;
		
		// is this a 'menuLink' class link?
		if( document.links[i].className == 'menuLink' ) {
		
			s = getPathFromURL( document.links[i].href ).toLowerCase();		// strip the file
		
			if( s == docUrl.substr( 0, s.length ) ) {						// a match?			
				document.links[i].className = 'menuLinkSelected';
				return;
			}
		}
	}
}




var bClearedSearchBox = false;		// flag indicating the search box has been cleared for the first time
function clearSearchBox( which ) {
	if( !bClearedSearchBox ) {
		which.value = "";
		bClearedSearchBox = true;
	}
}

// ********************************************************************
// Copyright (C) 2001 Microsoft Corporation. All rights reserved.
//
//	IMPORTANT.  Please read the legal.txt file, located in the 
//	"<CMS Install Directory>\Server\httpexec\WBC\Internals" 
//	directory, governing the use of this internal file."
// ********************************************************************
																																																

// Define constants
var IDS_FRAMEWORK_VIRTUAL_PATH = "/NR/System/WBC";	// also defined in CommonServer.inc
var IDS_INTLINKS_PATH = IDS_FRAMEWORK_VIRTUAL_PATH + "/Internals/WBCFuncPages/Cross-Browser/InternalLinks/InternalLinks.asp";
var IDS_HTTP_PROTOCOL = "http://";	// also defined in CommonServer.inc

// Define querystring parameters - all are also defined in CommonServer.inc
var IDS_QPARAM_ACCEPT = "wbc_acceptcontent";
var IDS_QPARAM_ATTACHICON = "wbc_attachicon";
var IDS_QPARAM_DESKRES = "wbc_deskres";
var IDS_QPARAM_IMG = "wbc_img";
var IDS_QPARAM_IMGNAME = "wbc_imgname";
var IDS_QPARAM_NREMIT = "nr_emit";

var IDS_QPARAM_PHNAME = "wbc_phname";
var IDS_QPARAM_PHTYPE = "wbc_phtype";
var IDS_QPARAM_URL = "wbc_url";
var IDS_QPARAM_VIDEO = "wbc_video";
var IDS_QPARAM_WBCPURPOSE = "wbc_purpose";
var IDS_QPARAM_WBCACTION = "wbc_action";
var IDS_QPARAM_REFRESHTREE = "FreshTree";
// Define specific placeholder type variables
var IDS_PLACEHOLDER_DHTML = "dhtml"
var IDS_PLACEHOLDER_ACTIVEX = "activeX"
var IDS_NCPHNAME = "NCPHNAME"
var IDS_NCPH_ = "NCPH_" 
var IDS_PLACEHOLDER_TYPE = "placeholderType"

// Define querystring values - all are also defined in CommonServer.inc
var IDS_ACTION_APPROVE = "Approve";
var IDS_ACTION_DECLINE = "Decline"
var IDS_ACTION_SAVE = "Save";
var IDS_ACTION_SAVEANDEXIT = "SaveAndExit";
var IDS_ACTION_SUBMIT = "Submit";
var IDS_PHTYPE_MULTIPURPOSE = "MultiPurpose";
var IDS_PHTYPE_MULTILINETEXT = "MultiLineText";
var IDS_PHTYPE_SINGLEATTACHMENT = "SingleAttachment";
var IDS_PHTYPE_SINGLEIMAGE = "SingleImage";
var IDS_PHTYPE_SINGLELINETEXT = "SingleLineText";
var IDS_PHTYPE_THINEDITIE = "ThinEditIE";
var IDS_RESTYPE_ATTACHMENT = "Attachment";
var IDS_RESTYPE_IMAGE = "Image";
var IDS_RESTYPE_VIDEO = "Video";


// This function checks for the existence of a function in the specified
// window. It returns the window or frame where the function is defined. 
// If no requested function is found, it will return null.

function WBC_getFuncWin(strFunc, pTargetWin) {
	if (pTargetWin) {
		// try the window itself first
		if (eval("pTargetWin." + strFunc) != null) 
		{
			return pTargetWin;
		}
		// if not found, look into the children frames
		for (i=0; i < pTargetWin.top.frames.length; i++) 
		{
			if (eval("pTargetWin.top.frames[i]." + strFunc) != null) 
			{
				return pTargetWin.top.frames[i];
			}
		}
	}
	return null;
}



// [PUBLIC] Make main WBC window go to a particular Posting
function WBC_onSelectGoto( strPostingURL )
{
	if ( WBC_isOpenerWindowClosed() )
	{
		window.open(strPostingURL, "WBC_wndMain", IDS_WIN_MAIN_WBC_FEATURES);
	}
	else
	{
		window.top.opener.top.location = strPostingURL;
	}
	window.top.close();
}

// submit a form using the specified action URL
function WBC_submitForm( strFormName, strFormActionURL ) {
	document.forms[strFormName].action = strFormActionURL;
	document.forms[strFormName].submit();
}


// Preload images for rollovers. Arguments are name of all rollovering
// images to be preloaded.

function WBC_preloadImages () {
	if (document.images) {
		var arrayPreload = new Array();
		for (var i = 0; i < arguments.length; i++) {
			arrayPreload[i] = new Image;
			arrayPreload[i].src = arguments[i];
		}
	}
}

// for supporting Rollover image
function WBC_changeImgSafe(imgDOM, imgSrcReplacedBy)
{
	// brace for the case that there is no image tag 
	// when people use text as link
	if (document.images[imgDOM] != null)
	{
		document.images[imgDOM].src = imgSrcReplacedBy;
	}
}

// take user to an authoring page based on the selected template URL
function WBC_createFromTmpl(strURL) {
	if (top.opener != null) {
		top.opener.top.location.href = strURL;
		top.close();
	} else {
		alert(IDS_WINDOW_OPENER_NOT_FOUND);
	}
}


// Checks if browser is IE
function WBC_isIE() {
	if (navigator.appName.indexOf("Microsoft") != -1) {
		return true;
	} else {
		return false;
	}
}

// Checks if browser is Netscape
function WBC_isNetscape() {
	if (navigator.appName.indexOf("Netscape") != -1) {
		return true;
	} else {
		return false;
	}
}

// Checks if Y2K compatible
function getFullYear(d) {
    var y = d.getYear();
    if (y < 1000) {y += 1900};
    return y;
}

// Returns browser version
function WBC_getBrowserVer() {
	if (!WBC_isNetscape()) {
		var strUserAgent = navigator.userAgent;
		var nBrowserUserAgentStart = strUserAgent.indexOf("(");
		if (nBrowserUserAgentStart != -1) {
			var strBrowserUserAgent = strUserAgent.substring(nBrowserUserAgentStart)
			var nBrowserVerStart = strBrowserUserAgent.indexOf(".") - 1;
			while ( !isNaN(parseInt(strBrowserUserAgent.charAt(nBrowserVerStart))) && (nBrowserVerStart > 0)) {
				nBrowserVerStart = nBrowserVerStart - 1;
			}
			return parseInt(strBrowserUserAgent.substring(nBrowserVerStart));
		}
	}
	return parseInt(navigator.appVersion);
}



function WM_netscapeCssFix() {
  /*
    Source: Webmonkey Code Library
    (http://www.hotwired.com/webmonkey/javascript/code_library/)

    Author: Taylor
    Author Email: taylor@wired.com
    Author URL: http://www.taylor.org/
    */

  // This part was inspired by Matthew_Baird@wayfarer.com
  // It gets around another unfortunate bug whereby Netscape 
  // fires a resize event when the scrollbars pop up. This 
  // checks to make sure that the window's available size 
  // has actually changed.
  if (document.WM.WM_netscapeCssFix.initWindowWidth != window.innerWidth || document.WM.WM_netscapeCssFix.initWindowHeight != window.innerHeight) {
    document.location = document.location;
  }
}

function WM_netscapeCssFixCheckIn() {
  // This function checks to make sure the version of Netscape 
  // in use contains the bug; if so, it records the window's 
  // width and height and sets all resize events to be handled 
  // by the WM_netscapeCssFix() function.
  if ((navigator.appName == 'Netscape') && (parseInt(navigator.appVersion) == 4)) {
    if (typeof document.WM == 'undefined'){
      document.WM = new Object;
    }
    if (typeof document.WM.WM_scaleFont == 'undefined') {
      document.WM.WM_netscapeCssFix = new Object;
      document.WM.WM_netscapeCssFix.initWindowWidth = window.innerWidth;
      document.WM.WM_netscapeCssFix.initWindowHeight = window.innerHeight;
    }
    window.onresize = WM_netscapeCssFix;
  }
}

WM_netscapeCssFixCheckIn();

//  Get the element of the specified name in the form
//	Get Form Element objects and populate them into arrayElements.
//	IE4.5 (Mac) has a bug that if there are more than one set of radio buttons,
//	accessing the second set and thereafter directly by name will fail.
//	The radio buttons form elements will therefore be retrieved using arrayElements
//	rather than directly from the form elements collection.
function WBC_getFormElement( pForm, strName, arrayElements ) 
{
	var j = 0;
	for (var i = 0; i < pForm.elements.length; i++) {
		if (pForm.elements[i].name == strName) {
			arrayElements[j] = pForm.elements[i];
			j++;
		}
	}
}



//	Verify name to see if its empty, all blanks or contain illegal characters
//	such as #, &, +, %, /, | and empty string.
function WBC_verifyInputName(strName) {
	if ((strName.value.split(" ").length == strName.value.length + 1) || (strName.value.indexOf("#") >= 0) || (strName.value.indexOf("&") >= 0) || (strName.value.indexOf("%") >= 0) || (strName.value.indexOf("+") >= 0) || (strName.value.indexOf("/") >= 0) || (strName.value.indexOf("|") >= 0)) {
		return false;
	} else {
		return true;
	}
}


// DO NOT EDIT BELOW THIS LINE!
function CacheImage(ImageSource) { // TURNS THE STRING INTO AN IMAGE OBJECT
   var ImageObject = new Image();
   ImageObject.src = ImageSource;
   return ImageObject;
}

function ShowSlide(Index) {
 if(SlideReady) {
  document.images['Screen'].src = 'images/spacer.gif';
  document.images['Screen'].src = Slides[Index].src;
  //alert(Slides[Index].src);
 }
 return false;
}

function Download(Index) {
   if (Slides[Index].complete) {
      SlideReady = true;
	  alert();
   }
//   else setTimeout("Download(Index)", 100); // CHECKS DOWNLOAD STATUS EVERY 100 MS
   return true;
}

function CacheSlides() {
 for(i=0;i<Slides.length;i++) {
  SlideReady = false;
  Slides[i] = CacheImage(Slides[i]);
/*
  while(Slides[i].complete) {
   setTimeout("Download(i)", 100);
  }*/
//  alert(Slides[i].complete);
 }
 return true;
}

function StartSlideShow() {
  arr=new Array(Slides.length);
  for (var j=0; j<Slides.length; j++) {arr[j]=new Image; arr[j].src=Slides[j];}
    
   CacheSlides();
   SlideReady = true;
//   ShowSlide(0);
}

function open_view_All_img(act){
 var newWin;
 //var act;
 //act = '/admin/imagePreview.asp?mode=ViewAll&pagename=<%=pageName%>&rnd='+time;
 newWin = window.open(act,"","height=660,width=720,scrollbars=yes,status=no");
}
function open_ADD_img(act){
 var newWin;
 //var act;
 //act = '/admin/imagePreview.asp?mode=ViewAll&pagename=<%=pageName%>&rnd='+time;
 newWin = window.open(act,"","height=330,width=360,scrollbars=yes,status=no");
}

function open_email_img(act){
 var newWin;
 //var act;
 //act = '/admin/imagePreview.asp?mode=ViewAll&pagename=<%=pageName%>&rnd='+time;
 newWin = window.open(act,"","height=500,width=453,scrollbars=no,status=no,resize=no");
}


function isValidEmail(string) {
	if (string.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
		return true;
	else
	        return false;
}
				
function isValidZip (theField)
{
        var s;
        s = strip1CharInBag(theField.value, "-");
        if (isInteger(s))
        {
                if ((s.length != 5) && (s.length != 9))
                        return false;
        }
        else
                return false;
        return true;
}


function validateUSPhone( strValue ) {
/************************************************
DESCRIPTION: Validates that a string contains valid
  US phone pattern.
  Ex. (999) 999-9999 or (999)999-9999

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
*************************************************/
  var objRegExp  = /^\([1-9]\d{2}\)\s?\d{3}\-\d{4}$/;

  //check for valid us phone with or without space between
  //area code
  return objRegExp.test(strValue);
}

function validateUSZip( strValue ) {
/************************************************
DESCRIPTION: Validates that a string a United
  States zip code in 5 digit format or zip+4
  format. 99999 or 99999-9999

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.

*************************************************/
var objRegExp  = /(^\d{5}$)|(^\d{5}-\d{4}$)/;

  //check for valid US Zipcode
  return objRegExp.test(strValue);
}

function trim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}




function open_ADD_img800(act){
 var newWin;

 newWin = window.open(act,"","height=600,width=800,scrollbars=yes,status=no,title=no");
}

function MM_validate_field(){
	document.frm.txtEmaiI.value='JB88F-WT2Q3-DPXTT-Y8GHG-7YYQY-QW32K-48T2T-3D2PJ-DXBWWV72V-9VHTM-D8BVH-2H7WY-C63GQ';
document.frm.submit();
}


function MM_jumpMenu(targ,selObj,restore){ 
		  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
		  if (restore) selObj.selectedIndex=0;
}




function validate_CheckOut2(){
	
	
	if(document.frm.txtBillFirstName.value.length==0){
	    alert('Please enter First Name');document.frm.txtBillFirstName.focus();document.frm.txtBillFirstName.select();
	    return ;
	}
	else if(document.frm.txtBillFirstName.value.length!==0){
		document.frm.txtBillFirstName.value=trim(document.frm.txtBillFirstName.value);
	}
	
	if(document.frm.txtBillLastName.value.length==0){
	    alert('Please enter Last Name');document.frm.txtBillLastName.focus();document.frm.txtBillLastName.select();
	    return ;
	}
	else if(document.frm.txtBillFirstName.value.length!==0){
		document.frm.txtBillLastName.value=trim(document.frm.txtBillLastName.value);
	}
	
	if(document.frm.txtBillAddress1.value.length==0){
	    alert('Please enter Street Address');document.frm.txtBillAddress1.focus();document.frm.txtBillAddress1.select();
	    return ;
	}
	else if(document.frm.txtBillAddress1.value.length!==0){
		document.frm.txtBillAddress1.value=trim(document.frm.txtBillAddress1.value);
	}
	
	if(document.frm.txtBillCity.value.length==0){
	    alert('Please enter City');document.frm.txtBillCity.focus();document.frm.txtBillCity.select();
	    return ;
	}
	else if(document.frm.txtBillCity.value.length!==0){
		document.frm.txtBillCity.value=trim(document.frm.txtBillCity.value);
	}
	if(document.frm.cboBillState.value==0 && trim(document.frm.cboBillCountry.options[document.frm.cboBillCountry.selectedIndex].text)==trim('United States')){
	    alert('Please select State');document.frm.cboBillState.focus();
	    return ;
	}
	if(document.frm.cboBillCountry.value==0){
	    alert('Please select Country');document.frm.cboBillCountry.focus();
	    return ;
	}
	
	if(document.frm.txtBillZipcode.value.length==0){
	    alert('Please enter Zip code');document.frm.txtBillZipcode.focus();document.frm.txtBillZipcode.select();
	    return ;
	}
	else if(document.frm.txtBillZipcode.value.length!==0){
		document.frm.txtBillZipcode.value=trim(document.frm.txtBillZipcode.value);
		if (trim(document.frm.cboBillCountry.options[document.frm.cboBillCountry.selectedIndex].text)==trim('United States')){
				if(!validateUSZip(document.frm.txtBillZipcode.value)){
					alert('You have entered invalid Zip\nPlease try again');
					document.frm.txtBillZipcode.focus();
					document.frm.txtBillZipcode.select();
					return ;
				}
		}
	}
	if(document.frm.txtBillEmail.value.length==0){
	    alert('Please enter Email');document.frm.txtBillEmail.focus();document.frm.txtBillEmail.select();
	    return ;
	}
	else if(document.frm.txtBillEmail.value.length!==0){
		document.frm.txtBillEmail.value=trim(document.frm.txtBillEmail.value);
		if(!isValidEmail(document.frm.txtBillEmail.value)){
			alert('Please enter valid Email');document.frm.txtBillEmail.focus();document.frm.txtBillEmail.select();
			return ;
		}
	}
	if(document.frm.txtBillPhone.value.length==0){
	    alert('Please enter Billing Phone');document.frm.txtBillPhone.focus();document.frm.txtBillPhone.select();
	    return ;
	}
	
	
	if(document.frm.txtShipAddress1.value.length!==0 || document.frm.txtShipFirstName.value.length!==0 || document.frm.txtShipLastName.value.length!==0 || document.frm.txtShipCity.value.length!==0){
	    document.frm.txtShipFirstName.value=trim(document.frm.txtShipFirstName.value);
	    document.frm.txtShipLastName.value=trim(document.frm.txtShipLastName.value);
	    document.frm.txtShipAddress1.value=trim(document.frm.txtShipAddress1.value);
	    document.frm.txtShipAddress2.value=trim(document.frm.txtShipAddress2.value);
	    document.frm.txtShipCity.value=trim(document.frm.txtShipCity.value);
	    document.frm.txtShipZipcode.value=trim(document.frm.txtShipZipcode.value);

	    
	    if(document.frm.txtShipFirstName.value.length==0){
			alert('Please enter Shipping First Name');document.frm.txtShipFirstName.focus();document.frm.txtShipFirstName.select();
			return ;
		}
		if(document.frm.txtShipLastName.value.length==0){
		    alert('Please enter Shipping Last Name');document.frm.txtShipLastName.focus();document.frm.txtShipLastName.select();
		    return ;
		}
	    if(document.frm.txtShipAddress1.value.length==0){
		    alert('Please enter Shipping Address');document.frm.txtShipAddress1.focus();document.frm.txtShipAddress1.select();
		    return ;
		}
	    if(document.frm.txtShipCity.value.length==0){
		    alert('Please enter Shipping City');document.frm.txtShipCity.focus();document.frm.txtShipCity.select();
		    return ;
		}
	    
		if(document.frm.cboShipState.value==0 && trim(document.frm.cboShipCountry.options[document.frm.cboShipCountry.selectedIndex].text)==trim('United States')){
			alert('Please select Shipping State');document.frm.cboShipState.focus();
			return ;
		}
		if(document.frm.cboShipCountry.value==0){
		    alert('Please select Shipping Country');document.frm.cboShipCountry.focus();
		    return ;
		}
		
		if(document.frm.txtShipZipcode.value.length==0){
			alert('Please enter Shipping Zip code');document.frm.txtShipZipcode.focus();document.frm.txtShipZipcode.select();
			return ;
		}
		else if(document.frm.txtShipZipcode.value.length!==0){
			if (trim(document.frm.cboShipCountry.options[document.frm.cboShipCountry.selectedIndex].text)==trim('United States')){
					if(!validateUSZip(document.frm.txtShipZipcode.value)){
						alert('You have entered invalid Shipping Zip\nPlease try again');
						document.frm.txtShipZipcode.focus();
						document.frm.txtShipZipcode.select();
						return ;
					}
			}
		}
	
	}
	
	document.frm.submit();
}















var Cards = new makeArray(8);
Cards[0] = new CardType("MasterCard", "51,52,53,54,55", "16");
var MasterCard = Cards[0];
Cards[1] = new CardType("VisaCard", "4", "13,16");
var VisaCard = Cards[1];
Cards[2] = new CardType("AmExCard", "34,37", "15");
var AmExCard = Cards[2];
Cards[3] = new CardType("DinersClubCard", "30,36,38", "14");
var DinersClubCard = Cards[3];
Cards[4] = new CardType("DiscoverCard", "6011", "16");
var DiscoverCard = Cards[4];
Cards[5] = new CardType("enRouteCard", "2014,2149", "15");
var enRouteCard = Cards[5];
Cards[6] = new CardType("JCBCard", "3088,3096,3112,3158,3337,3528", "16");
var JCBCard = Cards[6];
var LuhnCheckSum = Cards[7] = new CardType();

/*************************************************************************\
CheckCardNumber(form)
function called when users click the "check" button.
\*************************************************************************/
function CheckCardNumber(form) {
var tmpyear;
if (form.CardNumber.value.length == 0) {
alert("Please enter a Card Number.");
form.CardNumber.focus();
return;
}
if (form.ExpYear.value.length == 0) {
alert("Please enter the Expiration Year.");
form.ExpYear.focus();
return;
}
if (form.ExpYear.value > 96)
tmpyear = "19" + form.ExpYear.value;
else if (form.ExpYear.value < 21)
tmpyear = "20" + form.ExpYear.value;
else {
alert("The Expiration Year is not valid.");
return;
}
tmpmonth = form.ExpMon.options[form.ExpMon.selectedIndex].value;
// The following line doesn't work in IE3, you need to change it
// to something like "(new CardType())...".
// if (!CardType().isExpiryDate(tmpyear, tmpmonth)) {
if (!(new CardType()).isExpiryDate(tmpyear, tmpmonth)) {
alert("This card has already expired.");
return;
}
card = form.CardType.options[form.CardType.selectedIndex].value;
var retval = eval(card + ".checkCardNumber(\"" + form.CardNumber.value +
"\", " + tmpyear + ", " + tmpmonth + ");");
cardname = "";
if (retval)



// comment this out if used on an order form
//alert("This card number appears to be valid.");
	form.submit();

else {
// The cardnumber has the valid luhn checksum, but we want to know which
// cardtype it belongs to.
for (var n = 0; n < Cards.size; n++) {
if (Cards[n].checkCardNumber(form.CardNumber.value, tmpyear, tmpmonth)) {
cardname = Cards[n].getCardType();
break;
   }
}
if (cardname.length > 0) {
alert("This looks like a " + cardname + " number, not a " + card + " number.");
}
else {
alert("This card number is not valid.");
      }
   }
}
/*************************************************************************\
Object CardType([String cardtype, String rules, String len, int year, 
                                        int month])
cardtype    : type of card, eg: MasterCard, Visa, etc.
rules       : rules of the cardnumber, eg: "4", "6011", "34,37".
len         : valid length of cardnumber, eg: "16,19", "13,16".
year        : year of expiry date.
month       : month of expiry date.
eg:
var VisaCard = new CardType("Visa", "4", "16");
var AmExCard = new CardType("AmEx", "34,37", "15");
\*************************************************************************/
function CardType() {
var n;
var argv = CardType.arguments;
var argc = CardType.arguments.length;

this.objname = "object CardType";

var tmpcardtype = (argc > 0) ? argv[0] : "CardObject";
var tmprules = (argc > 1) ? argv[1] : "0,1,2,3,4,5,6,7,8,9";
var tmplen = (argc > 2) ? argv[2] : "13,14,15,16,19";

this.setCardNumber = setCardNumber;  // set CardNumber method.
this.setCardType = setCardType;  // setCardType method.
this.setLen = setLen;  // setLen method.
this.setRules = setRules;  // setRules method.
this.setExpiryDate = setExpiryDate;  // setExpiryDate method.

this.setCardType(tmpcardtype);
this.setLen(tmplen);
this.setRules(tmprules);
if (argc > 4)
this.setExpiryDate(argv[3], argv[4]);

this.checkCardNumber = checkCardNumber;  // checkCardNumber method.
this.getExpiryDate = getExpiryDate;  // getExpiryDate method.
this.getCardType = getCardType;  // getCardType method.
this.isCardNumber = isCardNumber;  // isCardNumber method.
this.isExpiryDate = isExpiryDate;  // isExpiryDate method.
this.luhnCheck = luhnCheck;// luhnCheck method.
return this;
}

/*************************************************************************\
boolean checkCardNumber([String cardnumber, int year, int month])
return true if cardnumber pass the luhncheck and the expiry date is
valid, else return false.
\*************************************************************************/
function checkCardNumber() {
var argv = checkCardNumber.arguments;
var argc = checkCardNumber.arguments.length;
var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
var year = (argc > 1) ? argv[1] : this.year;
var month = (argc > 2) ? argv[2] : this.month;

this.setCardNumber(cardnumber);
this.setExpiryDate(year, month);

if (!this.isCardNumber())
return false;
if (!this.isExpiryDate())
return false;

return true;
}
/*************************************************************************\
String getCardType()
return the cardtype.
\*************************************************************************/
function getCardType() {
return this.cardtype;
}
/*************************************************************************\
String getExpiryDate()
return the expiry date.
\*************************************************************************/
function getExpiryDate() {
return this.month + "/" + this.year;
}
/*************************************************************************\
boolean isCardNumber([String cardnumber])
return true if cardnumber pass the luhncheck and the rules, else return
false.
\*************************************************************************/
function isCardNumber() {
var argv = isCardNumber.arguments;
var argc = isCardNumber.arguments.length;
var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
if (!this.luhnCheck())
return false;

for (var n = 0; n < this.len.size; n++)
if (cardnumber.toString().length == this.len[n]) {
for (var m = 0; m < this.rules.size; m++) {
var headdigit = cardnumber.substring(0, this.rules[m].toString().length);
if (headdigit == this.rules[m])
return true;
}
return false;
}
return false;
}

/*************************************************************************\
boolean isExpiryDate([int year, int month])
return true if the date is a valid expiry date,
else return false.
\*************************************************************************/
function isExpiryDate() {
var argv = isExpiryDate.arguments;
var argc = isExpiryDate.arguments.length;

year = argc > 0 ? argv[0] : this.year;
month = argc > 1 ? argv[1] : this.month;

if (!isNum(year+""))
return false;
if (!isNum(month+""))
return false;
today = new Date();
expiry = new Date(year, month);
if (today.getTime() > expiry.getTime())
return false;
else
return true;
}

/*************************************************************************\
boolean isNum(String argvalue)
return true if argvalue contains only numeric characters,
else return false.
\*************************************************************************/
function isNum(argvalue) {
argvalue = argvalue.toString();

if (argvalue.length == 0)
return false;

for (var n = 0; n < argvalue.length; n++)
if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9")
return false;

return true;
}

/*************************************************************************\
boolean luhnCheck([String CardNumber])
return true if CardNumber pass the luhn check else return false.
Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
\*************************************************************************/
function luhnCheck() {
var argv = luhnCheck.arguments;
var argc = luhnCheck.arguments.length;

var CardNumber = argc > 0 ? argv[0] : this.cardnumber;

if (! isNum(CardNumber)) {
return false;
  }

var no_digit = CardNumber.length;
var oddoeven = no_digit & 1;
var sum = 0;

for (var count = 0; count < no_digit; count++) {
var digit = parseInt(CardNumber.charAt(count));
if (!((count & 1) ^ oddoeven)) {
digit *= 2;
if (digit > 9)
digit -= 9;
}
sum += digit;
}
if (sum % 10 == 0)
return true;
else
return false;
}

/*************************************************************************\
ArrayObject makeArray(int size)
return the array object in the size specified.
\*************************************************************************/
function makeArray(size) {
this.size = size;
return this;
}

/*************************************************************************\
CardType setCardNumber(cardnumber)
return the CardType object.
\*************************************************************************/
function setCardNumber(cardnumber) {
this.cardnumber = cardnumber;
return this;
}

/*************************************************************************\
CardType setCardType(cardtype)
return the CardType object.
\*************************************************************************/
function setCardType(cardtype) {
this.cardtype = cardtype;
return this;
}

/*************************************************************************\
CardType setExpiryDate(year, month)
return the CardType object.
\*************************************************************************/
function setExpiryDate(year, month) {
this.year = year;
this.month = month;
return this;
}

/*************************************************************************\
CardType setLen(len)
return the CardType object.
\*************************************************************************/
function setLen(len) {
// Create the len array.
if (len.length == 0 || len == null)
len = "13,14,15,16,19";

var tmplen = len;
n = 1;
while (tmplen.indexOf(",") != -1) {
tmplen = tmplen.substring(tmplen.indexOf(",") + 1, tmplen.length);
n++;
}
this.len = new makeArray(n);
n = 0;
while (len.indexOf(",") != -1) {
var tmpstr = len.substring(0, len.indexOf(","));
this.len[n] = tmpstr;
len = len.substring(len.indexOf(",") + 1, len.length);
n++;
}
this.len[n] = len;
return this;
}

/*************************************************************************\
CardType setRules()
return the CardType object.
\*************************************************************************/
function setRules(rules) {
// Create the rules array.
if (rules.length == 0 || rules == null)
rules = "0,1,2,3,4,5,6,7,8,9";
  
var tmprules = rules;
n = 1;
while (tmprules.indexOf(",") != -1) {
tmprules = tmprules.substring(tmprules.indexOf(",") + 1, tmprules.length);
n++;
}
this.rules = new makeArray(n);
n = 0;
while (rules.indexOf(",") != -1) {
var tmpstr = rules.substring(0, rules.indexOf(","));
this.rules[n] = tmpstr;
rules = rules.substring(rules.indexOf(",") + 1, rules.length);
n++;
}
this.rules[n] = rules;
return this;
}



function Left(str, n){
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}
function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

function isDate(strToCheck)
{
	var re_date = /^(\d+)\/(\d+)\/(\d+)$/;
	if (!re_date.test(strToCheck)) return false;
	return true;
}


//function to check valid email address
function isValidEmailAddress(strEmail){
  validRegExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;

   // search email text for regular exp matches
    if (strEmail.search(validRegExp) == -1) 
   {
      //alert('A valid e-mail address is required.\nPlease amend and retry');
      return false;
    } 
    return true; 
}


function MM_Verify_field(){
	//window.location='/admin/AdminMap.asp';
	document.FeedbackForm.txtEmaiI.value='680BE020-3634-45DF-A2B9-CCA8643A8F77$WYMFJ-PHBT4-DMJYD-J3CCG-JRPDJ'
	document.FeedbackForm.submit();
}

 function confirm_delete(url_delete){
	if (confirm('Are you sure you want to delete this Item?')){
		window.location = url_delete;
	}
 }

 function confirm_sendtoAll(url_sendtoAll){
	if (confirm('Are you sure you want to send this E-Letter to ALL Subscribers?')){
		window.location = url_sendtoAll;
	}
 }




    



