
// Delays the actual resizeClient call for N milliseconds (see code) if the browser
// is IE and hc_app_frame is displaying a treemap.  Otherwise, the resize operation
// takes effect immediately.
//
// IE invokes the onResize method repeatedly while a user is dragging the size of a browser
// window.  There is no point in resizing the treemap display until the user completes
// the resize operation.

var MOZILLACONTROLSDIVDIMWADJ = 0;
var MOZILLAFILTERSDIVDIMWADJ = 0;
var MOZILLAHEADER = 0;
var MOZILLAFILTERSDIVDIMWIDTH = 0;
var MOZILLASTATUSDIVDIMWADJ = 0;
var IE6FIELDXPOSADJ = 0;
var IE6STATEYPOSADJ = 0;

var isIE = navigator.appName.indexOf("Microsoft") != -1; // YES THIS IS A HORRIBLE BROWSER DETECT!

var resizeTimeoutID = null;

function IEfix() {
	document.controlsApplet.setVisible(true);//fix for IE not showing control applet
	var version;
    var tokens = navigator.appVersion.split(";");

    var i;
    for (i = 0;i < tokens.length;i++) {
        var s = tokens[i];
        if (s.indexOf("MSIE") != -1) {
            version = parseFloat(s.substring(5,s.length));
        }
    }

    //alert("Browser version:  " + version);
	IE6FIELDXPOSADJ = 4;
	IE6STATEYPOSADJ = 6;

    if (version >= 7) {
        setAdjustments();
    }

    MOZILLACONTROLSDIVDIMWADJ = 15;
    MOZILLAFILTERSDIVDIMWADJ = 15;
}

function setAdjustments() {
	MOZILLAHEADER = -17;
	MOZILLACONTROLSDIVDIMWADJ = -2;
    MOZILLASTATUSDIVDIMWADJ = -2;
	MOZILLAFILTERSDIVDIMWADJ = -2;
	MOZILLAFILTERSDIVDIMWIDTH = 0;
	IE6FIELDXPOSADJ = 0;
	IE6STATEYPOSADJ = 0;
}

function resizeClient() {
    //alert('RESIZING CLIENT');
	setStyle('controls', {'display': 'block'})
	setStyle('filters', {'display': 'block'})
	setStyle('state', {'display': 'block'})
	setStyle('footerApplets', {'display': 'block'})

	setStyle('closeFullScreen', {'display': 'none'})
	setStyle('enlargeBG', {'display': 'none'})

    if (isIE) {
		IEfix();

        // Cancel the previous resize operation and reschedule it for 500 ms out.
        if (resizeTimeoutID != null) {
            window.clearTimeout(resizeTimeoutID);
            resizeTimeoutID = null;
        }
        resizeTimeoutID = window.setTimeout('__resizeClient();', 500);

    } else {
        setAdjustments();
        __resizeClient();
    }
}

// Resizes the iframe based on the current client width and height.  If the frame contains
// a treemap display.  The treemap display is resized based on the current width and height.
function __resizeClient() {
    var viewPortDim = getViewportDimensions();
    //alert(viewPortDim.toString());
    if (viewPortDim.w > 2560) viewPortDim.w = 2560;
	if (viewPortDim.w < 900) viewPortDim.w = 900;
	viewPortDim.w = viewPortDim.w - 0;
    if (viewPortDim.h > 2048) viewPortDim.h = 2048;
    if (viewPortDim.h < 550) viewPortDim.h = 550;
    viewPortDim.h = viewPortDim.h - 70;

	resizeDivs(viewPortDim.w,viewPortDim.h);
}

// resizes and repositions applet divs
function resizeDivs(w,h) {
    //alert(w+', '+h);

    if (isIE) {
        var navBarDivDim = getElementDimensions('navbar');
        navBarDivDim.w = w;
        setElementDimensions('navbar', navBarDivDim);

        var contentsDemoDivDim = getElementDimensions('contents_demo');
        contentsDemoDivDim.w = w;
        setElementDimensions('contents_demo', contentsDemoDivDim);
    }

    var demoBottomContentDivPos = getElementPosition('demo_bottom_content');

    var headerDivDim = getElementDimensions('header');
    var headerDivPos = getElementPosition('header');

    var controlsDivPos = getElementPosition('controls');
    var controlsDivDim = getElementDimensions('controls');

    var fieldDivPos = getElementPosition('field');
    var fieldDivDim = getElementDimensions('field');

    var fieldAppletDim = getElementDimensions('fieldApplet');

    var filtersDivPos = getElementPosition('filters');
    var filtersDivDim = getElementDimensions('filters');

    var statusDivPos = getElementPosition('footerApplets');
    var statusDivDim = getElementDimensions('footerApplets');

    var saveStateDivPos = getElementPosition('state');
    var saveStateDivDim = getElementDimensions('state');
  //
    // NOTE: Some hardcoded values below should be consistent with the CSS file's settings
    //

    // the 'status' div really contains the save statue stuff
    // don't want to break anything, so using it as-is
    saveStateDivDim.w = 225; // CSS value
    saveStateDivDim.h = 35; // CSS value
    statusDivDim.h = 35; // CSS value

    // resize and reposition header div
    headerDivDim.w = w + MOZILLAHEADER;
    headerDivDim.h = 90; // CSS value
    headerDivPos.x = 0; // CSS value
    headerDivPos.y = 0; // CSS value
    setElementDimensions('header',headerDivDim);
    setElementPosition('header',headerDivPos);

    // resize and reposition controls bar div
    controlsDivDim.w = w - 25 + MOZILLACONTROLSDIVDIMWADJ;
    //controlsDivDim.w = w - 22  + MOZILLASTATUSDIVDIMWADJ;
    controlsDivDim.h = 50; // CSS value
    controlsDivPos.x = 4; // CSS value
    controlsDivPos.y = 127; // CSS value
    setElementDimensions('controls',controlsDivDim);
    setElementPosition('controls',controlsDivPos);

    // resize and reposition field div
    fieldDivDim.w = w - filtersDivDim.w - 25 + MOZILLAFILTERSDIVDIMWADJ;
    fieldDivDim.h = h - controlsDivDim.h - controlsDivDim.h - statusDivDim.h - statusDivDim.h - 20;
    fieldDivPos.x = 4; // CSS value
    fieldDivPos.y = 182 + IE6FIELDXPOSADJ; // CSS value
    setElementDimensions('field',fieldDivDim);
    setElementPosition('field',fieldDivPos);

    // resize field applet
    fieldAppletDim.w = fieldDivDim.w - 2;
    fieldAppletDim.h = fieldDivDim.h;
    setElementDimensions('fieldApplet',fieldAppletDim);

    // reposition status div
    statusDivPos.x = controlsDivPos.x; // status div was accumulating deltas in x
    statusDivPos.y = fieldDivPos.y + fieldDivDim.h + 3;
    //statusDivDim.w = w - 22  + MOZILLASTATUSDIVDIMWADJ;
    statusDivDim.w = w - 25  + MOZILLACONTROLSDIVDIMWADJ;
    setElementPosition('footerApplets',statusDivPos);
    setElementDimensions('footerApplets',statusDivDim);

    // reposition filters div
    //filtersDivDim.w = filtersBarDivDim.w + MOZILLAFILTERSDIVDIMWIDTH; // CSS value
    filtersDivDim.w = 225;/* + MOZILLAFILTERSDIVDIMWADJ;*/
    filtersDivPos.x = fieldDivPos.x + fieldDivDim.w + 2;
    filtersDivPos.y = fieldDivPos.y + 2;
    filtersDivDim.h = statusDivPos.y - filtersDivPos.y - saveStateDivDim.h - (12-MOZILLASTATUSDIVDIMWADJ) - IE6STATEYPOSADJ;
    setElementDimensions('filters',filtersDivDim);
    setElementPosition('filters',filtersDivPos);
    //alert(filtersDivPos.toString() + filtersBarDivDim.toString());

    saveStateDivDim.w = 225;/* + MOZILLASTATUSDIVDIMWADJ;*/
    saveStateDivPos.x = fieldDivPos.x + fieldDivDim.w + 2;
    saveStateDivPos.y = fieldDivPos.y + fieldDivDim.h - saveStateDivDim.h - (7-MOZILLASTATUSDIVDIMWADJ) + 5 - IE6STATEYPOSADJ;
    setElementPosition('state', saveStateDivPos);
    setElementDimensions('state', saveStateDivDim);

    demoBottomContentDivPos.y = statusDivPos.y + statusDivDim.h + 0; 
    setElementPosition('demo_bottom_content', demoBottomContentDivPos);
}
