var http = createRequestObject();
var uid = 0;
var mode = null;

var inputs = new Array('id', 'name', 'attr', 'submit');

var lastMsg = '&#160;';
var currentMsg = null;

var posX = 50;
var posY = 50;
var colors = new Array();

function writeDiv(id, text, mode) {
  var x = '';
  if (document.getElementById) {
    x = document.getElementById(id);
    if (!mode) x.innerHTML = text;
    else x.innerHTML += text;
    return true;
  }
  else if (document.all) {
    x = document.all[id];
    if (!mode) x.innerHTML = text;
    else x.innerHTML = x.innerHTML + text;
    return true;
  }
  else if (document.layers) {
    x = document.layers[id];
    if (!mode) {
      x.document.open();
      x.document.write(text);
      x.document.close();
    }
    else {
      x.document.open();
      x.document.write(x.document + text);
      x.document.close();
    }
    return true;
  }
  else return false;
}

function getStyle(id) {
  if(document.getElementById && document.getElementById(id))
    return document.getElementById(id).style;
  else if (document.all && document.all(id))
    return document.all(id).style;
  else if (document.layers && document.layers[id])
    return document.layers[id];
  else
    return false;
}

function setDisplay(id, state) {
  var style = getStyle(id);
  if (state == 1)
    style.display = 'block';
  else if (state == 0)
    style.display = 'none';
  else if (state == 2) {
    if (style.display == 'none') style.display = 'block';
    else if (style.display == 'block') style.display = 'none';
  }
  if (style.display == 'none') return 0;
  else if (style.display == 'block') return 1;
}

function getPostString (docForm) {
  var url = '';
  var element;
  var lastCheck = false;
  var lastType = false;
  for (var i = 0; i < docForm.elements.length; i++) {
    element = docForm.elements[i];
    switch (element.type) {
      case 'text':
      case 'select-one':
      case 'hidden':
      case 'password':
      case 'textarea':
      url += element.name + '=' + escape(element.value) + '&'
      break;
      case 'checkbox':
      if (element.checked) {
        if (lastCheck == element.name)
          url += ',' + escape(element.value);
        else if (!lastCheck) {
          lastCheck = element.name;
          url += element.name + '=' + escape(element.value);
        }
      }
      break;
    }
    if (lastType == 'checkbox' && element.type != 'checkbox')
      url += '&';
    lastType = element.type;
  }
  url += 'empty=';
  return url;
}

function createRequestObject() {
  var ro = false;
  if (window.XMLHttpRequest) {
    try { ro = new XMLHttpRequest(); }
    catch(e) { ro = false; }
  }
  else if (window.ActiveXObject) {
    try { ro = new ActiveXObject("Msxml2.XMLHTTP"); }
    catch(e) {
      try { ro = new ActiveXObject("Microsoft.XMLHTTP"); }
      catch(e) { ro = false; }
    }
  }
  return ro;
}

// value could be an actual value for 'GET' (0) or a HTML form element for 'POST' (1)
function sndReq(method, action, value, id) {
  var url = null;
    var date = new Date()
    uid = date.getTime();
  if (http) {
    if (!method) {
      http.open('GET',
        'process.php?action='+action+'&value='+value+'&id='+id+'&uid='+uid, true);
      http.onreadystatechange = handleResponse;
      http.send(null);
    }
    else {
      url = getPostString(value) + '&action='+action+'&type='+value.name.charAt(0);
      http.open('POST', 'process.php?uid='+uid, true);
      http.setRequestHeader('Content-Type',
        'application/x-www-form-urlencoded');
      http.onreadystatechange = handleResponse;
      http.send(url);
    }
  }
  else
    alert('Failed to create a request object!');
}

function handleResponse() {
  if (http.readyState == 4) {
    if (http.status == 200) {
      var response = http.responseText;
      //alert(response);
      if (response.indexOf('|' != -1)) {
        data = response.split('|');
        if (data[0] != 'form' && getStyle(data[0]) && data[1]) {
          if (data[0] == 'tForm')
            setDisplay('rt', 1);
          writeDiv(data[0], data[1], 0);
          if (data[2]) {
            if (mode == 'public') {
              setDisplay('rt', 0);
              sndReq(0, 'readPub', 'all');
            }
            else 
              sndReq(0, 'read', 'all');
          }
          else {
            if (currentMsg) {
              lastMsg = currentMsg;
              currentMsg = null;
            }
            writeDiv('msg', lastMsg, 0);
            lastMsg = '&#160;';
          }
          if (data[0] == 'msg')
            lastMsg = data[1];
        }
        else if (data[1]) {
          writeDiv('msg', '&#160;', 0);
          formData = data[1].split(':::');
          if (getStyle(formData[0]+'Form')) {
            // fill in form with the form data
            var form = eval('document.forms.' + formData[0] + '_form');
            for (var i = 0; i < inputs.length; i++)
              eval('form.' + formData[0] + '_' + inputs[i] +
                   '.value=formData['+(i+1)+']');
            setDisplay(formData[0]+'Form', 1);
            if (formData[0] != 't' && formData.length != i+2) {
              var str = '';
              for (var ii = i+1; ii < formData.length; ++ii)
                str += formData[ii];
              str = '<table>' + str + '</table>';
              writeDiv('swatch', str, 0);
              if (ii > i+2)
                setDisplay('swatch', 1);
            }
            else {
              writeDiv('swatch', null, 0);
              setDisplay('swatch', 0);
            }
            // sub form
            if (formData[0] == 's') {
              setDisplay('tForm', 0);
              document.forms.s_form.s_submit.value = 'Update';
              document.forms.s_form.s_action.value = 'update';
              document.forms.c_form.reset();
              setDisplay('cForm', 1);
            }
            // top form 
            else {
              setDisplay('cForm', 0);
              setDisplay('sForm', 1);
              document.forms.t_form.t_action.value = 'update';
              document.forms.s_form.reset();
              document.forms.s_form.s_submit.value = 'Add';
              document.forms.s_form.s_action.value = 'add';
              document.forms.s_form.s_id.value=document.forms.t_form.t_id.value;
            }
          }
          else
            writeDiv('msg', 'Response:<br />' + http.responseText, 0);
        }
        else
          writeDiv('msg', 'No changes to make.', 0);
      }
    }
    else
     alert('There was a problem retrieving the data: ' + http.statusText);
  }
  else 
    writeDiv('msg', 'Processing...', 0);
}

// sets up the document for the proper top level add forms
function setupAdd () {
  writeDiv('msg', '&#160;', 0);
  document.forms.t_form.reset();
  document.forms.t_form.t_submit.value='Add';
  document.forms.t_form.t_action.value='add';
  setDisplay('sForm', 0);
  setDisplay('cForm', 0);
  setDisplay('swatch', 0);
  setDisplay('tForm', 1);
}

function cUpload () {
  document.forms.c_form.c_id.value=document.forms.s_form.s_id.value;
  document.forms.c_form.submit();
}

function imgPop(url, title, width, height) {
  var posX = 50;
  var posY = 50;
  var features = '';
  var win = '';
  if (!width) width = 200;
  if (!height) height = 200;
  features = 'scrollbars=no,width='+width+',height='+height+',resizable=yes';
  win = window.open('','',features);
  win.resizeTo(width,height);
  win.document.open();
  win.document.write('<html><head><title>'+title+'</title>');
  win.document.write('<style>body{background-image:url("'+url+'");}');
  win.document.write('</style></head>');
  win.document.write('<body onload="window.focus()">&#160;');
  win.document.write('</body></html>');
  win.document.close();
  colors.push(win);
  focusWin();
}

function setMsg(msg) { if (msg) currentMsg = msg; }

function focusWin() {
	var posX = 50;
	var posY = 50;
	for (var i = 0;  i < colors.length; i++) {
		if (!colors[i].closed){
			colors[i].focus();
			if (screen.availWidth < (posX + 200)){
				posX = 50;
				posY += 230;
			}
			if (screen.avalHeight < (posY + 250)){
				posY = 50;
			}	
			colors[i].moveTo(posX, posY);
			posX += 210;
		}
	}
}