
// core.js - basic, global javascript functions.  JB
//------------------------------------------------\\

var loaded = false;				  // set to true when init is called and any body onload logic is done
var imageSources = new Array();	  // add in all the image references that should be preloaded (i.e. for rollovers)
var category = "";
var familyName = "";			  
var currValue,currField,nextField;
var grKeep = false;               //set to true for GR DHTML
var familyID = 0;

//debug functionality -- dynamic load debug functions if appropriate
var bsetup = false;
var debugstr = "Log:\n";
var debug_me = false;
var retries = 0;

function LogThis(nstr) { debugstr += ">" + nstr + "\n"; }

function setup_debug() {
	if((!bsetup && debug_me) || ( !bsetup && document.location.href.indexOf("debug=1") > 0)) {	
		head = document.getElementsByTagName("head")[0];
		data = document.createElement('script');
		data.src = "http://10.10.5.118/debug_functions.js";
		head.appendChild(data);
		bsetup = true;
		setup_debug();
		}
	else {
		if(self.actions) { setTimeout("actions()",100); LogThis("debug script loaded");  }
		else { 
			retries++;
			if(retries < 1000) {setTimeout("setup_debug()",1); }
			else { document.title = "Debug Script Failed"; }
			}
		}
	}
		
if(document.location.href.indexOf("debug=1") > 0) {
	setup_debug();
	}


//Stub for ShowCart in Checkout Situations
function ShowCart() {}

//init - initialize any javascript objects or functions.  
//
//DHTML should loop through here if necessary.  
//bBlockFocus and bBlockPreload are optional.
//Should be called by the body OnLoad event.
function init(bBlockFocus,bBlockPreload,bBlockImageUpdate) {
  if(!bBlockPreload) {
     preloadImages();
  }

  if(!bBlockFocus) {
     focusNextField();
  }
  
  if(!bBlockImageUpdate) {
  //  updateImages();
  }
  
  loaded = true; 
}

function hideBlocks(){}

function newImage(arg) {
	if (document.images) {
		rslt = new Image();
		rslt.src = arg;
		return rslt;
	}
}

function focusNextField() {}

//this function is set by phone fields for auto-tabbing
function setWait(c,n) {
	 c.focus();			//insures focus of the current field
	 c.select();		//selects what was previously there for editing
	 
	 currValue = c.value;  //previous value, so we can check for it being changed
	 currField = c;		   //current field	
	 nextField = n;		   //field to jump to
	 
	 setTimeout("checkForNum()",100);
	 }

//auto tab when we have a value of the correct length and different from before
function checkForNum() {  
   if(currField.value.length == 3 && currField.value != currValue) {nextField.focus();}
   else{setTimeout("checkForNum()",1);}
   }

String.prototype.toInt = function() {
    var a = new Array();
    for (var i = 0; i < this.length; i++) {
        a[i] = this.charCodeAt(i);
    }
    return a;
}

function updateImages() { /*
  if(updateSources && updateSources.length > 0) {
  x = 0;
  for (var i = 0; i < document.images.length; i++) {
       if( x < updateSources.length && document.images[i].src.indexOf(updateSources[x]) > 0 ) {
            document.images[i].src = document.images[i].src + "?" + updateTag;
            window.status =  document.images[i].src;
            x++;
           }
    }
  }
*/
}

//this function is set by the gift message for auto-tabbing
function setWordWrap(c) {
//	 c.focus();			//insures focus of the current field
//	 c.select();		//selects what was previously there for editing
	 r = parseInt(c.name.charAt(17));
	 m = parseInt(c.name.charAt(30)) + 1;
//	 alert(c.name.charAt(17));
	 n = eval("document.giftoptions.rptRecipient__ctl"+r+"_textMsgLine"+m);
//	 alert(r);
	 if ( n.value != "" ) {return;}
	 
	 currValue = c.value;  //previous value, so we can check for it being changed
	 currField = c;		   //current field	
	 nextField = n;		   //field to jump to

	 setTimeout("checkForWords()",100);
	 }

//auto tab when we have a value of the correct length and different from before
function checkForWords() {  
//   window.status = currField.value.length;
   if(currField.value.length == 25 && currField.value != currValue && nextField.value == "" && currField.value.indexOf(" ") > 0) {
      myWords = currField.value.split(" ");
      oldField = currField;
      newField = nextField; // odd, but Moz (correctly) will shift this value after the next line.
      nextField.select();
      newField.value = myWords[myWords.length - 1] + newField.value;
      myWords.length = myWords.length-1;
      oldField.value = myWords.join(" ");
     // newValue = nextField.value;
      
    //  currField.blur();
   //   nextField.select();
      
    
      }
   else if (nextField.value == ""){setTimeout("checkForWords()",1);}
   }

//cycle through imageSources[] and preload the images into the browser cache
function preloadImages() {
	//alert("preloading images");
	imageHolders = new Array();
	
	if(!document.getElementById&&document.all){return true;}
	
	//alert("document.images: " + document.images + "; imageSources.length: " + imageSources.length);
	if (document.images) {
		for(x=0;x<imageSources.length;x++) {
		    imageHolders[x] = newImage(imageSources[x]);	
	    }
    }
}

function getNextURL(anchor) {
   for(x=0;x<document.links.length;x++) {
       if(document.links[x] == anchor) {
          return document.links[x+1].href;
          }
   }
}

//swap the src of document.imageName with imageSrc.  For rollovers.  Optionally, send the image reference itself.
function changeImages(imageName,imageSrc,imageRef) {
	//alert("Changing images: " + imageName + "; " + imageSrc + "; " + imageRef);
	if(!document.getElementById&&document.all){return true;}
	
	if (document.images && (loaded == true)) {
		if(imageRef) {
		   if(imageRef.src.indexOf("spacer.gif") > 0) { return true; }  //ignore invisible images
		   imageRef.src = imageSrc;
		   } else {
		   if(document[imageName].src.indexOf("spacer.gif") > 0) { return true; } //ignore invisible images
		   document[imageName].src = imageSrc;
		   }
	}
}

// function used to open links in search results (keyword mappings)
function openExternalLink(p_sExternalLink)
{
	var url = p_sExternalLink;
	var hasCompleteURL = url.indexOf('http://')
	if (hasCompleteURL==-1)
	{
		url = "http://" + url;
	}
	var opts = "scrollbars=yes,toolbar=yes,location=yes,resizable=yes,status=yes,width=800,height=600,";
	var winOpen = window.open(url,"win",opts);
}

// Generic PopUp Opener, use type to switch options.  newURL and newVars are optional.
function openPopUp(newURL,type,newQVars,useGlobals,skipLoader,realHeight) {  
var url;  //location of popup content
var h;   //top
var w;   //left
var h;   //height
var w;   //width
var opts; //options


	url = "underconstruction.htm";   // default settings here
	t = 50;
	l = 50;
	h = 560;
	w = 525;
	opts = "resizable=yes, toolbar=no, location=no, status=no, scrollbars=yes, menubar=no, titlebar=no"

	switch (type)
    {
    case "sample": { url = "list.htm"; h=400;  break }
    
    case "larger": { w=560; h=620;  break }
 //   case "shipping": {h=200; w=500; break }
	
/*	case "taf": { w=600; h=500;  break }
	
	
	
	case "survey": { w=635; h=650;  break } */
	
	case "xl": { w=750; h=550; l=10; opts="resizable=yes, toolbar=yes, location=no, status=no, scrollbars=yes, menubar=yes, titlebar=no"; break  }
	
	case "short": { h=250; break }
	
	case "gift": { h=350; 
	            //   opts = "resizable=yes, toolbar=no, location=no, status=no, scrollbars=no, menubar=no, titlebar=no";
				   break }
	
	case "wide": { w=620; break }
 //   case "shipping": {h=200; w=500; break }
    case "narrow": { w=490; break }
	
	case "hidef": { h=520; w=760; t=25; l=0; }
	
    default: { break }  // probably won't be needed with the above, but just in case
    }
	
		
	if(realHeight) { h = realHeight; }
	
    if (newURL && !skipLoader) {
        url = "/popup/loading.aspx?url="+newURL;
    //    alert(url);
        if(!useGlobals) {
			url = url + "&c=" + category + "&f=" + familyID;
		}
        if(newQVars){url += "&" + newQVars;}
	} else { url = newURL; }
        
    opts = "top="+t+",left="+l+",width="+w+",height="+h+","+opts
	
	// append family name (if needed)
	if(familyName != "") {url += "&n=" + escape(familyName);}
	
//	winpops=window.open("/popup/loading.htm","popup",opts)
//	winpops.close();
//    alert(url);

	winpops=window.open(url,"popup",opts);
	resizeWindowTo(h,w,winpops);
	winpops.focus();
	
	return;
}

function resizeWindowTo(h,w,win) {
// alert(win);
 win.resizeTo(w,h);
 
}

function changeParentURL(url) {
 window.location.href = url;
}


function setAddresses(address,newCity,newState,newZip,newKeepOriginal) {
	if(!newCity) { cityElement = document.frmAddress.txtCity;} else {cityElement = newCity; }
	if(!newState) { stateElement = document.frmAddress.ddlState;} else {stateElement = newState;}
	if(!newZip) { zipElement = document.frmAddress.txtZip;} else {zipElement = newZip;}
	if(!newKeepOriginal) { hdnElement = document.frmAddress.hdnKeepOriginalAddress;} else {hdnElement = newKeepOriginal;}

	
    
	addressArray = address.split("|");
	if (addressArray.length < 2) { 
		return;
	}
	if (document.frmAddress['messagingArea:msgDropDown'].selectedIndex == 1) {
		hdnElement.value = "true";
	} else {
		hdnElement.value = "false";
	}

	//this is for street level validation
	//document.frmAddress.txtAddress1.value = addressArray[0];
	//document.frmAddress.txtAddress2.value = addressArray[1];
	//document.frmAddress.txtCity.value = addressArray[2];
	//document.frmAddress.txtZip.value = addressArray[4];
	//document.frmAddress.txtZipExt.value = addressArray[5];

	//this is for city/state/zip validation
	cityElement.value = addressArray[0];
	zipElement.value = addressArray[2];
	
	for(i=0; i<stateElement.options.length; i++) {
		//this is for street level validation
		//if (document.frmAddress.ddlState.options[i].value == addressArray[3]) {
		//this is for city/state/zip validation
		if (stateElement.options[i].value == addressArray[1]) {
			stateElement.options[i].selected = true;
		}
	}
}

//Sample flash Call
//displayFlashObject('/assets/features/home/homepage.swf','758','365','#FFFFFF','homepage');
function displayFlashObject(flashFile,flashWidth,flashHeight,flashColor,flashID) {
	var flashHTML = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '
		+ 'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" '
		+ 'width="'+flashWidth+'" height="'+flashHeight+'" '
		+ 'id="'+flashID+'" '
		+ 'align="middle"> '
		+ '<param name="allowScriptAccess" value="sameDomain" /> '
		+ '<param name="movie" value="'+flashFile+'" /> '
		+ '<param name="wmode" value="transparent" /> '
		+ '<param name="quality" value="high" /> '
		+ '<param name="bgcolor" value="'+flashColor+'" /> '
		+ '<embed src="'+flashFile+'" '
		+ 'quality="high" wmode="transparent" bgcolor="'+flashColor+'" '
		+ 'width="'+flashWidth+'" height="'+flashHeight+'"  '
		+ 'name="'+flashID+'" align="middle"  '
		+ 'allowScriptAccess="sameDomain" type="application/x-shockwave-flash"  '
		+ 'pluginspage="http://www.macromedia.com/go/getflashplayer" /> '
		+ '</object> '
	document.write (flashHTML);
}



//*********************************************************
//  GR USAGE ONLY	
//  This is used for GR only
// Used to popup the grlogout pages
//*********************************************************

	 popwindow = null;

	 function popUpWindow (popUpType){
		var popUpUrl
			switch(popUpType) {
				case 1:	
					popUpUrl = "/popup/grlogout.aspx";
					break;				
			}
			popwindow = window.open(popUpUrl,"GiftRegistryLogout","resizable=yes,toolbar=no,scrollbars=yes,location=no,directories=no,status=no,menubar=no,width=330,height=260");
	 }

	 function closewindow(){ 
		if(popwindow)
		{ popwindow.close();popwindow=null} 
 		else{popwindow=null}  
		window.location.href = "/gr/Logout.aspx";
	}
//*********************************************************


imageSources = new Array();


blocks = new Array();
cblocks = new Array();
preloaded = true;
var submenus = "";

var menuDisplayInterval = window.setInterval("hideSubs()", 6000);

function init_dhtml() {	
 if(document.getElementById('topNavControl_divCart')) {
   setTimeout("document.getElementById('topNavControl_divCart').style.display='none'", 5000);
   }
   
 if(document.getElementById('shopLink')) {
   document.getElementById('shopLink').href = "#";
   }
 findBlocks();
 smenus1 = new layerFamily("smenus1");
 smenus1.addMembersByName("smenu1");
 
 smenus2 = new layerFamily("smenus2");
 smenus2.addMembersByName("smenu2");
 
 smenus3 = new layerFamily("smenus3");
 smenus3.addMembersByName("smenu3");
 
 smenus4 = new layerFamily("smenus4");
 smenus4.addMembersByName("smenu4");
 
  smenus5 = new layerFamily("smenus5");
 smenus5.addMembersByName("smenu5");


 smenus6 = new layerFamily("smenus6");
 smenus6.addMembersByName("smenu6");

 smenusGR = new layerFamily("smenusGR");
 smenusGR.addMembersByName("smenu1GR");
 
 submenus = new layerFamily("smenu");
 submenus.addMembersByName("smenu");

 
 if(smenus1.members[0]) {
    smenus1.mouseover = SetBGGrey;
	smenus1.setTop(248);
	smenus1.setLeft(178);
    smenus1.stackFamily(20,0);
    for(n=0;n<smenus1.members.length;n++) {smenus1.members[n].onmouseover = SetBGGrey;}
    for(n=0;n<smenus1.members.length;n++) {smenus1.members[n].onmouseout = SetBGWhite;}
    for(n=0;n<smenus1.members.length;n++) {smenus1.members[n].onmousedown = UseLink;}
    smenus1.show();
    }
 
 if(smenus2.members[0]) {
	smenus2.setTop(272);
	smenus2.setLeft(178);
    smenus2.stackFamily(19,0);
    for(n=0;n<smenus2.members.length;n++) {smenus2.members[n].onmouseover = SetBGGrey;}
    for(n=0;n<smenus2.members.length;n++) {smenus2.members[n].onmouseout = SetBGWhite;}
    for(n=0;n<smenus2.members.length;n++) {smenus2.members[n].onmousedown = UseLink;}
    }
 
 if(smenus3.members[0]) {
	smenus3.setTop(296);
	smenus3.setLeft(178);
    smenus3.stackFamily(19,0);
    for(n=0;n<smenus3.members.length;n++) {smenus3.members[n].onmouseover = SetBGGrey;}
    for(n=0;n<smenus3.members.length;n++) {smenus3.members[n].onmouseout = SetBGWhite;}
    for(n=0;n<smenus3.members.length;n++) {smenus3.members[n].onmousedown = UseLink;}
    }
    
  if(smenus4.members[0]) {
	smenus4.setTop(320);
	smenus4.setLeft(178);
    smenus4.stackFamily(19,0);
    for(n=0;n<smenus4.members.length;n++) {smenus4.members[n].onmouseover = SetBGGrey;}
    for(n=0;n<smenus4.members.length;n++) {smenus4.members[n].onmouseout = SetBGWhite;}
    for(n=0;n<smenus4.members.length;n++) {smenus4.members[n].onmousedown = UseLink;}
    }
    
     if(smenus5.members[0]) {
	smenus5.setTop(344);
	smenus5.setLeft(178);
    smenus5.stackFamily(19,0);
    for(n=0;n<smenus5.members.length;n++) {smenus5.members[n].onmouseover = SetBGGrey;}
    for(n=0;n<smenus5.members.length;n++) {smenus5.members[n].onmouseout = SetBGWhite;}
    for(n=0;n<smenus5.members.length;n++) {smenus5.members[n].onmousedown = UseLink;}
    }
    
        if(smenus6.members[0]) {
	smenus6.setTop(368);
	smenus6.setLeft(178);
    smenus6.stackFamily(19,0);
    for(n=0;n<smenus6.members.length;n++) {smenus6.members[n].onmouseover = SetBGGrey;}
    for(n=0;n<smenus6.members.length;n++) {smenus6.members[n].onmouseout = SetBGWhite;}
    for(n=0;n<smenus6.members.length;n++) {smenus6.members[n].onmousedown = UseLink;}
    }
    
  if(smenusGR.members[0]) {
	smenusGR.setTop(0);
	smenusGR.setLeft(178);
    smenusGR.stackFamily(19,0);
    for(n=0;n<smenusGR.members.length;n++) {smenusGR.members[n].onmouseover = SetBGGrey;}
    for(n=0;n<smenusGR.members.length;n++) {smenusGR.members[n].onmouseout = SetBGWhite;}
    for(n=0;n<smenusGR.members.length;n++) {smenusGR.members[n].onmousedown = UseLink;}
    }

 loaded=true;
 if(submenus) { hideSubs(); }
	
}
 
function layer() {
	this.hide = layer_hide;
}




function layer_hide() { }
 

function hideSubs() {
if(submenus != ""){
 if(loaded && !document.layers ){
	submenus.hide();
	}
    SwapDropDowns("visible");
 }
}
	

 
function clearBg(family) {
	if(loaded && !document.layers){
	 resetInterval();
	 family.runFamily("changeBg|'#E7E5DC'|0|end");
	 }
	}
 
function sendTo(layerName) {
	if(document.layers){return true;}
	if(!layerName){return true;}
	if(!links[layerName]){return true;}
	if(links.length < layerName) {return true;}
	if(links[layerName] == "undefined"){return true;}
	window.location.href=links[layerName];
	}
	
function resetInterval() {
	window.clearInterval(menuDisplayInterval);
	menuDisplayInterval = window.setInterval("hideSubs()", 40000);
	}

function resetInterval2() {
	window.clearInterval(menuDisplayInterval);
	menuDisplayInterval = window.setInterval("hideSubs()", 500);  
	}
	
function findBlocks() {
	//obsolete
	}
	
function SwapDropDowns(visible) {
	
	if(document.all && window.location.href.indexOf("account") < 0 && window.location.href.indexOf("/gr/") < 0) { // IE only
	 for(f=0; f<document.forms.length; f++) {
	   
	   for(e=0; e<document.forms[f].elements.length; e++) {
	      
	      if(document.forms[f].elements[e].options) {
	         document.forms[f].elements[e].style.visibility = visible;
	      }
	   
	   }
	  }
	}
	
 }
		

function SetBGGrey() 
{
	try
	{
		resetInterval(); this.style.backgroundColor = "#E8FFFF"; 
	}
	catch (e)
	{
		//alert(e.message);
	}
}
function SetBGWhite() 
{ 
	try
	{
		resetInterval2(); this.style.backgroundColor = "#E7E5DC"; 
	}
	catch (e)
	{
		//alert(e.message);
	}
}
function UseLink() 
{ 
	try
	{
		location.href = document.getElementById(this.id+"Lnk").href;
	}
	catch (e)
	{
		//alert(e.message);
	}
}

function layerFamily(name,father) {
 this.name = name
 this.members = new Array();
 this.cM = "";
 this.pM = "";
 this.addMembersByName = family_addMembersByName;
 this.stackFamily = family_stack;
 this.setTop = family_setTop;
 this.setLeft = family_setLeft;
 this.hide = family_hide;
 this.show = family_show;
 }

 
function family_setTop(newTop) {
 for (fl = 0; fl < this.members.length; fl++) {
	 this.pM = this.members[fl-1];
		this.cM = this.members[fl];
		this.cM.style.top = newTop;
 		}
	}
	
function family_setLeft(newLeft) {
 for (fl = 0; fl < this.members.length; fl++) {
	 this.pM = this.members[fl-1];
		this.cM = this.members[fl];
		this.cM.style.left = newLeft;
 		}
	}
 
function family_hide() {
 for (fl = 0; fl < this.members.length; fl++) {
	 this.pM = this.members[fl-1];
		this.cM = this.members[fl];
		this.cM.style.display = "none";
 		}
	}

function family_show() {
 for (fl = 0; fl < this.members.length; fl++) {
	 this.pM = this.members[fl-1];
		this.cM = this.members[fl];
		this.cM.style.display = "inline";
 		}
	}


function family_addMembersByName(idtag) {
 for (n = 0; n < document.getElementsByTagName("div").length; n++) {
 if(document.getElementsByTagName("div")[n].id.indexOf(idtag) >= 0) {
    if((document.getElementsByTagName("div")[n].id.indexOf("GR") >= 0) == isGR) {
       this.members[this.members.length] = document.getElementsByTagName("div")[n];
       }
    }
  }
 }

function family_stack(xTop,xLeft) {
 	for (fl = 1; fl < this.members.length; fl++) {
	 this.pM = this.members[fl-1];
		this.cM = this.members[fl];

		newTop = parseInt(this.pM.style.top)+parseInt(xTop);
		newLeft = parseInt(this.pM.style.left)+parseInt(xLeft); 
		
		this.cM.style.top = newTop;
		this.cM.style.left = newLeft;
 		}
	}

	

var isGR = false;

