/***********************************/
/* Just Another JavaScript Library */
/* Created on 2-12-2007            */
/***********************************/


var jajl = {};//start jajl "namespace"
/*---------------------------------------------------------------------------*/
jajl.event_load_or_run = function (func) {
  if (document.ready) {
    func();
  } else {
    jajl.event_append_load_handler(func);
  }
};

 
/*---------------------------------------------------------------------------*/
jajl.cgi_form_data_to_query_string = function (docForm) {
  //alert(docForm);
  var strSubmitContent = '';
  var formElem;
  var strLastElemName = '';
  
  for (i = 0; i < docForm.elements.length; i++) {
    formElem = docForm.elements[i];
    switch (formElem.type) {
    // Text fields, hidden form elements
    case 'text':
    case 'hidden':
    case 'password':
    case 'textarea':
    case 'select-one':
      strSubmitContent += formElem.name + '=' + escape(formElem.value).replace(/\+/g, "%2B") + '&'
      break;
      
      // Radio buttons
    case 'radio':
      if (formElem.checked) {
        strSubmitContent += formElem.name + '=' + escape(formElem.value).replace(/\+/g, "%2B") + '&'
      }
      break;
      
      // Checkboxes
    case 'checkbox':
      if (formElem.checked) {
        // Continuing multiple, same-name checkboxes
        if (formElem.name == strLastElemName) {
          // Strip of end ampersand if there is one
          if (strSubmitContent.lastIndexOf('&') == strSubmitContent.length-1) {
            strSubmitContent = strSubmitContent.substr(0, strSubmitContent.length - 1);
          }
          // Append value as comma-delimited string
          strSubmitContent += ',' + escape(formElem.value).replace(/\+/g, "%2B");
        } else {
          strSubmitContent += formElem.name + '=' + escape(formElem.value).replace(/\+/g, "%2B");
        }
        strSubmitContent += '&';
        strLastElemName = formElem.name;
      }
      break;
      
    }
  }
  
  // Remove trailing separator
  strSubmitContent = strSubmitContent.substr(0, strSubmitContent.length - 1);
  return strSubmitContent;
};


/*---------------------------------------------------------------------------*/
jajl.layout_center_element_on_element = function (element_id_to_move, element_id_positioned) {
  var element_to_move = document.getElementById(element_id_to_move);
  var element_positioned = document.getElementById(element_id_positioned);
  var olddisp = element_to_move.style.display;
  //element_to_move.visibility = 'hidden';
  element_to_move.style.display = 'block';
  var position = new Array();
  position = jajl.layout_get_position(element_positioned);
  var new_left = parseFloat(position[0]) + element_positioned.offsetWidth / 2 - element_to_move.offsetWidth / 2;
  var new_top = parseFloat(position[1]) + element_positioned.offsetHeight / 2 - element_to_move.offsetHeight / 2;
  
  element_to_move.style.left = new_left;
  element_to_move.style.top = new_top;
  //element_to_move.visibility = 'visible';
  element_to_move.style.display = olddisp;
};


/*---------------------------------------------------------------------------*/
jajl.layout_center_element_on_view = function (element_id_to_move) {
  var element_to_move = document.getElementById(element_id_to_move);
  var olddisp = element_to_move.style.display;
  var oldvis = element_to_move.visibility;
  element_to_move.visibility = 'hidden';
  element_to_move.style.display = 'block';
  var view_size = new Array();
  view_size = jajl.layout_get_viewable_area();
  var scroll_pos = new Array();
  scroll_pos = jajl.layout_get_scroll_position();
  //alert(scroll_pos);

  var new_left = view_size[0] / 2 - element_to_move.offsetWidth / 2 + scroll_pos[0];
  var new_top = view_size[1] / 2 - element_to_move.offsetHeight / 2 + scroll_pos[1];
  
  element_to_move.style.left = new_left;
  element_to_move.style.top = new_top;
  element_to_move.visibility = oldvis;
  element_to_move.style.display = olddisp;
};


/*---------------------------------------------------------------------------*/
jajl.layout_get_element_position = function (obj) {
  var curleft = curtop = 0;
  if (obj.offsetParent) {
    do {
      curleft += obj.offsetLeft;
      curtop += obj.offsetTop;
    } while (obj = obj.offsetParent);
  }
  return [curleft,curtop];
};


/*---------------------------------------------------------------------------*/
jajl.layout_get_viewable_area = function () {
  return [jajl.layout_get_client_width(),jajl.layout_get_client_height()];
};


/*---------------------------------------------------------------------------*/
jajl.layout_get_scroll_position = function () {
  return [jajl.layout_get_scroll_left(), jajl.layout_get_scroll_top()];
};


/*---------------------------------------------------------------------------*/
jajl.layout_get_client_width = function () {
  return jajl.layout_filter_results (
                                    window.innerWidth ? window.innerWidth : 0,
                                    document.documentElement ? document.documentElement.clientWidth : 0,
                                    document.body ? document.body.clientWidth : 0
                                    );
};


/*---------------------------------------------------------------------------*/
jajl.layout_get_client_height = function () {
  return jajl.layout_filter_results (
                                    window.innerHeight ? window.innerHeight : 0,
                                    document.documentElement ? document.documentElement.clientHeight : 0,
                                    document.body ? document.body.clientHeight : 0
                                    );
};


/*---------------------------------------------------------------------------*/
jajl.layout_get_scroll_left = function () {
  return jajl.layout_filter_results (
                                    window.pageXOffset ? window.pageXOffset : 0,
                                    document.documentElement ? document.documentElement.scrollLeft : 0,
                                    document.body ? document.body.scrollLeft : 0
                                    );
};


/*---------------------------------------------------------------------------*/
jajl.layout_get_scroll_top = function () {
  return jajl.layout_filter_results (
                                    window.pageYOffset ? window.pageYOffset : 0,
                                    document.documentElement ? document.documentElement.scrollTop : 0,
                                    document.body ? document.body.scrollTop : 0
                                    );
};


/*---------------------------------------------------------------------------*/
jajl.layout_filter_results = function (n_win, n_docel, n_body) {
  var n_result = n_win ? n_win : 0;
  if (n_docel && (!n_result || (n_result > n_docel)))
    n_result = n_docel;
  return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
};


/*---------------------------------------------------------------------------*/
jajl.net_ajax_request = function (url, data, output_container, method, callback) {
  var ajax = new sack();
  if (method != '') {
    ajax.method = method;
  } else {
    ajax.method = 'GET';
  }
  ajax.createURLString(data);
  ajax.requestFile = url;
  ajax.onCompletion = function () {
    output_container.innerHTML = ajax.response;
    if (callback) {
      callback();
    }
  }
  
  ajax.runAJAX();   // Execute AJAX function
};


/*---------------------------------------------------------------------------*/
jajl.cgi_get_form_changed = function (frm) {
  var rtnVal = false; 
  var ele = frm.elements;

  for (i=0; i < ele.length; i++) {
    if (ele[i].type.length > 0) {
      if (jajl.cgi_get_element_changed( ele, i )) {
        rtnVal = true;
        break;
      }
    }
  }
  return rtnVal;
};


/*---------------------------------------------------------------------------*/
jajl.cgi_get_element_changed = function (ele, i) {
  var isEleChanged = false; 
  
  switch (ele[i].type) {
  
  case "file" : 
    if (ele[i].value != ele[i].defaultValue) return true;
    break;
    
  case "text" : 
    if (ele[i].value != ele[i].defaultValue) return true;
    break;

  case "textarea" : 
    //alert(ele[i].value);
    if (ele[i].value != ele[i].defaultValue) return true;
    break;

  case "radio" :
    val = "";
    if (ele[i].checked != ele[i].defaultChecked) return true;
    break;

  case "select-one" : 
    for (var x =0 ; x <ele[i].length; x++) {
      if (ele[i].options[ x ].selected != ele[i].options[ x ].defaultSelected) return true;
    }
    break;

  case "select-multiple" :
    for (var x =0 ; x <ele[i].length; x++) {
      if (ele[i].options[ x ].selected != ele[i].options[ x ].defaultSelected) return true;
    }
    break;

  case "checkbox" :
    if (ele[i].checked != ele[i].defaultChecked) return true;

  case "hidden" : 
    if (ele[i].value != ele[i].defaultValue) return true;
    break;

  default:
    //alert(ele[i].type);
    return false;
    break;
  }
};


/*---------------------------------------------------------------------------*/
jajl.cgi_set_form_defaults = function (frm) {
  var rtnVal = true; 
  var ele = frm.elements;

  for (i=0; i < ele.length; i++) {
    if (ele[i].type.length > 0) {
      if (!jajl.cgi_set_element_default( ele, i )) {
        rtnVal = false;
      }
    }
  }
  return rtnVal;
};


/*---------------------------------------------------------------------------*/
jajl.cgi_set_element_default = function ( ele, i ) {
  switch (ele[i].type) {
  
  case "file" : 
    ele[i].defaultValue = ele[i].value;
    return true;
    break;
    
  case "text" : 
    ele[i].defaultValue = ele[i].value
    return true;
    break;

  case "textarea" : 
    ele[i].defaultValue = ele[i].value;
    return true;
    break;

  case "radio" :
    ele[i].defaultChecked = ele[i].checked;
    return true;
    break;

  case "select-one" : 
    for (var x =0 ; x <ele[i].length; x++) {
      ele[i].options[ x ].defaultSelected = ele[i].options[ x ].selected;
    }
    return true;
    break;

  case "select-multiple" :
    for (var x =0 ; x <ele[i].length; x++) {
      ele[i].options[ x ].defaultSelected = ele[i].options[ x ].selected;
      return true;
    }
    break;

  case "checkbox" :
    ele[i].defaultChecked = ele[i].checked;
    return true;
    break
    
  case "hidden" : 
    ele[i].defaultValue = ele[i].value;
    return true;
    break;


  default:
    //alert(ele[i].type);
    return false;
    break;
  }
};


/*---------------------------------------------------------------------------*/
jajl.html_set_and_execute = function (div, data) {
  //var div = document.getElementById(divId);
  div.innerHTML = data;
  var x = div.getElementsByTagName("script"); 
  for (var i=0;i<x.length;i++) {
    //alert(x[i].text);
    try {
      if (x[i].text) {
        //alert('Trying:\n' + x[i].text);
        eval(x[i].text);
        //alert('Success');
      }
    } catch(err) {
      alert('This page may not work correctly in your browser.\nDynamic javascript error:\n' + err);
    }
    //alert('eval returned');
  }
};


/*---------------------------------------------------------------------------*/
jajl.layout_toggle_div_display = function (divname) {
  var style = document.getElementById(divname).style;
  if (style.display == 'none') {
    style.display = 'block';
  } else {
    style.display = 'none';
  }
};


/*---------------------------------------------------------------------------*/
jajl.event_append_load_handler = function (func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
};


/*---------------------------------------------------------------------------*/
jajl.util_return_browser_type = function () {
  if (window.navigator.userAgent.toLowerCase().indexOf('opera') != -1) return 'op';
  if (window.navigator.userAgent.toLowerCase().indexOf('msie') != -1) return 'ie';
  if (window.navigator.userAgent.toLowerCase().indexOf('firefox') != -1) return 'ff';
  if (window.navigator.userAgent.toLowerCase().indexOf('safari') != -1) return 'sa';
  return '';
};


/*---------------------------------------------------------------------------*/
jajl.css_append_rule = function (rule) {
  var lastStyleSheetIndex = document.styleSheets.length - 1;
  var styleInputTag = document.getElementById("JajlStyleInput")

  if (styleInputTag == null) {
    styleInputTag = document.createElement("style");
    styleInputTag.id = "JajlStyleInput";
    styleInputTag.type = "text/css";
    document.body.appendChild(styleInputTag);
  }

  var browser = jajl.util_return_browser_type();

  if (browser == "ff" || browser == "op") {
    styleInputTag.innerHTML += rule + "\n";
  } else if (browser == "ie" || browser == "sa") {
    if (browser == "ie") {
      var i = 0;
    } else if (browser == "sa") {
      var i = document.styleSheets.length - 1;
    }

    var rulesArray = rule.split("}");
    for (var t = 0; t < rulesArray.length; t++) {
      var ruleSplit = rulesArray[t].split("{");
      var selectors = ruleSplit[0].split(",");
      for (var k = 0; k < selectors.length; k++) {
        if (selectors[k] != '' && ruleSplit[1] != '')
          document.styleSheets[i].addRule(selectors[k], ruleSplit[1]);
      }
    }
  }

  return "";
};



jajl.event_load_or_run(function(){document.ready=true});

