
// 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 MOZILLAFILTERSDIVDIMHADJ = 0;
var MOZILLAHEADER = 0;
var MOZILLAFILTERSDIVDIMWIDTH = 0;
var MOZILLASTATUSDIVDIMWADJ = 0;
var MOZILLASTATEDIVDIMWADJ = 0;
var IEFIELDDIVTOPCORRECTION = 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);

	//IEFIELDDIVTOPCORRECTION = 3; 
    if (version >= 7) {
        setAdjustments();
		MOZILLASTATUSDIVDIMWADJ = 0;
        MOZILLAFILTERSDIVDIMHADJ = 0;
        IEFIELDDIVTOPCORRECTION = 0; 
    }

    MOZILLACONTROLSDIVDIMWADJ = 17;
	MOZILLAFILTERSDIVDIMWADJ = 15;
    MOZILLASTATEDIVDIMWADJ = -3;
}

function setAdjustments() {
	MOZILLAHEADER = -17;
	MOZILLACONTROLSDIVDIMWADJ = 15;
    MOZILLASTATUSDIVDIMWADJ = 3;
	MOZILLAFILTERSDIVDIMWADJ = 15;
	MOZILLAFILTERSDIVDIMWIDTH = 5;
    MOZILLAFILTERSDIVDIMHADJ = -3;
}

function resizeClient() {
    //alert('RESIZING CLIENT');
    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);
		__resizeClient();

    } 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);
    //alert(viewPortDim.toString());
    if (viewPortDim.w > 1920) viewPortDim.w = 1920;
	//if (viewPortDim.w < 800) viewPortDim.w = 800;
    //if (viewPortDim.h < 350) viewPortDim.h = 350;
	if (isIE) {
		viewPortDim.h = viewPortDim.h - 50;
	}
	else {
		viewPortDim.h = viewPortDim.h - 46;
	}
	//if (isIE) { viewPortDim.w = viewPortDim.w - 17; }
	//viewPortDim.w = viewPortDim.w + 12;
    //if (viewPortDim.h > 800) viewPortDim.h = 800;
	//if (viewPortDim.h < 600) viewPortDim.h = 600;
	resizeDivs(viewPortDim.w,viewPortDim.h);
}

// resizes and repositions applet divs
function resizeDivs(w,h) {
    //alert(w+', '+h);

    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 = 30; // CSS value

    // resize and reposition header div
    headerDivDim.w = w + MOZILLAHEADER;
    headerDivDim.h = 0; // 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 - 22 + MOZILLACONTROLSDIVDIMWADJ;
    controlsDivDim.h = 55; // CSS value
    controlsDivPos.x = 0; // CSS value
    controlsDivPos.y = 0; // CSS value
    setElementDimensions('controls',controlsDivDim);
    setElementPosition('controls',controlsDivPos);

    // resize and reposition field div
    fieldDivDim.w = w - filtersDivDim.w - 22 + MOZILLAFILTERSDIVDIMWADJ;
    fieldDivDim.h = h - controlsDivDim.h;
    fieldDivPos.x = 0; // CSS value
    fieldDivPos.y = 61 + IEFIELDDIVTOPCORRECTION; // CSS value
    setElementDimensions('field',fieldDivDim);
    setElementPosition('field',fieldDivPos);

    // resize field applet
    fieldAppletDim.w = fieldDivDim.w;
    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 - 22  + MOZILLACONTROLSDIVDIMWADJ;
    setElementPosition('footerApplets',statusDivPos);
    setElementDimensions('footerApplets',statusDivDim);

    // reposition filters div
    //filtersDivDim.w = filtersBarDivDim.w + MOZILLAFILTERSDIVDIMWIDTH; // CSS value
	filtersDivDim.w = 225;/* + MOZILLAFILTERSDIVDIMWADJ;*/
	filtersDivPos.y = fieldDivPos.y;
	filtersDivDim.h = statusDivPos.y - filtersDivPos.y - 2 - saveStateDivDim.h - (12-MOZILLASTATUSDIVDIMWADJ) + MOZILLAFILTERSDIVDIMHADJ;

	if (!isIE) {
		filtersDivPos.x = fieldDivPos.x + fieldDivDim.w + 2;
	}
	else {
		filtersDivPos.x = controlsDivPos.x + controlsDivDim.w - filtersDivDim.w;
	}

	setElementDimensions('filters',filtersDivDim);
	setElementPosition('filters',filtersDivPos);
    //alert(filtersDivPos.toString() + filtersBarDivDim.toString());

    saveStateDivDim.w = filtersDivDim.w;
    //saveStateDivDim.w = 225 + MOZILLASTATEDIVDIMWADJ;/* + MOZILLASTATUSDIVDIMWADJ;*/
    saveStateDivPos.y = fieldDivPos.y + fieldDivDim.h - saveStateDivDim.h - (7-MOZILLASTATUSDIVDIMWADJ);
	if (!isIE) {
		saveStateDivPos.x = fieldDivPos.x + fieldDivDim.w + 2;
	}
	else {
		saveStateDivPos.x = controlsDivPos.x + controlsDivDim.w - filtersDivDim.w;
	}
    setElementPosition('state', saveStateDivPos);
    setElementDimensions('state', saveStateDivDim);
}
