function escapeChar(val, escChar)
{
  var str = "" + val;
  alert("str=" + str);
  var ret = "";
  for (var i = 0; i < str.length; i++)
  {
    if (str.charAt(i) == escChar)
    {
      ret = ret + "\\" + str.charAt(i);
    }
    else
    {
      ret = ret + str.charAt(i);
    }
  }
  return ret;
}

function setField(fieldName, filedValue)
{
  var element = eval("document.forms[0]." + fieldName);
  if (element != null && element.value != null)
  {
    theValue = filedValue;
    eval("document.forms[0]." + fieldName + ".value='" + theValue + "'");
  }
}

function getFormElement(elementName)
{
  return eval("document.forms[0]." + elementName);
}


function goToPage(page)
{
  window.location.href = page;
}

function checkForLinkQuestion(hasLinkToProfile, elementName)
{
  if (hasLinkToProfile)
  {
    var sText = "You are about to make current survey as Profile Survey." +
                "\nWarning: Current survey has the question that linked to other Profile Survey." +
                "\nThis operation will remove this link to other Profile Survey." +
                "\nWould you like to continue?";
    if (confirm(sText))
    {
      document.forms[0].submit();
    }
    else
    {
      radioElement = getFormElement(elementName);
      radioElement.checked = true;
    }
  }
  else
  {
    document.forms[0].submit();
  }
}

function warningForProfile(elementName)
{
  var sText = 'You are about to assign current survey profile data type.' +
              '\nWarning: This type of survey does not support randomization of questions and "Thank you page" option.' +
              '\nThese options will be disabled automatically!' +
              '\nWould you like to continue?';
  if (confirm(sText))
  {
    document.forms[0].submit();
    return true;
  }
  else
  {
    radioElement = getFormElement(elementName);
    radioElement.checked = true;
    return false;
  }
}

function isInteger(data) {
  var numStr = "0123456789";
  var thisChar;
  var counter = 0;
  for (var i = 0; i < data.length; i++) {
    thisChar = data.substring(i, i + 1);
    if (numStr.indexOf(thisChar) != -1)
    {
      counter++;
    }
  }
  return counter == data.length;
}

function isNumber(data) {

  var numStr = "0123456789,.";
  var thisChar;
  var counter = 0;

  for (var i = 0; i < data.length; i++) {
    thisChar = data.substring(i, i + 1);
    if (numStr.indexOf(thisChar) != -1)
    {
      counter++;
    }
  }
  return counter == data.length;
}


function IsImage(file) {

  if (!file) return true;
  filename = file.value;

  if (file.value == "") return true;

  while (filename.indexOf("\\") != -1)
  {
    filename = filename.slice(filename.indexOf("\\") + 1);
  }

  ext = filename.slice(filename.indexOf(".")).toLowerCase();

  for (var i = 0; i < extArray.length; i++) {
    if (extArray[i] == ext) {
      allowSubmit = true;
      return true;
    }
  }

  alert("Please only upload files that end in types:  "
      + (extArray.join("  ")) + "\n\nPlease select a new "
      + "file to upload and submit again.");

  return false;

}

function IsEmail(mail)
{
  if (mail == null) return true;
  if (mail == "") return true;

  var supported = 0;
  if (window.RegExp)
  {
    var tempStr = "a";
    var tempReg = new RegExp(tempStr);
    if (tempReg.test(tempStr)) supported = 1;
  }
  if (!supported) return (mail.indexOf(".") > 2) && (mail.indexOf("@") > 0);
  var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)|(\\.$)");
  var r2 = new RegExp("^['a-zA-Z0-9_.-]+@(?!-+)(\\[?)[a-zA-Z0-9.-]+\\.([a-zA-Z]{2,}|[0-9]{1,3})(\\]?)\\s*$");
  return (!r1.test(mail) && r2.test(mail));
}


//*********** isDate (MM/dd/yyyy) *************
function isDate(inDate) {
  var theDate = Trim(inDate);
  var theDigit = 0;
  if (theDate.length != 10) {
    return false;
  }
  if ((theDate.charAt(2) != '/') || (theDate.charAt(5) != '/')) {
    return false;
  }
  theDigit = parseInt(theDate.substring(0, 2));
  if (theDate.charAt(0) == '0') {
    theDigit = parseInt(theDate.substring(1, 2));
  }
  if ((theDigit > 12) || (theDigit < 1)) {
    return false;
  }
  theDigit = parseInt(theDate.substring(3, 5));
  if (theDate.charAt(3) == '0') {
    theDigit = parseInt(theDate.substring(4, 5));
  }
  if ((theDigit > 31) || (theDigit < 1)) {
    return false;
  }
  theDigit = parseInt(theDate.substring(6, 10));
  if ((theDigit > 2049) || (theDigit < 1)) {
    return false;
  }
  return true;
}

//*********** isDate (dd/MM/yyyy) *************
function isDate1(inDate) {
  var theDate = Trim(inDate);
  var theDigit = 0;
  if (theDate.length != 10) {
    return false;
  }
  if ((theDate.charAt(2) != '/') || (theDate.charAt(5) != '/')) {
    return false;
  }
  theDigit = parseInt(theDate.substring(0, 2));
  if (theDate.charAt(0) == '0') {
    theDigit = parseInt(theDate.substring(1, 2));
  }
  if ((theDigit > 31) || (theDigit < 1)) {
    return false;
  }
  theDigit = parseInt(theDate.substring(3, 5));
  if (theDate.charAt(3) == '0') {
    theDigit = parseInt(theDate.substring(4, 5));
  }
  if ((theDigit > 12) || (theDigit < 1)) {
    return false;
  }
  theDigit = parseInt(theDate.substring(6, 10));
  if ((theDigit > 2049) || (theDigit < 1)) {
    return false;
  }
  return true;
}

function LTrim(String)
{
  if (String == null) return "";
  return String.replace(/^\s*(.*)/, "$1");
}
function RTrim(String)
{
  if (String == null) return "";
  return String.replace(/^(.*\S)(\s*)$/, "$1");
}
function Trim(String)
{
  if (String == null) return "";
  return RTrim(LTrim(String));
}

function openWindow(url, width, height, returnRef)
{
  var windowname = "newWin" + (Math.round(Math.random() * 1000000));
  //self.name = "mainWindow"; // names current window as "mainWindow"
  newWindow = window.open(url, windowname, 'status=yes,toolbar=no,scrollbars=yes,resizable=yes,width=' + width + ',height=' + height);
  newWindow.focus();
  if (returnRef) return newWindow;
}

function openNamedWindow(url, winName, width, height, returnRef)
{
  newWindow = window.open(url, winName, 'toolbar=no,status=yes,scrollbars=yes,resizable=yes,width=' + width + ',height=' + height);
  newWindow.focus();
  if (returnRef) return newWindow;
}
function closeWindowIfNoSession()
{
  if (window.opener != null && window.opener.document.forms[0] != null)
  {
    window.opener.document.forms[0].target = "_self";
    window.opener.document.forms[0].action = "/Member/no_session.jsp";
    window.opener.document.forms[0].submit();
  }
  window.close();
}

function submitParWinAndClose()
{
  if (window.opener != null && window.opener.document.forms[0] != null)
  {
    window.opener.document.forms[0].submit();
  }
  window.close();
}

function submitForm(theForm)
{
  if (theForm != null)
  {
    theForm.submit();
  }
}

function changeAPic(aElem, isOver)
{
  var img = aElem.getElementsByTagName("img")[0];
  var src = img.src;
  var dot = src.lastIndexOf('.');
  if (src.substring(dot - 4, dot) == 'Over') {
    src = src.substring(0, dot - 4) + src.substring(dot);// without '-Over'
  }
  if (isOver) {
    // add '-Over'
    dot = src.lastIndexOf('.');
    src = src.substring(0, dot) + "Over" + src.substring(dot);
  }
  img.src = src;
}
function changeAPicOver(aElem) {
  changeAPic(aElem, true);
}
function changeAPicOut(aElem) {
  changeAPic(aElem, false);
}
function changePic(img_name, img_src)
{
  document[img_name].src = img_src;
}

// accept and validate date in format
// yyyyXmmXdd, yyXmmXdd where X - any char(s) except 0..9
function check_date(field) {

  var yyyy = "" + field.value.replace(/^\s*(\d{2}(\d{2})?)\D(\d{2})\D(\d{2})\s*$/, "$1");
  var mm = "" + field.value.replace(/^\s*(\d{2}(\d{2})?)\D(\d{2})\D(\d{2})\s*$/, "$2");
  var dd = "" + field.value.replace(/^\s*(\d{2}(\d{2})?)\D(\d{2})\D(\d{2})\s*$/, "$3");
  if (yyyy.search(/^\d{2}$/) >= 0) {
    yyyy = "20" + yyyy;
  }
  var DateValue = yyyy + mm + dd;
  var seperator = "-";
  var leap = 0;
  var err = 0;

  /* year is wrong if year = 0000 */
  if (yyyy == 0) {
    err = 20;
  }
  /* Validation of month*/

  if (mm < 1 || mm > 12) {
    err = 21;
  }
  /* Validation of day*/
  if (dd < 1 || dd > 32) {
    err = 22;
  }
  /* Validation leap-year / february / day */
  if (yyyy % 4 == 0 || yyyy % 100 == 0 || yyyy % 400 == 0) {
    leap = 1;
  }
  if (mm == 2 && leap == 1 && dd > 29) {
    err = 23;
  }
  if (mm == 2 && leap != 1 && dd > 28) {
    err = 24;
  }
  /* Validation of other months */
  if (dd > 31 && (mm == "01" || mm == "03" || mm == "05" || mm == "07" || mm == "08" || mm == "10" || mm == "12")) {
    err = 25;
  }
  if (dd > 30 && (mm == "04" || mm == "06" || mm == "09" || mm == "11")) {
    err = 26;
  }
  /* if 00 ist entered, no error, deleting the entry */
  if (dd == 0 && mm == 0 && yyyy == 00) {
    err = 0;
    dd = "";
    mm = "";
    yyyy = "";
    seperator = "";
  }
  /* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
  if (err == 0) {
    field.value = yyyy + seperator + mm + seperator + dd;
    return true;
  }
  /* Error-message if err != 0 */
  alert("Date is incorrect!");
  field.select();
  field.focus();
  return false;
}

function appendArrays(/*arr1, ..., arrN*/) {
  var arr = new Array();
  for (var j = 0; j < arguments.length; j++) {
    var arrj = arguments[j];
    for (var i in arrj) {
      arr.push(arrj[i]);
    }
  }
  return arr;
}

function showIndicator(jElem) {
  var parent = jElem.parent();
  var ind = j$(".indicator", parent);
  if (!ind.length) {
    ind = j$("<span />", {className: "indicator", style: "width:100%;height:100%;", innerHTML: "Saving ..."});
    parent.append(ind);
  }
  var allElems = j$("*", parent);
  allElems.hide();
  ind.show();
  return {ind:ind, allElems:allElems};
}
function hideIndicator(indRet) {
  indRet.allElems.show();
  indRet.ind.hide();
}
/**
 * You must include
 * <link rel="stylesheet" type="text/css" href="/js/jquery/css/jquery.statusbar.css"/>
 * <script type="text/javascript" src="/js/jquery/jquery.statusbar.js"></script>
 *
 * @param url
 * @param params
 * @param jElem
 * @param id
 * @param val
 * @param successCallback
 */
function checkboxSavingPost(url,
                            params,
                            jElem,
                            id,
                            val,
                            successCallback) {
  var __ret = showIndicator(jElem);
  j$.post(url,
          params,
          function(data, textStatus, XMLHttpRequest) {
            jElem.attr("disabled", false);
            responseProcessing(data, textStatus, XMLHttpRequest,
                               function(data, textStatus, XMLHttpRequest) {
                                 hideIndicator(__ret);
                                 jElem.attr("checked", val ? false : "checked");
                                 data && j$("#statusbar").statusbar("add", data.msg, "error");
                               },
                               function(data, textStatus, XMLHttpRequest) {
                                 hideIndicator(__ret);
                                 successCallback && successCallback(jElem, id, val);
                                 j$("#statusbar").statusbar("add", data.msg, "info");
                               });
          },
          "json");
}

function responseProcessing(data, textStatus, XMLHttpRequest, errorCallback, successCallback) {
  if (!data) {
    errorCallback(data, textStatus, XMLHttpRequest);
    return;
  }
  if (data.error === true) {
    errorCallback(data, textStatus, XMLHttpRequest);
  } else {
    successCallback(data, textStatus, XMLHttpRequest);
  }
}

var stopFormEnter = function(e) {
  e = e || window.event;
  if (e &&
      (e.target && "input" == e.target.tagName.toLowerCase() ||
       e.srcElement && "input" == e.srcElement.tagName.toLowerCase())) {
    return !((e.keyCode || e.which) == 13);
  } else {
    return true;
  }
};