/*
	Convenience alias/wrapper functions for alert() and Firebug's console.log():
		alert([parameter]);			->	a([parameter]);
		console.log([parameter]);	->	l([parameter]);
*/
a = alert;
if (typeof(console) != 'undefined') {
	if (typeof(console.log) != 'undefined') {
		l = console.log;
	}
}

function print_r(arr, showFunctions) {
	var str = '';
	for(var i in arr) {
		if(showFunctions || typeof arr[i] != 'function') {
			var p = arr[i];
		} else {
			var p = '[function]';
		}
		str = str + i + " => " + p + "\n";
	}
	
	//document.write(str+"<br /><br /><br />");
	alert(str);
}

window._empty = function(parameter) {
	var	toReturn = false;
	
	toReturn = (	(typeof(parameter) == 'undefined')
				||	(parameter === null)
				||	(parameter === false)
				//||	(parameter == 0)
				//||	(parameter === 0)
				//||	(parameter === 0.0)
				||	((typeof(parameter) == 'string') && (parameter.length < 1))
				//||	((typeof(parameter) == 'string') && (parameter == '0'))
				||	((parameter instanceof Array) && (parameter.length < 1))
	);
	
	return toReturn;
}

window._preventDefault = function(event) {
	var	toReturn = false;
	
	if (!_empty(event.preventDefault)) {
		event.preventDefault();
	} else if (!_empty(event.stopPropagation)) {
		event.stopPropagation();
	}
	
	event.returnValue = toReturn;
	return toReturn;
}

window.removeChildren = function(element) {
	var	toReturn = true;
	
	while (element.hasChildNodes()) {
		element.removeChild(element.firstChild);
	}
	
	return toReturn;
}

window.getWindowSpecificSession = function(parameter) {
	var	toReturn = true;
	
	toReturn = window.name;
	
	return toReturn;
}

window.setWindowSpecificSession = function(parameter) {
	var	toReturn = true;
	
	window.name = parameter;
	
	return toReturn;
}

window.clearWindowSpecificSession = function(parameter) {
	var	toReturn = true;
	
	window.name = '';
	
	return toReturn;
}

window.tb_remove_from_anchor = function(anchor) {
	var	toReturn = false;
	
	tb_remove();
	
	return toReturn;
}

// window.onload equivalent(s):
jQuery(function() {
		var	newDate = new Date();
		jQuery(document.LoginForm).append( jQuery('<input>').attr('type', 'hidden').attr('name', 'data[Wholesale][getTimezoneOffset]').attr('value', newDate.getTimezoneOffset()) );
	}
);

function moneyFormat(number, type){
	if(typeof type == 'undefined')
		type = 'USD';
	switch(type){
		default:
			number = '$'+thousandsDel((isNaN(number) ? '0.00' : Number(number).toFixed(2)), ',', '.');
		break;
	}
	return number;
}

function thousandsDel(number, del, cent_char){
	number = number.split('.');
	cent = number[1];
	number = number[0].split('');
	first = wlen = number.length;
	first--;
	buff = ((wlen+2)%3);
	ret = '';
	while(wlen--){
		if((wlen%3)==buff && wlen != first){
			ret = del+ret;
		}
		ret=number[wlen]+ret;
	}
	return ret+cent_char+cent;
}

function getKeyCode(key){
	return window.event ? key.keyCode : key.which;
}

function checkEnter(key, tocall){
	if(getKeyCode(key) == '13'){//if key pressed = enter (13)
		if(typeof key.preventDefault != 'undefined')
			key.preventDefault();
		key.returnValue = false;
		tocall();
	}
}

function retF(fn){
	fn();
	return false;
}

function showDebug(){
	$j('.cake-sql-log').css('display','none');
	$j('.cake-sql-log').show('slow');
	$j('.cake-debug').css('display','none');
	$j('.cake-debug').show('slow');
	return 'showing debug';
}

function hideDebug(){
	$j('.cake-sql-log').hide('slow');
	$j('.cake-debug').hide('slow');
}

function notHidden(elm){
	elm = $j(elm);
	tp = $j('#topPersistent');
	tpPos = tp.position();
	eh = elm.height()+5;
	if((elm.position().top+eh) > $j('#footer').position().top)
		window.scroll(tpPos.left, tpPos.top+( (elm.position().top+eh) - $j('#footer').position().top));
	if(elm.position().top < (tpPos.top+tp.height()))
		window.scroll(tpPos.left,elm.position().top-tp.height()-5);
}

function orderQtyJunk(field){
	if(typeof field == 'undefined')
		field = '.orderQty';
	$j(field).bind('change', updateProductTotal).bind('keydown', orderQtyKeyHandler).bind('focus',function(){$j(this).select();notHidden(this)});
}

function epOrderQtyJunk(field){
	if(typeof field == 'undefined')
		field = '.orderQty';
	$j(field).bind('change', epUpdateProductTotal).bind('keydown', orderQtyKeyHandler).bind('focus',function(){$j(this).select();notHidden(this)});
}

orderQtyBlur = false;
function orderQtyKeyHandler(e){
	if(orderQtyBlur) clearTimeout(orderQtyBlur);
	key = getKeyCode(e);
	if(key == 13 || key == 9){//if tab or enter
		if (typeof e.stopPropagation != 'undefined');
			e.stopPropagation();
		if(typeof e.preventDefault != 'undefined')
			e.preventDefault();
		e.returnValue = false;
		name = $j(this).attr('name');
		elms = $j('.orderQty');
		ret = false;
		nextElm = false;
		$j.each(elms, function(){
			if(ret){
				nextElm = this;
				return false;
			}
			if($j(this).attr('name') == name){
				ret = true;
			}
		});
		$j('a').get(0).focus();
		if(nextElm){
			setTimeout(function(){$j(nextElm).focus();},50);
		}else{
			setTimeout(function(){$j('.orderQty').get(0).focus();},50);
		}

	}else{
		orderQtyBlur = setTimeout(function(){$j('a').get(0).focus();}, 300000);
	}
}

//product update is needed in enough places this function needs to be global in wholesale
function updateProductTotal(){
	ProdInput = $j(this);
	val = ProdInput.val();
	nam = ProdInput.attr('name');
	if(!val)
		val = 0;
	eval('val = {"'+nam+'":'+val+'}');
	ProdInput.resp = function(inpt){return function(resp){
		if(resp)
			updateTotals(resp);
		var img = $j('#TempLoader'+ProdInput.attr('id')).replaceWith(inpt);
		orderQtyJunk(inpt);
	}}(ProdInput.clone());
	ProdInput.post = $j.post;
	ProdInput.post('/Wholesale/add_product', val, ProdInput.resp, 'json');
	ProdInput.replaceWith('<img src="/shared_img/circle-loader.gif" id="TempLoader'+ProdInput.attr('id')+'">');
}

//product update is needed in enough places this function needs to be global in wholesale
function epUpdateProductTotal(){
	ProdInput = $j(this);
	val = ProdInput.val();
	nam = ProdInput.attr('name');
	if(!val)
		val = 0;
	eval('val = {"'+nam+'":'+val+'}');
	ProdInput.resp = function(inpt){return function(resp){
		if(resp)
			updateTotals(resp);
		var img = $j('#TempLoader'+ProdInput.attr('id')).replaceWith(inpt);
		orderQtyJunk(inpt);
	}}(ProdInput.clone());
	ProdInput.post = $j.post;
	ProdInput.post('/EpProducts/add_product', val, ProdInput.resp, 'json');
	ProdInput.replaceWith('<img src="/shared_img/circle-loader.gif" id="TempLoader'+ProdInput.attr('id')+'">');
}

function ajaxProductTotal(id, val, cont){
	if(typeof cont == 'undefined')
		updateTo = '/Wholesale/add_product';
	else
		updateTo = '/EpProducts/add_product';
	name = 'data[Parts]['+id+'][quantity]';
	if(!val)
		val = 0;
	eval('val = {"'+name+'":'+val+'}');
	$j.post(updateTo, val, updateTotals, 'json');
}


// Date validation for format mm-dd-yy
function isValidDate(dt){
	try {
		var arrvals=dt.split("-");
		var m=arrvals[0];
		var d=arrvals[1];
		var y=arrvals[2];
		var dtt=new Date(y,m-1,d);
		if((dtt.getFullYear()!=parseInt(y,10))||(dtt.getMonth()!=parseInt(m-1,10))||(dtt.getDate()!=parseInt(d,10)))
			return false;
		else
			return true;
	}catch(e){
		return false;
	}
}

/*For Filling /'s while entering date */
function FillDateFormat(e,t) {
	if(e.keyCode<48 ||e.keyCode>57)
		e.keyCode = 0;
	
	var string=t.value;
	
	if((string.length==2) || (string.length==5)) {
		string=string+"/";
		t.value=string;
	}
}

// From:  http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_number_format/
function number_format (number, decimals, dec_point, thousands_sep) {
    // Formats a number with grouped thousands
    //
    // version: 906.1806
    // discuss at: http://phpjs.org/functions/number_format
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://getsprink.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +     bugfix by: Howard Yeend
    // +    revised by: Luke Smith (http://lucassmith.name)
    // +     bugfix by: Diogo Resende
    // +     bugfix by: Rival
    // +     input by: Kheang Hok Chin (http://www.distantia.ca/)
    // +     improved by: davook
    // +     improved by: Brett Zamir (http://brett-zamir.me)
    // +     input by: Jay Klehr
    // +     improved by: Brett Zamir (http://brett-zamir.me)
    // +     input by: Amir Habibi (http://www.residence-mixte.com/)
    // +     bugfix by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: number_format(1234.56);
    // *     returns 1: '1,235'
    // *     example 2: number_format(1234.56, 2, ',', ' ');
    // *     returns 2: '1 234,56'
    // *     example 3: number_format(1234.5678, 2, '.', '');
    // *     returns 3: '1234.57'
    // *     example 4: number_format(67, 2, ',', '.');
    // *     returns 4: '67,00'
    // *     example 5: number_format(1000);
    // *     returns 5: '1,000'
    // *     example 6: number_format(67.311, 2);
    // *     returns 6: '67.31'
    // *     example 7: number_format(1000.55, 1);
    // *     returns 7: '1,000.6'
    // *     example 8: number_format(67000, 5, ',', '.');
    // *     returns 8: '67.000,00000'
    // *     example 9: number_format(0.9, 0);
    // *     returns 9: '1'
    // *     example 10: number_format('1.20', 2);
    // *     returns 10: '1.20'
    // *     example 11: number_format('1.20', 4);
    // *     returns 11: '1.2000'
    // *     example 12: number_format('1.2000', 3);
    // *     returns 12: '1.200'
    var n = number, prec = decimals;

    var toFixedFix = function (n,prec) {
        var k = Math.pow(10,prec);
        return (Math.round(n*k)/k).toString();
    };

    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
    var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;

    var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;

    var abs = toFixedFix(Math.abs(n), prec);
    var _, i;

    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;

        _[0] = s.slice(0,i + (n < 0)) +
              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
        s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }

    var decPos = s.indexOf(dec);
    if (prec >= 1 && decPos !== -1 && (s.length-decPos-1) < prec) {
        s += new Array(prec-(s.length-decPos-1)).join(0)+'0';
    }
    else if (prec >= 1 && decPos === -1) {
        s += dec+new Array(prec).join(0)+'0';
    }
    return s;
}

currency = function(parameter) {
	var	_return = false;
	
	if (typeof(parameter) != 'undefined') {
		_return = '$'+number_format(parameter, 2);
	}
	
	return _return;
}

maxlength = function(_this, _maxlength) {
	var	_return = true,
		value = _this.value,
		length = value.length
	;
	
	if (length > _maxlength) {
		value = value.substr(0, _maxlength);
		_this.value = value;
	}
	
	return _return;
}