/**
 * @(#)library/lib_place.js
 *
 * Copyright 2000-2009(c) MijnWinkel B.V.
 *
 * Version 9.0.2 26-jan-2009
 */

function getStockVal(count){return getOrderStock()}

function getOrderStock(){
	var v=-1;
	if(self.__rowData&&__rowData.length>0){
		var n=__rowData[0];
		if(self._stc&&_stc[n]!=null)v=_stc[n];
		if(v==-1)v=fieldRaw(getStockFld());
		v-=getNumberInBasket();
	}
	return(v=="*")?-1:v;
}


function builder(){return !(self.Valuta==null)}

function getNoProductsPage(){
	var s='<center><br><table width=90% class=b bgcolor="'+getColor(8)+'" border=0 cellspacing=0 cellpadding=0>';
	s+='<tr><td align="center">';
	s+='<table cellpadding="0" cellspacing="0" border="0">';
	s+='<tr><td rowspan="99"><img src="/pic/leeg.gif" width="10" height="1" border="0"></td></tr>';
	s+='<tr><td height="1" colspan="9" bgcolor="'+getColor(6)+'"><img src="/pic/leeg.gif" height="1" width="1" border="0"></td></tr>';
	s+='<tr><td align="center"><br><br>'+m("isempty")+'<br></td></tr>';
	s+='<tr><td align="center" class="small"><br><br>'+m("isempty2")+'<br>'+m("isempty3")+'<br><br></td></tr>';
	s+='<tr><td align="center"><a href="javascript:doHelp();">'+getLabel('schelp')+'</a><br><br><br><br></td></tr>';
	s+='</table></td></tr></table>';
	w(s);
 }

function Basket(){
 	if(!builder())return;
	var me=this,c=new Valuta(),it,ship=new ShippingList();
	me.Shipping=ship
	me.ShippingList=ship;
	me.VAT=new HashMap();
	
	if(ship.enabled&&(ship.direct||ship.count>0))ship.select((ship.count==1)?"first":__b.get("s.order.shipping.id"));
	var shipc=(new ShippingBasket()).getShippingCosts(ship);
	
	me.Reduction=new Reduction();
	me.line=-1;
	me.count=0;
	me.total=0;
	me.subtotal=0;
	me.subtotalIncVat=0;
	me.totalvat=0;
	me.shippingvat=0;
	me.format=function(v){return c.format(v)};
	me.reset=function(){me.line=-1;return __b.iterator("s.order","article.id")};
	it=me.reset();
	while(it.next()){me.count++;
		var q=it.get("quantity"),v=getCalcVat(it.getNumber("vat")),lt=it.getNumber("linetotal"),p=it.getNumber("pricevalue");
		c.filter(it.get("price"));
		me.subtotal+=lt;
		me.subtotalIncVat+=it.getNumber("inc-vat-linetotal");
		
		me.total+=lt+(v*0.01*lt);
		me.totalvat+=v*0.01*lt;
		
		//if(__b.get("s.custom.debug")=="yes")alert("product inc-vat:"+(roundSum(0,v*0.01*p)*q));
		//me.total+=roundSum(p,v*0.01*p)*q;
		//me.totalvat+=roundSum(0,v*0.01*p)*q;
		if(v!=0)me.VAT.increment(v,lt);
		shipc.add(it,q);
	}

	it=me.reset();

	me.getSubTotal=function(){return(getVatState()>0)?me.subtotalIncVat:me.subtotal};

	me.next=function(){me.line++;return it.next()};
	me.getOrderLine=function(){return it};
	
	me.getVATValue=function(n){
		var v='';
		if(n=='vat-percentage')v=me.VAT.key();/*+'%'*/
		else if(n=='vat-from-price-formatted')v=c.format(me.VAT.value());
		else if(n=='price-vat-formatted')v=c.format(me.VAT.value()*0.01*me.VAT.key());
		return v
	};
	me.get=function(n,def){
		if(n.indexOf('extra-')==0)n="extra_"+n.substring(6);
		return it.get(n,def)
	};
	me.getProduct=function(n){
		n=n.toLowerCase();
		if(n=='index')return(me.line+1);
		else if(n=='remarks')return getMemo();
		var rn=n,incvat=n.indexOf('inc-vat-')==0;
		if(incvat)n=n.substring(8);
		var v='',i=n.indexOf('-formatted');
		if(n=='price')n='pricevalue';
		if(n=='price-line-total')n='linetotal';
		if(n=='product-id')n='id';
		
		if(i!=-1){
			if(n=='price-formatted')n='pricevalue';
			else n=n.substring(0,i);
			if(n=='price-line-total')n='linetotal';
			if(n=='price-total')v=c.format(me.total+getShpPrice()+me.getActionPrice()+getPaymentMethodPrice());
			else if(n=='price-subtotal'){
				if(incvat){
					v=c.format(me.total);
					__b.set("s.order."+rn,v);
				}
				else v=c.format(me.subtotal);
			}
			else if(n=='price-shipping')v=getShippingPrice(incvat);
			else if(incvat){
				//if(n=="linetotal"){
				//	v=it.getNumber("pricevalue");
				//	v=roundSum(v,v*it.getNumber("vat")*0.01)*it.getNumber("quantity");
				//}
				//else{
				// 	v=it.getNumber(n);
				//	v=roundSum(v,v*it.getNumber("vat")*0.01)
				//}
				//v=c.format(v);
				//if(__b.get("s.custom.debug")=="yes")alert(v);
				
				v=it.getNumber(n);
				v=c.format(v+v*getCalcVat(it.getNumber("vat"))*0.01);
				
				__b.set("s.order.article."+rn,v,me.line);
			}else v=c.format(it.get(n));
		}else{
			i=n.indexOf('-percentage');
			if(n=='price-total')v=me.total+getShpPrice()+me.getActionPrice()+getPaymentMethodPrice();
			else if(n=='price-subtotal')v=me.subtotal;
			else if(n=='price-shipping')v=me.Shipping.price;
			else{
				if(n.indexOf("extra-")==0)v=it.get("extra_"+name.substring(6));
				else v=it.get((i==-1)?n:n.substring(0,i));
			}
			/*if(i!=-1)v+='%'*/
		}
		return v;
	};
	function roundSum(n0,n1){
		n0+=n1;
		return (Math.round(n0*100)/100)
	}
	
	function getShpPrice(){
		var sp=0,v;
		if(ship.enabled){
			v=ship.price+me.shippingvat;
			if(ship.direct)sp=v;
			else if(getViewType()>vt_BASKET)sp=v;
		}
		return sp;
	}
	function getPaymentMethodPrice(){
		var p=0;
		if(__b.get("s.order.paymentmethod-show")==1)p=((calcVat()&&getVatState()>0)?__b.get("s.order.inc-vat-paymentmethod-pricevalue"):__b.get("s.order.paymentmethod-pricevalue"))
		return parseFloat(p);
	}
	
	me.remove=function(line){
		if(confirm(formatMsg('remove.msg',textUnescape(__b.get('s.order.article.description',line))))==true){
			if(self.ActionList){
				var al=new ActionList(),action;
				while(al.hasNext()){
					al.next();
					action=al.action;
					if(action.name=="auto_add"||action.name=="auto_add_on_price")action.onRemove(__b.get("s.order.article.oid",line));
				}
			}
			__b.remove('s.order','article.id',line);
			reload(vt_BASKET);
		}
	};
	me.termsConditions=function(){
		var w=window.open(getPolicies(),m("policies").replace(/\s+| /gi,'_'),"height=450, width=480, left=10, top=10, resizable=yes, scrollbars=yes",true);
		w.focus();
	};
	me.help=function(){
		var l=getLanguage(),w=window.open('http://www.mijnwinkel.nl/help/frame.html?page=hkassa_'+l+'.html&language='+l+'&_vid='+getVID(),m("schelp"),"height=450, width=400, left=10, top=10",true);
		w.focus();
	};
	
	me.continueShopping=function(){
		var v=__b.get(__systembb),t=__b.get(__SYS+__BBT),sid=getSID();
		if(v=='')productlist();
		else {
			if(sid!=''){
				v+=(v.indexOf('?')==-1)?'?':'&';
				v+='__stateless='+sid;
			}
			window.open(v,((t=="")?"_self":t));
		}
	};

	me.shippingSelection="";
	
	me.hasShippingSelection=function(){
		var shp=me.Shipping;
		return shp.enabled&&shp.direct;
	};
	
	me.getShippingSelection=function(){
		var s="",shp=me.Shipping;
		shp.reset();
		if(shp.enabled&&shp.direct){
			var ls="",active=__b.get("s.order.shipping.id");
			if(shp.count==1){
				shp.select("first");
				if(shp.remote==1)new ShippingBasket().calculateExtra(shp);
			}
			else{
				while(shp.next())if(shp.remote==1)new ShippingBasket().calculateExtra(shp);
				ship.reset();
			}
			
			if(shp.count==1){
				shp.select("first");
				s='<input name=shipping type="hidden" value='+shp.id+'>'+shp.label;
				active=shp.id;
				__b.set("s.order.shipping.id",active);
			}else{
				s+='<select name=shipping onchange="JavaScript:__basket.shippingSelect(this);">';
				s+='<option value="">'+m("shipping")+'</option>';
				while(shp.next())s+='<option '+((active==shp.id)?'selected':'')+' value='+shp.id+'>'+shp.label+'</option>';
				s+='</select>';
			}
			setShippingSelection(active);
		}
		return s;
	};
	function setShippingSelection(a){
		if(me.shippingSelection==""){
			if(a==null){
				a=__b.get("s.order.shipping.id");
				ship.select(a);
			}
			shipc.select(a,me.subtotal+me.getActionTotal(),me.totalvat+me.getActionVat());
			if(a!=""){
				var v=getCalcVat(getShippingVAT());
				ship.basePriceReached(me.subtotal+me.getActionTotal(),me.totalvat,me.getActionTotal(),me.getActionVat());
				me.shippingvat=(ship.price*0.01*v);
				if(me.shippingvat!=0)me.VAT.increment(v,ship.price);
			}
			me.shippingSelection=a;
		}
	}

	me.shippingSelect=function(ctl){
		__b.set("s.order.shipping.id",ctl.value);
		// trigger an action event
		reload(vt_BASKET);
	}
	
	me.getShippingPrice=function(vat){
		var s="";
		setShippingSelection();
		return getShippingPrice(vat);
	};
	
	me.getShippingLabel=function(){
		setShippingSelection();
		return ship.label;
	};
	me.hasShipping=function(){return ship.enabled};
	
	var hasAction=null;
	me.hasAction=function(){
		if(hasAction==null)hasAction=(self.ActionList!=null)&&(""+__b.get(__ACTIONS+"active"))=="true";
		return hasAction
	};
	me.getActionTotal=function(){return getAV("total")};
	me.getActionVat=function(){return getCalcVat(getAV("totalvat"))};
	me.getActionPrice=function(){return me.getActionTotal()+me.getActionVat()};
	function getAV(n){return(me.hasAction())?c.makeNumber(__b.get(__ACTIONS+n)):0}

	function getShippingPrice(vat){
		var s="";
		if(me.shippingSelection!=''){
			if(ship.remote==1)new ShippingBasket().calculateExtra(ship);
			if(vat!=null&&vat){
				s=c.format(ship.price+((vat!=null&&vat)?(ship.price*ship.VAT*0.01):0));
				__b.set("s.order.inc-vat-price-shipping-formatted",s);
			}
			else s=c.format(ship.price);
		}	
		return s
	}
	me.ActionsList=null;	
}
var __basket=new Basket();

function Actions(basket){
 	if(!builder())return;
	var me=this;
	
	function buildActionList(al,vl,cur){
		var line="",al=basket.ActionsList;
		__b.remove("s","actions");
		me.hasVat=false;
		me.active=false;
		me.total=0;
		me.vat=0;
		me.label="";
		me.code="";
		me.hasCoupon=false;
			
		if(al!=null){
			var av=0,l=0,vat=0;
			while(al.hasNext()){
				al.next();
				if(al.enabled()){
					vat=getCalcVat(al.getVAT());
					if(self.getExclVat)av=getExclVat(al.getAmount(),true,vat);
					else av=al.getAmount(); // price
					__b.set(__ACTION+"description",descriptionFilter(al.getDescription()),l);
					
					if(vat>0){
						me.hasVat=true;
						basket.VAT.increment(vat,av);
						me.vat+=(av*0.01*vat);
					}
					var code=al.getState("code");
					if(code)__b.set(__ACTION+"code",al.getState("code"),l);
					
					__b.set(__ACTION+"amount-inc-vat",basket.format(av+(av*0.01*vat)),l);
					__b.set(__ACTION+"amount",basket.format(av),l);
					__b.set(__ACTION+"amountnr-inc-vat",av+(av*0.01*vat),l);
					__b.set(__ACTION+"amountnr",av,l++);
				}				
			}
			me.active=al.active;
			me.total=al.getTotalAmount();
			var i=0,a=["active",""+al.active,"total",me.total,"totalvat",me.vat]
			for(;i<a.length;i++)__b.set(__ACTIONS+a[i++],a[i])
			
			if(al.select&&al.select("coupon_n")){
				me.code=al.getState("code");
				me.label=al.getValue("input_label",m("discountcode"));
				me.hasCoupon=true;
			}
			al.reset();
		}
	}
	
	var vt=getViewType();
	if(isCustom(vt)){
		if(self.ActionList!=null)basket.ActionsList=new self.ActionList(null,true);
		buildActionList();
	}
}
var __actions=new Actions(__basket);

function continueNextPage(vt,quotation){
	var f=getData();
	if(f!=null){
		__b.set("s.order.type",((quotation!=null&&quotation)?"1":"0"));
		if(vt=="")vt=null;
		if(this.hasNoFrames&&hasNoFrames())f.action=getNewUriCheckout("placeorder","1")+getSIDQuery();
		else f.action=getOrderHandler();
		nextPage(vt)
	}
}

function continuePrevPage(vt){
	var f=getData();
	if(f!=null){
		f.action=getOrderHandler();
		if(vt==null||vt==vt_BASKET){
			var avt=getViewType();
			if(avt==vt_PAY_METHOD){
				var ship=new ShippingList();
				vt=(!__basket.Shipping.direct&&getShippingCount(getBag(),__basket.Shipping)>1)?vt_SHIPPING_VAT:vt_CHECKOUT;
			}
			else if(avt==vt_SHIPPING_VAT)vt=vt_CHECKOUT
			else if(avt==vt_APPROVAL){
				vt=vt_PAY_METHOD;
				if((new PaymentMethod()).count<2)vt=(__basket.hasShipping&&getShippingCount(__b,__basket.Shipping)>1)?vt_SHIPPING_VAT:vt_CHECKOUT;
			}
		}
		prevPage(vt)
	}
}
function getCtlValue1(ctl){
	var i=0,c=(ctl.tagName==null)?ctl[0]:ctl,v=c.value,name=c.tagName;
	if(name.toUpperCase()=="SELECT"){
		v="";
		if(c.selectedIndex>0){
			for(;i<c.options.length;i++)if(c.options[i].selected){
				v=c.options[i].value;
				break;
			}
		}
	}
	else if (c.type=="checkbox"||c.type=="radio"){
		if(ctl!=c){
			for(;i<ctl.length;i++)if(ctl[i].checked){
				v=ctl[i].value;
				break;
			}
		}
	}
	return v;
}

function getNumberInBasket(){
	/*
	var st=0;
	if(self.getStockType)st=getStockType();
	return(st==1&&isEdit())?getNumber(getQuantity()):0
	*/
	var n=getBasketInfo().getProductQuantity(getOID(),getCID());
	if(isEdit())n-=getQuantity();
	return n;
}
	
function CustomPage(){
	var me=this,vt=getViewType();
	function getNumber(v){return(v!="")?parseFloat(v):0}
	me.header=function(){return ""};
	me.validate=function(){return true};
	me.pageload=me.header;
	me.footer=me.header;
	
	if(vt==vt_CHECKOUT){
		me.header=function(bag){
			
			bag.set("s.calc_vat","1");
			
			var s='',sel,ship=new ShippingList(),next=vt_PAY_METHOD;
			self.__options=new OptionsEx();
			if(getVID()=="596900"||getVID()=="392700"||(ship.enabled&&!ship.direct)){
				sel=bag.get("s.order.shipping.id");
				if(ship.count==1){
					ship.select("first");
					bag.set("s.order.shipping.id",ship.id);
					s+='<input type=hidden name=shipping value="'+ship.id+'">';
				}else next=vt_SHIPPING_VAT
			}
			if(next==vt_PAY_METHOD){
		        var pay=new PaymentMethod(),count=((new Reduction()).getTotal()<=0)?0:pay.count;
		        if(pay.extended&&pay.hasActions&&pay.count>0)next=vt_PAY_METHOD;
				else if(count<2){
		            pm=(count>0)?pay.getID(0):'1';
					getBag().set("s.order.paymentmethod",pm)
					s+='<input type=hidden name=paymentmethod value="'+pm+'">';
					//next=(requireIssuer(pm))?44:vt_ORDER;
					next=vt_ORDER;
					if(requireIssuer(pm))next=44;
					else if(!ship.direct)next=vt_APPROVAL;
				}
			}
			setNextViewType(next);
			return s;
		};
		me.footer=function(){
			getDefaultBusyMessage();
			var oi=new OrderInterface()
			oi.insert("general");
			oi.insert("basket");
		};
		me.validate=doValidate;
		me.pageload=pageLoad;
	}
	else if(vt==vt_BASKET){ 
		me.validate=function(bag,val){
			var actionValidation=false,ok=false,msg="";
			if(self.ActionList){
				var al=new ActionList();
				while(al.hasNext()){
					al.next();
					if(al.hasPreOrderValidation&&al.hasPreOrderValidation()){
						ok=al.action.validate();
						if(!ok){
							msg=al.getValue("message");
							alert(msg);
							break;
						}
					}
					if(al.hasValidation&&al.hasValidation()){
						ok=al.action.validate();
						actionValidation=!ok;
						if(actionValidation)break;
					}
				}
			}
			if(msg==""&&!actionValidation){
				var ship=new ShippingList(),msg="",ok=false,id=bag.get("s.order.shipping.id");
				if(bag.count("s.order","article.id")<1)msg="isempty";
				else if(ship.enabled&&ship.direct&&id=="")msg="shipping.selection";
				ok=(msg=="");
				if(!ok)alert(m(msg));
				else saveVatList();
			}
			
			if(ok&&self.CheckProductStock)ok=(new CheckProductStock()).state;
			
			return ok;
		};
		me.pageload=function(){
			if(self.CheckProductStock)new CheckProductStock(false);	
		};
		
	}
	else if(vt==vt_ORDERPAGE){
		self.loadShoppingCart=function(){
			// refesh the shoppingcart.
			var wo=window.opener;
			if(getOrderOptions()==3&&!(isEdit()||isReload()))reload(vt_BASKET);
			else if(!wo)reload(vt_BASKET);
			else{
				if(wo.reload!=null)wo.reload(vt_BASKET,getBag());
				doCancel();
			}
		};
		me.header=function(bag){
			setNextViewType((isEdit()||isReload())?vt_BASKET:vt_ORDERCONTINUE);
			var oo=getOrderOptions();
			if(!(oo==2||oo==3)||isEdit());
			else if(oo==3||(oo==2&&getQFType()==1)){
				var c=document.getElementsByTagName('body');
				if(c&&c.length>0)c[0].style.display="none";
			}
			return '';
		};
		
		
		me.pageload=function(){
			var oo=getOrderOptions();
			if(!(oo==2||oo==3||getQFType()==1)||isEdit()){
				var c=getCtl("quantity");
				if(c!=null)c.focus();
			}
			else{
				if(oo==2&&getQFType()==1);
				else if(oo==3||getQFType()==1)setNextViewType(vt_BASKET);
				nextPage();
			}
		};	
		me.validate=function(bag,val){
			var v="1",oke=true,add=!isEdit(),a="s.order.article.",hasSelection=false;
			if(getQFType()==1)v=getCVE("_quantity");
		
			// Validate selection fields
			for(var i=1;i<getNrOfFields();i++){
				if(containsSelection(i)){
					var c=getCtl("selection"+i);
					if(c!=null&&!hasSelection)hasSelection=true;
					if(c&&val.isEmpty(getCtlValue1(c))){
						alert(formatMsg(m("selection.missing"),fieldLabel(i)));
						c.focus();
						oke=false;
						break;
					}
				}
			}
			if(oke){
				oke=false;
				var oo=getOrderOptions();
				if((oo==3||oo==2)&&add)oke=true;
				else{
					var c=getCtl("quantity");
					if(c){
						v=c.value;
						if(val.isEmpty(v))alert(m("NaN"));
						else if(val.isNumber(v,getIntegerOnly()))oke=true;
						else alert(m((getIntegerOnly()&&val.isNumber(v,false))?"NaInt":"NaN"));
						
						if(oke&&checkStock()&&(parseFloat(v)>(parseFloat(getOrderStock())))){
							oke=false;
							alert(printf(m("outofstock"),(parseFloat(getOrderStock())+getNumberInBasket())));
						}
						
						if(!oke)c.focus();
					}
					// Order fields
					if(oke&&self.OrderFields){
						var flds=new OrderFields();
						while(oke&&flds.hasNext())oke=flds.next().validate();
					}
				}
			}
			if(oke){
				v=(new Valuta()).makeNumber(v);
				var c=getCtl("inshoppingcart"),l,r=new ReductionList(),p=getArticlePrice(true),vatrate=getVATRate(),priceInc=getArticlePrice(true,false);
				var incVat=getVatState()>0,inc="inc-vat-";
				if(c)c.disabled=true;
		
				if(add){
					l=bag.count("s.order","article.id");
					bag.set("s.toshoppingcart","0");
					bag.set(a+"id",getArticleID(),l);
					bag.set(a+"lid",(""+new Date().getTime()),l);
					
					bag.set(a+"basepricevalue",p,l);
					bag.set(a+"baseprice",getNumberVal(getPrice(),p,false,false),l);
					if(incVat){
						bag.set(a+inc+"basepricevalue",priceInc,l);
						bag.set(a+inc+"baseprice",getNumberVal(getPrice(),priceInc,false,false),l);
					}
				}else l=bag.set(a+"id",getArticleID(),getOrderLine());
				if(r.enabled){
					p=r.getPrice(v);
					priceInc=r.getPriceIncVat(v);
				}
				
				
		
				v=Math.abs(v);
				bag.set(a+"quantity",v,l);
				var metric="";
				if(self.getMetric)metric=getMetric()
				bag.set(a+"description",getDescription(hasSelection,metric),l);
				if(self.getSelection)bag.set(a+"selection",getSelection(true),l);
				bag.set(a+"pricevalue",p,l);
				
				var val=new Valuta(),price=getNumberVal(getPrice(),p,false,false);
				bag.set(a+"price",price,l);
				val.filter(price);
				bag.set(a+"pricelinetotal",val.format(p*v),l);
				bag.set(a+"linetotal",p*v,l);
				
				if(incVat){
					bag.set(a+inc+"pricevalue",priceInc,l);
					bag.set(a+inc+"price",val.format(priceInc),l);
					bag.set(a+inc+"pricelinetotal",val.format(priceInc*v),l);
					bag.set(a+inc+"linetotal",priceInc*v,l);
				}
				
				bag.set(a+"partner",getPartner(),l);
				bag.set(a+"cid",getCID(),l);
				bag.set(a+"oid",getOID(),l);
				bag.set(a+"metric",metric,l);
				if(self.getWeightCol&&!isNaN(getWeightCol()))bag.set(a+"weight",new Valuta().makeNumber(fieldPlain(getWeightCol())),l);
			
				/*
				 * Add the custom fields
				 */
				if(self.OrderFields){
					var fldlbl,fld,flds=new OrderFields(),fldname;
					while(flds.hasNext()){
						fld=flds.next();
						fldlbl=fld.getLabel();
						if(!empty(fldlbl)){
							// keep the upload file the same if nothing is changed.
							if(!(isEdit()&&fld.type==2&&empty(fld.getCtlValue()))){
								fldname=fld.getCtlName();
								bag.set(a+fldname,fld.getCtlValue(),l);
								bag.set(a+fldname+":label",fldlbl,l);
								bag.set(a+fldname+":id",fld.getUploadIdValue(),l);
							}
						}
					}
				}
				
				if(hasVatCol())vatrate=fieldNumber(getVatFld());
				else{
					// Hardcoded version
					for(var i=1;i<getNrOfFields();i++)if(fieldLabel(i).toLowerCase()=="_btw_"){
						vatrate=fieldNumber(i);
						break;
			   		}
		   		}
				bag.set(a+"vat",vatrate,l);
				
				   		
		   		/*
		   		 * Save all the global field references in the bag. 
		   		 * The information is used to calculate the shipping cost.
		   		 */
				if(!_isDirect()){
			   		var flds=new ShippingList().fields;
			   		while(flds.next())bag.set(a+"field_"+flds.value(),fieldRaw(flds.key()),l);
				}
				
				/*
			 	 * Save the extra product information.
			 	 */
			 	if(self.isExtraFld){
					for(i=1;i<getNrOfFields();i++)if(isExtraFld(i)&&hasFieldRaw(i)&&fieldRaw(i)!='')
				 		bag.set(a+"extra_"+fieldLabel(i),fieldPlain(i),l);
				}
				
				 /*
				  * Add optional products based on the current product number and qunatity.
				  */
				 if(self.ActionList){
					var al=new ActionList(),action;
					while(al.hasNext()){
						al.next();
						action=al.action;
						if(action.name=="auto_add"||action.name=="auto_add_on_price")al.action.onOrderPlaced(getBag(),v);
					}
				}
				try{
					var o=window.opener;
					if(o&&o.event_stockChanged){
						resetBasketInfo();
						o.event_stockChanged(getOrderStock(),getArticleID(),getOID(),getCID());
					}
				}catch(e){}
				
				bag.set("s.system.rshipping.set","0");
			}
			return oke;
		};
	}
	else if(vt==vt_ORDERCONTINUE){
		self.loadShoppingCart=function(){
			window.opener.toShoppingCart(self,1)
		};
		
		me.header=function(bag){
			setNextViewType(vt_BASKET);
			return ''
		};
	}
	else if(vt==vt_SHIPPING_VAT){
		self.doSelectShipping=function (ctl){getBag().set("s.order.shipping.id",ctl.value)};
		me.header=function(bag){
			self.basket=new ShippingBasket();
			setNextViewType(vt_PAY_METHOD);
			return ''
		};
		me.validate=function(bag,val){
			var ship=new ShippingList(),msg="",ok=false,id=bag.get("s.order.shipping.id");
			if(bag.count("s.order","article.id")<1)msg="isempty";
			else if(ship.enabled&&id=="")msg="shipping.selection";
			ok=(msg=="");
			if(ok){
				basket.calculateExtra(ship,id);
				var r=new Reduction(ship);
				if(r.enabled)ok=r.valid();
				if(ok){
					var pay=new PaymentMethod();
					if(pay.extended&&pay.hasActions&&pay.count>0)setNextViewType(vt_PAY_METHOD);
					else if(pay.count<2){
						pm=(pay.count>0)?pay.getID(0):'1';
						getBag().set("s.order.paymentmethod",pm)
						setNextViewType(((requireIssuer(pm))?44:vt_APPROVAL));
					}else setNextViewType(vt_PAY_METHOD);
				}
			}else alert(m(msg));
			return ok
		};
		me.footer=function(bag){
			getDefaultBusyMessage();
			(new OrderInterface()).insert("all");
		};
	}
	else if(vt==vt_PAY_METHOD){
		me.header=function(bag){
			var ship=new ShippingList();
			if(ship.enabled&&!ship.direct)setNextViewType(vt_APPROVAL);
			else setNextViewType(vt_ORDER);
			if(bag){
				bag.set("s.order.paymentmethod-show","0");
				bag.set("s.order.paymentmethod-pricevalue","0");
				bag.set("s.order.paymentmethod-vat-pricevalue","0");
				bag.set("s.order.inc-vat-paymentmethod-pricevalue","0");
			}
			return ''
		};
		me.validate=function(bag,v){
			var f=getData(),b=false;
			if(f!=null){
				var ctl=f["paymentmethod2"],i=0,val=null;
				if(ctl!=null){
					if(ctl.length){
						for(;i<ctl.length;i++)
							if(ctl[i].checked)val=ctl[i].value;
					}else val=ctl.value;
					if(val!=null){
						bag.set("s.order.paymentmethod",val);
						f["paymentmethod"].value=val;
						
						var pay=new PaymentMethod();
						if(pay.extended&&pay.hasActions){
							if(pay.select(val)&&pay.getCharge()){
								var basket=new ShippingBasket();
								var total=basket.productTotal+(new Valuta().makeNumber(bag.get("s.actions.total")));
								var price=pay.getAmount(null,total,basket.vatTotal,bag.get("s.actions.total"),getCalcVat(bag.get("s.actions.vattotal")));
								
								var pvat=getCalcVat(getPaymentVat()),priceEx=getExclVat(price,true,getPaymentVat());
								bag.set("s.order.paymentmethod-show","1");
								bag.set("s.order.paymentmethod-pricevalue",priceEx);
								bag.set("s.order.paymentmethod-price",basket.format(priceEx));
								bag.set("s.order.paymentmethod-vat-pricevalue",""+priceEx*0.01*pvat);
								bag.set("s.order.paymentmethod-vat-price",basket.format(priceEx*0.01*pvat));
								if(getVatState()==0&&pvat>0)price+=pvat*0.01*price;
								bag.set("s.order.inc-vat-paymentmethod-pricevalue",price);
								bag.set("s.order.inc-vat-paymentmethod-price",basket.format(price));
							}
							else bag.set("s.order.paymentmethod-show","0");
						}
						if(requireIssuer(val)){
							var c=f["issuer"+val],i=0,val=0;
							if(c){
								if(c.selectedIndex>0)val=c.value;
								if(_i(val)>0){
									bag.set("s.order.issuer_id",val);
									for(;i<__il.length;i++)if(__il[i][0]==val){
										bag.set("s.order.issuer_name",__il[i][1]);
										b=true;
										break;
									}
								}
								if(!b){
									c.focus();
									alert(m("issuer.validate"));
								}
							}else {
								setNextViewType(44);
								b=true;
							}
						}else b=true;
					}else alert(m("msgSelect"));
				}
			}
			return b
		};
		me.footer=function(bag){
			getDefaultBusyMessage();
			(new OrderInterface()).insert("all");
		};
	}
	else if(vt==vt_ISSUER){
		me.header=function(bag){
			var ship=new ShippingList();
			if(ship.enabled&&!ship.direct)setNextViewType(vt_APPROVAL);
			else setNextViewType(vt_ORDER);
			return ''
		};
		me.validate=function(bag,v){
			var f=getData(),b=false;
			if(f){
				var ctl=f["issuer"],i=0,val=0;
				if(ctl!=null){
					if(ctl.selectedIndex>0)val=ctl.options[ctl.selectedIndex].value;
					if(_i(val)>0){
						bag.set("s.order.issuer_id",ctl.value);
						var issuer=new Issuers();
						while(issuer.next())if(issuer.getId()==val){
							bag.set("s.order.issuer_name",issuer.getName());
							break;
						}
						b=true;
					}
					if(!b)alert(m("issuer.validate"));
				}
			}
			return b;
		};
		me.footer=function(bag){
			getDefaultBusyMessage();
			(new OrderInterface()).insert("all");
		};
	}
	
	else if(vt==vt_APPROVAL){
		me.validate=function(bag,v){
			saveVatList();
			return true;
		};
		me.header=function(bag){
			self.__options=new OptionsEx();
			setNextViewType(vt_ORDER);
			
			if(self.__basket){
				var pvat=getCalcVat(getPaymentVat());
				if(pvat!=0){
					var pay=new PaymentMethod();
					if(pay.extended&&pay.select(bag.get("s.order.paymentmethod"))&&pay.getCharge()){
						__basket.VAT.increment(pvat,bag.getNum("s.order.paymentmethod-pricevalue"))
					}
				}
			}
			
			
			return '';
		};
		me.footer=function(bag){
			getDefaultBusyMessage();
			(new OrderInterface()).insert("all");
		};
		me.pageload=function(){
			if(self.CheckProductStock)new CheckProductStock(false);	
		};
	}
}

function saveVatList(){
	dalert("start saving the VAT list");
	if(__basket==null)return;
	var line=0,b=false,sec="s.exVAT.",vat=__basket.VAT,valVal;
	__b.set("s.exentedVAT",0);
	__b.remove("s","exVAT");
	vat.reset();
	dalert("saving the VAT list");
	while(vat.next()){
		dalert("key "+vat.key() +" val:"+vat.value());
        if(vat.key()!=0&&vat.value()!=0){
            if(!b)b=__b.set("s.exentedVAT",1),true;
            __b.set(sec+"percentage",vat.key(),line);
            __b.set(sec+"amount",__basket.format(vat.value()),line);
            valVal=vat.key()*0.01*vat.value();
            __b.set(sec+"amount-inc-vat",__basket.format(vat.value()+valVal),line);
            __b.set(sec+"subTotal",__basket.format(valVal),line++);
        }
	}
}

function showDeliveryFields(n){
	var e=getElementOnId("delivery_fields");
	if(e!=null)e.className=(n)?"show":"hide";
}

function pageload(){return (new CustomPage()).pageload(__b)}
function header(bag){return (new CustomPage()).header(bag)}
function footer(bag){return (new CustomPage()).footer(bag)}
function validate(bag,val){return (new CustomPage()).validate(bag,val)}

function ViewPartOrderPage(){
	var me=this,_selItem=-1,_selCtl="",_selLbl="";
	me.description=getDescription(false);
	me.hasSelectionFields=function(){
		var b=false;
		for(var i=1;i<getNrOfFields();i++)if(containsSelection(i)){
			b=true;
			break;
		}
		return b
	};
	me.getSelectionCtl=function(i){
		if(i!=_selItem)compose(i);
		return _selCtl;
	};
	me.getSelectionLabel=function(i){
		if(i!=_selItem)compose(i);
		return _selLbl;
	};
	
	function compose(i){
		_selCtl="";
		_selLbl=fieldLabel(i)+':';
		var sep='',n=0,ds=me.description.split(","),sel="";
		desp="";
		for(;n<ds.length;n++)if((ds[n].indexOf(_selLbl)!=0)&&(!myIsEmpty(ds[n]))){
			desp+=sep+ds[n];
			sep=','
		}else sel=ds[n].split(":")[1];
		_selCtl+='<select name=selection'+i+' onkeypress="JavaScript:if(event.keyCode==13){nextPage();return false;}";>';
		_selCtl+='<option>'+m("select")+'</option>';
		for(n=0,v=fieldPlain(i).split(";");n<v.length;n++)if(v[n]!="")_selCtl+='<option '+((sel==v[n])?'selected':'')+' value="'+v[n]+'">'+v[n]+'</option>';
		_selCtl+='</select>';
		_selItem=i;
	}
} 
function doOptionExclude(n,l){
	var i=0,b=false;
	if(l!=null)for(;!b&&i<l.length;i++)if(l[i]==n)b=true;
	return b;
}


function getDefaultBusyMessage(){
	w('<table align=center><tr><td id="submitmessage" class="hide" colspan="2"><b>'+m("msgProc")+'</b></td></tr></table>');
	w('<table id="submitmessageTD" style="width:400px;" class="hide" align=center class=border cellspacing=0 cellpadding=2><tr><td align=center class=mediumBold><br><p><img src="/views/loading.gif" border=0></p>'+m("msgProcTD")+'<br><br></td></tr></table>');
}

function isEmpty(s){return myIsEmpty(s)}
function myIsEmpty(s){
	if(s!='')s=s.replace(/^\s+|\s+$|&nbsp;|&#160;/gi,'');
	return s==''
}
function Ajax(async,ses,cky){
	if(async==null)async=true;
	if(ses==null)ses=true;
	if(cky==null)cky=true;
	var me=this,req=null,callback=null;
	function val(f,i){
		var v=f[i].value;
		if(v!=null&&v!="")v=v.replace("+","%2b");
		return v
	}
	me.request=function(cb,type){
		var name,qs,q=new QueryString(),f=getData(),i=0,l,argl=me.request.arguments,activex=null;
		if(cb&&f){
			l=f.length;
			for(;i<l;i++){
				name=f[i].name;
				if(!ses&&name=="s")continue;
				if(!cky&&name=="c")continue;
				q.set(name,val(f,i));
			}
			l=argl.length;
			for(i=2;i<l;i+=2)q.set(argl[i],argl[i+1]);
			q.set('type',type);
			q.set('aid',getAID(1));
			qs=q.getQueryString();
			callback=cb;
			if(window.XMLHttpRequest)req=new XMLHttpRequest();
		    else if(window.ActiveXObject){
		        activex="Microsoft.XMLHTTP";
		        req=new ActiveXObject("Msxml2.XMLHTTP");
		        if(!req)req=new ActiveXObject(activex);
		    }
		    if(req){
		        if(async)req.onreadystatechange=processReqChange;
		        if(hasNoFrames())req.open('POST',getNewUri("rpc","")+"?jid="+(new Date()).getTime(),async);
	            else req.open('POST',"/servlets/ClientAJAX?jid="+(new Date()).getTime(),async);
				req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				req.send(qs);
				if(!async)processReqChange();
		    }else callback(null);
		}
	};

	function processReqChange(){
    	if(req.readyState==4){
	        if(req.status==200){
				var doc=req.responseXML.documentElement;
				//dalert(req.responseText);
				if(!doc){
					var xmlTxt=req.responseText;
					if(typeof DOMParser!="undefined")doc=(new DOMParser()).parseFromString(xmlTxt,"text/xml");
					else if(typeof ActiveXObject!="undefined"){
						doc=new ActiveXObject("Microsoft.XMLDOM");
						if(doc){
							doc.async=false;
							doc.loadXML(xmlTxt);
						}
					}
					if(doc)doc=doc.documentElement;
				}
				if(doc)callback(doc);
			}else callback(null);
			done=true;
        }
    }
}

/** remote access **/

function refreshProduct(){
	c=getElementOnId("myshp-product");
	self.innerData="";
	self.w=function(s){self.innerData+=s};
	displayProduct();
	if(c)c.innerHTML=self.innerData;
}

function refreshReleadtedProduct(){_rel.increment()}

function refreshReladtedProductInner(){_rel.redraw()}

function setRaw(n,v){
	if(v!=null){
		n=_i(n);
		if(__rowData&&n<__rowData.length)__rowData[n]=v;
	}
	else{
		setCtlVal("_oid",_i(n[0]+1));
		_d[0]=n;
		__rowData=n;
		__activeRow=0;
	}
}
function getRaw(){return _activeRow}

var _relData=null;
function getRelatedData(){return _relData}

function Related(){
	var me=this,buf=[],lst,flds=[];
	me.reset=function(){
		me.count=0;
		me.index=0;
		me.active=0;
		lst=[];
	};
	me.clear=function(){
		lst=null;
		var c=getElementOnId("myshp-related");
		if(c)c.innerHTML="";
		buf=[];
		self._stc=null;
		flds=[];
		if(_relData)_relData.clear();
	};
	me.append=function(){for(var i=0,p=me.append.arguments,n=p.length;i<n;i++)buf.push(p[i])};
	me.toString=function(s){return buf.join("")};
	me.add=function(v){lst[lst.length]=v};
	me.enabled=function(){return lst!=null}
	me.increment=function(){
		me.count++;
		me.active=me.count;
	};
	me.hasNext=function(){return(lst!=null&&me.index<lst.length)};
	me.next=function(){return lst[me.index++]};
	me.isFirst=function(){return me.index==0};
	me.redraw=function(){
		var c=getElementOnId("myshp-related");
		if(c){
			self.innerData="";
			self.w=function(s){self.innerData+=s};
			displayReleated();
			c.innerHTML=self.innerData;
		}
	};
	me.setStock=function(v){
		self._stc=[];
		_stc[__rowData[0]]=v;
	};
	me.fldAdd=function(n){
		for(var i=1;i<_m.length;i++)if(_m[i][0]==n){
			flds[i]=1;
			break;
		}
	};
	me.show=function(i){return flds[i]}
	me.reset();
	me.init=function(){
		if(self.RelatedData&&self._stc){
			var i=0,d=new RelatedData(),l=d.count();
			for(;i<l;i++)_stc[d.getOid(i)]=d.getStock(getCID(),i);
		}
	};
	me.dataLoaded=false;
}
var _rel=new Related();

function RelatedDataTemplate(duplicate){
	var me=this,_d=[],_cid=[],_meta=[],_set=[],_stock=[];
	
	me.set=function(d,n,stock){
		if(n==null)n=_rel.active;
		_d[n]=d
		_stock[n]=stock;
	};
	me.get=function(n){
		var v="",d=_d[_rel.active];
		if(n==null)v=d;
		else if(n>=0&&n<d.length)v=d[n];
		return v;
	};
	me.setCid=function(i,cid){_cid[i]=cid};
	me.setMeta=function(cid,meta){_meta[cid]=meta};
	me.setSettings=function(cid,set){_set[cid]=set};
	me.setStock=function(v){_stock[_i(_rel.active)]=v};
	me.getStock=function(){return _stock[_i(_rel.active)]};
	
	me.show=function(i){return _fs[__rowData[0]+1].active(i)};
	me.count=function(){return _d.length};
	me.select=function(i){
		__k2i=[];
		__rowData=_d[i];
		if(_cid.length>0&&_meta[_cid[i]]){
			setCtlVal('_cid',_cid[i]);
			_m=_meta[_cid[i]]();
			_c=_set[_cid[i]]()
		}
	}; 
	me.clear=function(){_d=[];_cid=[];_meta=[];_set=[];_stock=[]};
	
	if(duplicate==true){
		/*
		 * Duplicate the related products.
		 */
		if(!_rel.dataLoaded&&self.RelatedData){
			_rel.dataLoaded=true;
			for(var data,d=new RelatedData(),i=0,l=d.count();i<l;i++)me.set(d.get(i),i,d.getStock(getCID(),i));
		}
	};
}

/*
 * Load the next related product or show the product list if the last is loaded.
 */
function nextRelated(){
	if(_rel.enabled()){
		if(_rel.hasNext())new Remote().request(this.response2,"catalog_item_data","_oid",_rel.next());
		else _rel.redraw();
	}
}

/*
 * Field selection base class, used to create on the fly field 
 * selection objects.
 */
function FieldSelection(){
	var me=this,fld=[],fldsel=[];
	me.set=function(col,lst){fld[col]=lst};
	me.setActive=function(col,v){fldsel[col]=v};
	me.get=function(i){return fld[i]};
	me.active=function(i){return fldsel[i]};
}

function parseDocument(doc,rel){
	var index=0,rows=doc.getElementsByTagName('row'),type,done=[];
	for(;index<rows.length;index++){
		row=rows[index];
		type=row.getAttribute("type")
		if(!done[type]&&type=="catalog"){
	 		done[type]=true;
			var cols=row.getElementsByTagName('col'),s="",v,item=[],l=cols.length,c;
			item[0]=row.getAttribute("number");
			for(var i=0;i<l;i++){
				v=cols[i].firstChild.nodeValue;
				if(v)item[i+1]=v;
				else item[i+1]="";
			}
			if(_relData==null){
				_relData=new RelatedDataTemplate();
			}
			if(!rel){
				_relData.set(item);
				_relData.setCid(item[0],getCID());
			}
			else setRaw(item);
		}
		else if(!done[type]&&type=="catalog_replace"){
	 		done[type]=true;
			var cols=row.getElementsByTagName('col'),l=cols.length,n,c,i=0;
			for(;i<l;i++){
				c=cols[i];
				n=c.getAttribute("number");
				v=c.firstChild.nodeValue;
				if(v&&v!=''&&v!='*'){
					if(n){
						if(rel)setRaw(n,v);
						else _relData.get()[n]=v;
					}
					else{
						n=c.getAttribute("name");
						if(n&&n=="stock"){
							if(rel)_rel.setStock(v);
							else _relData.setStock(v);
						}
					}
				}
			}
		}
		else if(type=="catalog_selection"){
			if(this.selection)selection.reset();
			var cols=row.getElementsByTagName('col'),l=cols.length,col,i=0,opts,optsl,opti,opt,oid=_i(row.getAttribute("number"))+1;
			var info=new FieldSelection();
			_fs[oid]=info;
			for(;i<l;i++){
				col=cols[i];
				colNr=cols[i].getAttribute("number");
				opts=cols[i].getElementsByTagName('option');
				optsl=opts.length;
				var lst=[],sel="";
				for(opti=0;opti<optsl;opti++){
					opt=opts[opti];
					lst[opti]=opt.firstChild.nodeValue;
					if(sel==""&&opt.getAttribute("selected")){
						sel=opt.getAttribute("inline");
						if(sel=="")sel=lst[opti];
					}
				}
				lst[optsl]="";
				info.set(colNr,lst);
				info.setActive(colNr,sel);
			}
		}
		else if(rel&&type=="catalog_related"){
			var cols=row.getElementsByTagName('col'),l=cols.length,i=0;
			if(l>0){
				_rel.reset();
				for(;i<l;i++)_rel.add(cols[i].firstChild.nodeValue);
			}
		}
		else if(!done[type]&&type=="catalog_related_fields"){
			done[type]=true;
			var cols=row.getElementsByTagName('col');
			if(cols)for(var l=cols.length,i=0;i<l;i++)_rel.fldAdd(cols[i].firstChild.nodeValue);
		}
		/* order on product id */
		else if(!done[type]&&type=="product_oid"){
			done[type]=true;
			var cols=row.getElementsByTagName('col'),l,i=0,p;
			if(cols){
				l=cols.length;
				p=self.productInfo=new HashMap();
				p.set("cid",getCID());
				for(;i<l;i++)p.set(cols[i].getAttribute("name"),cols[i].firstChild.nodeValue);
			}
		}
	}
}

/* order on product id */

function keyPressProductId(e){
	if(!e)e=window.event;
	var k=e.keyCode;
	if(k==13)orderOnProductId()
	return (k!=13)
}
/* order page quantity */
function keyPressOrderPage(e,ctl){
	var b=true;
	if(!e)e=window.event;
	if(e.keyCode==13){
		nextPage();
		b=false
	}
	return b;
}
function orderOnProductId(){
	var f=getData(),fld="_productid",qfld="_quantity_on_id",cq;
	if(f&&f[fld]){
		cq=f[qfld];
		new Remote(false).request(self.parseDocument,"product_id2oid",fld,f[fld].value,qfld,((cq)?cq.value:"1"));
		if(self.productInfo){
			var p=self.productInfo,oid=p.get("oid");
			if(oid!=""&&oid!=-1)showPopup(oid,p.get("cid"),null,null,1,p.get("popupMode"),p.get("quantity"));
			else alert(m("notfound"));
		}
	}
}


function response3(doc){
	if(_relData==null)_relData=new RelatedDataTemplate(true);
	parseDocument(doc,false);
	refreshReladtedProductInner();
}

function Remote(async,ses,cky){
	if(async==null)async=true;
	if(ses==null)ses=true;
	if(cky==null)cky=true;
	var me=this,req=null,callback=null;
	function val(f,i){
		var v=f[i].value;
		if(v!=null&&v!="")v=v.replace("+","%2b");
		return v
	}
	me.request=function(cb,type){
		var name,qs,q=new QueryString(),f=getData(),i=0,l,argl=me.request.arguments,activex=null;
		if(cb&&f){
			l=f.length;
			for(;i<l;i++){
				name=f[i].name;
				if(!ses&&name=="s")continue;
				if(!cky&&name=="c")continue;
				q.set(name,val(f,i));
			}
			l=argl.length;
			for(i=2;i<l;i+=2)q.set(argl[i],argl[i+1]);
			q.set('type',type);
			q.set('aid',getAID(1));
			qs=q.getQueryString();
			callback=cb;
			if(window.XMLHttpRequest)req=new XMLHttpRequest();
		    else if(window.ActiveXObject){
		        activex="Microsoft.XMLHTTP";
		        req=new ActiveXObject("Msxml2.XMLHTTP");
		        if(!req)req=new ActiveXObject(activex);
		    }
		    if(req){
		        if(async)req.onreadystatechange=processReqChange;
		        if(hasNoFrames())req.open('POST',getNewUri("rpc","")+"?jid="+(new Date()).getTime(),async);
	            else req.open('POST',"/servlets/ClientAJAX?jid="+(new Date()).getTime(),async);
				req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				req.send(qs);
				if(!async)processReqChange();
		    }else callback(null);
		}
	};

	function processReqChange(){
    	if(req.readyState==4){
	        if(req.status==200){
				var doc=req.responseXML.documentElement;
				//dalert(req.responseText);
				if(!doc){
					var xmlTxt=req.responseText;
					if(typeof DOMParser!="undefined")doc=(new DOMParser()).parseFromString(xmlTxt,"text/xml");
					else if(typeof ActiveXObject!="undefined"){
						doc=new ActiveXObject("Microsoft.XMLDOM");
						if(doc){
							doc.async=false;
							doc.loadXML(xmlTxt);
						}
					}
					if(doc)doc=doc.documentElement;
				}
				if(doc)callback(doc);
			}else callback(null);
			done=true;
        }
    }
}

function relatedOrder(oid,cid,count){
	if(count!=null)oid=count+"__"+oid;
	if(getQFType()==3)showPopup(oid,cid,null,null,null,1);
	else showPopup(oid,cid,null,null,1);
}

function orderTriggered(extra,oid,count){
	var f=getData(),s=new SB(),sep='';
	if(f){
		if(!oid)oid=getOID();
		if(selection.enabled(oid)){
			if(count!=null&&count!="")count+="_";
			else count="";
			for(var index=0,c,i=1;i<getNrOfFields();i++){
				if(selection.isInlineSelection(oid,i)){
					c=f['_selection'+count+oid+'_'+(i-1)];
					if(c){
						if(c.selectedIndex!=-1)index=c.selectedIndex;
						s.append(sep,fieldLabel(i),":",c.options[index].value);
						sep=';';
					}
				}
			}
			if(extra)extra['_xd']=s.toString();
		}
		c=f["productcount"];
		if(c&&extra)extra['_xc']=c.value;
	}
}

function getStockVal(count){
	var v=-1,n;
	if(count==null){
		n=__rowData[0];
		if(self._stc&&_stc[n]!=null)v=_stc[n];
		if(v==-1)v=fieldRaw(getStockFld());
	}
	else{
		if(_relData){
			_rel.active=count;
			v=_relData.getStock();
			if(v==null)v=_relData.get(getStockFld());
		}
		else{
			/*
			 * Related fields stock value on page entry.
			 */
			 if(self.RelatedData){
				var d=new RelatedData();
				v=d.getStock(getCID(),count);
				if(v==null){
					var data=d.get(count);
					if(getStockFld()<data.length)v=data[getStockFld()];
				}
			 }
		}
	}
	return(v=="*")?-1:v;
}

function SB(){
	var me=this,buf=[];
	me.append=function(){for(var i=0,p=me.append.arguments,n=p.length;i<n;i++)buf.push(p[i])};
	me.toString=function(s){return buf.join("")};
}

function Selection(){
	var me=this,ins=[];
	me.has=function(oid,col){return self._fs&&_fs[oid]&&_fs[oid].get(--col)};
	me.get=function(oid,col,first){
		if(first==null)first=false;
		var sel=_fs[oid].get(--col);
		if(first)sel=sel[0];
		else if(sel.length<3&&sel[0].indexOf(';')!=-1){
			sel=sel[0].split(';');
			sel[sel.length]="";
			if(!ins[oid])ins[oid]=[];
			ins[oid][col]=true;
		}
		return sel
	};
	me.active=function(oid,col){return _fs[oid].active(--col)};
	me.enabled=function(oid){return self._fs&&_fs[oid]};
	me.isInlineSelection=function(oid,col){return(ins[oid]&&ins[oid][--col])?ins[oid][col]:false};
	me.reset=function(oid){ins[oid]=[]}; 
}
var selection=new Selection();

function _selectProduct(ctl,i,oid,callback,count){
	
}
function selectProductRel(ctl,i,oid,count,cid){
	_rel.active=count;
	var ri=new RelatedData();
	ri.select(count);
	loadRelatedSettings();	
	if(!selection.isInlineSelection(oid,i)){
		var n=(count=="")?"":count+"_";
		for(var f=getData(),c;i<getNrOfFields();i++){
			c=f['_selection'+n+oid+'_'+i];
			if(c!=null)c.selectedIndex=-1;
		}
		setCtlVal("_oid",oid);
		setCtlVal("_cid",cid);
		new Remote().request(self.response3,"catalog_item_data","_oid",oid,"counter",count,"_cid",cid);
	}
}
function getSameLineOptions(options,type,exclude){
	var s='';
	while(options.hasNext()){
		var o=options.next();
		if(((type=='billing')?o.isBilling:o.isDelivery)&&!doOptionExclude(o.name,exclude)){
			if(o.layout==1)s+='&nbsp;'+options.getValue(o.name,type);
			else{
				options.prev();
				break;
			}
		}
	}
	return s;
}

function getCustomerFldVal(n,dn,dl){
	if(dl&&__b.get("c.adr.deliveryaddress")=='1')n=dn;
	var opt=new OptionsEx(),o=opt.get(n),v="";
	if(o){
		var req="",s="",bn,n=o.name,lb;
		if((!dl&&o.isBilling)||(dl&&o.isDelivery)){
			bn=opt.getNameBag(n);
			lb=opt.getLabel(n);
			if(dl)v=__b.get("c.adr.deliver."+bn)
			else if(opt.isAddressOnly(n))v=__b.get("c.adr."+bn);
			else v=__b.get("c.adr.billing."+bn);
			if(n==18||n==118){
				var cl=new countrySelection();
				if(v=="")v=getLanguage();
				v=cl.get(v);
			}
		}
	}
}


