var uncdomain = "http://www.uncalendar.com"
var uncsecuredomain = "https://www.uncalendar.com"

var menutimer = 0;
var cartRetrieved = false;
var badBrowser = false;
var gTop, gMain, gMenu, gDrop;  // global variables used to speed jquery dom searches

if (document.location.href.indexOf("//www.uncalendar") === -1 && (remoteAddr == "" || (remoteAddr.match("192.168.1.") == null && remoteAddr != "72.215.198.133" && remoteAddr != "72.24.107.218"))) {             //user bookmarked "uncalendar.com" instead of "www.uncalendar.com"  - redirect so all cookies are stored on "www".
   document.location = "http://www.uncalendar.com/index.jsp";           //index.html does this also.   This will also redirect uncalendEr.com
}

function showWelcome(data) {
   $.facebox(data);
}

function disableButton(selector) {
   if ($.browser.msie) {
      $(selector+" span:last").attr("buttondisable","true").html("&nbsp;...");
   }
   else {
      $(selector+" span:last").attr("buttondisable","true").html("&nbsp;<img id='ajaxWorking' src='/images/global/loading.gif' style='margin: -4px 0;'>");
   }
   $(selector+" span:first").css("color","yellow");
}

function enableButton(selector) {
   $(selector+" span:last").attr("buttondisable","").html("&nbsp;");
   $(selector+" span:first").css("color","white");
}

function buttonIsEnabled(selector) {
   var isEnabled = ($(selector+" span:last").attr("buttondisable") != "true");
   return  isEnabled;
}

function cartWorking(shippingOnly) {
   if (!shippingOnly) {
      $("#subtotal",gDrop).html("  <img src='/images/global/loading.gif' width='48' height='16'>");
      $("#cartsubtotal",gDrop).html("<img src='/images/global/loading2.gif'>");
   }
   $("#carttotal",gDrop).html("<img src='/images/global/loading2.gif'>");
}

function setupDropMenus($menus) {
   if ($.browser.safari || $.browser.mozilla) {
      $menus.corners("bottom 15px");
   }
   $menus.lava();

   $menus.mouseenter(function(e){
      if (menutimer !== 0) {
         clearTimeout(menutimer);
      }
   });
   
   $menus.mouseleave(function(e){   // mouseleave function will filter out the "false positive" mouseout events
      if ($.browser.mozilla && e.relatedTarget !== null && e.relatedTarget.nodeName=="IMG" && e.relatedTarget.id=="bgImage") {
         return;        // Firefox 3.5 Mac bug?   False positive when entering open selection list.
      }
      $(".dropmenu",gDrop).hide();      
      $(".slider",gDrop).hide().css({ left: 0, top: 0, width: 0, height: 0 });
   });
}

function setupMenuItems($menus) {
   $menus.mousedown(function(){
      $(".slider",gDrop).addClass("click");
   });
   $menus.click(function(){
      $(".slider",gDrop).removeClass("click");
      $(".popmenu",gMenu).removeClass("selected");
      var parentMenu = $(this).parents(".dropmenu").attr("id");
      parentMenu = "#" + parentMenu.substr(0,parentMenu.length-4);      
      $(parentMenu).addClass("selected");
      document.location=$(this).attr("link");
   });
}

var zipregex = new RegExp("^[0-9]*$");
function zipcodeUpdated(){
   var zipentry = $("#cartshipzip",gDrop).val();
   if (!zipregex.test(zipentry)) {
      showError("#messageAnchor","The zipcode field only allows numbers.");
      return;
   }
   if (zipentry.length == 5) {
      shippingUpdated();
   }
}

function shippingUpdated(){
   cartWorking(true);
   $.post("/unc?action=ajaxRetrieveCart",{shipZip: $("#cartshipzip",gDrop).val(), shipMethod: $("input[name='shipmethod']:checked").val() },cartFinishedWorking,"html");         
}

function deleteCartRow() {
   var $parent = $(this).parent().parent();  // <tr>
   var $td = $parent.children();  // all <td> tags in this row
   var ocode = $($td[1]).text();
   var ostyle = $($td[2]).text();
   $parent.remove();
   cartWorking(false);
   $.post("/unc?action=ajaxDeleteItem",{orderCode: ocode, orderStyle: ostyle},cartFinishedWorking,"html");         
}

function qtyUnFocused() {
   $("#updateCart",gDrop).empty();
   var $parent = $(this).parent().parent();  // <tr>
   var $td = $parent.children();  // all <td> tags in this row
   var ocode = $($td[1]).text();
   var ostyle = $($td[2]).text();
   var oqty = $(".quantity",$parent).val();
   cartWorking(false);
   $.post("/unc?action=ajaxQtyUpdate",{orderCode: ocode, orderStyle: ostyle, qty: oqty},cartFinishedWorking,"html");
}

function qtyFocused() {
   $("#updateCart",gDrop).append("<div class=\"button\"><span class=\"gbuttonLeft\">Update Cart</span><span class=\"gbuttonRight\">&nbsp;</span></div>");
}

// This is a callback function used by several different ajax methods.  These methods all can update the cart summary information (menubar) and/or the details (drop down).
// The methods can return the following divs:
//       1) <div id="#errorMsg"> ... </div>
//       2) <div id="#summarydata"> ... </div>
//       3) <div id="#cartdropdata"> ... </div>
//
// ajaxaddcart      -> returns summary and stubbed out details
// ajaxcartsummary  -> returns summary and stubbed out details 
// ajaxRetrieveCart -> returns full details only - this populates the stub out
// ajaxdeleteitem   -> returns summary and full details
// ajaxqtyupdate    -> returns summary and full details
// session timeout  -> returns summary and stubbed out details
function cartFinishedWorking(data) {

   var $errorMsg = $(data).filter("#errorMsg");
   var $summary = $(data).filter("#summarydata");
   var $drop = $(data).filter("#cartdropdata");

   if ($errorMsg.length > 0) { // we were sent back an error message
      showError("#messageAnchor",$errorMsg.html());
   }
   if ($summary.length > 0) {  // We were sent back the summary (menubar) data
      $("#cart").empty().prepend($summary);
   }
   if ($drop.length > 0) {  // we were sent back the cart details (either in full or stubbed out)
      var $cartdrop = $("#cartdrop",gDrop);
      $cartdrop.empty().prepend($drop);
      setupDropMenus($cartdrop);
      setupMenuItems($cartdrop.find(".menuitem"));
      $(".tabs",gDrop).tabs();
      $(".deleteitem",$cartdrop).mouseup(deleteCartRow);
      $(".quantity",$cartdrop).focus(qtyFocused).blur(qtyUnFocused);
      $("#cartshipzip",$cartdrop).keyup(zipcodeUpdated);
      $("#tabs-1 input[name='shipmethod']",$cartdrop).change(shippingUpdated);    // shipping zipcode and shipping method input fields
//      $("#expressCheckout",$cartdrop).click(function(){
  //       document.location= uncdomain + "/unc?action=startExpressCheckout";
 //     });
   }
}

$(document).ready(function() {
   if (document.location.href.indexOf("https:") === -1) {
      // handle browser back arrow button on pages that show shopping cart.  Cart qty may be wrong on cached page.
      $.post("/unc?action=ajaxCartSummary",cartFinishedWorking,"html");
   }
   
   if ($.browser.msie) {
      var version = $.browser.version.substring(0,1);
      if (version < 7) {
         if (document.cookie.length === 0 || document.cookie.indexOf("ie6nomore") === -1) {
            var date = new Date();
            var days = 90;
            date.setTime(date.getTime()+(days*24*60*60*1000));
		    var expires = "expires="+date.toGMTString();
            var cook = "ie6nomore=ie6nomore; "+expires+"; path=/";
            document.cookie=cook;
            badBrowser = true;
            $.post("/ie6nomore.html",showWelcome,"html");
         }
      }
      $(".roundblock").corners();
   }
   
   gTop = $("#top");
   gMenu = $("#menu");
   gDrop = $("#dropmenus");
   gMain = $("#maincontent");

   if ($.browser.safari || $.browser.mozilla) {
      $("#constrain").corners();   
      gMain.corners();
      $(".roundblock").corners("10px");
      $(".roundtitle").corners("10px");
      $(".roundcontent").corners("bottom 10px");
   }

   var popmenus = $(".popmenu",gMenu);
   
   popmenus.mouseenter(function(){
      $(this).addClass("hover");
      $(".slider",gDrop).hide().css({ left: 0, top: 0, width: 0, height: 0 });
      $(".dropmenu",gDrop).hide();
      $("#"+this.id+"drop",gDrop).show();
      if (!cartRetrieved && this.id == "cart" && $("#subtotal",gMenu).text().indexOf("empty") == -1) {
          cartRetrieved = true;
          $.post("/unc?action=ajaxRetrieveCart",cartFinishedWorking,"html");
      }
   });
   
   popmenus.mouseleave(function(){   // mouseleave will filter out the "false positive" mouseout events generated by nested child elements such as shopping cart img
      $(this).removeClass("hover");
      var currentMenu = "#" + this.id + "drop";
      menutimer = setTimeout(function() { $(currentMenu,gDrop).hide(); }, 100);  // hide the dropmenu, unless the mouseout event occurred because the dropmenu was moused into
   });
   
   popmenus.mousedown(function(){
      $(this).addClass("click");
   });
   
   popmenus.mouseup(function(){
      popmenus.removeClass("selected");
      $(this).removeClass("click").addClass("selected");
      var newLocation = $(this).attr("link");
      if (newLocation !== undefined) {
         document.location=newLocation;
      }
   });
   
   setupMenuItems($(".menuitem",gDrop));
   
   var greenButtons = $(".gbuttonLeft,.gbuttonRight");
   greenButtons.mouseover(function() {
      $(this).parent().children().addClass("hover");
   });
   greenButtons.mouseout(function() {
      $(this).parent().children().removeClass("hover");
   });
   greenButtons.mousedown(function(){
      $(this).parent().children().addClass("click");
   });
   greenButtons.mouseup(function(){
      $(this).parent().children().removeClass("click");
   });

   setupDropMenus($(".dropmenu",gDrop));   
   
   // handles both login and logout
   $("#login span",gTop).click(function() {
      if (buttonIsEnabled("#login")) {
         disableButton("#login");
         var gotoUrl = uncsecuredomain+"/unc?action=login.jsp";   // login page
         if ($("#myAccount").length > 0) {
            gotoUrl = uncdomain+"/unc?action=logout.jsp";   // logout page
         }
         setTimeout(function(){document.location=gotoUrl;},1);  // invoke with delay - allows screen to fully repaint disabled button
      }
   });
   
   $("#orderstatus span",gTop).click(function() {
      if (buttonIsEnabled("#orderstatus")) {
         disableButton("#orderstatus");
         var gotoUrl = uncsecuredomain+"/unc?action=status";
         setTimeout(function(){document.location=gotoUrl;},1);  // invoke with delay - allows screen to fully repaint disabled button
      }
   });

   $("#myAccount span",gTop).click(function() {
      if (buttonIsEnabled("#myAccount")) {
         disableButton("#myAccount");
         var gotoUrl = uncsecuredomain+"/unc?action=myaccount.jsp";
         setTimeout(function(){document.location=gotoUrl;},1);  // invoke with delay - allows screen to fully repaint disabled button
      }
   });
   
   $("#inform,#warning,#error").corners("10px");  // add rounded corners to alert boxes

   if (badBrowser === false && (document.cookie.length === 0 || document.cookie.indexOf("uncwelcome") === -1)) {
      var uncwelcome = "uncwelcome=uncwelcome; path=/";   // no expiration - current session only
      document.cookie=uncwelcome;
      $.post("/unc?action=load&page=welcome&box=1",showWelcome,"html");
   }
});

// Accepts html data such as:
//    *  Hello there!       (this will display a message) 
//    *  <div redirect="somepage.jsp">Hello there!</div>   (display a message and then redirect)
//    *  <div redirect="somepage.jsp"></div>    (redirect without displaying a message)
//    function returns true when it executes an immediate redirect to another page (option 3 above)
function showDialog(prefix,selector,htmlData) { 
   if ($(prefix).css("display") != "none") {
      return false;  // prevent multi post
   }
   var redirect = $(htmlData).attr("redirect");
   var duration = (prefix == "#error") ? 5000 : 4000;

   // If there is no html data, the redirect is the only action
   if (redirect !== undefined && redirect.length > 0 && $(htmlData).html().length === 0) {
      document.location.href=redirect;
      return true;
   }

   $(prefix+"mesg").html(htmlData);
   var offset = $(selector).offset();
   var left = (offset.left+$(selector).width()+10)+"px";
   var top  = offset.top-30;

   var scrollPos = $.browser.msie ? document.documentElement.scrollTop : window.pageYOffset; 
   if (scrollPos > top) {
      window.scroll(0,top);
   }
   
   top = top + "px";
   $(prefix).css("left",left).css("top",top).fadeIn('slow').animate({opacity: 1.0}, duration).fadeOut('slow', function() {
      $(this).hide();
      if (redirect !== undefined && redirect != "") {
         document.location.href=redirect;
      }
   });
   return false;
}

function showInfo(selector,htmlData)    { return showDialog("#inform", selector,htmlData); }
function showWarning(selector,htmlData) { return showDialog("#warning",selector,htmlData); }
function showError(selector,htmlData)   { return showDialog("#error",  selector,htmlData); }
