
var coolWinOpen = false;
var coolWinSize = null;
var coolWinActivate = false;
var coolWinParameters = null;

function openCoolWin(url, w, h, waitForActivate) {
  var bkg = Styles.getElement("coolWinBackground");
  var win = Styles.getElement("coolWinBox");
  var winClose = Styles.getElement("coolWinBoxClose");
  var loading = Styles.getElement("coolWinLoading");

  Styles.setVisible(bkg, true);
  Styles.setVisible(win, true);
  Styles.setVisible(winClose, true);
  Styles.setVisible(loading, true);
  Styles.setVisible("coolWinControl", false);
  Styles.setVisible("coolWinMenu", false);

  coolWinParameters = new Array();
  for (var i = 4; i < arguments.length; i++) {
    coolWinParameters.push(arguments[i]);
  }

  if (!w) { w = 400; }
  if (!h) { h = 400; }
  coolWinSize = {w:w, h:h};
  if (waitForActivate) {
    coolWinActivate = true;
  } else {
    coolWinActivate = false;
  }
  
  winClose.onclick = closeCoolWin;
  win.style.width = w+"px";
  win.style.height = h+"px";
  loading.style.width = win.style.width;
  loading.style.height = (h-42)+"px";

  resetCoolWinContentSize();
  

  coolWinOpen = true;
  resizeCoolWin();

  loadCoolWinURL(url);
}

function activateCoolWin() {
  Styles.setVisible("coolWinLoading", false);  
}

function closeCoolWin() {
  coolWinOpen = false;

  Styles.setVisible("coolWinBackground", false);
  Styles.setVisible("coolWinBox", false);
  Styles.setVisible("coolWinBoxClose", false);
  Styles.setVisible("coolWinLoading", false);
}

function resetCoolWinContentSize() {
  var content = Styles.getElement("coolWinContent");
  var b = 42;//title plus border
  if (Styles.getVisible("coolWinControl")) {
    b += 41;
  }
  if (Styles.getVisible("coolWinMenu")) {
    b += 31;
  }
  content.style.height = (coolWinSize.h - b) + "px";
}

function setCoolWinTitle(str) {
  Styles.getElement("coolWinTitle").innerHTML = str;
}

function setCoolWinControls(str) {
  var controls = Styles.getElement("coolWinControl");
  controls.innerHTML = str;
  
  var toggled = !Styles.getVisible(controls);
  Styles.setVisible(controls, true);
  if (toggled) {
    resetCoolWinContentSize();
  }
}

function setCoolWinMenu(str) {
  var menu = Styles.getElement("coolWinMenu");
  menu.innerHTML = str;
  
  var toggled = !Styles.getVisible(menu);
  Styles.setVisible(menu, true);
  if (toggled) {
    resetCoolWinContentSize();
  }
}

function resizeCoolWin() {
  if (coolWinOpen) {
    var bkg = Styles.getElement("coolWinBackground");
    var win = Styles.getElement("coolWinBox");
    var winClose = Styles.getElement("coolWinBoxClose");
    var loading = Styles.getElement("coolWinLoading");
    
    var w = document.body.clientWidth;
    var h = getWinHeight();
    
    var x = Math.round((w/2) - (coolWinSize.w/2));
    var y = Math.round(((h/2) - (coolWinSize.h/2)) + getVScrollPos());

    if (x < 10) {
      x = 10;
    }
    if (y < 10) {
      y = 10;
    }

    win.style.left = x+"px";
    win.style.top = y+"px";

    loading.style.left = x+1+"px";
    loading.style.top = y+42+"px";
    
    winClose.style.left = (x+coolWinSize.w-25)+"px";
    winClose.style.top = y+12+"px";

    if (document.body.clientHeight > h) {
      bkg.style.height = document.body.clientHeight+"px";
    } else {
      bkg.style.height = h+"px";
    }
  }
}

function loadCoolWinURL(url) {
  try {
    var http = getHTTPRequest();

    if (url.indexOf("?") == -1) {
      url += "?bn="+window.buildNumber;
    } else {
      url += "&bn="+window.buildNumber;
    }
    http.open("GET", url, true);

    http.onreadystatechange = function() {
      if(http.readyState == 4) {
        http.onreadystatechange = function () {};
        handleCoolWinData(http);
      }
    };
    
    http.send(null);
  } catch(e) {
    alert(e.message);
  }
}

function handleCoolWinData(http) {
  try {
    if (http.status == "200") {
      data = http.responseText;
      var win = Styles.getElement("coolWinContent");
      
      win.innerHTML = "";
      win.innerHTML = stripScripts(data);
      
      var scripts = extractScripts(data);
      if (scripts != null) {
        for (var i = 0; i < scripts.length; i++) {
          globalEval(scripts[i]);
        }
      }
      
      if (!coolWinActivate) {
        activateCoolWin();
      }
    }
  } catch(e) {
    alert(e.message);
  }  
}

scriptFragment = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';

function stripScripts(str) {
  return str.replace(new RegExp(scriptFragment, 'img'), '');
}

function extractScripts(str) {
  var matchAll = new RegExp(scriptFragment, 'img');

  var arry = str.match(matchAll);
  if (arry) {
    for (var i = 0; i < arry.length; i++) {
      arry[i] = arry[i].replace(new RegExp("<script.*?>"), "");
      arry[i] = arry[i].replace(new RegExp("<\/script>"), "");
    }
  }
  return arry;
}



function getVScrollPos() {
  if (document.documentElement && document.documentElement.scrollTop) {
	  return document.documentElement.scrollTop;
  } else if (document.body) {
	  return document.body.scrollTop
  } else {
    return window.pageYOffset;
  }
}

function getWinHeight() {
  if (window.innerHeight) {
    return window.innerHeight;
  } else if (document.documentElement && document.documentElement.clientHeight) {
	  return document.documentElement.clientHeight;
  } else if (document.body) {
	  return document.body.clientHeight;
  }
  return 0;
}
