var serverQueryStr = '';
document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function()
  {
    function decode(s) {
      return decodeURIComponent(s).replace(/\+/g, " ")
    }
    serverQueryStr += "&"+decode(arguments[1])+"="+decode(arguments[2])
  }
);
var webRoot = FindWebRoot();
var popupStatus = 0;
var kfPopupLayer = null;
var kfPopupLeft = 0;
var kfPopupTop = 0;
var kfReloadOnClose = 0;
$(document).ready(function()
  {
    $("#modalBox").remove();
    $("#overLay").remove();
    $("body").append('<div id="modalBox"></div>');
    $("body").append('<div id="overlay"></div>');
    $("body").append('<div id="ajaxLoading"><img src="'+FindWebRoot()+'images/progress_bar.gif" /><p style="text-align: center"><b>Loading...</b></p></div>');
    $("#ajaxLoading").css(
      {
      "border": "1px solid #000",
      "backgroundColor": "#FFFDEE",
      "display": "none",
      "padding": "15px",
      "position": "absolute",
      "width": "235px",
      "zIndex": "1001"
      }
    );
    $("#overlay").css(
      {
      "backgroundColor": "#000", "display": "none", "left": "0", "height": $(document).height(), "opacity": "0.6", "position": "absolute", "top": "0", "width": $(window).width(), "zIndex": "1000"
      }
    );
    $("#modalBox").css(
      {
      "backgroundColor": "#fff", "display": "none", "height": "auto", "padding": "0px 0px", "top": "-9999px", "width": "auto", "zIndex": "1001"
      }
    );
    $("#popupContactClose").click(function()
      {
        ToggleLayerDisplay("#modalBox")
      }
    );
    $("#overlay").click(function()
      {
        ToggleLayerDisplay("#modalBox")
      }
    );
    $(document).keypress(function(e)
      {
        if(e.keyCode==27&&popupStatus==1) {
          ToggleLayerDisplay("#modalBox")
        }
      }
    );
    $(window).scroll(function()
      {
        if(popupStatus==1)CenterLayer("#modalBox")
      }
    )
  }
);
function AjaxCall(fn, prm, frm, layerUpdate, submitOnSuccess) {
  if(prm.indexOf("&")==-1) {
    prm = "fn="+fn+"&wr="+FindWebRoot()+"&prm="+prm+"&btn_"+prm+"_submit=submit"+"&"+$("#"+frm.name).serialize();
  } else {
    prm = "fn="+fn+"&wr="+FindWebRoot()+"&prm="+prm+"&"+$("#"+frm.name).serialize();
  }
  ajaxURL = FindWebRoot()+"js/ajax.php";
  $.ajax(
    {
    type: "post", url: ajaxURL, data: prm, beforeSend: function() {
      }
      , complete: function() {
      }
      , error: function() {
      }
      , success: function(html) {
        $(layerUpdate).html(html);
//alert(html);
        if(submitOnSuccess)frm.submit();
        return true;
      }
    }
  )
}
function AjaxRefresh(vf, vn, lay) {
  $.ajax(
    {
    type: "post", url: FindWebRoot()+"inc/modalBox.php", data: "fn=modalView&prm="+vf+"&vwName="+vn, beforeSend: function() {
      }
      , complete: function() {
      }
      , error: function() {
      }
      , success: function(html) {
        $(lay).html(html)
      }
    }
  )
}
function CenterLayer(layer) {
  if(layer!=kfPopupLayer) {
    var scrollbarY = 0;
    var scrollTop = $(document).scrollTop();
    var limitX = .9;
    var limitY = .9;
    var winX = $(window).width();
    var winY = $(window).height();
    var maxY = $(layer).height();
    var overflow = "hidden";
    if(maxY>winY*limitY) {
      maxY = winY*limitY;
      scrollbarY = VertScrollbarWidthIE();
      if(!scrollbarY) {
        scrollbarY = VertScrollbarWidth()
      }
      ;
      overflow = "auto"
    }
    var maxX = $(layer).width()+scrollbarY;
    if(maxX>winX*limitX)maxX = winX*limitX;
    kfPopupLayer = layer;
    kfPopupLeft = (winX-maxX)/2;
    kfPopupTop = (winY-maxY)/2;
    $(layer).css(
      {
      "height": maxY, "overflow": overflow, "position": "absolute", "width": maxX
      }
    )
  }
  $(layer).css(
    {
    "left": kfPopupLeft, "top": $(document).scrollTop()+kfPopupTop
    }
  )
}
function DisablePopup() {
  ToggleLayerDisplay("#modalBox")
}
function FindWebRoot() {
  var rtn = '';
  var root = document.URL.split("/");
  var count = root.length;
  count -= 4;
  if(document.URL.indexOf("localhost")!=-1||document.URL.indexOf("/beta/")!=-1)count -= 1;
  for(i = 0; i<count; i++) {
    rtn += "../"
  }
  return rtn
}
function FocusFirst(obj) {
  t = $(obj+" input:visible:enabled:first");
  setTimeout(function()
    {
      if(typeof($(t))=="undefined")return;
      $(t).focus();
      HighlightFade(t)
    }
    , 200)
}
function HighlightFade(obj) {
  $(obj).scrollTo;
  setTimeout(function()
    {
      var origColor = $(obj).css("backgroundColor");
      $(obj).css(
        {
        backgroundColor: "#FF0"
        }
      );
      $(obj).animate(
        {
        backgroundColor: origColor
        }
        , 2000);
    }
    , 100)
}
function isArray(testObject) {
  return testObject && !(testObject.propertyIsEnumerable('length')) && typeof testObject === 'object' && typeof testObject.length === 'number';
}
function isNumeric(val) {
  return(parseFloat(val, 10)==(val*1))
}
function ModalBox(fn, prm, btn) {
  if(typeof(btn)!="undefined") {
    $("form#"+btn.name).append('<input type="hidden" name="btn_'+btn.name+'_submit" value="1">');
    if($("form#"+btn.name).length)prm = prm+"&"+$("form#"+btn.name).serialize()
  }
  if(popupStatus==1)ToggleLayerDisplay("#modalBox");
  $.ajax(
    {
    type: "post", url: FindWebRoot()+"js/ajax.php", data: "fn="+fn+"&wr="+FindWebRoot()+"&prm="+prm, beforeSend: function() {
        $("#overlay").css(
          {
          "height": $(document).height()
          }
        );
        $("#overlay").show();
        CenterLayer("#ajaxLoading");
        $("#ajaxLoading").show()
      }
      , complete: function() {
      }
      , error: function() {
      }
      , success: function(html) {
        $("#modalBox").html(html);
        if(!html.length) {
          popupStatus = 1;
          ToggleLayerDisplay("#modalBox");
          $("#ajaxLoading").hide();
          return;
        }
        $("#ajaxLoading").hide();
        CenterLayer("#modalBox");
        ToggleLayerDisplay("#modalBox", 1);
        FocusFirst("#modalBox");
      }
    }
  );
}
function str_replace(search, replace, subject) {
  var s = subject;
  var ra = r instanceof Array, sa = s instanceof Array;
  var f =[].concat(search);
  var r =[].concat(replace);
  var i = (s =[].concat(s)).length;
  var j = 0;
  while(j = 0, i--) {
    if(s[i]) {
      while(s[i] = (s[i]+'').split(f[j]).join(ra? r[j]||"": r[0]), ++j in f) {
      }
    }
  }
  return sa? s: s[0]
}
function ToggleLayerDisplay(layer, forceOn) {
  if(popupStatus==1&&forceOn)return; if(popupStatus==0) {
    popupStatus = 1;
    $("#overlay").fadeIn("normal");
    $(layer).fadeIn("slow");
    return
  }
  popupStatus = 0;
  $(layer).fadeOut("fast");
  $("#overlay").fadeOut("fast");
  $("#modalBox").empty();
  $("#modalBox").css(
    {
    "backgroundColor": "#fff", "display": "none", "height": "auto", "top": "-9999px", "width": "auto", "zIndex": "1001"
    }
  );
  if(kfReloadOnClose) {
    location.reload(true);
    parent.location.reload(true)
  }
  if(typeof(onPopupClose)!='undefined') {
    onPopupClose()
  }
}
function VD(x, max, sep, l) {
  l = l||0;
  max = max||10;
  sep = sep||' ';
  if(l>max) {
    return"[WARNING: Too much recursion]\n"
  }
  var i, r = '', t = typeof x, tab = '';
  if(x===null) {
    r += "(null)\n"
  }
  else if(t=='object') {
    l++;
    for(i = 0; i<l; i++) {
      tab += sep
    }
    if(x&&x.length) {
      t = 'array'
    }
    r += '('+t+") :\n";
    for(i in x) {
      try {
        r += tab+'['+i+'] : '+VD(x[i], max, sep, (l+1))
      }
      catch(e) {
        return"[ERROR: "+e+"]\n"
      }
    }
  }
  else {
    if(t=='string') {
      if(x=='') {
        x = '(empty)'
      }
    }
    r += '('+t+') '+x+"\n"
  }
  return r
}
;
var jsDescr = new Array();
var jsValidate = new Array();
function Validator(frm, val, des) {
  var valError = "";
  $(".validationError").remove();
  if(typeof(ValidateSelector)!="undefined") {
    for(y in ValidateSelector) {
      var a = ValidateSelector[y].split("|||");
      val[a[0]] = 'mustSelect';
      des[a[0]] = a[1];
    }
  }
  for(z in val) {
    var ctl = "#"+$(frm).attr("name")+" #frm_"+z;
    var spn = "#"+$(frm).attr("name")+" #frm_"+z+"Span";
    var tst = $(ctl).val();
    if($(ctl).attr('type')=='radio') tst=$("input:checked[type='radio'][name='frm_"+z+"']").val();
    if(typeof(ctl)=="undefined") {
      if(z.indexOf("_month")==-1 && z.indexOf("_year")==-1) {
        alert('undefined: '+ctl);
        return false;
      }
      if(z.indexOf("_month")!=-1) {
        ctl = "#"+$(frm).attr("name")+" #"+z;
        spn = z.replace("_month", "");
        spn = "#"+$(frm).attr("name")+" #frm_"+spn+"Span";
        tst = $(ctl).val();
      }
      if(z.indexOf("_year")!=-1) {
        ctl = "#"+$(frm).attr("name")+" #"+z;
        spn = z.replace("_year", "");
        spn = "#"+$(frm).attr("name")+" #frm_"+spn+"Span";
        tst = $(ctl).val();
      }
    }
    var fcs;
    var selFlag = 1;
    var x = val[z].split(",");
    for(y in x) {
      if(x[y].indexOf("|||")!=-1) {
        a = x[y].split("|||");
        x[y] = a[0];
        l = a[1]
      }
      switch(x[y]) {
        case"dateSelectMonthYear":
          ctl = "#"+$(frm).attr("name")+" #"+z;
          tst = $(ctl).val();
          spn = str_replace("_month", "", spn);
          if(!tst.length) {
            if(!valError.length)valError = ctl;
            $(spn).prepend('<span class="validationError">'+des[z]+' must be a valid date.</span>')
          }
          break;
        case"dateSelectMonthYearIfSelector":
          var sel = "#"+$(frm).attr("name")+" #frm_"+a[1];
          selFlag = 0;
          if($(sel+":checked").val()==a[2]) {
            selFlag = 1;
            ctl = "#"+$(frm).attr("name")+" #"+z;
            tst = $(ctl).val();
            spn = str_replace("_month", "", spn);
            if(!tst.length) {
              if(!valError.length)valError = ctl;
              $(spn).prepend('<span class="validationError">'+des[z]+' must be a valid date.</span>')
            }
          }
          break;
        case"email":
          if(!ValidEmailAddress(tst)&&selFlag) {
            if(!valError.length)valError = ctl;
            $(spn).prepend('<span class="validationError">'+des[z]+' must be a valid e-mail address.</span>')
          }
          break;
        case"integer":
          alert('integer: '+tst);
          return false;
          if(!tst.length) {
            if(!valError.length)valError = ctl;
            $(spn).prepend('<span class="validationError">'+des[z]+' must not be blank.</span>')
          }
          break;
        case"matchField":
          var m = "#"+$(frm).attr("name")+" #frm_"+l;
          m = $(m).val();
          if(m!=tst) {
            if(!valError.length)valError = ctl;
            $(spn).prepend('<span class="validationError">'+des[z]+' must match '+l+' exactly.</span>')
          }
          break;
        case"minimumLength":
          if(tst.length<l) {
            if(!valError.length)valError = ctl;
            $(spn).prepend('<span class="validationError">'+des[z]+' must be at least '+l+' characters in length.</span>')
          }
          break;
        case"mustSelect":
					if(typeof(tst)=="undefined") {
            if(!valError.length)valError=ctl;
            $(spn).prepend('<span class="validationError">Please select a '+des[z]+'.</span>')
					}
          break;
        case"notBlank":
          if(!tst.length) {
            if(!valError.length)valError = ctl;
            $(spn).prepend('<span class="validationError">'+des[z]+' must not be blank.</span>')
          }
          break;
        case"notBlankIfSelector":
          var sel=$("input:checked[type='radio'][name='frm_"+a[1]+"']").val();
          selFlag = 0;
          if(sel==a[2]) {
            selFlag = 1;
            if(typeof(tst)=="undefined" || !tst.length) {
              if(!valError.length)valError = ctl;
              $(spn).prepend('<span class="validationError">'+des[z]+' must not be blank.</span>')
            }
          }
          break;
        case"number":
          if(!isNumeric(tst)) {
            if(!valError.length)valError = ctl;
            $(spn).prepend('<span class="validationError">'+des[z]+' must be numeric.</span>')
          }
          break;
        case "numberOrBlank":
        case "numberorblank":
          if(!isNumeric(tst) && tst.length) {
            if(!valError.length)valError = ctl;
            $(spn).prepend('<span class="validationError">'+des[z]+' must be numeric or blank.</span>')
          }
          break;
        case"generatedIfBlank":
        case"generatedifblank":
        case"notBlankIfNotSet":
        case"unique":
        case"uniqueIfNew":
          break;
        default:
          alert('default: '+x[y]);
          return false;
          break;
      }
    }
  }
  if(valError.length) {
    if(popupStatus)ToggleLayerDisplay("#modalBox", 1);
    $(valError).focus();
    $(valError).select();
    HighlightFade(valError);
    return false;
  }
  return true;
}
function ValidEmailAddress(emailAddress) {
  var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
  return pattern.test(emailAddress)
}
function VertScrollbarWidth() {
  var scr = null;
  var inn = null;
  var wNoScroll = 0;
  var wScroll = 0;
  scr = document.createElement('div');
  scr.style.position = 'absolute';
  scr.style.top = '-1000px';
  scr.style.left = '-1000px';
  scr.style.width = '100px';
  scr.style.height = '50px';
  scr.style.overflow = 'hidden';
  inn = document.createElement('div');
  inn.style.width = '100%';
  inn.style.height = '200px';
  scr.appendChild(inn);
  document.body.appendChild(scr);
  wNoScroll = inn.offsetWidth;
  scr.style.overflow = 'auto';
  wScroll = inn.offsetWidth;
  document.body.removeChild(document.body.lastChild);
  return(wNoScroll-wScroll)
}
function VertScrollbarWidthIE() {
  var div = $('<div style="width:50px;height:50px;overflow:hidden;position:absolute;top:-200px;left:-200px;"><div style="height:100px;"></div>');
  $('body').append(div);
  var w1 = $('div', div).innerWidth();
  div.css('overflow', 'scroll');
  var w2 = $('div', div).innerWidth();
  $(div).remove();
  return(w1-w2)
}