/******************** 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  javascript_global/utils/prototypes.js  --currently not being used but could be helpful
*************	NOTES END *********************************************************************************************/

/* 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;
}
