function addEvent(element, eventType, lamdaFunction, useCapture) {
    if (element.addEventListener) {
        element.addEventListener(eventType, lamdaFunction, useCapture);
        return true;
    } else if (element.attachEvent) {
        var r = element.attachEvent('on' + eventType, lamdaFunction);
        return r;
    } else {
        return false;
    }
}

/* 
 * Kills an event's propagation and default action
 */
function knackerEvent(eventObject) {
    if (eventObject && eventObject.stopPropagation) {
        eventObject.stopPropagation();
    }
    if (window.event && window.event.cancelBubble ) {
        window.event.cancelBubble = true;
    }
    
    if (eventObject && eventObject.preventDefault) {
        eventObject.preventDefault();
    }
    if (window.event) {
        window.event.returnValue = false;
    }
}

/* 
 * Safari doesn't support canceling events in the standard way, so we must
 * hard-code a return of false for it to work.
 */
function cancelEventSafari() {
    return false;        
}

/* 
 * Cross-browser style extraction, from the JavaScript & DHTML Cookbook
 * <http://www.oreillynet.com/pub/a/javascript/excerpt/JSDHTMLCkbk_chap5/index5.html>
 */
function getElementStyle(elementID, CssStyleProperty) {
    var element = document.getElementById(elementID);
    if (element.currentStyle) {
        return element.currentStyle[toCamelCase(CssStyleProperty)];
    } else if (window.getComputedStyle) {
        var compStyle = window.getComputedStyle(element, '');
        return compStyle.getPropertyValue(CssStyleProperty);
    } else {
        return '';
    }
}

/* 
 * CamelCases CSS property names. Useful in conjunction with 'getElementStyle()'
 * From <http://dhtmlkitchen.com/learn/js/setstyle/index4.jsp>
 */
function toCamelCase(CssProperty) {
    var stringArray = CssProperty.toLowerCase().split('-');
    if (stringArray.length == 1) {
        return stringArray[0];
    }
    var ret = (CssProperty.indexOf("-") == 0)
              ? stringArray[0].charAt(0).toUpperCase() + stringArray[0].substring(1)
              : stringArray[0];
    for (var i = 1; i < stringArray.length; i++) {
        var s = stringArray[i];
        ret += s.charAt(0).toUpperCase() + s.substring(1);
    }
    return ret;
}

/*
 * Disables all 'test' links, that point to the href '#', by Ross Shannon
 */
function disableTestLinks() {
  var pageLinks = document.getElementsByTagName('a');
  for (var i=0; i<pageLinks.length; i++) {
    if (pageLinks[i].href.match(/[^#]#$/)) {
      addEvent(pageLinks[i], 'click', knackerEvent, false);
    }
  }
}

/* 
 * Cookie functions
 */
function createCookie(name, value, days) {
    var expires = '';
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days*24*60*60*1000));
        var expires = '; expires=' + date.toGMTString();
    }
    document.cookie = name + '=' + value + expires + '; path=/';
}

function readCookie(name) {
    var cookieCrumbs = document.cookie.split(';');
    var nameToFind = name + '=';
    for (var i = 0; i < cookieCrumbs.length; i++) {
        var crumb = cookieCrumbs[i];
        while (crumb.charAt(0) == ' ') {
            crumb = crumb.substring(1, crumb.length); /* delete spaces */
        }
        if (crumb.indexOf(nameToFind) == 0) {
            return crumb.substring(nameToFind.length, crumb.length);
        }
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name, '', -1);
}

function checkPromoCode(el, code) {

	if (el.value=="") return true;
	
	var c = code.length / 2;
	var pos = 0;
	var ccode = "";
	
	for (var i = 0; i < c; i++) {
		
		var rval = parseInt(code.substr(pos, 2), 16);
		
		pos = pos+2;
		
		ccode += String.fromCharCode(rval-3);
	}

	if (el.value == ccode) return true;
	
	alert("Invalid Promo Code!")
	el.value="";
	el.focus();
	
	return cancel_Event(event);
}


function applyPromoCodeDiscount(el, code, itemRef, applyFunc, eachCost, param1, itemQty) {
	
	var stat = checkPromoCode(el, code);
	
	oElTD = document.getElementById("tdEachCost_"+itemRef+"_ID");
	
	if (!stat || el.value==""){
		oElTD.innerText = "$"+CurrencyFormatted(eachCost);
		oElTD.className = "";
		return false;
	}
	
	var newCost = 0;
	
	if (applyFunc=="subtract_promo_amount"){
		newCost = parseFloat(eachCost)-parseFloat(param1);
	}

	if (applyFunc=="percentage"){
		newCost =  (parseFloat(eachCost)/100)*parseFloat(param1);
	}
	oElTD.innerText = "$"+CurrencyFormatted(newCost);
	oElTD.className = "DiscountedCost";

	submitUpdateOrderItemForm(itemRef);
	return true;
}

function updateOrderItemForm(el, itemQty, itemRef) {
	
	var elVal = el.value;
	
	if (!isNaN(elVal)) {
		
		var elNum = parseInt(elVal);

		if (elNum > 0){
			
			if (elNum == parseInt(itemQty)) return true;
			
			el.value = elNum.toString();
			
			submitUpdateOrderItemForm(itemRef);
			return true;
		}
	}
	
	alert("Invalid Quantity!")
	el.value="";
	el.focus();
	
	return cancel_Event(event);
}

function submitUpdateOrderItemForm(itemRef) {
	var oFrm = document.getElementById("frm"+itemRef+"_ID");
	oFrm.target = "ifrmSubmitItemUpdate";
	oFrm.submit();
}

function cancel_Event(oEvent) {
	oEvent.keyCode = 0;
	
	if (typeof oEvent.cancelBubble!="undefined") oEvent.cancelBubble = true;
	if (typeof oEvent.stopPropagation!="undefined") oEvent.stopPropagation(); 
	
	oEvent.returnValue = false; 
	if (typeof oEvent.preventDefault!="undefined") oEvent.preventDefault(); 
	
	return false;
}

function CurrencyFormatted(amount)
{
	var i = parseFloat(amount);
	if(isNaN(i)) { return "0.00"; }
	
	var minus = '';
	if(i < 0) { minus = '-'; }
	
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	
	s = new String(i);
	if(s.indexOf('.') < 0) { s += '.00'; }
	if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
	
	var delimiter = ","; // replace comma if desired
	var a = s.split('.',2)
	var d = a[1];
	var i = parseInt(a[0]);

	var n = new String(i);
	var a = [];
	while(n.length > 3)
	{
		var nn = n.substr(n.length-3);
		a.unshift(nn);
		n = n.substr(0,n.length-3);
	}
	if(n.length > 0) { a.unshift(n); }
	n = a.join(delimiter);
	
	if(d.length < 1) { amount = n; }
	else { amount = n + '.' + d; }
	amount = minus + amount;
	return amount;
}
		
function addingCartItemCookie() {  

	var offset = document.cookie.indexOf('addingcart');
	document.cookie = document.cookie.substring(0,offset+11) + '1' + document.cookie.substring(offset+12);
	return;
}	


