﻿
/* Interactive Block Diagram functions */

// DECLARATIONS

// PROPERTIES

// Are we zoomed in?
var g_bIBDZoomed = Boolean(false);

// The rollover timer
var g_iIBDRolloverTimerID = null;

// Are we dragging the block diagram?
var g_bIBDScrolling = Boolean(false);
// The last location of the mouse
var g_iIBDMouseX = Number(0);
var g_iIBDMouseY = Number(0);
// The new location of the block diagram
var g_iIBDScrollX = Number(0);
var g_iIBDScrollY = Number(0);
// The block diagram we are scrolling
var g_objBlockDiagram = null;
// The minimum X value for scrolling
var g_iIBDMinScrollX = Number(-470);
// The minimum Y value for scrolling
var g_iIBDMinScrollY = Number(-470);


// METHODS


// Handle the zoom toggle
function IBDToggleZoom(strMinScrollX, strMinScrollY) {
	// Hide the current rollovers, if any
	IBDHideRolloversNow();

	// Store the min/max scroll positions
	g_iIBDMinScrollX = Number(strMinScrollX);
	g_iIBDMinScrollY = Number(strMinScrollY);
	

	// Swap the images
	if ( g_bIBDZoomed ) { 
		$("#ibd-diagram-inside-small").fadeIn("normal");
		$("#ibd-diagram-inside-large").fadeOut("normal");
		document.getElementById('ibd-zoom-in').className = "visible-content";
		document.getElementById('ibd-zoom-out').className = "hidden-content";
	} else {
		$("#ibd-diagram-inside-small").fadeOut("normal");
		$("#ibd-diagram-inside-large").fadeIn("normal");
		document.getElementById('ibd-zoom-in').className = "hidden-content";
		document.getElementById('ibd-zoom-out').className = "visible-content";
	}
	g_bIBDZoomed = !g_bIBDZoomed;
}

// Print the block diagram
function IBDPrintSave(strSrc,strWidth,strHeight) {
	window.open('/Image-Viewer.aspx?src='+strSrc+'&width='+strWidth+'&height='+strHeight);
}

// Initialize the scrollbars
function IBDInitScrolling() {
	
	// Initialize the header slider
	g_objBlockDiagram = $("#ibd-diagram-inside-large");
	g_objBlockDiagram.mousedown(IBDStartScroll);
}
$(document).ready(IBDInitScrolling);

function IBDStartScroll(event) {
	// Hide the rollovers, if any
	IBDHideRolloversNow();

	g_iIBDMouseX = event.clientX;
	g_iIBDMouseY = event.clientY;

	g_iIBDScrollX = g_objBlockDiagram.css('left');
	g_iIBDScrollY = g_objBlockDiagram.css('top');

	g_bIBDScrolling = true;
	event.preventDefault();
	IBDDisableSelection(document.body);
}

function IBDDragScroll(event) {
	var changeX = (event.clientX - g_iIBDMouseX)
	var changeY = (event.clientY - g_iIBDMouseY)

	g_iIBDScrollX = parseInt(g_iIBDScrollX) + changeX;
	g_iIBDScrollY = parseInt(g_iIBDScrollY) + changeY;

	if ( g_iIBDScrollX > 0 ) {
		g_objBlockDiagram.css('left', "0px");    
	} else if ( g_iIBDScrollX < g_iIBDMinScrollX ) {
		g_objBlockDiagram.css('left', String(g_iIBDMinScrollX)+"px");    
	} else {
		g_objBlockDiagram.css('left', String(g_iIBDScrollX)+"px");    
	}   
	g_iIBDMouseX = event.clientX;
	
	if ( g_iIBDScrollY > 0 ) {
		g_objBlockDiagram.css('top', "0px");    
	} else if ( g_iIBDScrollY < g_iIBDMinScrollY ) {
		g_objBlockDiagram.css('top', String(g_iIBDMinScrollY)+"px");    
	} else {
		g_objBlockDiagram.css('top', String(g_iIBDScrollY)+"px");    
	}   
	g_iIBDMouseY = event.clientY;	
}


// Set the global mouse move and mouse up handlers
$(document).mousemove(function(event) {
    if (g_bIBDScrolling) {
      IBDDragScroll(event);
      return false;
    }
});
 
$(document).mouseup(function(event) {
    if (g_bIBDScrolling) {
		IBDDragScroll(event);
		g_iIBDScrollX = parseInt(g_objBlockDiagram.css('left'));
		g_iIBDScrollY = parseInt(g_objBlockDiagram.css('top'));
		IBDEnableSelection(document.body);
    }
	g_bIBDScrolling = false;
});

// Turn off selection in the document while dragging
var fOldSelection = null;
function IBDDisableSelection(target){
	if (typeof target.onselectstart!="undefined") { //IE route
		fOldSelection = target.onselectstart;
		target.onselectstart=function(){return false};
	} else if (typeof target.style.MozUserSelect!="undefined") { //Firefox route
		fOldSelection = target.style.MozUserSelect;
		target.style.MozUserSelect="none";
	}
}

// Turn on selection when done dragging
function IBDEnableSelection(target){
	if (typeof target.onselectstart!="undefined") //IE route
		target.onselectstart=fOldSelection;
	else if (typeof target.style.MozUserSelect!="undefined") //Firefox route
		target.style.MozUserSelect=fOldSelection;
}

// When the mouse rolls over a rollover
function IBDRolloverMouseOver() {
	if ( g_iIBDRolloverTimerID ) {
		clearTimeout(g_iIBDRolloverTimerID);
		g_iIBDRolloverTimerID = null;
	}
}

// When the mouse leaves a rollover
function IBDRolloverMouseOut() {
	IBDHideRolloversLater();
}

// Show the rollover for a given item
function IBDShowRollover(strTag, iLeft, iTop) {
	if ( g_bIBDScrolling ) {
		return false;
	}

	// Hide any existing rollovers
	IBDHideRolloversNow(strTag);
	
	// Calculate the offset
	var iOffsetLeft = Number(0);
	var iOffsetTop = Number(0);
	if ( g_bIBDZoomed ) {
		var objOffset = $("#ibd-diagram-inside-large");
		iOffsetLeft = parseInt(objOffset.css('left'));
		iOffsetTop = parseInt(objOffset.css('top'));
	}
	
	// Show the new rollover
	var objRollover = $("#ibd-"+strTag+"-rollover");
	if ( objRollover ) {
		var iLeft = parseInt(iLeft)+iOffsetLeft;
		var iTop = parseInt(iTop)+iOffsetTop;
	
		if ( iLeft > (592-190) ) { iLeft = (592-190); }
		if ( iTop > (592) ) { iTop = (592); }
	
		objRollover.css('left', iLeft);
		objRollover.css('top', iTop);
		objRollover.fadeIn(0);
	}
}

// Hide the rollovers later
function IBDHideRolloversLater() {
	if ( g_iIBDRolloverTimerID ) {
		clearTimeout(g_iIBDRolloverTimerID);
	}
	g_iIBDRolloverTimerID = setTimeout("IBDHideRolloversNow();", 1000);
}

// Hide the rollovers now
function IBDHideRolloversNow(strExcept) {
	if ( g_iIBDRolloverTimerID ) {
		clearTimeout(g_iIBDRolloverTimerID);
	}
	g_iIBDRolloverTimerID = null;

	if ( strExcept != "audio" ) { $("#ibd-audio-rollover").fadeOut(100); }
	if ( strExcept != "ich" ) { $("#ibd-ich-rollover").fadeOut(100); }
	if ( strExcept != "ioh" ) { $("#ibd-ioh-rollover").fadeOut(100); }
	if ( strExcept != "mch" ) { $("#ibd-mch-rollover").fadeOut(100); }
	if ( strExcept != "networking" ) { $("#ibd-networking-rollover").fadeOut(100); }
	if ( strExcept != "processor" ) { $("#ibd-processor-rollover").fadeOut(100); }
	if ( strExcept != "sch" ) { $("#ibd-sch-rollover").fadeOut(100); }
}