/* 
Refrico Pricelist with ordering
*/

var grid1,grid2;

function init_grids() {
		grid1=$("#flex1").flexigrid
			(
			{
			url: 'http://www.refrico.se/scripts/refrico_prislista.php',
			dataType: 'json',
			colModel : [
				{display: 'Artnr', name : 'Artno', width : 50, sortable : true, align: 'center'},
				{display: 'Namn', name : 'Description', width : 255, sortable : true, align: 'left'},
				{display: 'Enhet', name : 'Unit', width : 30, sortable : true, align: 'left'},
				{display: 'Normal lagervara', name : 'NormalStock', width : 85, sortable : true, align: 'center'},
				{display: 'Ex. moms (kr)', name : 'Price', width : 60, sortable : true, align: 'right'},
				{display: '', name : 'Cart', width : 18, sortable : false, align: 'center',process: procCart}
				],
			searchitems : [
				{display: 'Artnr', name : 'Artno', isdefault: true},
				{display: 'Namn', name : 'Description', isdefault: true}
//				{separator: true}
				],
			rpOptions: [25,100,250],
			sortname: "Artno",
			sortorder: "asc",
			usepager: true,
			title: false,
			pagestat: 'Visar {from} till {to} av {total} artiklar',
			procmsg: 'Bearbetning ...', //, v&auml;nta
			searchprompt:'S&ouml;k bland artiklar:',
			pagemsg:'Sida',
			pageofmsg:'av',
			clearmsg:'Ta bort',//&Aring;terst&auml;ll / Tom? Clear/Reset
			searchmsg: 'S&ouml;k',
			useRp: true,
			singleSelect: true,
			rp: 25,
			showTableToggleBtn: false,
			showToggleBtn: false,
			width: 600,
//			onSubmit: addFormData,
			height: 250
			}
			);

//$('.pSearch').click();
//$(".sDiv").slideToggle('fast',function(){
//		$('.sDiv:visible input:first','.gDiv').trigger('focus');
//	}); 

		grid2=$("#flex2").flexigrid
			(
			{
			dataType: 'json',
			colModel : [
				{display: 'Antal', name : 'Amount', width : 40, sortable : false, align: 'right', process: procAmount}, //Kvantitet
				{display: 'Artnr', name : 'Artno', width : 45, sortable : false, align: 'center'},
				{display: 'Namn', name : 'Description', width : 225, sortable : false, align: 'left'},
				{display: 'Enhet', name : 'Unit', width : 25, sortable : false, align: 'left'},
				{display: 'Ex. moms (kr)', name : 'Price', width : 65, sortable : false, align: 'right'},
				{display: 'Belopp', name : 'PriceTotal', width : 70, sortable : false, align: 'right'}, //Totalt
				{display: '', name : 'Remove', width : 18, sortable : false, align: 'center', process: procCartDel}
				],
			searchitems : [
				],
			buttons : [
				{name: 'Order', bclass: 'openOrder', onpress :  openDlg},//Order / Til kassan
				{separator: true},
				{name: '0,00', bclass: 'cartSum'},
				{separator: true}
				],
//			rpOptions: [25,100,250],
			sortname: "Artno",
			sortorder: "asc",
			usepager: false,
			title: 'Varukorg', 
			pagestat: 'Visar {from} till {to} av {total} artiklar',
			procmsg: 'Bearbetning ...', //, v&auml;nta
			searchprompt:'S&ouml;k bland artiklar:',
			pagemsg:'Sida',
			pageofmsg:'av',
			clearmsg:'Rensa',
			searchmsg: 'S&ouml;k',
			useRp: false,
			rp: 25,
			showTableToggleBtn: false,
			showToggleBtn: false,
			width: 600,
//			onSubmit: addFormData,
			height: 150
			}
			);
}

 $(document).ready(function(){
	init_grids();
	
	$(grid2[0].grid.gDiv).toggleClass('hideBody');
	
 });


//#flex1
function procCart(celDiv,id) {
	celDiv.innerHTML='<img src="/scripts/order/cart_add.png" border=0>';

	$(celDiv).click
	(
		function ()
			{
			addToCart(id);
			}
	);
}

//#flex2
function procCartDel(celDiv,id) {
	celDiv.innerHTML='<img src="/scripts/order/cart_delete.png" border=0>';

	$(celDiv).click
	(
		function ()
			{
			deleteFromCart(id);
			}
	);
}

function procAmount(celDiv,id) {
	$(celDiv).editable(function(value, settings) { 
		var newval=fmtNumToVal(value);
		//alert(id+"/"+newval);
		updateTotal(id,newval);
		updCartSum(); //builds sum off total
		
		return(valToFmtNum(value));
		},{
		 //indicator : 'Saving...',
		 onblur: 'submit',
		 submit    : 'OK',
		 tooltip   : 'Click to edit...'
	     }).css('background','url(/scripts/order/cart_edit_pad.png) no-repeat center left');
}

function addToCart(id) {
	var cid='Cart'+id;
	//if ($('#rowCart').length==0) 
	if (document.getElementById('flex2').rows.length==0) $(grid2[0].grid.gDiv).removeClass('hideBody');//show
	
	cfind = $("#flex2 #row"+cid);
	if (cfind.length>0) {
		//update cart + 1
		var cellam=$('#flex2 #row'+cid+' td:nth-child(1) div');
		var newval=valToFmtNum( fmtNumToVal(cellam.text()) + 1 ); //parseFloat/parseInt	
		cellam.text(newval);
		
		updateTotal(cid,newval);
	} else {
		var cart=getCart();
		json="{page:1, total: "+(cart.cnt+1)+", rows: ["+
			cart.rows+
			(cart.cnt==0 ? "" : "\n,")+"{id:'Cart"+id+"', cell:['1',"+getRow('row'+id,1)+
			",'"+$('#flex1 #row'+id+' td:nth-child(5) div').text()+"']}"+
			"]}";
		//alert(json);
		$("#flex2").flexAddData(eval('(' + json + ')')); 			
	}
	updCartSum();
}

function deleteFromCart(id) {
	var cart=getCart(id); //skip id
	json="{page:1, total: "+(cart.cnt)+", rows: ["+
		cart.rows+
		"]}";
	$("#flex2").flexAddData(eval('(' + json + ')')); 			
	updCartSum();
	
	if (cart.cnt==0) $(grid2[0].grid.gDiv).addClass('hideBody');//hide
}

function clearCart() {
	json="{page:1, total: 0, rows: []}";
	$("#flex2").flexAddData(eval('(' + json + ')')); 			
	updCartSum();
	
	$(grid2[0].grid.gDiv).addClass('hideBody');//hide
}


function updateTotal(id,newval) {
	if (newval==null) { //get default value of cell 1
		var cellam=$('#row'+id+' td:nth-child(1) div');
		newval=fmtNumToVal(cellam.text());
	}
	var cellprs=$('#row'+id+' td:nth-child(5) div');
	var celltot=$('#row'+id+' td:nth-child(6) div');
	celltot.text(valToFmtNum(fmtNumToVal(cellprs.text())*newval,2));
}

function getCartSum() {
    var sum=0;
/*	//zu langsam im IE:
    var trs= $("#flex2 tr");
    for (var j=0;j<trs.length;j++) {
	sum+=fmtNumToVal($('#'+trs[j].id+' td:nth-child(6) div').text());
    }
*/	
    var tr = document.getElementById('flex2').rows;
    for (var j=0;j<tr.length;j++) {
	sum+=fmtNumToVal(tr[j].cells[5].firstChild.firstChild.data); //td->div->text()
	//sum+=fmtNumToVal($(tr[j].cells[5]).text());
    }
    
    return sum;
}

function updCartSum() { 
	var sum=getCartSum();
	$('.cartSum').text(" Ex. moms SEK: "+valToFmtNum(sum));
}


function fmtNumToVal(fmtNum) {
	return parseFloat(fmtNum.replace(/\./g,'').replace(/,/,'.'));
}

function valToFmtNum(val,prec) {
	var pstr,pnum;
	if (prec != null) {
		val=val.toFixed(prec); //ergebnis -> string
	} else {
		val=val.toString();
	}
	val=val.replace(/\./,',').replace(/(\d)(\d{3})([,.]|$)/g,'$1.$2$3');
	return val.replace(/(\d)(\d{3})([,.]|$)/g,'$1.$2$3'); 
}


function getCart(skipid) { //return json data of cart (rows content only)
	skipid=skipid || '';
	var res={};
	res.cnt=0;
	res.rows="";
	var trs= $("#flex2 tr");
	for (var j=0;j<trs.length;j++) {
		if(trs[j].id!='row'+skipid) {
			res.cnt++;
			res.rows+=(res.cnt==1 ? "" : "\n,")+"{id:'"+stripId(trs[j].id)+"', cell:["+getRow(trs[j].id)+"]}";
		}
	}
	return res;
}

function fmtCart() { //return formatted value of cart (for order)
	var res=strFmtLeft('Antal',6)+' '+strFmtLeft('Artnr',8)+' '+strFmtLeft('Namn',30)+' '+strFmtRight('Ex. moms',10)+' '+strFmtRight('Belopp',10);

	var trs= $("#flex2 tr");
	for (var j=0;j<trs.length;j++) {
		res+=(res.cnt==1 ? "" : "\n")+fmtRow(trs[j].id);
	}
	res+="\nTotalt (ex. moms) SEK : "+valToFmtNum(getCartSum());
	return res;
}

function fmtRow(id) {
	var td = $('#'+id+' td div');
	str = strFmtLeft($(td[0]).text().replace(/<.*>/,'')+' '+$(td[3]).text(),6)+' '+strFmtLeft($(td[1]).text(),8)+' '+strFmtLeft($(td[2]).text(),30)+' '+strFmtRight($(td[4]).text(),10)+' '+strFmtRight($(td[5]).text(),10)
	return str;
}
function strFmtLeft(str,len,cut) {
	if (str.length<len) {
		while (str.length<len) str=str + ' ';
	} else {
		if (cut) str=str.substr(0,len)
	}
	return str;
}
function strFmtRight(str,len,cut) {
	if (str.length<len) {
		while (str.length<len) str=' '+ str;
	} else {
		if (cut) str=str.substr(0,len)
	}
	return str;
}

function fmtCurDateSW() {
    var now=new Date();
    var zpad = function (num,len) {
	num=String(num);
	while (num.length<len) num = "0" + num;
	return num;
    }
    return (now.getYear()+1900)+"-"+zpad(now.getMonth()+1,2)+"-"+zpad(now.getDate(),2)+" "+zpad(now.getHours(),2)+":"+zpad(now.getMinutes(),2)+":"+zpad(now.getSeconds(),2);
}


function stripId(rowid) {
	if (rowid && rowid.length>3) {
		return rowid.substr(3);
	} else return '';
}

function getRow(id,skipatend) {
	skipatend=skipatend || 0;
	var td = $('#'+id+' td div');
	str = '';
	for(var j=0;j<td.length-skipatend;j++){  //serialize as you like
		if ((skipatend==0) || (j!=3)) //skip col3 on items
			str += "'"+ $(td[j]).text()+"'"+(j<td.length-1-skipatend?",":"");
	} 
	return str;
}

function openDlg () {
	//alert(fmtCart());
	//alert(fmtCart().replace(/\n/g,"<br/>\n").replace(/\s\s/g,"&nbsp;&nbsp;"));
	$('#orderText').html("<br/>"+fmtCart().replace(/\n/g,"<br/>").replace(/\s\s/g,"&nbsp;&nbsp;"));
	$('#dialog').dialog('open');
}

$(function() {
	
	var	name = $("#name"),
		customerno = $("#customerno"),
		deliveryaddress = $("#deliveryaddress"),
		allFields = $([]).add(name).add(customerno).add(deliveryaddress),
		tips = $("#validateTips"),
		sendTips = $("#sendTips");
		sendRes = $("#sendResult");

	function updateTips(t) {
		tips.html(t).effect("highlight",{},1500);
	}
	function updateSendTips(t,res) {
		sendTips.html(t).effect("highlight",{},1500);
		sendRes.html(res.replace(/\n/g,"<br/>").replace(/\s\s/g,"&nbsp;&nbsp;"));
	}

	function checkNotEmpty(o,n) {
		if ( o.val().length == 0 ) {
			o.addClass('ui-state-error');
			updateTips("F&auml;lt '" + n + "' m&aring;ste vara ifyllda f&ouml;r att du skall kunna skicka din order.");
			return false;
		} else {
			return true;
		}
	}

	function checkRegexp(o,regexp,n) {

		if ( !( regexp.test( o.val() ) ) ) {
			o.addClass('ui-state-error');
			updateTips(n);
			return false;
		} else {
			return true;
		}

	}
	
	var str = {
		cancelBtn : 'Avbryt',
		okBtn : 'Skicka'
	};
	
	var dlgInit= {
		bgiframe: true,
		autoOpen: false,
		height: 500,
		width: 610,
		modal: true,		
		initButtons: function () {
			this.buttons[str.cancelBtn] = function() {
					$(this).dialog('close');
				};
			this.buttons[str.okBtn] = function() {
				var bValid = true;
				allFields.removeClass('ui-state-error');

				bValid = bValid && checkNotEmpty(customerno,"Kundnummer");
				bValid = bValid && checkNotEmpty(name,"F&ouml;retagsnamn");
				//bValid = bValid && checkLength(deliveryaddress,"deliveryaddress",0,2000);

				//bValid = bValid && checkRegexp(name,/^[a-z]([0-9a-z_])+$/i,"Username may consist of a-z, 0-9, underscores, begin with a letter.");
				
				if (bValid) {
					//submit per php, clear cart
					var dataString = 'customerno='+ escape(customerno.val()) + '&name=' + escape(name.val()) + '&deliveryaddress=' + escape(deliveryaddress.val()) + '&items=' + escape(fmtCart());
					//updateTips('Din order skickas var god v&auml;nta.'); //!!disable buttons here
					//alert (dataString);return false;  
					$('#dialogsend').dialog('open');					
					$.ajax({  
						type: "POST",  
						url: "/scripts/order/sendorder.php",  
						data: dataString,  
						dataType: 'text',
						error: function (XMLHttpRequest, textStatus, errorThrown) {
							updateSendTips('Tyv&auml;rr uppstod ett fel n&auml;r du skickade din order: '+(textStatus?textStatus:errorThrown),textStatus?textStatus:errorThrown);
							},
						success: function(data, textStatus) {  
							var now=new Date();
							updateSendTips('Din order har nu skickats.',"Skickad till Refrico den "+fmtCurDateSW()+"\n\n"+data);
							}
						});

					$(this).dialog('close');
				}
			}
		},
		buttons: {},

		open: function () {
			$(":button:contains('"+str.okBtn+"')").css('width',100).html('<img src="/scripts/order/accept.png" style="float: left; margin-right: .3em;">'+str.okBtn);
			$(":button:contains('"+str.cancelBtn+"')").css('width',100).html('<img src="/scripts/order/cancel.png" style="float: left; margin-right: .3em;">'+str.cancelBtn);
		},
		close: function() {
			allFields.val('').removeClass('ui-state-error');
		}
	}
	dlgInit.initButtons();
	$("#dialog").dialog(dlgInit);	
	
	$("#dialogsend").dialog({
		modal: true,
		autoOpen: false,
		bgiframe: true,
		width: 610,
		height: 500,
		open: function () {
			$(":button:contains('OK')").css('width',100).html('<img src="/scripts/order/accept.png" style="float: left; margin-right: .3em;">OK');
			$(":button:contains('Skriv ut')").css('width',100).html('<img src="/scripts/order/printer.png" style="float: left; margin-right: .3em;">Skriv ut');
		},
		close: function() {
			clearCart();
		},
		buttons: {
		'OK': function() {
				$(this).dialog('close')
			},
		'Skriv ut': function() {				
				$('#printArea').printElement();
				//'http://www.refrico.se/fileadmin/LANG_SW/templates/images/allgemein/logo.gif'
			}
		}
		
	});
});

