var enter = 13;
var backspace = 8;
var tab = 9;
var numpad_0 = 96;
var numpad_1 = 97;
var numpad_2 = 98;
var numpad_3 = 99;
var numpad_4 = 100;
var numpad_5 = 101;
var numpad_6 = 102;
var numpad_7 = 103;
var numpad_8 = 104;
var numpad_9 = 105;
var numpad_period = 110;
var number_0 = 48;
var number_1 = 49;
var number_2 = 50;
var number_3 = 51;
var number_4 = 52;
var number_5 = 53;
var number_6 = 54;
var number_7 = 55;
var number_8 = 56;
var number_9 = 57;
var left = 37;
var right = 39;
var up = 38;
var down = 40;
var pgup = 33;
var pgdown = 34;
var home = 36;
var del = 46;
var period = 190;

if (window.navigator.userAgent.indexOf("Firefox") > -1){
   if (window.navigator.userAgent.indexOf("Firefox/1.0.3") > -1){//Firefox 1.0.3 bug fix
      Element.prototype.__proto__.__defineGetter__("text",function(){
         return this.firstChild.nodeValue
      });
      Event.prototype.__proto__.__defineGetter__("srcElement",function(){
         var node = this.target;
         while (node.nodeType != 1)node = node.parentNode;
         return node;
      });
      Event.prototype.__proto__.__defineSetter__("cancelBubble",function(b){
         if (b)this.stopPropagation();
      });
      Event.prototype.__proto__.__defineSetter__("returnValue",function(b){
         if (!b)this.preventDefault();
      });
   }
   else{
      Event.prototype.__defineGetter__("srcElement",function(){
         var node = this.target;
         while (node.nodeType != 1)node = node.parentNode;
         return node;
      });
      Event.prototype.__defineSetter__("cancelBubble",function(b){
         if (b)this.stopPropagation();
      });
      Event.prototype.__defineSetter__("returnValue",function(b){
         if (!b)this.preventDefault();
      });
   };
};

function dateKeyUp(e){
   var el = e.srcElement;
   var code = e.keyCode;
   if ((code >= numpad_0 && code <= numpad_9) || (code >= number_0 && code <= number_1) && !e.shiftKey){
      if (el.value.length == 2 || el.value.length == 5)el.value += "/";
   };
};

function dateKeyDown(e){
   var el = e.srcElement;
   var code = e.keyCode;
   if ((code >= numpad_0 && code <= numpad_9) || (code >= number_0 && code <= number_9) || code == enter || code == backspace || code == tab || code == left || code == right || code == up || code == down || code == pgup || code == pgdown || code == home || code == del && !e.shiftKey){
      if (code == enter){
         e.returnValue = false;
         if (el.value.length == 10)insertDate();
      };
      if ((code >= numpad_0 && code <= numpad_9) || (code >= number_0 && code <= number_9)){
         var len = el.value.length;
         if (len == 0 && ((code >= numpad_2 && code <= numpad_9) || (code >= number_2 && code <= number_9)))e.returnValue = false;
         if (len == 1){
            if (el.value == 0 && (code == numpad_0 || code == number_0))e.returnValue = false;
            if (el.value == 1 && ((code >= numpad_3 && code <= numpad_9) || (code >= number_3 && code <= number_9)))e.returnValue = false;
         };
         if (len == 2 || len == 3){
            if (el.value.charAt(0)+el.value.charAt(1) == 2 && ((code >= numpad_3 && code <= numpad_9) || (code >= number_3 && code <= number_9)))e.returnValue = false;
            if (el.value.charAt(0)+el.value.charAt(1) != 2 && ((code >= numpad_4 && code <= numpad_9) || (code >= number_4 && code <= number_9)))e.returnValue = false;
         };
         if (el.value.length == 2 || el.value.length == 5)el.value += "/";
      };
      if (code == backspace){
         if (el.value.length == 3 || el.value.length == 4 || el.value.length == 6 || el.value.length == 7)el.value = el.value.substring(0,el.value.length-1);
      };
      if (code == up || code == down){
         if (el.value.length == 0){
            var date = new Date();
            el.value = (date.getMonth()+1 <= 9 ? "0"+(date.getMonth()+1) : (date.getMonth()+1))+"/"+(date.getDate() <= 9 ? "0"+date.getDate() : date.getDate())+"/"+date.getFullYear();
         };
         if (el.value.length == 10){
            var date = new Date(el.value);
            if (code == up)date.setDate(date.getDate()+1);
            else date.setDate(date.getDate()-1);
            el.value = (date.getMonth()+1 <= 9 ? "0"+(date.getMonth()+1) : (date.getMonth()+1))+"/"+(date.getDate() <= 9 ? "0"+date.getDate() : date.getDate())+"/"+date.getFullYear();
         };
         e.returnValue = false;
      };
      if (code == pgup || code == pgdown){
         if (el.value.length == 0){
            var date = new Date();
            el.value = (date.getMonth()+1 <= 9 ? "0"+(date.getMonth()+1) : (date.getMonth()+1))+"/"+(date.getDate() <= 9 ? "0"+date.getDate() : date.getDate())+"/"+date.getFullYear();
         };
         if (el.value.length == 10){
            var date = new Date(el.value);
            if (code == pgup)date.setMonth(date.getMonth()+1);
            else date.setMonth(date.getMonth()-1);
            el.value = (date.getMonth()+1 <= 9 ? "0"+(date.getMonth()+1) : (date.getMonth()+1))+"/"+(date.getDate() <= 9 ? "0"+date.getDate() : date.getDate())+"/"+date.getFullYear();
         };
      };
      if (code == home){
         var date = new Date();
         el.value = (date.getMonth()+1 <= 9 ? "0"+(date.getMonth()+1) : (date.getMonth()+1))+"/"+(date.getDate() <= 9 ? "0"+date.getDate() : date.getDate())+"/"+date.getFullYear();
         e.returnValue = false;
      };
   }
   else e.returnValue = false;
};

function viewDef(def){
   var defWin = window.open(def+".html","defWin","width=300,height=350,directories=no,location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,titlebar=yes,toolbar=no");
};

function init(){
   if (navigator.userAgent.indexOf("MSIE") > -1){
      if (document.getElementById("dob") != null){
         document.getElementById("dob").attachEvent("onkeydown",dateKeyDown);
         document.getElementById("dob").attachEvent("onkeyup",dateKeyUp);
      };
   }      
   else{
      if (document.getElementById("dob") != null){
         document.getElementById("dob").addEventListener("keydown",dateKeyDown,false);
         document.getElementById("dob").addEventListener("keyup",dateKeyUp,false);
      };
   };
};

function setExclusive(el,list){
   if (el.checked){
      list = list.split(",");
      for (var i=0; i<list.length; i++){
         if (document.getElementById(list[i]) != null)document.getElementById(list[i]).checked = false;
      };
   };
};

function checkForm(form){
   var ok = true;
   if (document.getElementById("agree") != null && !document.getElementById("agree").checked){
      alert(document.getElementById("agree").getAttribute("message"));
      ok = false;
   };
   if (ok){
      var basic0 = document.getElementById("hunt_basic0");
      var basic5 = document.getElementById("hunt_basic5");
      var biggame0 = document.getElementById("hunt_biggame0");
      var biggame5 = document.getElementById("hunt_biggame5");
      if (basic0 != null && basic5 != null && biggame0 != null && biggame5 != null){
         if (document.getElementById("hunt_turkey").checked || document.getElementById("hunt_bow").checked || document.getElementById("hunt_muzzleloader").checked){
            if (!basic0.checked && !basic5.checked && !biggame0.checked && !biggame5.checked){
               alert("Please select whether you wish to hunt for the season or a 5-day trip by select one of the basic licenses.");
               var ok = false;
            };
         };
      };
   };
   if (ok)ok = form_validate(form);
   return ok;
};

function doSeason(type){
   if (type == "fresh"){
      document.getElementById("fish_fresh1").checked = false;
      document.getElementById("fish_fresh4").checked = false;
   }
   else{
      if (document.getElementById("fish_fresh1").checked || document.getElementById("fish_fresh4").checked){
         document.getElementById("fish_fresh1").checked = false;
         document.getElementById("fish_fresh4").checked = false;
         document.getElementById("fish_fresh0").checked = true;
      };
      document.getElementById("fish_salt1").checked = false;
      document.getElementById("fish_salt4").checked = false;
   };
};

function doFourDay(type){
   if (type == "fresh"){
      document.getElementById("fish_fresh0").checked = false;
      document.getElementById("fish_fresh1").checked = false;
      if (document.getElementById("fish_salt0").checked){
         document.getElementById("fish_salt4").checked = true;
         document.getElementById("fish_salt0").checked = false;
      }
   }
   else{
      if (document.getElementById("fish_fresh1").checked){
         document.getElementById("fish_fresh4").checked = true;
         document.getElementById("fish_fresh1").checked = false;
      };
      if (document.getElementById("fish_fresh0").checked){
         document.getElementById("fish_fresh4").checked = true;
         document.getElementById("fish_fresh0").checked = false;
      };
      if (document.getElementById("fish_salt0").checked)document.getElementById("fish_salt0").checked = false;
      if (document.getElementById("fish_salt1").checked)document.getElementById("fish_salt1").checked = false;
   };
};

function doOneDay(type){
   if (type == "fresh"){
      document.getElementById("fish_fresh0").checked = false;
      document.getElementById("fish_fresh4").checked = false;
      if (document.getElementById("fish_salt0").checked || document.getElementById("fish_salt4").checked){
         document.getElementById("fish_salt1").checked = true;
         document.getElementById("fish_salt0").checked = false;
         document.getElementById("fish_salt4").checked = false;
      };
   }
   else{
      document.getElementById("fish_salt0").checked = false;
      document.getElementById("fish_salt4").checked = false;
   };
};

function setFish(type,duration){
   switch (duration){
      case 0 : doSeason(type); break;
      case 1 : doOneDay(type); break;
      case 4 : doFourDay(type); break;
   };
};

function setHunt(type,duration){
   switch (duration){
      case 0 : doHuntSeason(type); break;
      case 5 : doHuntFiveDay(type); break;
   };
};

function doHuntSeason(type){
   if (type == "basic"){
      document.getElementById("hunt_basic5").checked = false;
   }
   else{
      if (document.getElementById("hunt_basic5").checked){
         document.getElementById("hunt_basic5").checked = false;
         document.getElementById("hunt_basic0").checked = true;
      };
      document.getElementById("hunt_biggame5").checked = false;
   };
};

function doHuntFiveDay(type){
   if (type == "basic"){
      document.getElementById("hunt_basic0").checked = false;
      if (document.getElementById("hunt_biggame0").checked){
         document.getElementById("hunt_biggame5").checked = true;
         document.getElementById("hunt_biggame0").checked = false;
      }
   }
   else{
      if (document.getElementById("hunt_biggame0").checked)document.getElementById("hunt_biggame0").checked = false;
   };
};

if (navigator.userAgent.indexOf("MSIE") > -1)window.attachEvent("onload",init);
else window.addEventListener("load",init,false);