var inPopup = false;

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

$(document).ready(function() {
  updatePopups();
  fixForms();
  $('form').submit(function(event){
    return formValid(this, event);
  });
  $('form').each(function(){
    $(this).addClass('nyroModal');
  });
});

function popupEndFillContent(){
  inPopup = true;
  updatePopups(".popupcontents");
  fixForms();
  $('form').submit(function(event){
    return submitPopup(this, event);
  });
}

function updatePopups(c){
  c = c?c:$(document);
  if(!(c.find)) c = $(c);
  c.find("a.popup").click(function(e){
    e.preventDefault();
    var link = $(this).attr('href');
    var hasquest = link.split('?');
    var addl = '?popup=1';
    if(hasquest.length==2) addl = '&popup=1';
    link += addl;
    var w, h
    w = $(this).attr('width')?$(this).attr('width'):600;
    h = $(this).attr('height')?$(this).attr('height'):400;
    $.nyroModalManual({
      url: link,
      width: w,
      height: h,
	    endFillContent: popupEndFillContent
    });
    return false;
  });
  $(".datepicker").datepicker({changeYear: true, beforeShow: function (i, e) {
      w = $(i);
      while(w&&(w.css('z-index')<=0)){
        w = w.parent();
      }
      if(w){
        w.append(e);
        e.dpDiv.css('z-index', w.css('z-index')+1);
      }else $(document).append(e);
    }
  });
}

function popup(link, w, h){
  var hasquest = link.split('?');
  var addl = '?popup=true';
  if(hasquest.length==2) addl = '&popup=true';
  link += addl;
  w = w?w:600;
  h = h?h:400;
  $.nyroModalManual({
    url: link,
    width: w,
    height: h,
    endFillContent: popupEndFillContent
  });
  return false;
}

function re(r, elem){
  var reg = new RegExp(r, 'i');
  var ok = $(elem).val().match(reg);
  return ok;
}

function validateDate(elem){
  return re('^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)[0-9]{2}$', elem);
}

function validateEmail(elem){
  return re('^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$', elem);
}

function validateText(elem){
  var minLen = $(elem).attr('minlength');
  minLen = minLen?minLen:2;
  return trim($(elem).val()).length >= minLen;
}

function validateZip(elem){
  return re('^\d{5}([\-]\d{4})?$', elem);
}

function validatePhone(elem){
  var filter = /^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )/;//?(\d{4})(( x| ext)\d{1,5}){0,1}$/;
  return filter.test($(elem).val());
}

function validateRadio(elem, fn){
  var elems = $('input[name='+fn+']');
  if((!elems)||elems.length==0) return true;
  for(var i = 0; i < elems.length; i++){
    if(elems[i].checked) return true;
  }
  return false;
}

function validateSelect(elem){
  return trim($(elem).val())!='';
}

function formValid(form, event){
  var allOk = true;
  $(form).find("*[validation]").each(function(){
    var e = $(this);
    var val = e.attr('validation');
    var fn = e.attr('fieldname');
    var elem = $('#'+fn);
    var ok = true;
    if(val!='') eval('ok = '+val+';');
    var ok = (ok)?true:false;
    if(ok) elem.removeClass('error');
    else elem.addClass('error');
    allOk = allOk && ok;
  });
  form.valid = allOk;
  if(!allOk) if(event) event.preventDefault();
  return allOk;
}

function submitPopup(form, event){
  var target = $(form).attr('popupaction');
  if(target) $(form).attr('action', target);
  if(formValid(form, event)){
    $.nyroModalManual({
      url: $(form).attr('action'),
      width: 600,
      height: 400,
      endFillContent: popupEndFillContent,
      from: form
    });
  }
  return false;
}

function fixElementNames(e){
  var tid = e.id;
  if(tid){
    var tn = e.name;
    if(!tn) e.name = e.id;
  }
  $(e).children().each(function(){
    fixElementNames(this);
  });
}

function fixForms(){
  $('form').each(function(){
    fixElementNames(this);
  });
}
