/*** UTILITY ***/
function getEventSource(e)
    {
    if (!e) e = window.event;
    var targ;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;
    return targ;
    }

function toFloat(s)
    {
    var result = parseFloat(s);
    if (!isNaN(result)) return result; else return 0;
    }

function toInt(s)
    {
    var result = parseInt(s);
    if (!isNaN(result)) return result; else return 0;
    }

function toDate(s)
    {
    var result = Date.parse(s);
    var correctDate = new Date();
    if (!isNaN(result)) correctDate = new Date(result);
    return toFixedDigits(correctDate.getMonth()+1)+'/'+toFixedDigits(correctDate.getDate())+'/'+correctDate.getFullYear();
    }

function correctInput(event, correctFunc)
    {
    if (correctFunc==null) return;
    var inputElement = getEventSource(event);
    var correctValue = correctFunc($(inputElement).val());
    $(inputElement).attr('value', correctValue);
    }

function fetchSum(str)
    {
    str = str.replace(/,/g,'');
    var num = parseFloat(str);
    if (!isNaN(str)) return num;
    else return 0;
    }

function formatSum(str)
    {
    var num = parseFloat(str);
    var result = "0.00";
    if (isNaN(num)) return "0.00";
        var s = "";
        var src = ""+num.toFixed(2);
        var j = 0;
        dot_flag = !(src.indexOf('.')>=0);
        for (i=src.length-1; i>=0; i--)
            {
            if (dot_flag)
                {
                if ((j>0)&&(j%3 == 0)) s = "," + s;
                j++;
                }
            if (src.charAt(i)=='.') dot_flag = true;
            s = src.charAt(i) + s;
            }
        return s;
    }

function smartSortFunction(data_A, data_B)
	{
	var i = parseInt(data_A);
	var j = parseInt(data_B);
	if (!isNaN(i)&&!isNaN(j)) return ((i < j) ? -1 : ((i > j) ? 1 : 0));
    else 
    return ((data_A < data_B) ? -1 : ((data_A > data_B) ? 1 : 0));
	}

//---- JQuery overload ----
$.fn.attr = function(origAttr) {
    return function(name, value) { // Original parameters
		var result = jQuery.access( this, name, value, true, jQuery.attr );
		if ((result==null)||(typeof(result)!='string')) result='';
		return result;
    };
}($.fn.addClass);
//---- JQuery overload ----

//---- IE TRIM ----
if(typeof String.prototype.trim !== 'function') {
  String.prototype.trim = function() {
  var result = '';
	  if (typeof(this.replace)=='function') result = this.replace(/^\s+|\s+$/g, ''); 
  return result;
  }
}
//---- END OF IE TRIM ----


function traverse(element, funct, reverse)
	{
	if (!reverse&&funct) funct(element);
	if (element.childNodes)
	  for(var i=0; i<element.childNodes.length; i++)
	      traverse(element.childNodes[i], funct);
	if (reverse&&funct) funct(element);
	}

function removeBadTags(selector)
	{
    var content = $(selector).html();
    if ((content==null)||(content.trim()=='')) return;
    content = content.replace(/\<font/g,'<span');
    content = content.replace(/font\>/g,'span>');
    $(selector).html(content);
	}

// --- COOKIE HANDLING ---
function setCookie(name,value,hours) {
    if (hours) {
        var date = new Date();
        date.setTime(date.getTime()+(hours*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var 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;
}

function deleteCookie(name) {
    setCookie(name,"",-1);
}
/*** END OF UTILITY ***/

/*** CORE ***/
function processATags()
    {
        $('a').each(function()
        {
        var cid = $('#BYOCustomerID').text();
        var pid = $('#BYOPartnerID').text();
        
        if (cid.trim()=='') return;
        var originalHref = $(this).attr('href');
        if (!originalHref) return;
        var byoDomains = BYO_DOMAINS;
        var byoCode = 'cid=' + cid; if (originalHref.indexOf(byoCode)>=0) return;
        if (pid!='') byoCode += '&pid='+pid;
        var byoDomainFound = false;
        for (var i in byoDomains)
            if (originalHref.indexOf(byoDomains[i])>0)
                {
                byoDomainFound = true;
                break;
                }
        if (!byoDomainFound) return;
        var separator = '?'; if (originalHref.indexOf(separator)>=0) separator = '&';
        var byoHref = originalHref+separator+byoCode;
        $(this).attr('href', byoHref);
        });
    }

function refreshDropdowns(callback)
	{
    var cid = $('#BYOCustomerID').text();
    if (cid.trim()=='') return;
   	$.get(BASE_URL+'cart/dropdown?nocache='+Math.random().toString(),{cid: cid, type: 1}, function(data){if((data!=null)&&(data.trim()!='')&&(data.indexOf('ERROR:')<0)) $('#my-cart-field').html(data); processATags();});
   	$.get(BASE_URL+'cart/dropdown?nocache='+Math.random().toString(),{cid: cid, type: 2}, function(data){if((data!=null)&&(data.trim()!='')&&(data.indexOf('ERROR:')<0)) $('#my-quote-field').html(data); processATags();});
	}
/*** END OF CORE ***/

/*** MISC ***/
function BYOEnewspaperSubscribe()
    {
		$.get(BASE_URL+'common/enewsletter', { email: $('#enewsletter-email-input').val() }, function(data) {
            if (data.indexOf('Error') >= 0)
                {
                    $('#enewsletter-email-input').val('Invalid e-mail');
                    $('#enewsletter-email-input').css('color','#A03F3F');
                }
            else
                {
                    $('#enewsletter-email-input').val('Subscription successful!');
                    $('#enewsletter-email-input').css('color','#3FA03F');
                }
		});
    }
/*** END OF MISC ***/

