/*------------------------------------------------------------

global.js

------------------------------------------------------------*/





/*------------------------------------------------------------

cookies

------------------------------------------------------------*/

function SetCookie(name, value, days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    var expires = "; expires=" + date.toGMTString();
  } else {
		expires = "";
	}
  document.cookie = name + "=" + value + expires + "; path=/";
}

function GetCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for (var i = 0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') c = c.substring(1, c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
  }
  return null;
}



/*------------------------------------------------------------

strings

------------------------------------------------------------*/

function PixelToInt(s) {
    return parseInt(s.substr(0, s.length - 2));
}


/*------------------------------------------------------------

URL encoding, decoding

------------------------------------------------------------*/

function EncodeUrl(s) {
	var noEncode = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" +
		"0123456789-_.!~*'()"; // chars that don't need encoding.
	var hex = "0123456789ABCDEF";
	var tmp = "";

	for (var i = 0; i < s.length; i++) {
		var ch = s.charAt(i);

		if (ch == " ") {
	    tmp += "+";
		} else if (noEncode.indexOf(ch) != -1) {
	    tmp += ch;
		} else {
		  var charCode = ch.charCodeAt(0);

			if (charCode > 255) {
				// unicode chars can't be encoded using standard URL encoding, just copy it.
				tmp += ch;
			} else {
				tmp += "%";
				tmp += hex.charAt((charCode >> 4) & 0xF);
				tmp += hex.charAt(charCode & 0xF);
			}
		}
	}

	return (tmp);
}

function DecodeUrl(s) {
	var hex = "0123456789ABCDEFabcdef"; 
	var tmp = "";
	var i = 0;

	while (i < s.length) {
		var ch = s.charAt(i);
		if (ch == "+") {
			tmp += " ";
			i++;
		} else if (ch == "%") {
			if (i < (s.length-2) && hex.indexOf(s.charAt(i + 1)) != -1 && hex.indexOf(s.charAt(i + 2)) != -1 ) {
				tmp += unescape(s.substr(i, 3));
				i += 3;
			} else {
				// if the escaped character is not supported, just copy as is
				tmp += ch;
				i++;
			}
		} else {
			tmp += ch;
			i++;
		}
	}

	return (tmp);
}

buttonStyles = function() {
    var els = Dom.getElementsByClassName('pa-Button');
    
    for (i=0; i < els.length; i++) {
    	if (!els[i].innerHTML.match(/<span/i)) {
            els[i].innerHTML = "<span class='res-span'>" + els[i].innerHTML + "</span>";
        }
    }
}

checkOrderProgressStatus = function() {
    
    // first check if 100%... if so, add class to show completion
    var progressObj = Dom.getElementsByClassName('pa-ProgressBar');
    var progressPercentage;
    
    if (progressObj.length > 0) {
        progressPercentage = progressObj[0].style.width
        progressPercentage = progressPercentage.substring(0, progressPercentage.indexOf('%'));
        
        if (progressPercentage >= 100)
            Dom.addClass(progressObj, 'complete');
    }
    
    
    // next check for the submit later notification and hide/show accordingly
    if (Dom.getElementsByClassName('pa-SubmitNotification').length > 0) {
        if (GetCookie("submitLater")) {
            hideSubmitNotification();
        }
        else {
            var btnContainer = Dom.getElementsByClassName('optionSubmitLater')[0];
            var btn = Dom.getElementsByClassName('pa-Button', null, btnContainer)[0];
            Event.addListener(btn, 'click', function() { submitLaterClick(1); });
        }
    }
}
    
submitLaterClick = function(value) {
    SetCookie("submitLater", value, 1);
    hideSubmitNotification();
}

hideSubmitNotification = function() {
    Dom.getElementsByClassName('pa-SubmitNotification')[0].style.display = 'none';
}

    
flyOutLauncherInit = function() {
    var els = Dom.getElementsByClassName('pa-FlyOutLauncher');
    Event.addListener(els, 'click', function() { flyOutToggle(this); });
    
    for (i=0; i < els.length; i++) {
        els[i].id = i;
        orderFlyouts[i] = Dom.getNextSibling(els[i]).clientHeight;
    }
}


flyOutToggle = function(el) {
    var target = Dom.getNextSibling(el);
    
    if (target.style.height == '' || target.style.height == '0px' ) {
        Dom.addClass(el.parentNode, 'pa-FlyOutExpanded');
        
        target.style.height = '0px';
        target.style.visibility = 'visible';
        
        var anim = new YAHOO.util.Anim(target, {
            height: { to: orderFlyouts[el.id] }
            }, 0.3, YAHOO.util.Easing.easeOutStrong);
    }
    else {
        var anim = new YAHOO.util.Anim(target, {   
            height: { to: 0 }
            }, 0.1, YAHOO.util.Easing.easeOutStrong);
        
        Dom.removeClass(el.parentNode, 'pa-FlyOutExpanded');
    }

    anim.animate();
}


/*------------------------------------------------------------

primary navigation

------------------------------------------------------------*/

PrimaryNavInit = function() {
    Dom.addClass($('pa-OrderInfo'), 'pa-OrderInfoWithNavigation');
    Dom.getElementsByClassName('pa-NavPrimary')[0].innerHTML += '';  //IE bug with positioning

    var tabs = Dom.getElementsByClassName('pa-NavPrimary')[0].getElementsByTagName('li');
    Event.addListener(tabs, 'mouseover', function() { PrimaryNavRollOver(this); } );
    Event.addListener(tabs, 'mouseout', function() { PrimaryNavRollOut(this); } );
}

PrimaryNavRollOver = function(el) {
    var overlay = Dom.getElementsByClassName('pa-NavPreview', null, el)[0];
    Dom.addClass(el, 'rollOver');
    
    
    if (overlay) {  //we have an overlay, check its position
    
        var elPosX = Dom.getX(el);
        var overlayMargin = PixelToInt(Dom.getStyle(overlay, 'margin-left'));
        var overlayWidth = PixelToInt(Dom.getStyle(overlay, 'width'));
        var extension = elPosX + overlayMargin + overlayWidth + 100;
        
        if (extension > max_right_position) {
            overlayMargin -= extension - max_right_position;
            Dom.setStyle(overlay, 'margin-left', overlayMargin + 'px');
        }

        Dom.setStyle(overlay, 'display', 'inline');
    }
}

PrimaryNavRollOut = function(el) {
    Dom.removeClass(el, 'rollOver');
    //Dom.setStyle(Dom.getElementsByClassName('pa-NavPreview', null, el)[0], 'visibility', 'hidden');
    Dom.setStyle(Dom.getElementsByClassName('pa-NavPreview', null, el)[0], 'display', 'none');
}



/*------------------------------------------------------------

tooltips

------------------------------------------------------------*/

TooltipInit = function() {
    new YAHOO.widget.Tooltip("tt", { context: Dom.getElementsByClassName("pa-Tooltip"), showdelay: 200, hidedelay: 200, autodismissdelay: 10000 });
}



/*------------------------------------------------------------

show this

------------------------------------------------------------*/

ReplaceThisInit = function() {
    var els = Dom.getElementsByClassName('pa-ReplaceThis');
    var link;
    
    for (i = 0; i < els.length; i++) {
        link = Dom.getFirstChild(els[i]);
        link.href = 'javascript: void(0);';
        Event.addListener(link, 'click', function() { ReplaceThis(this); });
    }
}

ReplaceThis = function(el) {
    var source = Dom.getElementsByClassName('pa-ReplaceThisSource', null, el.parentNode);
    
    if (source.length > 0) {
        el.style.display = 'none';
        source[0].style.display = 'block';
    }
}


executeBeforeOnLoad_Global = function() {
    var container = Dom.getElementsByClassName('pa-Container');
    if (container.length > 0) {
        page_width = PixelToInt(Dom.getStyle(container[0], 'width'));
        max_right_position = page_width + Math.floor((Dom.getViewportWidth()- page_width)/2);
    }
    
    buttonStyles();
    flyOutLauncherInit();
    checkOrderProgressStatus();
    ReplaceThisInit();
    TooltipInit();
    
    if (Dom.getElementsByClassName('pa-NavPrimary').length > 0)
        PrimaryNavInit();
}


//YAHOO.util.Event.onDOMReady(executeBeforeOnLoad_Global);
//Event.addListener(window, 'load', function() { PrimaryNavInit(); });


/*------------------------------------------------------------

this gets rid of the flashing background on rollover in IE6

------------------------------------------------------------*/

try {
	document.execCommand('BackgroundImageCache', false, true);
} catch(e) {}



/*------------------------------------------------------------

some global vars

------------------------------------------------------------*/
var Dom = YAHOO.util.Dom;
var Event = YAHOO.util.Event;
var DDM = YAHOO.util.DragDropMgr;
var $ = Dom.get;
var orderFlyouts = {};
var page_width;
var max_right_position;

/* shortcut interface to Dom.get */

$ = function(el) {
    return Dom.get(el);
}
