/******************** BASE GENERAL UTIL JAVASCRIPT LIBRARY *********************************/
/************	NOTES START *******************************************************************************************
* 
*	Date: 06/14/06
*	Purpose: Basic JavaScript functions
*	Instructions:
*	Prerequisites: (note required versions on top of the page)
*		1.1  js/prototype/prototypes.js
*************	NOTES END *********************************************************************************************/

function loadScript(url) {
  var e = document.createElement("script");
  if (e) {
    e.src = url;
    e.type="text/javascript";
    document.getElementsByTagName("head")[0].appendChild(e);
  } else {
    document.write('<script src="', url, '" type="text/JavaScript"><\/script>');
  }
 }


/* Listeners */
function addIframeListeners(e) {
	setLinksToTargetParent(e);
	resizeIframesToContents(e);
}

/* Functions */
function getImgName(imgsrc) {
	var clkSlash = imgsrc.lastIndexOf("/");
	return imgsrc.slice(clkSlash+1, imgsrc.length);
}

function getImgPath(imgsrc) {
	var clkSlash = imgsrc.lastIndexOf("/");
	var clkdImgName = imgsrc.slice(clkSlash+1, imgsrc.length);
	var clkd2 = imgsrc.slice(0, clkSlash);
	var clkSlash2 = clkd2.lastIndexOf("/");
	var clkDir = clkd2.slice(clkSlash2+1, clkd2.length);
	return clkd2.slice(0, clkSlash2+1);
}

function getImgPathSize(imgsrc) {
	var clkSlash = imgsrc.lastIndexOf("/");
	var clkdImgName = imgsrc.slice(clkSlash+1, imgsrc.length);
	var clkd2 = imgsrc.slice(0, clkSlash);
	var clkSlash2 = clkd2.lastIndexOf("/");
	return clkd2.slice(clkSlash2+1, clkd2.length);
}

function addEvent(elm, evType, fn, useCapture) {
	if (elm.addEventListener) {
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if ( elm.attachEvent ) {
		var r = elm.attachEvent('on' + evType, fn);
		return r;	
	} else { 
		elm['on' + evType] = fn;
	}
}

function setLinksToTargetParent(e) {
	var element = window.event ? window.event.srcElement : e ? e.target : null;
	var links = document.getElementsByTagName('a');
	for(var i=0;i<links.length;i++) {
		if (links[i].target.length==0) {
			links[i].target="_parent";
		}
	}
}

function resizeIframeToContents(windowObj, obj){ 
	var docHeight = windowObj.document.body.scrollHeight;
	obj.style.height = docHeight + 'px';
}

function resizeIframesToContents(e){ 
	var element = window.event ? window.event.srcElement : e ? e.target : null;
	var iframes = window.parent.document.getElementsByTagName('iframe');
	for (var i=0;i<iframes.length;i++) {
		if (iframes[i].className.indexOf('resizeme')>-1) {
			resizeIframeToContents(window, iframes[i]);
		}
	}
}

function displayDynamicImages(bottomId, topId, idPrefix, imageClassName, spacingHeight) {
  showImages(idPrefix, getPixelDifference(bottomId, topId), imageClassName, spacingHeight);
}

function showImages(adPrefix, totalHeight, imageClassName, spacingHeight) {
  var images = document.getElementsByTagName('img');
  var currentHeight=0;
  var adImages=new Array();

  var count=0;  
	for (var i=0;i<images.length;i++) {
	  if (images[i].className.indexOf(imageClassName) > -1) {
	    adImages[count]=images[i];
      count++;
	  }
	}
  var adCount=0;
  while (currentHeight < totalHeight && adImages[adCount]) {
    //alert(adImages[adCount].src + " = " + ((currentHeight+adImages[adCount].height*1) + ":" + (spacingHeight*1)) + ":" +  totalHeight);
    if (currentHeight+adImages[adCount].height + spacingHeight < totalHeight) {
      document.getElementById(adPrefix+(adCount+1)).style.display='block';
      currentHeight=currentHeight+adImages[adCount].height+spacingHeight;
      // ie height of element is zero when hidden, so need to double check after displayed
      if (currentHeight > totalHeight) {
        document.getElementById(adPrefix+(adCount+1)).style.display='none';
      }
    }
    adCount=adCount+1;
  }  
}

// Get the height of the space/distance between two elements
function getPixelDifference(bottomId, topId) {
  var total = findPosY($(bottomId))+getHeight($(bottomId));
  //var topPosition = findPosY($(topId));
  var topPosition = findPosY($(topId))+getHeight($(topId));
  var remainingPixels = (total - topPosition);
  //alert(bottomId + ": " + total);
  //alert(topId + ": " + topPosition)
  //alert("remainingPixels:" + remainingPixels);
  return remainingPixels;
}

// Show the promotional images
function show(promoIdPrefix, promoIdStart, num) {
  start=0;
  var i=0;
  for (i=promoIdStart;i<=num;i++) {
    e = document.getElementById(promoIdPrefix+(start+i));
    e.style.display='block';
  }
}

function objectsOverlap(e1, e2) {
  if (!document.all) return false;
  var obj1=$(e1);
  var obj2=$(e2);

  var x1 = getPageOffsetLeft(obj1);
  var y1 = getPageOffsetTop(obj1);
  var x2 = (x1 * 1) + (obj1.offsetWidth * 1);
  var y2 = (y1 * 1) + (obj1.offsetHeight * 1);
  var xx = getPageOffsetLeft(obj2);
  var yy = getPageOffsetTop(obj2);
  var xx2 = (xx * 1) + (obj2.offsetWidth * 1);
  var yy2 = (yy * 1) + (obj2.offsetHeight * 1);

  //alert(x1 + '-' + y1 + '-' + x2 + '-' + y2);
  //alert(xx + '-' + yy + '-' + xx2 + '-' + yy2);

  if (xx >= x1 && xx <= x2) {
    if (yy >= y1 && yy <= y2) {
      return true;
    }
  }
  if (xx2 >= x1 && xx2 <= x2) {
    if (yy2 >= y1 && yy2 <= y2) {
      return true;
    }
  }
  if (xx <= x1 && xx2 >= x2) {
    if (yy >= y1 && yy2 <= y2) {
      return true;
    }
  }

  return false;
}

function findPosX(obj) {
  var curleft = 0;
  if (obj.offsetParent) {
    while (obj.offsetParent) {
      curleft += obj.offsetLeft
      obj = obj.offsetParent;
    }
  } else if (obj.x) {
    curleft += obj.x;
  }
  return curleft;
}

function findPosY(obj) {
  var curtop = 0;
  if (obj.offsetParent) {
    while (obj.offsetParent) {
      curtop += obj.offsetTop
      //alert(obj.id + ":" + obj.offsetTop + "/" + curtop);
      obj = obj.offsetParent;
    }
  } else if (obj.y) {
    curtop += obj.y;
  }
  return curtop;
}

function showObjects(objects) {
  for (var i=0;i<objects.length;i++) {
    objects[i].style.visibility='';
  }
}

function hideOverlappingSelects(element) {
  var selects = document.getElementsByTagName('select');
  var count=0;
  for (var i=0;i<selects.length;i++) {
    if (objectsOverlap(element,selects[i])) {
      selects[i].style.visibility='hidden';
      hiddenSelects[count]=selects[i];
      count++;
    }
  }
}

function getHeight(obj) {
	var objHeight=0;
	if (typeof(obj.innerHeight)=='number') {
  	objHeight=obj.innerHeight;
	}	else if (obj.clientHeight) {
  	objHeight=obj.clientHeight;
  } else if (obj.offsetHeight) {
    objHeight=obj.offsetHeight;
	}
	return objHeight;
}

function getPageOffsetLeft(el) {
	var x;
	x = el.offsetLeft;
	if (el.offsetParent != null) {
    x += getPageOffsetLeft(el.offsetParent);
	}
	return x;
}

function getPageOffsetTop(el) {
	var y;
	y = el.offsetTop;
	if (el.offsetParent != null) {
    y += getPageOffsetTop(el.offsetParent);
	}
	return y;
}

function addHighlightChangedValue() {
	var elements = document.getElementsByTagName('input');
	for (var i=0;i<elements.length;i++) {
	  addEvent(elements[i], 'change', highlightChangedValue, false);
	}
  elements = document.getElementsByTagName('textarea');
  for (var i=0;i<elements.length;i++) {
    addEvent(elements[i], 'change', highlightChangedValue, false);
  }
  elements = document.getElementsByTagName('select');
  for (var i=0;i<elements.length;i++) {
    addEvent(elements[i], 'change', highlightChangedValue, false);
  }
}

function addHighlightNewSelectValue() {
  var color='#c8d7e3';
  var elements = document.getElementsByTagName('select');
  for (var j=0;j<elements.length;j++) {
    var options = elements[j].options;
    for (var i=0;i<options.length;i++) {
      if (options[i].index != elements[j].selectedIndex) {
	      options[i].style.backgroundColor=color;
	    } else {
	      options[i].style.backgroundColor='';
	    }
    }
  }
}

function highlightChangedValue(e) {
  var color='#c8d7e3';
  var t = window.event ? window.event.srcElement : e ? e.target : null;
  if (t.type=='text' || t.type=='textarea') {
	  if (t.value != t.defaultValue) {
	    t.style.backgroundColor=color;
	  } else {
	    t.style.backgroundColor='';
	  }
  } else if(t.type=='checkbox') {
    if (t.checked != t.defaultChecked) {
      t.style.borderColor=color;
      t.style.borderBottom=1;
    } else {
      t.style.borderColor='';
    }
  } else if(t.type=='select-one' || t.type=='select-multiple') {
    var options = t.options;
    var changed=false;

    for (var i=0;i<options.length;i++) {
      if (options[i].selected && (options[i].selected != options[i].defaultSelected)) {
        changed=true;
        options[i].style.backgroundColor=color;
	    }
    }
    if (changed) {
      t.style.backgroundColor=color;
    } else {
      t.style.backgroundColor='';
    }
    
    for (var i=0;i<options.length;i++) {
      if (options[i].index == t.selectedIndex) {
        options[i].style.backgroundColor='';
      } else {
        options[i].style.backgroundColor=color;
      }
    }
  }
}

/* jscalendar utility function */
function addJSCalendar() {
	var e = document.getElementsByTagName('input');
	for (var i=0;i<e.length;i++) {
	  if (e[i].className.indexOf('jscalendar') > -1) {
	    setup_jscalendar(e[i], '%m/%d/%Y %H:%M', 'Date', false);
	  }
	}

}

function setup_jscalendar(e, dateFormat, buttonValue, createButton) {
	var inputId = e.id;
  var buttonId = e.id;
  if (createButton) {
		var parent = e.parentNode;
		var refChild = e.nextSibling;
		//<button id="trigger1">Date</button>
		var button = document.createElement('button');
		button.id=e.id+"1";
		button.appendChild(document.createTextNode(buttonValue));
		if (refChild != null) {
		  parent.insertBefore(button, refChild);
		} else {
		  parent.appendChild(button);
		}
		buttonId=button.id;
  }
  Calendar.setup(
    {
      inputField  : inputId,				// ID of the input field
      ifFormat    : dateFormat,	// the date format
      button      : buttonId		// ID of the button
    }
  );
}

function updateTabber(e) {
	var tab = location.hash.substr(1,location.hash.length);
	document.getElementById('mytabber').tabber.tabShow(tab)
	show(tab);
}

/**
  Start: Expand Collapse Sections
  
  Required:  elements with the following classnames defined
    expcolsec - main wrapper
    expcolpar - link/blk wrapper
    expcollink - element that will have the action
    expcolblk - block that will show/hide
    
    <table class="expcolsec">
      <tr>
        <td class="expcolpar">
          <a class="expcollink">Link</a>
          <span class="expcolblk">text to show/hide</span>
        </td>
      </tr>
    </table>    
    
*/

function EC() {
  this.wrapper;
  this.sections;
}
function EC_sec() {
  this.wrapper;
  this.links;
  this.parent;
}
function EC_link() {
  this.links;
  this.blocks;
  this.section;
}
/*  class="expcol" class="expcolrow" */
function expandCollapseInitialLoad(e) {
  var sections = $$('.expcolsec');
  for (var k=0;k<sections.length;k++) {
    var ec = new EC();
    ec.wrapper=sections[k];
    var elements = sections[k].getElementsBySelector('.expcolpar');
    var ecsec = new EC_sec();
    var eclinks = new Array();
    var ecsecs = new Array();
    for (var i=0;i<elements.length;i++) {
      elements[i].ecsec=ecsec;
      ecsec.wrapper=elements[i];
      // get blocks attach obj to block
      var eblocks = elements[i].getElementsBySelector('.expcolblk');
      var blocks = new Array();
      for (var j=0;j<eblocks.length;j++) {
        blocks[j] = eblocks[j];
      }
      // get links attach obj to links
      var elinks = elements[i].getElementsBySelector('.expcollink');
      var links = new Array();
      var eclink = new EC_link();
      for (var j=0;j<elinks.length;j++) {
        addEvent(elinks[j], 'click', expandCollapseExecute, false);
        links[j] = elinks[j];
        elinks[j].eclink=eclink;
      }
      eclink.links=links;
      eclink.blocks=blocks;
      eclinks[i]=eclink;
      eclink.section=ecsec;
    }
    ecsec.links=eclinks;
    ecsec.parent=ec;
    ecsecs[k]=ecsec;
  }
  ec.sections=ecsecs;
}


function expandCollapseInitialLoad_old(e) {
  var elements = $$('.expcol');
  var rows = new Array();
  for (var i=0;i<elements.length;i++) {
    addEvent(elements[i], 'click', expandCollapseExecute, false);
  }
}

function expandCollapseExecute(e) {
  var element = window.event ? window.event.srcElement : e ? e.target : null;
  var elements = element.eclink.section.parent.wrapper.getElementsBySelector('.expcolblk');
  for (var i=0;i<elements.length;i++) {
    elements[i].style.display='none';
  }
  var blocks = element.eclink.blocks;
  for (var i=0;i<blocks.length;i++) {
    blocks[i].style.display='';
  }
  var elements = element.eclink.section.parent.wrapper.getElementsBySelector('.expcollink');
  for (var i=0;i<elements.length;i++) {
    elements[i].style.display='';
  }
  element.style.display='none';
}
/** End: Expand Collapse Sections */

/**
  Start: Simple Expand Collapse
**/
function expcol(show,hide) {
  document.getElementById(hide).style.display='none';
  document.getElementById(show).style.display='';
}
/** End: Simple Expand Collapse Sections */

/**
  Start: Confirm Delete
**/
function confirmDelete() {
  confirmDelete(null);
}
function confirmDelete(message){
  if (message == null) {
    message = "Are you sure you want to delete?";
  }
  if (confirm(message)) {
    return true;
  } else {
    return false;
  }
}
/** End: Confirm Delete */


/**
  Start: Write JavaScripts
  This method is used to process embedded javascript because
  innerHTML doesn't execute JS
**/
function writeScriptTagsToDOM(id) {
  var d = document.getElementById(id).getElementsByTagName("script")
  var t = d.length
  for (var x=0;x<t;x++){
    var newScript = document.createElement('script');
    newScript.type = "text/javascript";
    newScript.text = d[x].text;
    document.getElementById(id).appendChild (newScript);
  }
}
/** End: Write JavaScripts */


function getURLParamter(param) {
    param = param.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+param+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    if( results == null ) {
        return "";
    } else {
        // Get the value
        var data = results[1];

        // return unescaped value
        return unescape(data);
    }
}

function getElementsByClassName(node, classname) {
    var a = [];
    var re = new RegExp('(^| )'+classname+'( |$)' );
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++)
        if(re.test(els[i].className))a.push(els[i]);
    return a;
}


/*************
	AJAX checkout mini cart - change shipto - START 
    ********************************************************************************/
	var newsack_window;
	function openNewSack(thisElem, miniCartFormName) {
		elem = document.getElementById('addnew_shipto');
		elem.style.display = '';
		formElem = document.getElementById('cartform');
		elemLength = document.cartform.elements.length;
		shipToIndex = -1;
		shipToCount = -1;
		for(i=0; i<elemLength; i++) {
			//alert(document.cartform.elements[i].type + '   ' + document.cartform.elements[i].name);
			if(document.cartform.elements[i].type == "select-one" && document.cartform.elements[i].name == 'SHIPTO') {
				shipToCount += 1;
				if(document.cartform.elements[i] == thisElem) {
					shipToIndex = 0;
					document.cartform.jsshiptoindex.value = shipToCount;
				}
			}
		}
		//alert('shipTo length : '+formElem.getElementsByName('shipto').length);
		//alert('sackname length : '+formElem.getElementsByName('sackname').length);
	}
	
	function cancel_checkout_newShipTo() {
		document.xoutminicartform.newsackname.value = '';
		elem = document.getElementById('addnew_shipto');
		elem.style.display = 'none';
	}

	function changeCheckoutReceiver(thisElem) {
		elem = document.getElementById('addnew_shipto');
		elem.style.display = '';
		changeSackElems = document.getElementsByName('change_sack_link');
		changeSackIndex = -1;
		changeSackLinkIndex = -1;
		for(var i=0; i<changeSackElems.length; i++) {
			changeSackLinkIndex += 1;
			var childNode = changeSackElems[i];
			if(childNode == thisElem) {
				//alert('same '+changeSackLinkIndex);
				changeSackIndex = changeSackLinkIndex;
				document.xoutminicartform.jsshiptoindex.value = changeSackIndex;
			}
		}
	}
	
	function submit_checkout_newShipTo(thisForm) {
		var newSack = '';
		var shipToName = '';
		if(document.newshiptoform.newsackname.value.length > 0) {
			newSack = document.newshiptoform.newsackname.value;
			shipToName = 'Add New';
		} else {
			newSack = '';
			shipToName = document.newshiptoform.SHIPTO.value;
		}
		
		var shipToIndex = document.xoutminicartform.jsshiptoindex.value;
		var callAction = 'false';
		var shiptoObj;
		if(document.xoutminicartform.sackname.length) {
			if(document.xoutminicartform.sackname[shipToIndex].value == shipToName) {
				alert('same name: no action');
			} else {
				document.xoutminicartform.SHIPTO[shipToIndex].value = shipToName;
				document.xoutminicartform.newsackname.value = newSack;				
				//call ajax function to update cart
				callAction = 'true';
			}
		} else {
			if(document.xoutminicartform.sackname.value == shipToName) {
				//alert('same name: no action');
			} else {
				document.xoutminicartform.SHIPTO.value = shipToName;
				document.xoutminicartform.newsackname.value = newSack;
				
				//call ajax function to update cart
				callAction = 'true';
			}
		}
		elem = document.getElementById('addnew_shipto');
		elem.style.display = 'none';
		if(callAction == 'true') {
			//alert('call AJAX '+document.xoutminicartform.sackname[0].value);
			//checkout_updateCart(document.xoutminicartform);
			//document.xoutminicartform.submit();
			submitAsAJAX(document.xoutminicartform, 'xoutminicarterrors');
		}
	}
	
	function openPopup(href, name, w, h) {
	  window.open(href, name, 'fullscreen=no,toolbar=no,status=no,menubar=no,scrollbars=yes,resizable=yes,directories=no,location=no,width=' + w + ',height=' + h + '')
	}
	
function submitCheckoutVerify(thisForm) {
  if ('function' == typeof window.loadMessage) {
    loadMessage(thisForm);
  }
  thisForm.submit();
}
	
/*************
	AJAX checkout mini cart - change shipto - END 
    ********************************************************************************/
