MUNROEIMAGECACHE = [];

(function() {
   // Work around http://dev.jqueryui.com/ticket/4186
   var oldSetData = $.ui.resizable.prototype._setData;
   $.ui.resizable.prototype._setData = function(key, value) {
      oldSetData.apply(this, arguments);
      if (key === "aspectRatio") {
         this._aspectRatio = !!value;
      }
   };

   // Fix for nested draggables
   // http://dev.jqueryui.com/ticket/4333
/*
   $.extend($.ui.draggable.prototype, (function (orig) {
     return {
       _mouseCapture: function (event) {
         var result = orig.call(this, event);
         if (result && $.browser.msie) event.stopPropagation();
         return result;
       }
     };
   })($.ui.draggable.prototype["_mouseCapture"]));
*/
   $.extend($.fn.disableTextSelect = function() {
      return this.each(function(){
         if($.browser.mozilla){//Firefox
            $(this).css('MozUserSelect','none');
         }else if($.browser.msie){//IE
            $(this).bind('selectstart',function(){return false;});
         }else{//Opera, etc.
            $(this).mousedown(function(){return false;});
         }
      });
   });

   $.preLoadImages = function() {
      var args_len = arguments.length;
      for (var i = args_len; i--;) {
         var cacheImage = document.createElement('img');
         cacheImage.src = arguments[i];
         MUNROEIMAGECACHE.push(cacheImage);
      }
   }

   $.extend($.fn.loading = function() {
      $(this).html("<center><img src=\"/images/loading.gif\"></center>");
   });

   $.extend($.fn.cornered = function() {
      $(this).append('<div class="corner cornerTL"></div><div class="corner cornerTR">' +
         '</div><div class="corner cornerBL"></div><div class="corner cornerBR"></div>');
   });

   $.extend($.fn.cornerbordered = function() {
      var contents = $(this).html();

      $(this).html('<div class="cornerBTB"></div><div class="cornerBBody">' +
         contents + '</div><div class="cornerBTB"></div><div class="corner cornerBTL">' +
         '</div><div class="corner cornerBTR"></div><div class="corner cornerBBL">' + 
         '</div><div class="corner cornerBBR"></div>');
   });

})();

var FORMCHECK = {
   isValidPassword : function(input) {
      var val = trim(input.val());

      if (val.length >= 5)
         FORMCHECK.setValid(input);
      else
         FORMCHECK.setInvalid(input);
   },

   hasInput : function(input) {
      var val = trim(input.val());

      if (val.length >= 1)
         FORMCHECK.setValid(input);
      else
         FORMCHECK.setInvalid(input);
   },

   isValidEmail : function(input) {
      var email = input.val();

      if (FORMCHECK.emailSyntaxIsValid(email))
         FORMCHECK.setValid(input);
      else
         FORMCHECK.setInvalid(input);
   },

   emailSyntaxIsValid : function(email) {

      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(email);
   },

   confirmEmail : function(input) {
      var email = $('#formValue_email').val();
      var value = input.val();

      if (value.indexOf(email) >= 0 && email.length == value.length)
         FORMCHECK.setValid(input);
      else
         FORMCHECK.setInvalid(input);
   },

   setValid : function(input) {
      var idParts = input.attr("id").split("_");
      var id = idParts[1];

      if (!$('#formCheck_' + id).is(":hidden"))
         return;

      $('#formCheck_' + id).css('opacity',0).show().animate(
         {opacity : 1.0},500);
   },

   setInvalid : function(input) {

      var idParts = input.attr("id").split("_");
      var id = idParts[1];

      if ($('#formCheck_' + id).is(":hidden"))
         return;

      $('#formCheck_' + id).animate(
         {opacity : 0.0},500,function() {
         $(this).hide();
      });
   }
}


var SPLASH = {

   initialize : function() {
      SPLASHIMAGEMANUALSELECT = false;
      SPLASHIMAGETIME = 8000;
      SPLASHIMAGECURRENT = 1;
      SPLASHIMAGESLOADING = false;

      // Initialize the button
      $('.splashButtonText').click(function() {
         var id = $(this).attr("id").split("_");
         var splashid = id[1];

         SPLASHIMAGEMANUALSELECT = true;
         SPLASH.load(splashid);
      });

      SPLASHIMAGES = $('.splashImage').length;

      if (SPLASHIMAGES > 1)
         setTimeout("SPLASH.next()", SPLASHIMAGETIME);
   },


   next : function() {
      if (SPLASHIMAGES <= 1 || SPLASHIMAGEMANUALSELECT)
         return;

      next = SPLASHIMAGECURRENT + 1;

      if (next > SPLASHIMAGES)
         next = 1;

      SPLASH.load(next);
   },

   load : function(next) {
      if (SPLASHIMAGESLOADING || SPLASHIMAGECURRENT == next)
         return;

      SPLASHIMAGESLOADING = true;
      var current = 'splashImage' + SPLASHIMAGECURRENT;

      SPLASHIMAGECURRENT = next;
      var next = 'splashImage' + SPLASHIMAGECURRENT;

      // Show the next one
      $('#' + next).css('opacity',1.0).show();


      // Animate the current block
      // Find the left offset for the next one
      var currentLeft = $('#splashButton_' + SPLASHIMAGECURRENT).position().left;
      var currentWidth = $('#splashButton_' + SPLASHIMAGECURRENT).width();

      $('#splashButtonCurrent').animate({ left: currentLeft }, 300, function() {
         $(this).css("width", currentWidth + 2);
         // Fade out the current
         $('#' + current).animate({ opacity: 0.0 }, 600, function() {

            // Strip current of the class
            $('#' + current).removeClass('active lastActive').hide();

            $('#' + next).addClass('active');

            SPLASHIMAGESLOADING = false;

            if (SPLASHIMAGES && !SPLASHIMAGEMANUALSELECT)
               setTimeout("SPLASH.next()", SPLASHIMAGETIME);
         });
      });
   }
}

var CART = {
   addProduct : function(productid) {
      var values = "";

      $('input,select', '#productAddBlock').each(function() {
         if (values.length > 0)
            values += ",";

         var value = trim($(this).val());

         values += $(this).attr("name") + "=" + escape(value);
      });

      var salt = getSalt();

      $.post("/ajax_cart.php", { salt : salt, productid : productid,
         values : values, c : "add" },
         function(data) {

         var json = evalJSON(data);

         // Go directly there
         if (check(json))
            overlayShow(unescape(json.content));
         else
            confirm("Please ensure all options are selected");
      });
   },

   initialize : function() {
      $('.cartItemRemove').unbind().click(function() {
         if (!confirm("Are you sure you wish to remove this item from your cart?"))
            return;

         var id = $(this).attr("id").split("_");
         var ccid = id[1];

         var salt = getSalt();

         $.post("/ajax_cart.php", { salt : salt, ccid : ccid, c : "delete" },
            function(data) {

            var json = evalJSON(data);

            $('#cartTotals').html("Updating...");

            // Go directly there
            if (check(json))
               $('#cartcontents_' + ccid).animate({opacity : 0}, 500, function() {
                  $(this).remove();
                  $('#cartTotals').html(unescape(json.content));
                  $('#headerCartCount').html(json.cartcount);
               });
            else
               confirm("Please ensure all options are selected");
         });
      });

      $('.cartModifyQuantity').unbind().change(function() {
         var id = $(this).attr("id").split("_");
         var ccid = id[1];
         var quantity = $(this).val();

         var salt = getSalt();

         $('#cartTotals').html("Updating...");

         $.post("/ajax_cart.php", { salt : salt, ccid : ccid, 
            quantity : quantity, c : "modifyquantity" }, function(data) {

            var json = evalJSON(data);

            // Go directly there
            if (check(json)) {
               $('#cartTotals').html(unescape(json.content));
               $('#headerCartCount').html(json.cartcount);
            } else
               confirm("Please ensure all options are selected");
         });

      });
   }
}

var CHECKOUT = {
   initialize : function() {
      $('input[name="sameasshipping"]', '#checkoutBillingBlock').click(function() {
         // Disable all inputs for shipping area
         if (this.checked) {
            $('input, select', '#checkoutBillingAddress').attr("disabled", true
               ).addClass("formInputDisabled");

            // Now set the values
            $('input,select', '#checkoutBillingAddress').each(function() {
               var name = $(this).attr("name");

               if (name.indexOf("hidden") == 0)
                  return;

               $(this).val($('input[name="hidden' + name +'"]', "#checkoutBillingAddress").val());
            });

         } else {
            $('input, select', '#checkoutBillingAddress').attr("disabled", false
               ).removeClass("formInputDisabled");
         }
      });   

      $('#checkoutShippingSelect').unbind().change(function() {
         var value = $(this).val();

         var salt = getSalt();

         $.post("/ajax_checkout.php", { salt : salt, value : value,
            c : "shippingtypeselect" }, function(data) {

            var json = evalJSON(data);

            // Go directly there
            if (check(json)) {
               // Update order summary
               $('#checkoutLeftOverview').html(unescape(json.overview));
            }
         });


      });
   },

   goBack : function(currentstep) {

      var salt = getSalt();

      $.post("/ajax_checkout.php", { salt : salt, current : currentstep,
         c : "goback" }, function(data) {

         var json = evalJSON(data);

         // Go directly there
         if (check(json)) {
            location.href = json.prevurl;
         } else
            refresh();
      });


   },

   setShipping : function() {
      var values = "";
      $("input[name='submitnext']",'#checkoutShippingBlock').val("saving..."
            ).attr("disabled", true);

      $('.formError','#checkoutShippingBlock').removeClass("formError");

      $('input,select','#checkoutShippingBlock').each(function() {
         var name = $(this).attr("name");

         if (name.indexOf("submit") == 0)
            return;

         if (values.length > 0)
            values += ",";

         var value = trim($(this).val());

         if (value.length <= 0 && name.indexOf("address2") != 0) {
            $(this).addClass("formError");
         }

         values += name + "=" + escape(value);
      });

      if ($('.formError','#checkoutShippingBlock').length > 0) {
         confirm("Please fill out all fields");

         $("input[name='submitnext']",'#checkoutShippingBlock').val("Next >"
            ).attr("disabled", false);

         return;
      }

      var salt = getSalt();

      $.post("/ajax_checkout.php", { salt : salt,
         values : values, c : "setshipping" }, function(data) {

         var json = evalJSON(data);

         // Go directly there
         if (check(json)) {
            location.href = unescape(json.nexturl);
         } else
            confirm("Please ensure all options are selected");

         $("input[name='submitnext']",'#checkoutShippingBlock').val("Next >"
            ).attr("disabled", false);
      });
   },

   addMunroePoints : function() {
      var numPoints = trim($('#munroePoints').val());

      var intNumPoints = parseInt(numPoints);


      if (numPoints.length != intNumPoints.toString().length || intNumPoints <= 0) {
         confirm("Please enter a valid number into the points box");
         return;
      }


      var salt = getSalt();

      $.post("/ajax_checkout.php", { salt : salt,
         points : intNumPoints, c : "addmunroepoints" }, function(data) {

         var json = evalJSON(data);

         // Go directly there
         if (check(json)) {
            refresh();

         } else {
            confirm("There was an error adding points to your order. " + 
               "This may be due to an insufficient amount in your account");
         }
      });

   },

   setBilling : function() {
      var values = "";
      $("input[name='submitnext']",'#checkoutBillingBlock').val("saving..."
            ).attr("disabled", true);

      $('.formError','#checkoutBillingBlock').removeClass("formError");

      $('input,select','#checkoutBillingBlock').each(function() {
         if ($(this).attr("type") == 'hidden')
            return;

         var name = $(this).attr("name");


         if (name.indexOf("submit") == 0)
            return;

         if (values.length > 0)
            values += ",";

         var value = trim($(this).val());

         if (value.length <= 0 && name.indexOf("address2") != 0) {
            $(this).addClass("formError");
         }

         values += name + "=" + escape(value);
      });

      if ($('.formError','#checkoutBillingBlock').length > 0) {
         confirm("Please fill out all fields");

         $("input[name='submitnext']",'#checkoutBillingBlock').val("Review order >"
            ).attr("disabled", false);

         return;
      }

      var customerComments = $('#checkoutComments').val();
      values += ",customercomments=" + escape(customerComments);

      var salt = getSalt();

      $.post("/ajax_checkout.php", { salt : salt,
         values : values, c : "setbilling" }, function(data) {

         var json = evalJSON(data);

         // Go directly there
         if (check(json)) {
            location.href = unescape(json.nexturl);
         } else {
            confirm("Please ensure all options are selected and that the values are correct.");

            $("input[name='submitnext']",'#checkoutBillingBlock').val("Review order >"
               ).attr("disabled", false);
         }
      });
   },

   placeOrder : function() {

      $("#checkoutPlaceOrderButton").val("placing order..."
            ).attr("disabled", true);
      var salt = getSalt();

      $.post("/ajax_checkout.php", { salt : salt,
        c : "placeorder" }, function(data) {

         var json = evalJSON(data);

         // Go directly there
         if (check(json)) {
            $('#checkoutContentBlock').html(unescape(json.content));
         } else {
            confirm("An error occured while placing the order. Refresh and try again.");
            $("#checkoutPlaceOrderButton").val("Place Order >").attr("disabled", false);

         }

      });


   }
}

var MUNROE = {
   jQuery : $,
   
   settings : {
   },

   init : function () {
      this.initializeLayout();
/*
      var splashImages = $('.splashImage').size();
      if (splashImages > 0)
         initializeSplashImages(splashImages);
*/
   },


   initializeLayout : function() {
      var MUNROE = this,
         $ = this.jQuery,
         settings = this.settings;

      SPLASH.initialize();
/*
      $('.splashImageDot').unbind().mouseenter(function() {
         if ($('#' + this.id + ' img').attr('src').indexOf("dotred") >= 0)
            return;

         $(this).css('cursor', 'pointer');
         $('#' + this.id + ' img').attr('src', "/images/dotwhite.gif");
      }).mouseleave(function() {
         if ($('#' + this.id + ' img').attr('src').indexOf("dotred") < 0)
            $('#' + this.id + ' img').attr('src', "/images/dotgray.gif");

         $(this).css('cursor', '');
      }).click(function() {
         var id = this.id.replace(/splashImageDot/,'');

         if (id == SPLASHIMAGECURRENT)
            return;

         SPLASHIMAGEMANUALSELECT = true;
         splashImagesLoad(id);
         return false;
      });

      $('.splashImage').unbind().mouseenter(function() {
         $(this).css('cursor', 'pointer');
      }).mouseleave(function() {
         $(this).css('cursor', '');
      }).click(function() {
         SPLASHIMAGEMANUALSELECT = true;
         next = SPLASHIMAGECURRENT + 1;

         if (next > SPLASHIMAGES)
            next = 1;

         splashImagesLoad(next);
         return false;
      });
*/

      $('.headerMenuItem').unbind().mouseenter(function() {
         $('.headerMenuOn').each(function() {
            $(this).hide();

            var id = $(this).attr("id").split("_");
            id = id[1];

            $('#menu_' + id).removeClass("headerMenuItemOn"
               ).removeClass("headerMenuBG").addClass("black");
         });

         var id = $(this).attr("id").split("_");
         id = id[1];

         var menuPosition = $('#headerMenu').position();

         var offset = 0;

         // Display the BG
         var position = $(this).position();
         var width = $(this).outerWidth(true) - offset*2;

         $(this).removeClass("black").addClass("headerMenuItemOn").addClass(
            "headerMenuBG");

         var subMenu = $('#menuon_' + id);

         subMenu.css({ 
            left: position.left, 
            top: position.top - 4 + $(this).outerHeight(true)
         }).show();

         $('.headerMenuItemBG', '#menuon_' + id).width(width);
      });

      $('#headerMenu').unbind().mouseleave(function() {
         $('.headerMenuOn').each(function() {
            $(this).hide();

            var id = $(this).attr("id").split("_");
            id = id[1];

            $('#menu_' + id).removeClass("headerMenuItemOn"
               ).removeClass("headerMenuBG").addClass("black");
         });
      });

      $('.headerMenuOn').unbind().mouseleave(function() {
         var id = $(this).attr("id").split("_");
         id = id[1];

         $('#menu_' + id).removeClass("headerMenuItemOn"
            ).removeClass("headerMenuBG").addClass("black");

         $(this).hide();
      });

      $('.homeSection').unbind().mouseenter(function() {
         var srcOrig = $('img', this).attr("src");
         var src = srcOrig.replace(/\.jpg/g, 'on.jpg');
         $('img', this).attr("src", src);
      }).mouseleave(function() {
         var srcOrig = $('img', this).attr("src");
         var src = srcOrig.replace(/\on.jpg/g, '.jpg');
         $('img', this).attr("src", src);
      });

      $('select', '#selectModelOptions').unbind().change(function() {
         var name = $(this).attr("name");
         var value = $(this).val();

         var found = false;

         // Set all after a specific one as deactivated
         $('select', '#selectModelOptions').each(function() {
            if (found)
               $(this).html("").attr("disabled", "disabled");

            if ($(this).attr("name").indexOf(name) >= 0)
               found = true;
         });

         $('button', '#selectModelOptions').attr("disabled", true);

         var salt = getSalt();

         $.get('/ajax_selectmodelfields.php', { salt : salt, 
            name : name, value : value, c : "getoptions" }, function(data) {

            var json = evalJSON(data);

            if (check(json)) {
               if (parseInt(json.activate) == 1)
               //if (json.next.indexOf("activate") >= 0)
                  $('button', '#selectModelOptions').attr("disabled", false);

               if (json.next.indexOf("activate") == -1) 
                  $('#selectModel_' + json.next).html(unescape(json.content)
                     ).attr("disabled", false);
            }

         });
      });

      $('.login').unbind().click(function() {
         MUNROE.overlayLoadContent("login");
      });

      $('form', '#loginBlock').unbind().submit(function(e) {
         e.preventDefault();
      });

      $('input','#loginBlock').unbind().keyup(function(e) {
         if (e.keyCode == 13)
            loginSubmit();
      });

      $('#searchInput').unbind().keyup(function(e) {
         if (e.keyCode == 13)
            MUNROE.search();
      });

      $('input','#leftLoginBlock').unbind().focus(function() {
         if (!$(this).attr("default"))
            return;

         if ($(this).attr("default").indexOf($(this).val()) == 0 &&
            $(this).attr("default").length == $(this).val().length)
            $(this).val("");
      }).blur(function() {

         if (!$(this).attr("default"))
            return;

         if ($(this).val().length == 0)
            $(this).val($(this).attr("default"));
      }).keyup(function(e) {
         if (e.keyCode == 13)
            loginLeftSubmit();
      });

      // Products
      $('img', '.productThumb').unbind().click(function() {
         // Adjust the src to remove _thumb, load _mid
         var mid = $(this).attr("src").replace(/_thumb/g, "_mid");

         $('img', '#productImage').attr("src", mid);
      });

      $('img', '#productImage').unbind().click(function() {
         var img = $(this).attr("src").replace(/_mid/g, "");
         overlayShow('<div id="productImageOverlay"><img src="' + img + '"><br/><br/><input type="button" onclick="overlayClose();" value="close"></div>');

         //$('#productImageOverlay').width($('img', '#productImageOverlay').width());
      });

      $('img', '.usedbikeImage').unbind().click(function() {
         $( 'html, body' ).animate( { scrollTop: 0 }, 0 );
         var img = $(this).attr("src").replace(/_mid/g, "");
         overlayShow('<div id="productImageOverlay"><img src="' + img + '"><br/><br/><input type="button" onclick="scrollToBottom();overlayClose();" value="close"></div>');

         //$('#productImageOverlay').width($('img', '#productImageOverlay').width());
      });


      $('.myAccountOrderRow').unbind().mouseenter(function() {
         $(this).addClass("myAccountOrderRowOn");
      }).mouseleave(function() {
         $(this).removeClass("myAccountOrderRowOn");
      }).click(function() {
         var id = $(this).attr("id").split("_");
         var orderid = id[1];

         location.href = "/account/order/" + orderid;
      });

      // Paging
      $('.pageOption').unbind().mouseenter(function() {
         if ($(this).hasClass("pageOptionOn"))
            return;

         $(this).addClass("pageOptionHover");
      }).mouseleave(function() {
         if ($(this).hasClass("pageOptionOn"))
            return;

         $(".pageOptionHover").removeClass("pageOptionHover");
      });

      $('.cornered').unbind().cornered();
      $('.cornerbordered').unbind().cornerbordered();

      MUNROE.initializeLinks();

      CART.initialize();

      CHECKOUT.initialize();
   },

   initializeLinks : function() {

      $('.link').mouseenter(function() {
         $(this).css('cursor','pointer');
         $(this).css('text-decoration','underline');
      }).mouseleave(function() {
         $(this).css('text-decoration','none');
      });

   },

   productReviewSubmit : function() {
      var salt = getSalt();

      var values = "";

      $('input, textarea, select', '#productReviewPrompt').each(function() {
         var name = $(this).attr("name");
         var value = trim($(this).val());


         if (values.length > 0)
            values += ",";

         values += name + "=" + escape(value);
      });

      // call ajax to obtain the information for getting invited
      $.get('/ajax_content.php', { salt : salt, type : "productreviewsubmit", 
         values : values }, function(data) {

         var json = evalJSON(data);

         if (check(json)) {
            overlayShow(unescape(json.content));
         } else {
            confirm("There was an error submitting the review. It may either be too short or an error occured.");
         }
      });
 
   },


   productReviewPrompt : function(productid) {
      var salt = getSalt();

      // call ajax to obtain the information for getting invited
      $.get('/ajax_content.php', { salt : salt, type : "productreviewprompt", 
         productid : productid }, function(data) {

         var json = evalJSON(data);

         if (check(json)) {
            $( 'html, body' ).animate( { scrollTop: 0 }, 0 );
            overlayShow(unescape(json.content));
         } else {
            confirm("There was an error attempting to load the content. Refresh and try again");
         }
      });
 
   },

   overlayLoadContent : function(type) {
      var salt = getSalt();

      // call ajax to obtain the information for getting invited
      $.get('/ajax_content.php', { salt : salt,
         type : type }, function(data) {

         var json = evalJSON(data);

         if (check(json)) {
            overlayShow(unescape(json.content));
         } else {
         }
      });
   },

   passwordReset : function() {
      var un = escape($('#pwResetUN').val());

      var salt = getSalt();

      $.post("/ajax_content.php", { salt : salt,
         un : un, type : "passwordreset" },
         function(data) {

         var json = evalJSON(data);

         // Go directly there
         if (check(json))
            confirm("A password confirmation email has been sent with instructions on how to reset your password");
         else
            confirm("That email does not exist in our database");

         $("input[name='submitbutton']",'#createUserBlock').attr("disabled", false);
      });


   },

   initializeContent : function() {
   },
   initializeWYSIWYG : function(id) {
      $('#' + id).wysiwyg({
         css: '/jwysiwyg/style.css',
         initialContent: $('#' + id).val(),
         brIE: false,
         controls: {
            bold: { visible: true},
            italic: { visible: true},
            underline: { visible: true},
            justifyLeft: { visible: true},
            justifyRight: { visible: true},
            justifyCenter: { visible: true},
            justifyFull: { visible: true},
            undo: { visible: true},
            redo: { visible: true},
            insertOrderedList: { visible: true},
            insertUnorderedList: { visible: true},
            increaseFontSize: { visible: true},
            decreaseFontSize: { visible: true},
            underline: { visible: true},

            indent: { visible: false},
            outdent: { visible: false},
            h1: { visible: false},
            h2: { visible: false},
            h3: { visible: false},
            code: { visible: false},
            strikeThrough: { visible: false},
            subscript: { visible: false},
            superscript: { visible: false},
            insertHorizontalRule: { visible: false},
            createLink: { visible: false},
            insertImage: { visible: false},
            paragraph: { visible: false},
            cut: { visible: false},
            copy: { visible: false},
            paste: { visible: false},
            html: { visible: false},
            removeFormat: { visible: false},
            insertTable: { visible: false}
         }
      });
   },

   registerUser : function() {
      var error = false;


      var un = $('input[name="un"]','#createUserBlock').val();
      var pw = $('input[name="pw"]','#createUserBlock').val();
      var pwc = $('input[name="pwconfirm"]','#createUserBlock').val();

      if (!pw || !pwc || !un) {
         confirm("All fields must be completed");
         return false;
      }

      if (pw.length != pwc.length || pw.indexOf(pwc) != 0) {
         confirm("Passwords do not match");
         return false;
      }

      if (!pw || trim(pw).length <= 5) {
         confirm("Password must be at least 5 characters long");
         return false;
      }

      if (!FORMCHECK.emailSyntaxIsValid(un)) {
         confirm("Email address is not valid");
         return false;
      }

      $("input[name='submitbutton']",'#createUserBlock').attr("disabled", true);

      var salt = getSalt();

      $.post("/ajax_content.php", { salt : salt,
         un : un, pw : md5(pw), type : "registerquery" },
         function(data) {

         var json = evalJSON(data);

         // Go directly there
         if (check(json))
            location.href = "/account/";
         else
            confirm("An error occured during registration. Please ensure that the passwords match and that the email address is valid and not already registered.");

         $("input[name='submitbutton']",'#createUserBlock').attr("disabled", false);
      });

   },

   selectModel : function() {
      // Obtain the last node
      var nodeid = $('#selectModel_model').val();

      // Obtain the year
      var year = $('#selectModel_year').val();

      var salt = getSalt();

      $.post("/ajax_selectmodelfields.php", { salt : salt,
         nodeid : nodeid, year : year, c : "selectmodel" },
         function(data) {

         var json = evalJSON(data);

         // Go directly there
         if (check(json))
            location.href = unescape(json.content);
         else
            confirm("Please ensure all options are selected");
      });

   },

   deleteSavedMotorcycle : function(nodeid, year) {
      if (!confirm("Are you sure you wish to remove this motorcycle?"))
         return;



      var salt = getSalt();

      $.post("/ajax_content.php", { salt : salt,
         nodeid : nodeid, year : year, type : "deletesavedmotorcycle" },
         function(data) {

         confirm(data);
         var json = evalJSON(data);

         // Go directly there
         if (check(json)) {
            $("#savedmotorcycle_" + nodeid + "_" + year).animate({opacity: 0}, 
               500, function() {
               $(this).remove();
            });
         } else
            confirm("An error occured while deleting this motorcycle. Refresh and try again");
      });

   },

   accountInformationUpdate : function() {
      var values = "";
      $('.error').removeClass("error");
      $('input','#myAccountInformation').each(function() {
         if (values.length > 0)
            values += ",";

         var value = trim($(this).val());

         var name = $(this).attr("name");

         if (name.indexOf("password") >= 0) {
            // Check the length
            if (name.indexOf("password") == 0 && value.length < 5)
               $(this).addClass("error");
            else if (value.length < 5 && value.length > 0)
               $(this).addClass("error");

            if (value.length > 0)
               value = md5(value);
         } else if (name.indexOf("email") >= 0 && value.length > 0) {

            if (!FORMCHECK.emailSyntaxIsValid(value))
               $(this).addClass("error");

         }

         values += name + "=" + escape(value);
      });

      if ($('.error').length > 0) {
         confirm("Please check that a correct email was entered in (if a change is requested) or your new password is at least 5 characters in length. You must also enter in your current password to continue.");
         return;
      }

      var newp = $('input[name="newpassword"]', '#myAccountInformation').val();
      var newpc = $('input[name="confirmpassword"]', '#myAccountInformation').val();


      if (newp.length > 0) {
         if (newp.length != newpc.length || newp.indexOf(newpc) != 0) {
            $('input[name="newpassword"]', '#myAccountInformation').addClass("error");
            $('input[name="confirmpassword"]', '#myAccountInformation').addClass("error");
            confirm("New passwords do not match");
            return;
         }
      }

      $("input[name='submit']",'#myAccountInformation').attr("disabled", true);


      var salt = getSalt();

      $.post("/ajax_content.php", { salt : salt,
         values : values, type : "accountupdateinformation" },
         function(data) {

         var json = evalJSON(data);

         // Go directly there
         if (check(json))
            confirm("Your changes have been saved");
         else
            confirm("An error occured while attempting to update information. The email may already exist in the database if you are seeking a new one.");

         $("input[name='submit']",'#myAccountInformation').attr("disabled", false);
      });
   },

   search : function() {
      var query = trim($('#searchInput').val());

      if (query.length < 3) {
         confirm("Minimum search length is 3 characters");
         return;
      }

      var type = "all";
      var typeid = 0;

      if ($('#searchArea').length > 0) {
         var areaid = $('#searchArea').val().split("_");
         type = areaid[0];
         typeid = areaid[1];
      }

      var salt = getSalt();

      $.post("/ajax_content.php", { salt : salt, query : query,
         areaid : areaid, areatype : type, areaid : typeid, type : "search" },
         function(data) {

         var json = evalJSON(data);

         // Go directly there
         if (check(json))
            location.href = unescape(json.content);
         else
            confirm("An error occured while attempting to create the search query");
      });

   }
};

$(document).ready(function() {
   MUNROE.init();

});

function overlayShow(content) {
   // Load it first into it
   $('.cornerBBody','#screenOverlayContent').hide().html(content);
/*
   $('#screenOverlayBG').show().css("filter", "alpha(opacity=70)").fadeIn(500, function() {

      confirm("Done");
   });
   return;
*/

   $('#screenOverlayBG').css("opacity", 0).show().animate({opacity: 0.7}, 
   //$('#screenOverlayBG').show().fadeIn(
      500, function() {
      $('.cornerBBody','#screenOverlayContent').show();
      $('#screenOverlay').css("opacity", 0).show().animate({opacity: 1.0}, 
      //$('#screenOverlay').show().fadeIn(
         500, function() {

         MUNROE.initializeContent();
      });
   });
}

function scrollToBottom() {
   $('html,body').animate( {scrollTop: $(document).height()}, 0);
}

function overlayClose() {
   $('#screenOverlay').animate({opacity: 0.0}, 500, function() {
      $(this).hide();

      $('#screenOverlayBG').animate({opacity: 0.0}, 500, function() {
         $(this).hide();
         $('.cornerBBody','#screenOverlayContent').html('');
      });
   });
}

function zeroPad(num, count) {
   var numZeropad = num + '';

   while(numZeropad.length < count)
      numZeropad = "0" + numZeropad;

   return numZeropad;
}

function disableSelect(objectName) {
   if ($.browser.mozilla){//Firefox
      $('#' + objectName).css('MozUserSelect','none');
   } else if($.browser.msie){//IE
       $('#' + objectName).bind('selectstart',function(){return false;});
   }
}

function removeApos(string) {
   return string.replace(/'/g, "");
}

function loading() {
   show("loading");
}

function unloading() {
   hide("loading");
}

function getSalt() {
   return Math.floor(Math.random()*1000);
}

function evalJSON(responseText) {
   var json = eval('(' + responseText + ')');

   return json;
}

function check(json) {
   var check = parseInt(json.check);
   if (check == 0)
      return false;

   return true;
}


function refresh() {
   location.reload(true);
}

function fadeRefresh(objectName, objectContent) {
   $('#' + objectName).animate({
      opacity: 0
   },function() {
      $(this).html(objectContent);

      MUNROE.initializeLayout();

      $(this).animate({
         opacity: 100
      });
   });
}

function fadeOut(objectName) {
   $('#' + objectName).animate({
      opacity: 0
   }, 2000);
}

function fadeIn(objectName) {
   $('#' + objectName).animate({
      opacity: 100
   }, 2000);
}

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"), "");
}


function setLoading(objectName) {
   $('#' + objectName).html('<center><img src="/images/loading.gif"></center>');
}


//----------------------------
// Login
function loginSubmit() {
   var un = escape($("input[name='email']", '#loginBlock').val());
   var pw = $("input[name='password']", '#loginBlock').val();

   loginQuery(un, pw, "loginBlock");
}

function loginLeftSubmit() {
   var un = escape($("input[name='email']", '#leftLoginBlock').val());
   var pw = $("input[name='password']", '#leftLoginBlock').val();

   loginQuery(un, pw, "leftLoginBlock");
}

function loginQuery(un, pw, block) {
   if (pw.length < 5)
      return;

   if (!FORMCHECK.emailSyntaxIsValid(un))
      return;

   $("input[name='submit']",'#' + block).attr(
      "disabled", true).val("verifying...");


   pw = md5(pw);

   var salt = getSalt();

   $.post('/ajax_login.php', { salt : salt, un : un, pw : pw }, 
      function(data) {

      var json = evalJSON(data);

      if (check(json)) {
         $("input[name='submit']",'#' + block).val("success...");
         setTimeout("refresh()", 1000);
      } else {
         $("input[name='submit']",'#' + block).attr("disabled", false).val("login");
         confirm(json.response);
      }
   });

}

// Contact form
function contactFormSubmit() {
   var error = false;
   var values = "";
   $("input[name='submit']",'.contactFormBlock').attr("disabled", true);
   $('input,textarea','.contactFormBlock').each(function() {
      if (values.length > 0)
         values += ",";

      var value = trim($(this).val());

      if (value.length <= 0)
         error = true;

      values += $(this).attr("name") + "=" + escape(value);
   });

   if (error) {
      confirm("All fields are required for valid submission");
      $("input[name='submit']",'.contactFormBlock').attr("disabled", false);
      return false;
   }

   $("input[name='submit']",'.contactFormBlock').val("submitting...");

   var salt = getSalt();

   $.post('/ajax_contactform.php', { salt : salt, values : values }, function(data) {
      var json = evalJSON(data);

      if (check(json)) {
         $('.contactFormBlock').html("<strong>" + json.response + "</strong>");
      } else {
         confirm(json.response);
         $("input[name='submit']",'.contactFormBlock').val("submit").attr("disabled", false);
      }
   });

}

function md5(str) {
   var xl;
 
   var RotateLeft = function(lValue, iShiftBits) {
      return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
   };
 
   var AddUnsigned = function(lX,lY) {
      var lX4,lY4,lX8,lY8,lResult;
      lX8 = (lX & 0x80000000);
      lY8 = (lY & 0x80000000);
      lX4 = (lX & 0x40000000);
      lY4 = (lY & 0x40000000);
      lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
      if (lX4 & lY4) {
         return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
      }
      if (lX4 | lY4) {
         if (lResult & 0x40000000) {
            return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
         } else {
            return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
         }
      } else {
         return (lResult ^ lX8 ^ lY8);
      }
   };
 
   var F = function(x,y,z) { return (x & y) | ((~x) & z); };
   var G = function(x,y,z) { return (x & z) | (y & (~z)); };
   var H = function(x,y,z) { return (x ^ y ^ z); };
   var I = function(x,y,z) { return (y ^ (x | (~z))); };
 
   var FF = function(a,b,c,d,x,s,ac) {
      a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
      return AddUnsigned(RotateLeft(a, s), b);
   };
 
   var GG = function(a,b,c,d,x,s,ac) {
      a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
      return AddUnsigned(RotateLeft(a, s), b);
   };
 
   var HH = function(a,b,c,d,x,s,ac) {
      a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
      return AddUnsigned(RotateLeft(a, s), b);
   };
 
   var II = function(a,b,c,d,x,s,ac) {
      a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
      return AddUnsigned(RotateLeft(a, s), b);
   };
 
   var ConvertToWordArray = function(str) {
      var lWordCount;
      var lMessageLength = str.length;
      var lNumberOfWords_temp1=lMessageLength + 8;
      var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
      var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
      var lWordArray=Array(lNumberOfWords-1);
      var lBytePosition = 0;
      var lByteCount = 0;
      while ( lByteCount < lMessageLength ) {
         lWordCount = (lByteCount-(lByteCount % 4))/4;
         lBytePosition = (lByteCount % 4)*8;
         lWordArray[lWordCount] = (lWordArray[lWordCount] | (str.charCodeAt(lByteCount)<<lBytePosition));
         lByteCount++;
      }
      lWordCount = (lByteCount-(lByteCount % 4))/4;
      lBytePosition = (lByteCount % 4)*8;
      lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
      lWordArray[lNumberOfWords-2] = lMessageLength<<3;
      lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
      return lWordArray;
   };
 
   var WordToHex = function(lValue) {
      var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
      for (lCount = 0;lCount<=3;lCount++) {
         lByte = (lValue>>>(lCount*8)) & 255;
         WordToHexValue_temp = "0" + lByte.toString(16);
         WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
      }
      return WordToHexValue;
   };
 
   var x=Array();
   var k,AA,BB,CC,DD,a,b,c,d;
   var S11=7, S12=12, S13=17, S14=22;
   var S21=5, S22=9 , S23=14, S24=20;
   var S31=4, S32=11, S33=16, S34=23;
   var S41=6, S42=10, S43=15, S44=21;
 
   str = utf8_encode(str);
   x = ConvertToWordArray(str);
   a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
   
   xl = x.length;
   for (k=0;k<xl;k+=16) {
      AA=a; BB=b; CC=c; DD=d;
      a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
      d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
      c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
      b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
      a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
      d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
      c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
      b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
      a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
      d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
      c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
      b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
      a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
      d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
      c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
      b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
      a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
      d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
      c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
      b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
      a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
      d=GG(d,a,b,c,x[k+10],S22,0x2441453);
      c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
      b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
      a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
      d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
      c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
      b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
      a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
      d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
      c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
      b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
      a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
      d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
      c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
      b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
      a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
      d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
      c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
      b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
      a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
      d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
      c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
      b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
      a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
      d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
      c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
      b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
      a=II(a,b,c,d,x[k+0], S41,0xF4292244);
      d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
      c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
      b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
      a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
      d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
      c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
      b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
      a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
      d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
      c=II(c,d,a,b,x[k+6], S43,0xA3014314);
      b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
      a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
      d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
      c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
      b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
      a=AddUnsigned(a,AA);
      b=AddUnsigned(b,BB);
      c=AddUnsigned(c,CC);
      d=AddUnsigned(d,DD);
   }
 
   var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);
 
   return temp.toLowerCase();
}

function utf8_encode(string) {
   string = (string+'').replace(/\r\n/g, "\n").replace(/\r/g, "\n");
 
   var utftext = "";
   var start, end;
   var stringl = 0;
 
   start = end = 0;
   stringl = string.length;
   for (var n = 0; n < stringl; n++) {
      var c1 = string.charCodeAt(n);
      var enc = null;
 
      if (c1 < 128) {
         end++;
      } else if((c1 > 127) && (c1 < 2048)) {
         enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
      } else {
         enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
      }
      if (enc != null) {
         if (end > start) {
            utftext += string.substring(start, end);
         }
         utftext += enc;
         start = end = n+1;
      }
   }
 
   if (end > start) {
      utftext += string.substring(start, string.length);
   }
 
   return utftext;
} 


