function go(id) {
  if (document.getElementById)
    return document.getElementById(id);
  else
    return document.all[id]
};
function goval(id) { return go(id).value; };
function wait(milis) {
  var date = new Date();
  var curDate = null;

  do { curDate = new Date(); } while (curDate-date < milis);
}

function abspos(obj) {
  var curleft = curtop = 0;
  if (obj.offsetParent) {
    curleft = obj.offsetLeft;
    curtop = obj.offsetTop;
    while (obj = obj.offsetParent) {
      curleft += obj.offsetLeft;
      curtop += obj.offsetTop;
    }
  }
  return [curleft,curtop];
};

function scrres() {
  var winH = 0;
  var winW = 0;
  if (parseInt(navigator.appVersion)>3) {
   if (navigator.appName=='Netscape') {
    winW = window.innerWidth;
    winH = window.innerHeight;
   }
   if (navigator.appName.indexOf('Microsoft')!=-1) {
    winW = document.body.offsetWidth;
    winH = document.body.offsetHeight;
   }
  };
  return [winW, winH];
};

function parseStr(s) {
  var rv = {}, decode = window.decodeURIComponent || window.unescape;
  (s == null ? location.search : s).replace(
    /([^=&]*?)((?:\[\])?)(?:=([^&]*))?(?=&|$)/g,
    function ($, n, arr, v) {
      if (n == "")
        return;
      n = decode(n);
      v = decode(v);
      if (arr) {
        if (typeof rv[n] == "object")
          rv[n].push(v);
        else
          rv[n] = [v];
      } else {
        rv[n] = v;
      }
    });
  return rv;
}

function event_target(e) {
  var targ;
  if (!e) { var tmp = window.event; } else { var tmp = e; };

  if (tmp.target) { targ = tmp.target; }
  else if (tmp.srcElement) { targ = tmp.srcElement; }

  if (targ.nodeType == 3) { targ = targ.parentNode; } // defeat Safari bug

  return targ;
}


function browser(v) { return(Math.max(navigator.userAgent.toLowerCase().indexOf(v),0)); }
function xy(e,v) { return(v?(browser('msie')?event.clientY+document.body.scrollTop:e.pageY):(browser('msie')?event.clientX+document.body.scrollTop:e.pageX)); }

function dragOBJ(d,e) {

  function drag(e) { if(!stop) { d.style.top=(tX=xy(e,1)+oY-eY+'px'); d.style.left=(tY=xy(e)+oX-eX+'px'); } }

  var oX=parseInt(d.style.left),oY=parseInt(d.style.top),eX=xy(e),eY=xy(e,1),tX,tY,stop;

  document.onmousemove=drag;

  document.onmouseup=function() {
    stop=1;
    document.onmousemove='';
    document.onmouseup='';
  };
};

function resizeOBJ(d,e) {

  function resize(e) { if(!stop) { d.style.height=(tX=xy(e,1)+oY-eY+'px'); d.style.width=(tY=xy(e)+oX-eX+'px'); d.onresize(); } }

  var oX=parseInt(d.style.width),oY=parseInt(d.style.height),eX=xy(e),eY=xy(e,1),tX,tY,stop;

  document.onmousemove=resize;

  document.onmouseup=function() {
    stop=1;
    document.onmousemove='';
    document.onmouseup='';
  };
};

function function_exists( function_name ) {
  // http://kevin.vanzonneveld.net
  // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // +   improved by: Steve Clay
  // +   improved by: Legaev Andrey
  // *     example 1: function_exists('isFinite');
  // *     returns 1: true


  if (typeof function_name == 'string'){
      return (typeof window[function_name] == 'function');
  } else{
      return (function_name instanceof Function);
  }
}

function disable_selection(target){
  if (typeof target.onselectstart!="undefined") //IE route
    target.onselectstart=function(){return false}
  else if (typeof target.style.MozUserSelect!="undefined") //Firefox route
    target.style.MozUserSelect="none"
  else //All other route (ie: Opera)
    target.onmousedown=function(){return false}

  target.style.cursor = "default"
};

function _screen_disable() {
  screen_disable_div = go('_screen_disable_div');
  if (screen_disable_div == null) {
    screen_disable_div = document.createElement('div');
    screen_disable_div.id = '_screen_disable_div';
    screen_disable_div.style.position = 'absolute';
    screen_disable_div.style.zIndex = '499';
    screen_disable_div.style.background = 'white';

    screen_disable_div.style.opacity = 0.5;
    screen_disable_div.style.MozOpacity = 0.5;
    screen_disable_div.style.filter = "alpha(opacity=" + (0.5*100) + ")";

    var scrRes = scrres();
    screen_disable_div.style.width = '100%';
    screen_disable_div.style.height = '100%';
    screen_disable_div.style.left = '0px';
    screen_disable_div.style.top = '0px';

    document.body.appendChild(screen_disable_div);
  };

  _screen_disable_hidden_selects = new Array();
  var selects = document.getElementsByTagName('select');
  for (var i = 0; i < selects.length; i++) {
    selects[i].style.visibility = 'hidden';
    _screen_disable_hidden_selects.push(selects[i]);
  };

};

function _screen_enable() {
  screen_disable_div = go('_screen_disable_div');
  if (screen_disable_div != null) {
    document.body.removeChild(screen_disable_div);
  };

  for (var i = 0; i < _screen_disable_hidden_selects.length; i++) {
    _screen_disable_hidden_selects[i].style.visibility = 'visible';
  }

};

function _div_input_values(div, input_id_prefix) {
  if (typeof input_id_prefix == 'undefined') input_id_prefix = '';

  var result = new Object;
  var re1 = new RegExp(/&/g);
  var re2 = new RegExp(/"/g);
  if (typeof(tinyMCE) != 'undefined') { tinyMCE.triggerSave(); };

  var inputs = div.getElementsByTagName('input');
  for (var i = 0; i < inputs.length; i++) if (inputs[i].id != '') {
    val = inputs[i].value.replace(re1, '___a-m-p-e-r-s-a-n-d___').replace(re2, '___q-u-o-t-e-s___');
    eval('result.'+inputs[i].id.substring(input_id_prefix.length, inputs[i].id.length)+' = \"'+val+'\";');
  };

  var inputs = div.getElementsByTagName('select');
  for (var i = 0; i < inputs.length; i++) if (inputs[i].id != '') {
    val = inputs[i].value.replace(re1, '___a-m-p-e-r-s-a-n-d___').replace(re2, '___q-u-o-t-e-s___');
    eval('result.'+inputs[i].id.substring(input_id_prefix.length, inputs[i].id.length)+' = \"'+val+'\";');
  };

  var inputs = div.getElementsByTagName('textarea');
  for (var i = 0; i < inputs.length; i++) if (inputs[i].id != '') {
    val = inputs[i].value.replace(re1, '___a-m-p-e-r-s-a-n-d___').replace(re2, '___q-u-o-t-e-s___').replace(/\n/g, "\\n");
    eval('result.'+inputs[i].id.substring(input_id_prefix.length, inputs[i].id.length)+' = \"'+val+'\";');
  };

  return result;
}

function dump(arr,level) {
  var dumped_text = '';
  if(!level) level = 0;

  //The padding given at the beginning of the line.
  var level_padding = '';
  for(var j=0;j<level+1;j++) level_padding += '    ';

  if(typeof(arr) == 'object') { //Array/Hashes/Objects
   for(var item in arr) {
    var value = arr[item];

    if(typeof(value) == 'object') { //If it is an array,
     dumped_text += level_padding + "'" + item + "' ...\n";
     dumped_text += dump(value,level+1);
    } else {
     dumped_text += level_padding + "'" + item + '\' => "' + value + '"\n';
    }
   }
  } else { //Stings/Chars/Numbers etc.
   dumped_text = '===>'+arr+'<===('+typeof(arr)+')';
  }
  return dumped_text;
}

function unique_names(a) {
  var r = new Array();
  var contains = false;
  for (var i = 0; i < a.length; i++) {
     contains = false;
     for (var x = 0; x < r.length; x++) if(r[x].name==a[i].name) contains = true;
     if (!contains) { r.push(a[i]); };
  }
  return r;
}

function _update_redirect_frm_with_inputs(tag_name, div_id) {
  if (div_id == '') div_id = 'adios_application_div';

  // patch for m_html_editor's tinyMCE element...
  // this WYSIWYG works in a separate <iframe> and only with triggerSave is the
  // contents of this <iframe> copied into a hidden <textarea> which is submitted
  // to the form
  if (typeof(tinyMCE) != 'undefined') { tinyMCE.triggerSave(); };

  var inputs = unique_names(document.getElementById(div_id).getElementsByTagName(tag_name));
  for (var i = 0; i < inputs.length; i++) {
    tmpInput = inputs[i];
    var input_exists = false;

    if (tmpInput != null) {
      if (tmpInput.parentNode.id == 'redirect_frm_inputs' || tmpInput.parentNode.id == 'redirect_frm') {
        input_exists = true;
      };
    };

    if (input_exists) {
      var tmp = document.getElementsByName(inputs[i].name);
      tmp[0].value = inputs[i].value;
    } else {
      if (inputs[i].type == 'textarea') {
        var newInput = document.createElement('textarea');
        newInput.name = inputs[i].name;
        var textareaValue = document.createTextNode(inputs[i].value);
        newInput.appendChild(textareaValue);
        go('redirect_frm_inputs').appendChild(inputs[i]);
      } else {
        if (inputs[i].type != 'file') {
          var newInput = document.createElement('input');
          newInput = inputs[i].cloneNode(true);
          newInput.value = inputs[i].value;
          var child = document.getElementById('redirect_frm_inputs').appendChild(newInput);
          newInput.checked = inputs[i].checked;
        } else {
          newInput = document.createElement('input');
          go('redirect_frm_inputs').appendChild(inputs[i]);
        };
      };
    };
  };
};
