dojo.declare("LineItemBean", null, {
        constructor: function(painting, technic, width, height,frame,frameid){
                this.painting = painting;
                this.technic = technic;
                this.width = width;
                this.height = height;
                this.frame = frame;
                this.total = 0
                this.framedesc="";   
                this.size = "";
                this.frameprice=0;
                this.frameid=frameid;
                this.amount=1;
                this.frameImage="";
                this.paintingImage="";
        }
});


 dojo.require("dijit.form.NumberSpinner");
 
choosenFrame = "FRAME_6727";


// sets all calculated values to --
resetCalculated = function() {
  priceNodeTotal = dojo.byId("TOTAL");
	priceNodeTotal.innerHTML = "--";
	
	priceNodePainting = dojo.byId("PRICE_PAINTING");
	priceNodePainting.innerHTML = "--";
	
	priceNodeFrame = dojo.byId("PRICE_FRAME");
	priceNodeFrame.innerHTML = "--";
	

}

// handles a click on a frame and notifies main handler
frameClickHandler = function(evt) {
	choosenFrame = this.id;
	markChoosenFrame(this);
	mainHandler();
	dojo.stopEvent(evt);
}




  



// handles a click on the add-to-cart button
addToCartHandler = function(evt) {
  pid = dojo.byId("pid").value;
	width = dojo.byId("W").value
	height = dojo.byId("H").value;
	
	
	
	
	// check if all values are ok, otherwise do not allow adding to cart
	if (!mainHandler()) return;
	

	
	frameno = dojo.byId("frid").value;
	technic = doform.RADIO_TECHNIK;
	

	// check ob bei poster oder kaschierung ein rahmen ausgewählt wurde
	if (choosenFrame != "FRAME_6727" && (technic == "P1" || technic == "P2" || technic == "P3" || technic == "D" || technic == "A")) {
		alert("Poster und Kaschierungen können aus technischen Gründen nicht mit Rahmen bestellt werden.");
		dojo.stopEvent(evt);
		return false;
	} 
	
	
	var vals = new LineItemBean(pid,technic,width,height,null,frameno);
	PaintingFacade.addArtikel(vals,addToCartCallback);

}

addToCartCallback = function(resp) {;
       updateArtikelCounter(null);
       //("Das Bild wurde in den Warenkorb gelegt.");
       document.location="http://www.kunstbilder-galerie.de/app2?service=external/warenkorb";
}

// main handler. gets all data and requests info from the server
mainHandler = function(args) {
	    // get the painting id
	pid = dojo.byId("pid").value;
	width = dojo.byId("W").value
	height = dojo.byId("H").value;
	choosenDim = "w";

	
	if (dojo.byId("RW").checked) {
	    choosenDim = "w";
	     if(!mySpinnerW.isValid()) {
       alert("Breitenangabe ist nicht zulaessig.\nDie Breite darf 30 cm nicht unterschreiten und 100 cm nicht ueberschreiten.");
       resetCalculated();
       return false;
       }; 
  }
  
  if (dojo.byId("RH").checked) {
  choosenDim = "h";
  	     if(!mySpinnerH.isValid()) {
       alert("Hoehenangabe ist nicht zulaessig.\nDie Hoehe darf 30 cm nicht unterschreiten und 100 cm nicht ueberschreiten.");
      resetCalculated();
       return false;
       }
  }
  
	
	if (!mySpinnerW.isInRange() || !mySpinnerH.isInRange()) {
    alert("Groessenangaben sind nicht zulaessig.\nFormate von max. 100 cm bzw. min 30 cm duerfen nicht ueber- bzw. unterschritten werden.");
    return false;
  } 
	
	doform =dojo.formToObject("FORM");
	
	technic = doform.RADIO_TECHNIK;

	width = dojo.byId("W").value
	height = dojo.byId("H").value;

	
	var vals = new LineItemBean(pid,technic,width,height,choosenFrame);
	vals.choosendim = choosenDim;

if(technic != null)	PaintingFacade.getPaintingValues(vals,updateValuesHandler);
	
	return true;
}


markChoosenFrame = function(frame) {

dojo.query("a.frameClick").forEach(
		// remove all borders from the nodes
    function(node,i) {
    img = dojo.query("img",node)[0];
     if (node == frame) {
     dojo.removeClass(img,"NotchoosenFrame");
     dojo.addClass(img,"choosenFrame");
     } else {
     dojo.removeClass(img,"choosenFrame");
     dojo.addClass(img,"NotchoosenFrame");
     }
     
		 
		});
}

// callback method that gets all values from server and updates page
updateValuesHandler = function(resp) {


	priceNodeTotal = dojo.byId("TOTAL");
	priceNodeTotal.innerHTML = resp.total;
	
	priceNodePainting = dojo.byId("PRICE_PAINTING");
	priceNodePainting.innerHTML = resp.price;
	
	priceNodeFrame = dojo.byId("PRICE_FRAME");
	priceNodeFrame.innerHTML = resp.frameprice;
	
  descNodeFrame = dojo.byId("ART_FRAME_DESC");
  descNodeFrame.innerHTML = resp.framedesc;
  	
  framenoNode = dojo.byId("ART_FRAME_NO");
  framenoNode.innerHTML = resp.frame;
	
	technicNode = dojo.byId("ART_TECHNIC");
  technicNode.innerHTML = resp.technic;
    
  formatNode = dojo.byId("PFORMAT");
  formatNode.innerHTML = resp.width + " x " + resp.height + " cm";
  
    
  fridNode = dojo.byId("frid");
 // alert(fridNode);
  fridNode.value = resp.frameid;
	

  if (resp.choosendim=="h")
  mySpinnerW.setValue(resp.width);
  if(resp.choosendim=="w")
  mySpinnerH.setValue(resp.height); 

     	
}

updateArtikelCounter = function(evt) {
  PaintingFacade.getArtikelCount(artikelCounterCallback);

}

artikelCounterCallback = function(resp) {
  counter = dojo.byId("ARTCONT");
  counter.innerHTML = resp;
}



var init = function() {
	
	dojo.connect(dojo.byId("ADD"),"click",add);
	dojo.connect(dojo.byId("UPDATE"),"click",mainHandler);
	dojo.connect(dojo.byId("ADD_TO_CART"),"click",addToCartHandler);
	dojo.connect(dojo.byId("ACTBUTTON"),"click",mainHandler);
	
	dojo.connect(dojo.byId("P1"),"click",mainHandler);
	dojo.connect(dojo.byId("P2"),"click",mainHandler);
	dojo.connect(dojo.byId("P3"),"click",mainHandler);
	dojo.connect(dojo.byId("K1"),"click",mainHandler);
	dojo.connect(dojo.byId("K2"),"click",mainHandler);
	
	if (dojo.byId("V") != null) {
	dojo.connect(dojo.byId("V"),"click",mainHandler);
          }
  if (dojo.byId("D") != null) {
	dojo.connect(dojo.byId("D"),"click",mainHandler);
          }
  if (dojo.byId("A") != null) {
	  dojo.connect(dojo.byId("A"),"click",mainHandler);
  }
  // connect event handler to frames
	dojo.query("a.frameClick").forEach(
		function(node,i) {
		  dojo.connect(node,"onclick",frameClickHandler);
		  
		}
	);
  // set default frame = no framing img
	var fr = dojo.query("#FRAME_6727")[0];
  markChoosenFrame(fr);

  pw = dojo.byId("PREW").value;
  ph = dojo.byId("PREH").value;
    
  maxw = dojo.byId("MAXW").value;
  maxh = dojo.byId("MAXH").value;
                         
         mySpinnerW = new dijit.form.NumberSpinner({
            value: pw,
            smallDelta: 1,
            constraints: {
                min: 30,
                max: 100,
                places: 0
            },
            id: "W",
            style: "width:60px"
        },
        "W");

         mySpinnerH = new dijit.form.NumberSpinner({
            value: ph,
            smallDelta: 1,
            constraints: {
                min: 30,
                max: 100,
                places: 0
            },
            id: "H",
            style: "width:60px"
        },
        "H");
           
      mySpinnerH.setDisabled(true);
      mySpinnerH.setAttribute("readOnly",true);
          
      dojo.connect(dojo.byId("RW"),"click",handlerWRadio);
      dojo.connect(dojo.byId("RH"),"click",handlerHRadio);
                 

      mainHandler();

}



updateH = function(evt) {
  pid = dojo.byId("pid").value;
  width = dojo.byId("W").value;
	PaintingFacade.calculateHeight(pid,width,updateHCallback);
}

updateW = function(evt) {
  pid = dojo.byId("pid").value;
  height = dojo.byId("H").value;
	PaintingFacade.calculateWidth(pid,height,updateWCallback);
}

// callback for getting the Width
updateWCallback = function(resp) {
  mySpinnerW.setValue(resp.width);
}

// callback for getting the Height
updateHCallback = function(resp) {
   mySpinnerH.setValue(resp.height);
}
    
handlerWRadio = function(evt) {
          if (!mySpinnerH.isValid()) {
          mySpinnerH.setValue(ph);
          mySpinnerW.setValue(pw);
          }
          mySpinnerH.setDisabled(true);
          mySpinnerH.setAttribute("readOnly",true);
          mySpinnerW.setDisabled(false);
          mySpinnerW.setAttribute("readOnly",false);
}

handlerHRadio = function(evt) {
          if (!mySpinnerW.isValid()) {
          mySpinnerH.setValue(ph);
          mySpinnerW.setValue(pw);
          }
          mySpinnerW.setDisabled(true);
          mySpinnerW.setAttribute("readOnly",true);
          mySpinnerH.setDisabled(false);
          mySpinnerH.setAttribute("readOnly",false);
}
   


var add = function() {
	PaintingFacade.addArtikel("","",1,1);
	PaintingFacade.getArtikelCount(cartCountListener);
}



dojo.addOnLoad(init);

