$(document).ready(initAll);

var scrollLosingePosition = 0;
var scrollRatio = 1.48;

var intLeftRightStart = 61;

var booLosingeMidAnim = false;

var activeSubMenuItem = "";

var mousePositionOnDown = -1;

function initSubMenu(){
    //set the outer_container elements background image to the darker gradient:
    $("#outer_container_white").css({ backgroundImage: "url(http://www.showplans.com/images/hori_gradient_submenu.jpg)" });
	
	//set up response to sub menu item click:
	$("a").click(sub_menu_item_click);

	//set up events for the scroll bar:
	$("#divScrollBar").mouseover(losinge_over);
	$("#divScrollBar").mouseout(losinge_out);
	
	$("#divScrollLosinge").mousedown(scroll_down);
	$(document).mouseup(page_up);
	$(document).mousemove(page_move);
	$("#divScrollBar").mousedown(scroll_down);
	$("a.sub_menu_cat").click(function(){return false;});
	
	losinge_move_finished();
	
	//set canvas to initial position:
	$("#divCanvas").css({left:0});
	
	
	reload_bar_positions()


	help_bubble(true);
	//calculate VBtoCration (ViewBox width to Canvas width ratio)
	//scrollRatio = scrollbar / canvaswidth
	//total width of canvas / (scrollbar width - ((endpoints * 2) - losinge width))
	//scrollRatio = $("#divCanvas").width() / (($("#divScrollBar").width() - (intLeftRightStart * 2)) - $("divScrollLosinge").width() + intLeftRightStart);
	
	//VBtoCratio = 2;
}

function losinge_over() {
    $("#divScrollLosinge").css("background-position", "0px 20px");
}
function losinge_out() {
    $("#divScrollLosinge").css("background-position", "0px 0px");
}

function scroll_down(e){
	var divLosinge = $("#divScrollLosinge");
	var divScrollBar = $("#divScrollBar");
	
	
	$(document).disableTextSelect();
	//register the cursors position relative to the losinge on mousedown
	if (!$.browser.msie) {
    	e.preventDefault(); //firefox's
    }

    //lets try detecting when an arrow is clicked:
    var smcServices = $("#smcServices");
	var smcDesign = $("#smcDesign");
	var smcSoftware = $("#smcSoftware");

	//alert(divLosinge.offset().left - divScrollBar.offset().left);
//	var losingeMidPos = divLosinge.offset().left + (divLosinge.width() / 2);
//	var servicesMidPos = smcServices.offset().left + (smcServices.width() / 2);
//	var designMidPos = smcDesign.offset().left + (smcDesign.width() / 2);
//	var softwareMidPos = smcSoftware.offset().left + (smcSoftware.width() / 2);

	//alert("lo: " + losingeMidPos + "se: " + servicesMidPos + "de: " + designMidPos + "so" + softwareMidPos);
	
    if ((e.pageX - divScrollBar.offset().left) < intLeftRightStart) {
        //the user clicked on the left arrow
        /************************************************************** 
        CODED TO TRY AND MAKE THE INNER LOSINGE PASS FROM SUB CAT TO 
        SUB CAT RATHER THAN SCROLLING RIGHT ACROSS THE SCROLL BAR */
//        if(losingeMidPos < designMidPos){
//            move_position(servicesMidPos);
//            //$("#divScrollLosinge").animate({ left: (smcServices.offset().left + (smcServices.left / 2)) });
//        }
//        else if(losingeMidPos > designMidPos){
//            //$("#divScrollLosinge").animate({ left: (smcDesign.offset().left + (smcDesign.left / 2)) });
//            move_position(designMidPos);
//        }
        /**************************************************************/

        central_scroll_event(e)
        
    }
    else if ((e.pageX - divScrollBar.offset().left) > (divScrollBar.width() - intLeftRightStart)) {
        //user clicked on the right arrow
        central_scroll_event(e)
    }
    else {
        //user clicked on the central scroll bar is being clicked so:
        //alert((divLosinge.offset().left - divScrollBar.offset().left) + (divLosinge.width() / 2));
        central_scroll_event(e)
    }
    
	
	return false;
}

function central_scroll_event(e) {
    //perform central scrollbar operations:
    var divLosinge = $("#divScrollLosinge");
    var divScrollBar = $("#divScrollBar");
    
    if(e.target.id != "divScrollLosinge")
    {
        //the inner losinge has been mousedowned...
				
	    mousePositionOnDown = (e.pageX - ((e.pageX - divScrollBar.offset().left) - $("#divScrollLosinge").width() / 2));
		
	    var intLosingeFarRight = e.pageX + (divLosinge.width() - mousePositionOnDown + intLeftRightStart);
	    var intLosingeFarLeft = e.pageX - mousePositionOnDown - intLeftRightStart;
		
	    if(intLosingeFarRight > divScrollBar.width())
	    {
		    //The losinge is being dragged too far right so set to rightmost position

	        var leftPos = divScrollBar.width() - divLosinge.width() - intLeftRightStart

	        move_position(leftPos);
			
//			$("#divScrollLosinge").animate({left: leftPos},50,losinge_move_finished);
//			
//			var canvasLeftPos = -(leftPos - intLeftRightStart) * scrollRatio;
//			
//			$("#divCanvas").animate({left: canvasLeftPos});
			
	    }
	    else if(intLosingeFarLeft < 0)
	    {
	        //The losinge is being dragged too far right so set to leftmost position
	        move_position(intLeftRightStart);
		    
//			$("#divScrollLosinge").animate({left: intLeftRightStart},50,losinge_move_finished);
//			canvasLeftPos = -(intLeftRightStart - intLeftRightStart) * scrollRatio;
//			
//			$("#divCanvas").animate({left: 0});
	    }
	    else
	    {
		    //the losinge is being dragged within boundaries:

		    var leftPos = ((e.pageX - divScrollBar.offset().left) - $("#divScrollLosinge").width() / 2);
			
		    move_position(leftPos);
			
//			$("#divScrollLosinge").animate({left: leftPos},50,losinge_move_finished);
//			
//			//mousePositionOnDown = (e.pageX - leftPos);
//			
//			//alert(mousePositionOnDown);
//			var canvasLeftPos = (-(leftPos - intLeftRightStart) * scrollRatio);
//			
//			$("#divCanvas").animate({left: canvasLeftPos});
			
			
	    }
		
    }
    else {
        //the scroll bar has been mousedowned...
	    
	    mousePositionOnDown = (e.pageX - $("#divScrollLosinge").offset().left) + $("#divScrollBar").offset().left;
	    //alert(mousePositionOnDown);
    }
}

function move_position(leftPos){
    //generic function to move the losinge and the canvas:
    $("#divScrollLosinge").animate({left: leftPos},50,losinge_move_finished);

	var canvasLeftPos = (-(leftPos - intLeftRightStart) * scrollRatio);
	
	$("#divCanvas").animate({left: canvasLeftPos},50);
}




//function scroll_down(e){
//	if(e.target.id != "divScrollLosinge")
//	{
//		//alert(e.target.id);
//	}
//}

function page_up(){
	//alert(mousePositionOnDown[0]);
	mousePositionOnDown = -1;
	$(document).enableTextSelect();
	
	
}
function page_move(e){
    
	//check if the user is currently dragging the scroll losinge
	if(mousePositionOnDown != -1) {
	    //stop any animations that are being applied to the losinge:
	    $("#divScrollLosinge").stop();
		//check losinge.left +losinge.width < scrollbar.width:
		var divLosinge = $("#divScrollLosinge");
		var divScrollBar = $("#divScrollBar");
		//var intLosingeFarRight = divLosinge.offset().left + divLosinge.width() + 20;
		var intLosingeFarRight = e.pageX + (divLosinge.width() - mousePositionOnDown + intLeftRightStart);
		var intLosingeFarLeft = e.pageX - mousePositionOnDown - intLeftRightStart;
		
		if(intLosingeFarRight > divScrollBar.width())
		{
			//The losinge is being dragged too far right so set to rightmost position
			var leftPos = divScrollBar.width() - divLosinge.width() - intLeftRightStart;
			$("#divScrollLosinge").css({left: leftPos});
			
			var canvasLeftPos = (-(leftPos - intLeftRightStart) * scrollRatio);
			$("#divCanvas").css({left: canvasLeftPos});
		}
		else if(intLosingeFarLeft < 0)
		{
			//The losinge is being dragged too far right so set to leftmost position
			$("#divScrollLosinge").css({left: intLeftRightStart});
			
			$("#divCanvas").css({left: 0});
			
		}
		else
		{
			//the losinge is being dragged within boundaries:
			var leftPos = (e.pageX) - mousePositionOnDown;
			$("#divScrollLosinge").css({left: leftPos});
			
			
			
			var canvasLeftPos = (-(leftPos - intLeftRightStart) * scrollRatio);
			$("#divCanvas").css({left: canvasLeftPos});
		}
		//alert("hello");
		losinge_move_finished();
	}
	
}

function losinge_move_finished(){
	
	$(".sub_menu_cat").each(function(){
		
		var losinge = $("#divScrollLosinge");
		//alert("(" + losinge.offset().left + "<" + $(this).offset().left + ") && (" + losinge.offset().left + "+" + losinge.width() + ">" + $(this).offset().left + ")");
		if((losinge.offset().left < $(this).offset().left) && (losinge.offset().left + losinge.width() > $(this).offset().left))
		{
			//alert($(this).css("color"));

				$(this).css({color: "rgb(0, 0, 0)"},100);

		}
		else
		{

				$(this).css({color: "rgb(255, 255, 255)"},100);
			
		}
	});
}

//Function to handle sub menu item click:
function sub_menu_item_click()
{
	writeSessionCookie("www.showplans.net",$("#divScrollLosinge").css("left"));
	
	return true;
}

function reload_bar_positions()
{
	var losingeLeftPos = getCookieValue("www.showplans.net");

	//alert(typeof losingeLeftPos);
	if(typeof losingeLeftPos == "string")
	{
		//alert(parseInt(losingeLeftPos));
		$("#divScrollLosinge").css({left: losingeLeftPos});
		var canvasLeftPos = -(parseInt(losingeLeftPos) - intLeftRightStart) * scrollRatio;
		$("#divCanvas").css({left: canvasLeftPos});
	}
}


function help_bubble(booShow) {
    //*********************show and hide help bubble**************************
    //... todo ...
   //*************************************************************************
}


/*function setToSubMenuItem(item)
{
	var losingeLeftPos = 0;
	switch(activeSubMenuItem)
	{
		case "fpdesign":
			losingeLeftPos = 61;
			break;
		case "markout":
			losingeLeftPos = 233;
			break;
		case "yah":
			losingeLeftPos = 370;
			break;
		case "graphic":
			losingeLeftPos = 547;
			break;
		case "3Dvis":
			losingeLeftPos = 712;
			break;
		case "webdesign":
			losingeLeftPos = 712;
			break;
		case "filex":
			losingeLeftPos = 712;
			break;
		case "eventplanner":
			losingeLeftPos = 712;
			break;
	}
	
	$("#divScrollLosinge").css({left: losingeLeftPos});
	var canvasLeftPos = -(losingeLeftPos - intLeftRightStart) * scrollRatio;
	$("#divCanvas").css({left: canvasLeftPos});
}*/



/***************************************************************************
 *************************** Cookie Utilities*******************************
 ***************************************************************************

Routine to write a session cookie

    Parameters:
        cookieName        Cookie name
        cookieValue       Cookie Value

    Return value:
        true              Session cookie written successfullly
        false             Failed - persistent cookies are not enabled

   e.g. if (writeSessionCookie("pans","drizzle") then
           alert ("Session cookie written");
        else
           alert ("Sorry - Session cookies not enabled");
*/

function writeSessionCookie (cookieName, cookieValue) {
  if (testSessionCookie()) {
    document.cookie = escape(cookieName) + "=" + escape(cookieValue) + "; path=/";
    return true;
  }
  else return false;
}

/*==============================================================================

Routine to get the current value of a cookie

    Parameters:
        cookieName        Cookie name

    Return value:
        false             Failed - no such cookie
        value             Value of the retrieved cookie

   e.g. if (!getCookieValue("pans") then  {
           cookieValue = getCoookieValue ("pans2);
        }
*/

function getCookieValue (cookieName) {
  var exp = new RegExp (escape(cookieName) + "=([^;]+)");
  if (exp.test (document.cookie + ";")) {
    exp.exec (document.cookie + ";");
    return unescape(RegExp.$1);
  }
  else return false;
}

/*==============================================================================

Routine to see if session cookies are enabled

    Parameters:
        None

    Return value:
        true              Session cookies are enabled
        false             Session cookies are not enabled

   e.g. if (testSessionCookie())
           alert ("Session coookies are enabled");
        else
           alert ("Session coookies are not enabled");
*/

function testSessionCookie () {
  document.cookie ="testSessionCookie=Enabled";
  if (getCookieValue ("testSessionCookie")=="Enabled")
    return true
  else
    return false;
}

/*==============================================================================

Routine to see of persistent cookies are allowed:

    Parameters:
        None

    Return value:
        true              Session cookies are enabled
        false             Session cookies are not enabled

   e.g. if (testPersistentCookie()) then
           alert ("Persistent coookies are enabled");
        else
           alert ("Persistent coookies are not enabled");
*/

function testPersistentCookie () {
  writePersistentCookie ("testPersistentCookie", "Enabled", "minutes", 1);
  if (getCookieValue ("testPersistentCookie")=="Enabled")
    return true
  else
    return false;
}

/*==============================================================================

Routine to write a persistent cookie

    Parameters:
        CookieName        Cookie name
        CookieValue       Cookie Value
        periodType        "years","months","days","hours", "minutes"
        offset            Number of units specified in periodType

    Return value:
        true              Persistent cookie written successfullly
        false             Failed - persistent cookies are not enabled

    e.g. writePersistentCookie ("Session", id, "years", 1);
*/

function writePersistentCookie (CookieName, CookieValue, periodType, offset) {

  var expireDate = new Date ();
  offset = offset / 1;

  var myPeriodType = periodType;
  switch (myPeriodType.toLowerCase()) {
    case "years":
     var year = expireDate.getYear();
     // Note some browsers give only the years since 1900, and some since 0.
     if (year < 1000) year = year + 1900;
     expireDate.setYear(year + offset);
     break;
    case "months":
      expireDate.setMonth(expireDate.getMonth() + offset);
      break;
    case "days":
      expireDate.setDate(expireDate.getDate() + offset);
      break;
    case "hours":
      expireDate.setHours(expireDate.getHours() + offset);
      break;
    case "minutes":
      expireDate.setMinutes(expireDate.getMinutes() + offset);
      break;
    default:
      alert ("Invalid periodType parameter for writePersistentCookie()");
      break;
  }

  document.cookie = escape(CookieName ) + "=" + escape(CookieValue) + "; expires=" + expireDate.toGMTString() + "; path=/";
}

/*==============================================================================

Routine to delete a persistent cookie

    Parameters:
        CookieName        Cookie name

    Return value:
        true              Persistent cookie marked for deletion

    e.g. deleteCookie ("Session");
*/

function deleteCookie (cookieName) {

  if (getCookieValue (cookieName)) writePersistentCookie (cookieName,"Pending delete","years", -1);
  return true;
}


