


function Teaser_D(cont, vobj, contr) {

	var self = this;

	var contentArray = cont;
	var viewObj = vobj;

	var controller = contr;

	var itemWidth = 410;
	var itemHeight = 244;

	var items = Array();
	var lastShowIndex = 2;

        var currentIndex = 0;
        var objTemp = null;


	var detailDiv = null;
	var detailDivContent = null;
	var contId = null;

	var iterRichtung = true;

	var dartLeft = null;
	var dartRight = null;

	var viewType = controller.BIG_VIEW;

	var detailItem = null;
	var detailIsShow = false;

        var inMove = false;

	this.init = function() {
		contId = Math.round( Math.random()*100000000000 );

		//viewObj.hide();
		viewObj.style.backgroundImage = "url('"+contentArray[1]+"')";

		detailDiv = document.createElement("div");
		var id = document.createAttribute("id");
		id.nodeValue = "details_"+contId;
		detailDiv.setAttributeNode(id);
		viewObj.appendChild(detailDiv);
		detailDiv.className = "portraiDetails";
		new Effect.Opacity(detailDiv, {from: 1, to: 0, duration: 0});
		detailDiv.style.display = "none";

		detailDivContent = document.createElement("div");
		var id = document.createAttribute("id");
		id.nodeValue = "detailsContent_"+contId;
		detailDivContent.setAttributeNode(id);
		viewObj.appendChild(detailDivContent);
		detailDivContent.className = "portraiDetailsContent";
		detailDivContent = $("detailsContent_"+contId);
		detailDivContent.hide();

		dartLeft = document.createElement("div");
		var id = document.createAttribute("id");
		id.nodeValue = "dartLeft_"+contId;
		dartLeft.setAttributeNode(id);
		viewObj.appendChild(dartLeft);
		dartLeft = $("dartLeft_"+contId);
		dartLeft.className = "dartLeft";
		dartLeft.onclick = goLeft;

		dartRight = document.createElement("div");
		var id = document.createAttribute("id");
		id.nodeValue = "dartRight_"+contId;
		dartRight.setAttributeNode(id);
		viewObj.appendChild(dartRight);
		dartRight = $("dartRight_"+contId);
		dartRight.className = "dartRight";
		dartRight.addClassName('dartRight');
		dartRight.onclick = goRight;

		/*
		viewObj.innerHTML = '<div style="position:absolute; top:40px; left:74px; width:189px; height:133px; border:1px solid #ffffff;"></div>'+
							'<div id="debug" style="color:#ffffff; font-size:9px; position:absolute; top:164px; left:750px; width:220px; height:250px; border:1px solid #ffffff;"></div>';
		*/
		this.generateItems();

	}


	this.setViewType = function(v) {
		viewType = v;
	}

	this.getView = function() {
		return viewObj;
	}

       this.getController = function() {
            return controller;
        }
        
	function generateItems() {self.generateItems();}
	this.generateItems = function() {

		if(viewType == controller.SMALL_VIEW) {
			generateLinearItems();
			return;
		}

                if(inMove) return;
                inMove = true;


                var firstLoad = false;
				var leftPos = Array(40, 262);
                var middelPos = Array(265, 180);
                var rightPos = Array(683, 262);

                //Items aufsammeln.
                items = Array();
                for(var i=2; i < cont.length; i++) {
                    items.push(cont[i]);
                }

                if(iterRichtung) currentIndex++;
                else currentIndex--;                   
                                            
                if(currentIndex > items.length) currentIndex = 1;
				if(currentIndex < 0) currentIndex = items.length-1;


                if(objTemp!=null) {
                    if(iterRichtung==true) {
                        objTemp[2].setXY(rightPos[0]+400, rightPos[1]);
                        objTemp[1].setXY(rightPos[0], rightPos[1]);
                        objTemp[1].scallItem(55);
                        objTemp[0].setXY(middelPos[0], middelPos[1]);
                        objTemp[0].scallItem(100);

                        var tmp = Array(null, null, null);
                        tmp[1] = objTemp[0];
                        tmp[2] = objTemp[1];                        
                        objTemp[2].removeItem();
                        objTemp = tmp;
                    }else {
                        objTemp[0].setXY(leftPos[0]-400, leftPos[1]);
                        objTemp[1].setXY(leftPos[0], leftPos[1]);
                        objTemp[1].scallItem(55);
                        objTemp[2].setXY(middelPos[0], middelPos[1]);
                        objTemp[2].scallItem(100);
                        

                        var tmp = Array(null, null, null);
                        tmp[0] = objTemp[1];
                        tmp[1] = objTemp[2];                        
                        objTemp[0].removeItem();
                        objTemp = tmp;
                    }

                }else {
                    objTemp = Array(null, null, null);
                    firstLoad = true;     
                    currentIndex = 3;  
                    iterRichtung = true;       
                }

                //left obj
                ///////////////////////////////
                if(iterRichtung==true || objTemp[0] == null) {
                    var obj_l = new TeaserItemD(this);
                    if(firstLoad) {
                        obj_l.setXY( leftPos[0], leftPos[1] );
                    }else {
                        obj_l.setXY( leftPos[0]-400, leftPos[1] );
                    }
                    obj_l.setSize(itemWidth, itemHeight);
                    obj_l.setIndex(2);
                    obj_l.scallItem(55);
                    if(currentIndex == 0) {
                        obj_l.setContent(items[items.length-1]);
                    }else {
                   	     if(firstLoad==true) { 
                   	     	obj_l.setContent(items[2]);
                   	     }else {
                         	obj_l.setContent(items[currentIndex-1]);
                         }
                    }
                    obj_l.init();
                    if(firstLoad==false) {
                        setTimeout(function() {obj_l.setXY( leftPos[0], leftPos[1] );},200);
                    }
                    objTemp[0] = obj_l;
                }


                //middel obj
                ////////////////////////////////
                if(objTemp[1] == null) {
                    var obj = new TeaserItemD(this);
                    obj.setXY( middelPos[0], middelPos[1] );
                    obj.setSize(itemWidth, itemHeight);
                    obj.setIndex(2);
                    obj.scallItem(100);
                    if(firstLoad==true) { 
                    	obj.setContent(items[1]);
                    }else {
                    	obj.setContent(items[currentIndex]);
                    }
                    obj.init();
                    objTemp[1] = obj;
                }
                
                
                //right obj
                ////////////////////////////////
                if(iterRichtung==false || objTemp[2] == null) {
                    var obj_r = new TeaserItemD(this);
                    if(firstLoad) {
                        obj_r.setXY( rightPos[0], rightPos[1] );
                    }else {
                        obj_r.setXY( rightPos[0]+400, rightPos[1] );
                    }
                    obj_r.setSize(itemWidth, itemHeight);
                    obj_r.setIndex(2);
                    obj_r.scallItem(55);
                    if(currentIndex+1 >= items.length) {
                        obj_r.setContent(items[0]);
                    }else {                        
                    	if(currentIndex-1 == items.length){
                    		obj_r.setContent(items[currentIndex]);
                    	}else {
                    		if(firstLoad==true) { 
                    			obj_r.setContent(items[0]);
                    		}else {
                    			obj_r.setContent(items[currentIndex+1]);
                    		}
                    	}
                    }
                    obj_r.init();
                    if(firstLoad==false) {
                        setTimeout(function() {obj_r.setXY( rightPos[0], rightPos[1] );},200);
                    }
                    objTemp[2] = obj_r;
                }
                

                objTemp[0].setOnClickAction( goRight );
                objTemp[1].setOnClickAction( null );
                objTemp[2].setOnClickAction( goLeft );

                setTimeout(function() {inMove=false;}, 500);

/*
                //alert("start by "+lastShowIndex);
                var lauf = 0;
		for(var i=lastShowIndex;  (iterRichtung)? i < cont.length : i > 1; (iterRichtung)? i++:i--) {
                        //alert(i);
                        lastShowIndex = i;

                        var max = 110;
                        var min = 65;
                        var prozent = Math.floor(Math.random() * (max - min + 1) + min);


                        var obj = new TeaserItemD(this);

                        obj.setXY( (x+(lauf*100)),y);
                        obj.setSize(itemWidth, itemHeight);
                        obj.setContent(cont[i]);
                        obj.setIndex(items.length+1);

                        if(iterRichtung == true) {
                            if(lauf==0) {
                                obj.scallItem(90);
                                obj.setXY(68,y);
                            }
                            else if(lauf == 1) {
                                obj.setXY(363,243);
                            }
                            else if(lauf == 2) {
                                obj.scallItem(90);
                                obj.setXY(674,y);
                            }
                        }else {
                            if(lauf==0) {
                                obj.scallItem(90);
                                obj.setXY(674,y);
                            }
                            else if(lauf == 1) {
                                obj.setXY(363,243);
                            }
                            else if(lauf == 2) {
                                obj.scallItem(90);
                                obj.setXY(68,y);
                            }
                        }
                        
                        if(lauf < 3) {
                            obj.init();
                            items.push(obj);
                        }

			if(i+1 >= cont.length && iterRichtung == true) {
                                //alert("if1");
				lastShowIndex=2;
				i=1;
                                if(lauf==2) break;
			}

			if(i-1 < 2 && iterRichtung == false) {
                                //alert("if2");
				lastShowIndex=cont.length-1;
				i=cont.length;
                                if(lauf==2) break;
			}

                        if(lauf==2)  {
                            if(iterRichtung == true) {
                                lastShowIndex = i+1;
                            }


                            break;
                        }
                        lauf++;
		}*/

                //alert("last set is"+lastShowIndex);
	}


	function generateLinearItems() {

		var x = 300;
		var y = 60;

                
		for(var i=lastShowIndex;  (iterRichtung)? i < cont.length : i > 2; (iterRichtung)? i++:i--) {

			var max = 90;
			var min = 65;
			var prozent = Math.floor(Math.random() * (max - min + 1) + min);

			var obj = new TeaserItemD(self);
			obj.setXY(x,y);
			obj.setSize(itemWidth, itemHeight);
			obj.setContent(cont[i]);
			obj.setShadowImage(controller.getImageDir()+"portrai_shadow.png");
			obj.setIndex(items.length+1);
			obj.scallItem(prozent);

			y=70;
			y = y - getRandom(1,20);

			obj.setXY(x,y);

			obj.init();
                        obj.setSize(72, 72);
                        obj.setSmallView();
			items.push(obj);


			x = (x+obj.getWidth()+20);


			if(i+1 >= cont.length && iterRichtung == true) {
				lastShowIndex=i+1;
				i=2;
			}

			if(i-1 <= 3 && iterRichtung == false) {
				lastShowIndex=2;
				i=cont.length-1;
				//alert("rev");
			}


			if(x > (960-60) ) {
				lastShowIndex = (i+1);
				break;
			}
		}

	}




	function checkPosition(x,y) {

		//Platzhalter Lampe
		if(	x+itemWidth > 74 && x < 263 && y < 173) {
			return false;
		}

		//Platzhalter Stuhl
		if( x+itemWidth > 750 && y+itemHeight > 158) {
			return false;
		}


		for(var i=0; i < items.length; i++) {
			if(x+itemWidth+10 > items[i].getX() && (items[i].getWidth()+items[i].getX())+10 > x) {
				if(y+itemHeight+10 > items[i].getY() && y < items[i].getY()+items[i].getHeight()+10 ) {
					return false;
				}
			}
		}

		return true;
	}


	this.moveOutAll = function() {
		for(var i=0; i < items.length; i++) {
			items[i].outActions();
		}

	}


	this.openDetails = function(itemObj) {

		if(viewType == controller.SMALL_VIEW) {
			window.location.href = itemObj.getContent()[3];
			return;
		}

		if(detailIsShow) {
			this.closeDetails();
			setTimeout(function() {
				self.openDetails(itemObj);
			}, 900);
			return;
		}


		detailIsShow = true;
		detailItem = itemObj;

		for(var i=0; i < items.length; i++) {
			if(  (items[i].getX()+items[i].getWidth())+10 > 328 &&
				  items[i].getX() < (328+332) ) {

				if(items[i].getIndex() != itemObj.getIndex())
					items[i].fadeOut();
			}
		}

		detailDivContent.innerHTML = 	'<h3>'+itemObj.getContent()[1]+'</h3>'+
										'<h4>'+itemObj.getContent()[2]+'</h4>'+
										itemObj.getContent()[4]+'<br/>'+
										'<a href="'+itemObj.getContent()[3]+'">mehr...</a>';





		itemObj.animateInTo(267,103, 180, 230);
		detailDiv.style.display = "block";
		new Effect.Parallel([
								new Effect.Opacity(detailDiv, {from: 0, to: 0.5}),
								new Effect.Appear(detailDivContent)
							], {duration: 0.4}
							);

	}

	this.closeDetails = function() {
		detailItem.animateOut();

		for(var i=0; i < items.length; i++) {
			items[i].fadeIn();
		}

		new Effect.Parallel([
		                     	new Effect.Fade(detailDivContent),
		                     	new Effect.Opacity(detailDiv, {from: 0.5, to: 0})
		                     ], {duration: 0.4}
							);

		setTimeout(function() {detailDiv.style.display = "none";},600);

		detailIsShow = false;
	}


	function removeAllItems() {
		for(var i=0; i < items.length; i++) {
			items[i].removeItem();
		}
		items= Array();
	}


	function goRight() {
		if(detailIsShow) {
			self.closeDetails();
			setTimeout(function() {
				goRight();
			}, 900);
			return;
		}

                if(viewType == controller.SMALL_VIEW) {                    
                    removeAllItems();
                    if(lastShowIndex >= cont.length) lastShowIndex=2;
                }else {
					if(iterRichtung==false) {
						currentIndex = currentIndex +4;
						if(currentIndex>items.length-1) currentIndex = currentIndex-items.length;
					}				
				}


                iterRichtung = true;
		setTimeout(function() {
			generateItems();
		},400);
	}

	function goLeft() {	
		if(detailIsShow) {
			self.closeDetails();
			setTimeout(function() {
				goLeft();
			}, 900);
			return;
		}

				if(viewType == controller.SMALL_VIEW) {                    
				    removeAllItems();
				    if(lastShowIndex <= 2) {
				        //alert("rev by go");
				        lastShowIndex=cont.length-1;
				    }
				}else {
					if(iterRichtung==true) {
						currentIndex = currentIndex -4;
						if(currentIndex<0) {
							currentIndex = items.length - (currentIndex*-1);
						}
					}				
				}

                iterRichtung = false;
		setTimeout(function() {
			generateItems();
		},400 );
	}

        function getRandom( min, max ) {
                if( min > max ) {
                        return( -1 );
                }
                if( min == max ) {
                        return( min );
                }

                return( min + parseInt( Math.random() * ( max-min+1 ) ) );
        }

}
