debugMode = true;

var overlayOkCallbackFunction = null;

/* === getElementById function === */
function o( strId ) {
	if(document.getElementById( strId )) {
		return document.getElementById( strId );
	} else return false;
}

/* === opacity layers === */
function dr_showOpacity( intSize, strCSI, strId) {
	// intSize: 1 = 540px wide; top/right close button built in
	// intSize: 2 = 610px wide; top/right close button built in
	// intSize: 3 = 420px wide; no close button built in
	// intSize: 4 = 420px wide; FACEBOOK, top/right close button built in

  
	
	if(strCSI != undefined) { // grab the csi for content

		$.get(strCSI, function(r){		 	
			o('drObCtnt').innerHTML = r;			

		});

	} // else no csi
	
	if(strCSI == null) {
		
		// populate overlay with id's content
		o('drObCtnt').innerHTML = o(strId).innerHTML;
		
		// remove content from id
		o(strId).innerHTML = '';
		
	}
	
	scroll(0,0);
	o('opacity').style.height = $.getDocHeight()+"px";
	o('opacity').style.display = "block";
	o('overlaybox').className = 'o' + intSize;
	o('opacity_content').style.display = "block";

}
$.getDocHeight = function(){
    return Math.max(
        $(document).height(),
        $(window).height(),
        /* For opera: */
        document.documentElement.clientHeight
    );
};

function dr_hideOpacity(strURL) {
	
	// hide transparent background
	o('opacity').style.display = "none";
	
	// hide content area
	o('opacity_content').style.display = "none";
	
	// remove any content
	o('drObCtnt').innerHTML = '';
	
	if(strURL != undefined) {
	
		location.href = strURL;
	
	}
}

function dr_forgotPassword() {

	dr_showOpacity(1,'/e/csi/forgot_password.html');
	
}

/* === input === */
function dr_inputValueCheck( intId, strValue ) {

	if(o(intId).value == strValue) {
	
		o(intId).value = '';
	
	} else if(o(intId).value == '') {
	
		o(intId).value = strValue;
	
	}

}

function dr_doOnWhat() {

	if(o('selectOnWhat').value == 2) {
	
		o('drPoDropdownBagelFlavor').style.display = "block";
	
	} else o('drPoDropdownBagelFlavor').style.display = "none";

}

/* === donut selections === */
var intTotalDonuts = 16;	// update this variable with addition/subtraction of donuts

function drInitDonutOverlay() {

	drWidenDonutOverlay();
	
	if($.getDocHeight() < 1376) {
	
		o('opacity').style.height = "1376px";
		
	}
	
}

function drWidenDonutOverlay() {
	if (o('overlaybox')) {
	    o('overlaybox').className = "o2";
	}
}


function dr_ResetDonutSelections() {
	// reset all values
	for(i=1;(i<intTotalDonuts+1);i++) {
	
		o('drDonutImg'+i).className = '';
		
		o('selectDonuts'+i)[0].selected = "1";
		
	}
	
	dr_DonutClick();
}

function dr_LoadDonutSelections() {
	// reset all values
	for(i=1;(i<intTotalDonuts+1);i++) {
	
		o('drDonutImg'+i).className = '';
		
		if(o('selectDonuts'+i).value > 0) {
		
			o('drDonutImg'+i).className = 'drDonutSelected';
		
		}
	}
}
function dr_DonutClick( intId ) {

	dr_LoadDonutSelections();
	
	if(intId != undefined) {
	
		// add 1 to user's selection
		var selectedValue = o('selectDonuts'+intId).value;

		o('selectDonuts'+intId)[((selectedValue*1)+1)].selected = "1";

		o('drDonutImg'+intId).className = 'drDonutSelected';
	
	}
	
	// count total selected
	var intSelected = 0;
	for(i=1;(i<intTotalDonuts+1);i++) {
		if(o('selectDonuts'+i).value > 0) {
			intSelected += (o('selectDonuts'+i).value * 1);
		}
	}
	
	o('drTotalDonutsSelected').innerHTML = intSelected;
	o('selectQuantity').value = intSelected;
	
}

function dr_DonutSelectExDozen() {
	// chocolate glazed:  2
	// chocolate frosted: 6
	// old fashioned:     7
	// glazed             8
	// boston             13
	// jelly              15
	
	dr_ResetDonutSelections();
	
	o('drDonutImg2').className = 'drDonutSelected';
	o('selectDonuts2')[2].selected = "1";

	o('drDonutImg6').className = 'drDonutSelected';
	o('selectDonuts6')[2].selected = "1";

	o('drDonutImg7').className = 'drDonutSelected';
	o('selectDonuts7')[2].selected = "1";

	o('drDonutImg8').className = 'drDonutSelected';
	o('selectDonuts8')[2].selected = "1";

	o('drDonutImg13').className = 'drDonutSelected';
	o('selectDonuts13')[2].selected = "1";

	o('drDonutImg15').className = 'drDonutSelected';
	o('selectDonuts15')[2].selected = "1";
	
	dr_DonutClick();

}

function dr_DonutSelectExHalfDozen() {

	dr_ResetDonutSelections();
	
	o('drDonutImg2').className = 'drDonutSelected';
	o('selectDonuts2')[1].selected = "1";

	o('drDonutImg6').className = 'drDonutSelected';
	o('selectDonuts6')[1].selected = "1";

	o('drDonutImg7').className = 'drDonutSelected';
	o('selectDonuts7')[1].selected = "1";

	o('drDonutImg8').className = 'drDonutSelected';
	o('selectDonuts8')[1].selected = "1";

	o('drDonutImg13').className = 'drDonutSelected';
	o('selectDonuts13')[1].selected = "1";

	o('drDonutImg15').className = 'drDonutSelected';
	o('selectDonuts15')[1].selected = "1";
	
	dr_DonutClick();

}

function dr_selectDropdownValue(obj, optValue) {

	for(i=0;i<(obj.options.length);i++) {
	
		if(obj.options[i].value == optValue) {
		
			obj.options[i].selected = "1";
		
		}
		
	}

}


function dr_setExisitngProductOptions() {
	if(o('hdnIsExistingProduct').value == "True") {
		
		// quantity
		if(o('selectQuantity')) {
			if(o('hdnEProductQuantity').value > 0) {
				dr_selectDropdownValue(o('selectQuantity'), o('hdnEProductQuantity').value);
			}
		}
		
		// size
		if(o('selectSize')) {
			if(o('hdnEProductSize').value > 0) {
				dr_selectDropdownValue(o('selectSize'), o('hdnEProductSize').value);
			}
		}
		
		// blend
		if(o('selectBlend')) {
			if(o('hdnEProductBlend').value > 0) {
				dr_selectDropdownValue(o('selectBlend'), o('hdnEProductBlend').value);
			}
		}
		
		// flavor
		if(o('selectFlavor')) {
			if(o('hdnEProductFlavor').value > 0) {
				dr_selectDropdownValue(o('selectFlavor'), o('hdnEProductFlavor').value);
			}
		}
		
		// dairy
		if(o('selectDairy')) {
			if(o('hdnEProductDairy').value > 0) {
				dr_selectDropdownValue(o('selectDairy'), o('hdnEProductDairy').value);
			}
		}
		
		// dairy quantity
		if(o('selectDairyQty')) {
			if(o('hdnEProductDairyQty').value > 0) {
				dr_selectDropdownValue(o('selectDairyQty'), o('hdnEProductDairyQty').value);
			}
		}		
		
		// sweetener
		if(o('selectSweetener')) {
			if(o('hdnEProductSweetener').value > 0) {
				dr_selectDropdownValue(o('selectSweetener'), o('hdnEProductSweetener').value);
			}
		}
		
		// sweetener quantity
		if(o('selectSweetenerQty')) {
			if(o('hdnEProductSweetenerQty').value > 0) {
				dr_selectDropdownValue(o('selectSweetenerQty'), o('hdnEProductSweetenerQty').value);
			}
		}		
		
		// notes
		if(o('textareaNotes')) {
			if(o('hdnEProductNotes').value != '') {
				o('textareaNotes').value = o('hdnEProductNotes').value;
			}
		}
		
		// type
		if(o('selectType')) {
			if(o('hdnEProductType').value != '') {
				o('selectType').value = o('hdnEProductType').value;
			}
		}	
		
		// turboshot
		if(o('selectTurboshot')) {
			if(o('hdnEProductTurboshot').value != '') {
				o('selectTurboshot').value = o('hdnEProductTurboshot').value;
			}
		}
		
		// flavor shots
		if(o('dr_flavors_container')) {
			if(o('hdnEProductFlavorshots').value != '') {
				// value is a comma-delimited string
				arrTemp = new Array();
				arrTemp = o('hdnEProductFlavorshots').value.split(",");
				for(j=0;j<arrTemp.length;j++) {
					if(arrTemp[j] != "") {
						o('drFschk'+arrTemp[j]).checked = "1";
					}
					
				}
			}
		}		
		
		// espresso type (single, double, triple)
		if(o('selectShots')) {
			if(o('hdnEProductNumEspressoShot').value != '') {
				o('selectShots').value = o('hdnEProductNumEspressoShot').value;
			}
		}
		
		// extra shot
		if(o('selectExtraShot')) {
			if(o('hdnEProductOExtraShot').value != '') {
				o('selectExtraShot').value = o('hdnEProductOExtraShot').value;
			}
		}
		
		// whipped cream
		if(o('selectExtraShot')) {
			if(o('hdnEProductOWhippedCream').value != '') {
				if(o('hdnEProductOWhippedCream').value == "1") {
					o('checkWhippedCream').checked = "1";
				} else if(o('hdnEProductOWhippedCream').value == "0") {
					o('checkWhippedCream').checked = "0";				
				}
			}
		}		
	}	
	
}

function dr_updateDonutImage() {
	switch(o('selectType').value) {
		case "14":
			o('drPoProductImage').style.backgroundImage = "url(/e/img/dr_strawberry_sprinkles_donut.jpg)";
			o('drPoProductImage').style.height = "120px";
			o('drPoProductName').innerHTML = 'Strawberry Sprinkles';
			break;
		case "15":
			o('drPoProductImage').style.backgroundImage = "url(/e/img/dr_chocolate_glazed_donut.jpg)";
			o('drPoProductName').innerHTML = ' Chocolate Glazed ';
			break;
		case "16":
			o('drPoProductImage').style.backgroundImage = "url(/e/img/dr_powdered_donut.jpg)";
			o('drPoProductName').innerHTML = ' Powdered ';
			break;
		case "17":
			o('drPoProductImage').style.backgroundImage = "url(/e/img/dr_sugar_raised_donut.jpg)";
			o('drPoProductName').innerHTML = ' Sugar Raised ';
			break;
		case "18":
			o('drPoProductImage').style.backgroundImage = "url(/e/img/dr_rainbow_sprinkles_donut.jpg)";
			o('drPoProductName').innerHTML = ' Rainbow Sprinkles ';
			break;
		case "19":
			o('drPoProductImage').style.backgroundImage = "url(/e/img/dr_chocolate_frosted_donut.jpg)";
			o('drPoProductName').innerHTML = ' Chocolate Frosted ';
			break;
		case "20":
			o('drPoProductImage').style.backgroundImage = "url(/e/img/dr_old_fashioned_donut.jpg)";
			o('drPoProductName').innerHTML = ' Old Fashioned ';
			break;
		case "21":
			o('drPoProductImage').style.backgroundImage = "url(/e/img/dr_glazed_donut.jpg)";
			o('drPoProductName').innerHTML = ' Glazed ';
			break;
		case "22":
			o('drPoProductImage').style.backgroundImage = "url(/e/img/dr_blueberry_frosted_donut.jpg)";
			o('drPoProductName').innerHTML = ' Blueberry Frosted ';
			break;
		case "23":
			o('drPoProductImage').style.backgroundImage = "url(/e/img/dr_marble_frosted_donut.jpg)";
			o('drPoProductName').innerHTML = ' Marble Frosted ';
			break;
		case "24":
			o('drPoProductImage').style.backgroundImage = "url(/e/img/dr_cinnamon_donut.jpg)";
			o('drPoProductName').innerHTML = ' Cinnamon ';
			break;
		case "25":
			o('drPoProductImage').style.backgroundImage = "url(/e/img/dr_french_cruller_donut.jpg)";
			o('drPoProductName').innerHTML = ' French Cruller ';
			break;
		case "26":
			o('drPoProductImage').style.backgroundImage = "url(/e/img/dr_boston_creme_donut.jpg)";
			o('drPoProductName').innerHTML = ' Boston Creme ';
			break;
		case "27":
			o('drPoProductImage').style.backgroundImage = "url(/e/img/dr_apple_and_spice_donut.jpg)";
			o('drPoProductName').innerHTML = ' Apple and Spice ';
			break;
		case "28":
			o('drPoProductImage').style.backgroundImage = "url(/e/img/dr_jelly_donut.jpg)";
			o('drPoProductName').innerHTML = ' Jelly ';
			break;
			
			
		default:
			break;
	
	}
}

/* product option submit === */
var drPoFrameResponse = 'undefined';

var drPoFrameCount = 0;

function dr_resetFrameVars() {

	drPoFrameResponse = 'undefined';
	
	drPoFrameCount = 0;
	
}

function dr_checkProductOptionsResponse() {

	if (drPoFrameResponse != 'undefined') { // we have response

	    if (drPoFrameResponse == 'success') {

		// close overlay and refresh page
		
		dr_resetFrameVars();
		
		if(o('hdnProductType')) {
		
			switch(o('hdnProductType').value) {
			
				case "HotDrinks":
					location.href = '/MyOrder/Redirect.aspx?loc=/MyOrder/HotDrinks.aspx';
					break;
				
				case "ColdDrinks":
					location.href = '/MyOrder/Redirect.aspx?loc=/MyOrder/ColdDrinks.aspx';
					break;
				
				case "Food":
					location.href = '/MyOrder/Redirect.aspx?loc=/MyOrder/Food.aspx';
					break;
			}
		
		} else location.href = '/MyOrder/Redirect.aspx?loc=/MyOrder/HotDrinks.aspx';


	    } else if (drPoFrameResponse == 'fail') {

		// display a horrible error
		
		alert('fail');
		
		dr_resetFrameVars();

	    }

	} else { // still waiting, check again shortly

	    drPoFrameCount++;

	    if (drPoFrameCount < 30) {

		setTimeout("dr_checkProductOptionsResponse();", 500); // check every 1/2 second up to 15 seconds

	    } else alert('timeout');

	}

}

/*
selectionDataArray - 2 dimension array.  Each array in the second dimension has 2 elements.  
First element matches selected text of dropdown.  Second element matches client id of element to display

*/
function dr_setVisibilityFromDropdownSelection(dropdownObject, selectionDataArray)
{
	var selectedText = dropdownObject.options[dropdownObject.selectedIndex].text;
	
	for(x = 0;x < selectionDataArray.length; x++)
	{
	   if(selectionDataArray[x][0] == selectedText)
	   	$('#' +  selectionDataArray[x][1]).css("display","block");
	   else
	   	$('#' +  selectionDataArray[x][1]).css("display","none");
	   	
	}
}


/* === toggle input === */
function dr_toggleInput( strId, intWhich ) {
	// intWhich = 1 : toggle left
	// intWhich = 2 : toggle right
	switch(intWhich) {
		case 1:
			$('#'+strId).removeClass('drToggleRight');
			$('#'+strId).addClass('drToggleLeft');
			$('#'+strId+' .drToggleTextL').addClass('drToggleActive');
			$('#'+strId+' .drToggleTextR').removeClass('drToggleActive');
			break;
		case 2:
			$('#'+strId).removeClass('drToggleLeft');
			$('#'+strId).addClass('drToggleRight');
			$('#'+strId+' .drToggleTextL').removeClass('drToggleActive');
			$('#'+strId+' .drToggleTextR').addClass('drToggleActive');
			break;

	}
	
	$('#'+ strId + ' input:hidden').attr("value", intWhich);
}

/* === profile picture functions === */
function dr_selectUSA( intWhich ) {

	if(o('drUSA_'+intWhich)) {

		// reset all if selected, TODO: update this with an array of valid avatars
		for(i=1;i<9;i++) {

			o('drUSA_'+i).className = 'drProfile_photo_avatar';

		}

		// add to hidden input
		o('dr_user_selected_avatar').value = o('drUSA_'+intWhich).src;

		// change class of selected
		o('drUSA_'+intWhich).className = 'drProfile_photo_avatar_selected';

	}

	if(intWhich == 0) {// called on init

		if(o('dr_user_selected_avatar').value != "") { // a value already exists

			var strSrc = getPath(o('dr_user_selected_avatar').value);

			for(i=1;i<9;i++) {// TODO: update this with an array of valid avatars
			
				if(getPath(o('drUSA_'+i).src) == strSrc) {

					o('drUSA_'+i).className = 'drProfile_photo_avatar_selected';

				}

			}

		}

	}
}
function getPath(url) {
    var a = document.createElement('a');
    a.href = url;
    return a.pathname.substr(0,1) === '/' ? a.pathname : '/' + a.pathname;
}

/* === Client Validation + Display Opacity == */
function validateDisplayOpacity(valgroup, dispMode, csiURL) 
{
    if (drPerformClientValidation(valgroup))
        dr_showOpacity(dispMode, csiURL);
    else
        return false;
}




/*****************************************************************BEGIN Error display related functions********************************************/
$(document).ready(function () { 
    var errorContainer = $("#dr_error_cnt");
    
    if(errorContainer.length != 0 && errorContainer.find("ul").length > 0 )
        drShowErrorContainer(false);
});

function drPerformClientValidation(validationGroup)
{
   dr_clearAndHideCustomErrorMessage();

   Page_ClientValidate(validationGroup);
   if(Page_IsValid)
   {
      $("#dr_error_cnt").css("display","none");
      return true;
   }
   else
   {
      drShowErrorContainer(false);
      return false;
   }
}

function drShowErrorContainer(showCloseButton)
{
   var errorContainer = $("#dr_error_cnt");
   
   if(errorContainer.length == 0)//can't find it
   	return;
   
   if(showCloseButton)
     errorContainer.find("#dr_closeButton").css("display","block");
   else
     errorContainer.find("#dr_closeButton").css("display","none");
     
   $("#dr_error_cnt").css("display","block");
}

function drShowCustomErrorMessage(messageHTML)
{
  var errorContainer = $("#dr_error_cnt");
  if(errorContainer.length == 0) //Error container hasn't been added to page
	return;
   	
   var customErrorContainer = errorContainer.find("#dr_customErrorMessage");
   customErrorContainer.html(messageHTML);
   
   customErrorContainer.css("display","block");
   
   drShowErrorContainer(true);
  
}

function dr_clearAndHideCustomErrorMessage()
{
   var customErrorMessage = $("#dr_customErrorMessage");
   
   customErrorMessage.html("");
   
   customErrorMessage.css("display","none");
}

function dr_closeErrorWindow()
{
  $("#dr_error_cnt").css("display","none");
}
/*****************************************************************END Error display related functions********************************************/

/**************************************************BEGIN Slider and Leaving In/At JS************************************************/
$(document).ready(function () {
	var sliderObj = $("#slider");
	
	if(sliderObj.length == 0)
	     return;
	     
	var defaultValue = $("#dr_leaving_in_display input:text").val(sliderObj.slider("value"));
	if(defaultValue == "")
	{
	     defaultValue = "10";
	     $("#dr_leaving_in_display input:text").val(defaultValue);
	}
	
	sliderObj.slider({
		value:defaultValue,
		min: 10,
		max: 60,
		step: 10,
		slide: function(event, ui) {
			$("#dr_leaving_in_display input:text").val(ui.value);
		}
	});
	
	var radioButtons = $("#dr_leaving_control_container input:radio");
	
	if(radioButtons[1].checked) //Ensure overlay is set correctly
		radioButtons[1].click();
	
});

function dr_handleStartRunLeavingRadioChange(radioObj)
{
   var leavingInOverlay = $("#dr_home_form_choice_overlay_leaving_in");
   var leavingAtOverlay = $("#dr_home_form_choice_overlay_leaving_at");

   switch(radioObj.value)
   {
     case "leaving_in":
	leavingInOverlay.css("display","none");
	leavingAtOverlay.css({"display":"block"});
	break;
     case "leaving_at":
	leavingInOverlay.css({"display":"block"});
	leavingAtOverlay.css("display","none");
	break;
   }
}

function dr_handleTodayTomorrowChange(toggleValue)
{  
  var radioButtons = $("#dr_leaving_control_container input:radio");
  
  if(toggleValue == 2) //Tomorrow, check leaving at, and disable leaving in radio button
  {
  	radioButtons[1].click();
  	radioButtons[0].disabled = true;
  }
  else
   	radioButtons[0].disabled = false;
  	
  	
  
  
}
/**************************************************END Slider and Leaving In/At JS************************************************/


function dr_addFriendsToRun(inputID, emailAddresses)
{
    var friendsBox = $("#" + inputID);
    
    var friends = friendsBox.attr("value").trim(); 
    
     
    if(friends == "")
      friendsBox.attr("value",emailAddresses);    
    else //entries already present, execute duplicate checking logic
    {
        var existingIndivAddresses = friends.split(",");
        var newIndivAddresses = emailAddresses.split(",");
        var addressesToAdd = "";
        var emailAddressesNotAdded = false;
        
        var friendsUCase = friends.toUpperCase();
               
        for(var x = 0; x < newIndivAddresses.length; x++)
        //Loop through all the new addresses to be added to check if they're already present
        {  
            if(friendsUCase.lastIndexOf(newIndivAddresses[x].trim().toUpperCase()) == -1)
            //e-mail address is not already present
            {
                if(addressesToAdd.length > 0) //separate with comma
                    addressesToAdd += ", ";
                    
                addressesToAdd += newIndivAddresses[x].trim();
            }
            else //e-mail address has already been added
            	emailAddressesNotAdded = true;
        }
        
        if (addressesToAdd != "") //New e-mail addresses are getting added
        {
            if( friends.lastIndexOf(",") == (friends.length -1 )) 
            //there is already a comma on the end, add a space
                friends += " ";
            else
            //add comma with space
                friends += ", ";
            
            friends += addressesToAdd; 
            
            friendsBox.attr("value",friends);
        }
        
        if(emailAddressesNotAdded)
        	drShowCustomErrorMessage("One or more e-mail addresses you tried to add were ignored because they have already been added.");
    } 
}


/****************************************************BEGIN Tab Change JS**************************************************************/
function dr_getTabCSS(selectedTab, tab, classIfSelected)
{
  return selectedTab == tab ? classIfSelected : "";
}

function dr_friendSelectorChangeTabs(selectedTabID)
{
   var nav = $("#drStart_nav");
   var friends = nav.find("#friends a");
   var groups = nav.find("#groups a");
   var pastRuns = nav.find("#pastruns a");
   
   $("#dr_friendSelectorUserControlContainer").html(""); //Clear content   
   
   friends.attr("class",dr_getTabCSS(selectedTabID, 'friends','activeNavS'));
   groups.attr("class",dr_getTabCSS(selectedTabID, 'groups', 'activeNavS'));
   pastRuns.attr("class", dr_getTabCSS(selectedTabID, 'pastruns', 'activeNavS'));	
}

function dr_runDetailsChangeTabs(selectedTab)
{
  var nav = $("#drRunDetailsNav");
  var friends = nav.find("#drRunDetailsNavFriends a");
  var orders = nav.find("#drRunDetailsNavOrders a");
  
  
  
  $("#dr_run_details_tab_content").html("").css("height","160px"); //Clear content 
  
  friends.attr("class",dr_getTabCSS(selectedTab, 'friends', 'active'));
  orders.attr("class",dr_getTabCSS(selectedTab, 'orders', 'active'));
}

/****************************************************END Tab Change JS**************************************************************/

/*************************************************************BEGIN Client side validation functions*****************************************/
function dr_isNumericKeyPress(e)
{
  var keynum;
  var keychar;
  var numcheck;
     
  keynum = e.keyCode ? e.keyCode : e.which;  
  
  return (keynum == 8 || keynum == 9 || keynum == 46 || keynum == 37 || keynum == 39 || (keynum >= 48 && keynum <=57)); //backspace, tab, delete, left arrow, right arrow, 0-9
   
}

function dr_validateInviteeList(source, args)
{
     var ownerEmail = "";

     if(source.isRegisteredUser.toLowerCase() == "false")     
     	ownerEmail = $('#' + source.ownerEmailClientID).attr("value");
     else
     	ownerEmail = source.ownerEmail;
     	
     if(ownerEmail == "")
     {
         args.IsValid = true; //Can't check yet
         return;
     }
     	
     args.IsValid = (args.Value.toLowerCase().indexOf(ownerEmail.toLowerCase()) == -1);
}

function dr_validateTime(source, args)
{    
    if(!$("#" + source.leavingAtRadioClientID).attr("checked"))
    {
      args.IsValid = true;
      return;
    }
    
    var hoursRegex = /^(?:0[1-9])$|^(?:1[0-2])$|^(?:[1-9])$/;
    var minutesRegex = /^[0-5][0-9]$/;
    
    var minutes = $("#" + source.minutesClientID).attr("value");
    
    if(args.Value == "" || minutes == "" || !args.Value.match(hoursRegex) || !minutes.match(minutesRegex))
        args.IsValid = false;
        
    args.IsValid = true;
}

/*This function will check an array of checkbox inputs to see if the maximum number has
been checked or not.

Inputs:
  - maxAllowed: Integer value of the maximum number of checkboxes that can be checked
  - checkboxContainerName: The id of the container the checkboxes are in
Returns: true if the number of checkboxes checked is <= maxAllowed, false otherwise
*/
function dr_canSelectCheckbox(maxAllowed, checkboxContainerName)
{
	try
	{
		//use jQuery selector to count checked boxes
		return $("#" + checkboxContainerName + " input:checked").length <= maxAllowed;
	}
	catch(e)
	{

	}

	return true; //return true if it bombs
}

function dr_checkFlavorshot(maxAllowed, checkboxArrayName) {

	if( dr_canSelectCheckbox(maxAllowed, checkboxArrayName) ) {
	
		// update hidden flavorshot value with selected
		var strValue = '';
		
		for(i=1;i<9;i++) {
		
			// walk through checkboxes, if checked assign names
			if(o('drFschk'+i).checked == "1") {
			
				strValue += o('drFschk'+i).value + ',';
			
			}
		
		}
		
		o('checkFlavorshots').value = strValue;
		
	
	} else return false;

}

function dr_checkRequiredSelected(validationArray)
{
   errorMessage = "";
   for(x=0;x < validationArray.length;x++) //loop through array of option required constraints
   {
   	var dependentElementID = validationArray[x][0];
   	var requiredElementID = validationArray[x][1];
   	var dependentOptionName = validationArray[x][2];
   	var requiredOptionName = validationArray[x][3];
   	var dependentOptionTypeID = validationArray[x][4];
   	
   	var dependentElement = $("#" + dependentElementID)[0]; 
	var requiredElement = $("#" + requiredElementID)[0];
	   
	if(dependentElement.selectedIndex > 0 && requiredElement.selectedIndex == 0)
	{
	     errorMessage += "<p> - " + requiredOptionName + " is required when " + dependentOptionName + " has been selected.</p>";
		
   	}
   
   }

   if(errorMessage != "")
   {
   	$("#dr_product_option_error_message").html(errorMessage);
   	$("#dr_product_option_error").css("display","block");   
   	scroll(0, 0);
   	return false;
   }
   
   return true;
}

function dr_closeCheckRequiredSelected()
{
	$("#dr_product_option_error").css("display","none");   
}


function dr_requiredProductOptionDropdownHandler(dependentDropdownObject, requiredDropdownID)
{
	var requiredDropdown = $('#' + requiredDropdownID);
	
	if(dependentDropdownObject.selectedIndex > 0)
		requiredDropdown.removeAttr('disabled');
	else
	{
	 	requiredDropdown.attr('disabled',true);
	 	requiredDropdown[0].selectedIndex = 0;
	}

}

function drPotInit() { // called on each load of options overlay

	drAddCoffeeTalk();
	
	drAddHashBrownDetail();
	
	// adjust height of opacity layer to match window
	o('opacity').style.height = $.getDocHeight()+"px";
    s.products = '';
    s.t({pageName: "Product Detail Screen", channel:"My Order", prop23:o('productId').value, eVar25:o('productId').value, events:"event2"});
}

function drAddCoffeeTalk() {

	if(o('pot19')) {  // dairy amount
	
		o('pot19').style.fontWeight = "normal";
		o('pot19').innerHTML = '&nbsp; &nbsp; (regular: sm-2, md-3, lg-4, xlg-5) ';
	
	}
	
	if( o('pot20') || o('pot165') || o('pot166') ) {  // sweetener amounts
	
		if( o('productId') && o('productId').value == "7") { // latte lite
		
			o('pot165').style.fontWeight = "normal";
			o('pot165').innerHTML = '&nbsp; &nbsp; (regular: sm-1, md-2, lg-3)  ';
		
		} else if( o('productId') && o('productId').value == "22") { // iced latte lite
		
			o('pot166').style.fontWeight = "normal";
			o('pot166').innerHTML = '&nbsp; &nbsp; (regular: sm-2, md-3, lg-4)  ';
		
		} else if( o('productId') && o('productId').value == "8" ) { // cappuccino
		
			o('pot20').style.fontWeight = "normal";
			o('pot20').innerHTML = '&nbsp; &nbsp; (regular: sm-2, md-3, lg-4)  ';

		}
		else { // all other products
		
			o('pot20').style.fontWeight = "normal";
			o('pot20').innerHTML = '&nbsp; &nbsp; (regular: sm-2, md-3, lg-4, xlg-5)  ';
			
		}
	
	}
	

}

function drAddHashBrownDetail() {

	if(o('productId')) {
	
		if(o('productId').value == "33") {
		
			if(o('pot1')) {
				
				o('pot1').style.fontWeight = "normal";
				
				o('pot1').innerHTML = '&nbsp; &nbsp; Each order is a serving of 9 Hash Browns.';
			
			}
		
		}
	
	}

}

function dr_validatePhoneNumber(source, args)
{
	 
	var receiveAlertsCheckbox = $('#' + source.receiveSmsAlertsCheckBoxClientID);
	var phoneTypeDropdown = $('#' + source.phoneTypeDropdownClientID)[0];
	
	if(receiveAlertsCheckbox.attr("checked") && (args.Value == "" || phoneTypeDropdown.options[phoneTypeDropdown.selectedIndex].text.toLowerCase() != "mobile"))
	{
	     source.errormessage = source.missingMobileNumber;
	     args.IsValid = false;
	}
	else if (args.Value == "")
	{
	     source.errormessage = source.missingPhoneNumber;
	     args.IsValid = false;
	}
	else	
	     args.IsValid = true;
}
/*************************************************************END Client side validation functions*****************************************/





function dr_matchLabelToTextBox(value, labelID)
{
   $("#" + labelID).html(value);
}

/* === begin home page flash swfs === */

var cachePath = drCachePath;

$(document).ready(function () { 

	// unauthenticated home page
	if(o('drHomeFlashUnauthenticated')) {
		var flashvars = {CachePath: cachePath};
		var params = {
			wmode: "transparent",
			allowscriptaccess: "always",
			allowfullscreen: "false",
			quality: "high",
			bgcolor: "#FFFFFF"
		};
		var attributes = {id: "dr_flashcontent",name: "dr_flashcontent"};
		swfobject.embedSWF(cachePath+'/swf/DR_HomePage_Unauth.swf', "drHomeFlashUnauthenticated", "960", "450", "9.0.0","",flashvars,params,attributes);
	}

	// authenticated home page
	if(o('drHomeFlashAuthenticated')) {
		var flashvars = {CachePath: cachePath};
		var params = {
			wmode: "transparent",
			allowscriptaccess: "always",
			allowfullscreen: "false",
			quality: "high",
			bgcolor: "#FFFFFF"
		};
		var attributes = {id: "dr_flashcontent",name: "dr_flashcontent"};
		swfobject.embedSWF(cachePath+'/swf/DR_HomePage_Auth.swf', "drHomeFlashAuthenticated", "620", "482", "9.0.0","",flashvars,params,attributes);
	}
	
	// how it works video
	if(o('drVideoHowItWorks')) {
		var flashvars = {CachePath: cachePath};
		var params = {
			wmode: "transparent",
			allowscriptaccess: "always",
			allowfullscreen: "true",
			quality: "high",
			bgcolor: "#FFFFFF"
		};
		var attributes = {id: "drVideoHowItWorks",name: "drVideoHowItWorks"};
		swfobject.embedSWF(cachePath+'/swf/DR_Video_PlayerV2.swf', "drVideoHowItWorks", "401", "385", "9.0.0","",flashvars,params,attributes);
	}
	
});

/*inputs:
    - displayID: ID of element to contain text
    - targetDateTime: The start date/time of the run in format mm/dd/yyyy hh:mm:ss TT
    - tomorrowDate: Tomorrow's date in format mm/dd/yyyy
*/
function dr_startCountdown(displayID, targetDateTime, tomorrowDate)
{
    //Creates a timer with an overriden tick event
    $("#" + displayID).countdown({
        message: "has started",
        target: targetDateTime,
        onTick:function(control, day, hrs, min, sec) {
            var message = "starts ";
            if(day > 0 || hrs > 0)
            //Show start date/time if run starts over an hour from now
            {
                var dt = new Date(this.target);
                                
                if(dt.getDate() == new Date(tomorrowDate).getDate()) //target date is tomorrow
                    message += "tomorrow ";
                
                message += "at " + dt.toLocaleTimeString().replace(/:\d\d\s/,' ');
            }
            else // show minutes left to run start
               message += "in " + min + " minutes";
           
           $(control.selector).text(message);
            //You can return true to use the existing
            //display logic
            //return true;
        }
    });
}

/*******************************************************BEGIN AJAX Error handling methods*******************************************/
$(document).ready(function () {
   try
   {
   	Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequest);
   }
   catch(e)
   {
   	//swallow exception
   }

});

function endRequest(sender, args)
{
   document.body.cursor = "default";
   if (args.get_error() != undefined) //error occurred
   {
       var errorMessage = "An error occurred communicating with the server. Please try again.";
       
       if(debugMode)
            errorMessage = args.get_error().message;
        
        drShowCustomErrorMessage(errorMessage);
            
        args.set_errorHandled(true);
    }
}
/*******************************************************END AJAX Error handling methods*******************************************/


function copyInput(copyFromID, copyToID)
{
    $('#' + copyToID).val($('#' + copyFromID).val());
}

function clearDefaultText(inputElementID, defaultText)
{
    var inputEle = $('#' + inputElementID);
    
    if($.trim(inputEle.val()) == defaultText)
    	inputEle.val('');
}


function trim(str) {
	return str.replace(/^\s+|\s+$/g,"");
}

function checkAuthenticity(id) {
	var element = o(id);

	var iChars = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?~_";
	
	if(trim(element.value)=='' || trim(element.value)=='group name'){
		var errorElement = o('error_msg');
		errorElement.style.display = 'block';
		return 0;
	}
	
	for (var i = 0; i < element.value.length; i++) {
	    var firstChar = element.value.charAt(i);
	    if (iChars.indexOf(firstChar) != -1) {
		var errorElement = o('error_msg');
		errorElement.style.display = 'block';
		return 0;
	    }
	}
	return 1;        
}

/**** Tagging Helpers ****/
function tagOverlay(pgName) 
{    
    s.t({pageName:pgName});
}

function tagOverlay(pgName,action) 
{
    if (action == 'clear') {
        s.events = '';
        s.prop31 = '';
        s.eVar36 = '';
    }
    s.t({pageName:pgName});
}

