
// data object for flash state
function ConfiguratorData(){
	this.brand = null;
	this.year = null;
	this.series = null;
	this.model = null;
	this.brake = null;
	this.family = null;
	this.dimension = null;
	this.finish = null;
	
	this.setData = function(dataObject){
		this.brand = dataObject.brand;	
		this.year = dataObject.year;	
		this.series = dataObject.series;	
		this.model = dataObject.model;	
		this.brake = dataObject.brake;	
		this.family = dataObject.family;	
		this.dimension = dataObject.dimension;	
		this.finish = dataObject.finish;	
	}	
	
	this.getDataFromRequestParams = function(){
		if(getQueryParamValue("brand") 
			&& getQueryParamValue("year") 	
			&& getQueryParamValue("series") 	
			&& getQueryParamValue("model") 	
			&& getQueryParamValue("brake") 	
			&& getQueryParamValue("family") 	
			&& getQueryParamValue("dimension") 	
			&& getQueryParamValue("finish")
			){ 	this.brand     = getQueryParamValue("brand");	
				this.year      = getQueryParamValue("year");	
				this.series    = getQueryParamValue("series");	
				this.model     = getQueryParamValue("model");	
				this.brake     = getQueryParamValue("brake");	
				this.family    = getQueryParamValue("family");	
				this.dimension = getQueryParamValue("dimension");	
				this.finish    = getQueryParamValue("finish");
				
				return true;
			} else {
				return false;	
			}
	};
	
	this.serialize = function(){
		var serial = '';
		var counter=0;
    	for(prop in this){
    		if(typeof this[prop] == 'function') continue;
    		
    		if(this[prop] == null || this[prop] == undefined || this[prop] == 'undefined'){
    			serial += "this."+prop+"=null;";	
    		} else {
    			serial += "this."+prop+"='"+this[prop]+"';";	
    		}
    		counter++;
		}
		return serial;
	} // end serialize function
	
	this.deserialize = function(serial){
		eval(serial);
	}


	this.debug = function(){
		var text = '';
	    for(prop in this){
			if(typeof this[prop] == 'function') continue;
			text += prop+"="+this[prop];	
		}
		alert(text);
	};
}


function Dealer(){
	this.id = null;
	this.name = null;
	this.address = null;
	this.website = null;
	this.contact = null;
	this.phone = null;
	this.fax = null;
	this.email = null;
	this.hours = null;
	this.info = null;
	
	this.serialize = function(){
		var serial = '';
		var counter=0;
    	for(prop in this){
    		if(typeof this[prop] == 'function') continue;
    		
    		if(this[prop] == null || this[prop] == undefined || this[prop] == 'undefined'){
    			serial += "this."+prop+"=null;";	
    		} else {
    			serial += "this."+prop+"='"+this[prop]+"';";	
    		}
    		counter++;
		}
		return serial;
	} // end serialize function
	
	
	this.deserialize = function(serial){
		eval(serial);
	}
	
	
	this.save = function (){
		var serial = this.serialize();
                //var expireDate = 365*24*60*60;
                setCookie('BBS_DEALER',serial, '', '/');
                //setCookie('BBS_DEALER',serial, -1, '/');
	}
	
	this.load = function(){ 
		var serial = getCookieValue('BBS_DEALER');
		if(serial != null && serial != ''){
			this.deserialize(serial); 
		}
		return true;
	}
}


function Order(){
    		this.quantity = 4;
    		this.price = 0;
    		
    		this.brand = null;
    		this.year = null;
    		this.series = null;
    		this.model = null;
    		this.brake = null;
    		
    		this.wheelId = null;
    		this.family = null;
    		this.dimension = null;
    		this.finish = null;
    		
    		this.et = null;
    		this.articleNo = null;
    		
    		this.wheelDetails = null;
    		this.wheelImage = null;
    		
    		//this.priceDetails = null;
    		
    		this.dealer = null;    		
    		
    		this.getTotal = function(){
                 var bruttoPrice = this.price;
                 if(taxValue!=""){
                 bruttoPrice = Number(this.price) + Number((this.price*taxValue)/100);                 
                 }
                 return this.formatCurrency(this.quantity * bruttoPrice); 

    		};		
    		
    		this.formatCurrency = function(amount){
    			amount = String(amount.toFixed(2));
    			return amount.replace(/\./, decimalSeparator);
    			
    		}
    		
    		this.serialize = function(){
				var serial = '';
				var counter=0;
			    	for(prop in this){
			    		if(typeof this[prop] == 'function' || prop == 'dealer') continue;
			    		
			    		if(this[prop] == null || this[prop] == undefined || this[prop] == 'undefined'){
			    			serial += "this."+prop+"=null;";	
			    		} else {
			    			serial += "this."+prop+"='"+this[prop]+"';";	
			    		}
			    		counter++;
					}
					return serial;
				} // end serialize function
				
				
			this.deserialize = function(serial){
				eval(serial);
				this.quantity = Number(this.quantity);
				this.price = Number(this.price);
				if(this.quantity == NaN) this.quantity = 4;
				if(this.price == NaN) this.price = 4;
			}
			
			this.save = function (){
				var serial = this.serialize();
				setCookie('BBS_ORDER',serial,-1);
			}
	
			this.load = function(){ 
				var serial = getCookieValue('BBS_ORDER');
				if(serial != null && serial != ''){
					this.deserialize(serial); 
				}
				return true;
			}
};
    	
var decimalSeparator = ',';
var currency = '';
var summaryLabelCar = '';
var summaryLabelWheel ='';
var etLabel ='';
var locatorPage = '';
var promptWheelSelectionCopy = '';
var promptDealerSelectionCopy = '';
var configuratorLink = '';
var hintText = '';
var sifrFont = null;

var sendingInProgress = false;


/***********************************
* functions of showroom
************************************/
function openRequestNow(orderData){
	dojo.byId("requestNowContainer").style.display="block";
    this.frames['requestNow'].init(orderData);
}
        
function closeRequestNow(){
	dojo.byId("requestNowContainer").style.display="none";
}

function openLocator(){
	var locatorIframe = dojo.byId("locatorIframe");
	if(locatorIframe.src == null || locatorIframe.src.indexOf(locatorPage) == -1){ 
		locatorIframe.src = locatorPage;
	}
	dojo.byId("locatorContainer").style.display="block";
}

function closeLocator(){
	dojo.byId("locatorContainer").style.display="none";
}

function openFullLayer(){
	dojo.byId("fullLayerContainer").style.display="block";
}

function closeFullLayer(){
	dojo.byId("fullLayerContainer").style.display="none";
}

function openRequestNowResultLayer(htmlShown){
	// close other layers, just in case
	//closeFullLayer();
	closeLocator();
	closeRequestNow();
	dojo.byId("requestNowResultContainer").style.display="block";
	dojo.byId("requestNowResultContainer").innerHTML = htmlShown;
	// sifr call, to render headline
	if(typeof sIFR == "function"){
		sIFR.replaceElement(named({sSelector:".sifr", sFlashSrc:sifrFont, sColor:"#FFFFFF", sBgColor:"#000000", sWmode:"transparent"}));
	}
}

function closeRequestNowResultLayer(){
	dojo.byId("requestNowResultContainer").style.display="none";
}

function openConfigurator(){
	// close all other layers, just in case
	closeAllLayers();
	// send message to flash
	dojo.byId('showroom').showConfigurator();
}

function closeAllLayers(){
	//closeFullLayer();
	closeLocator();
	closeRequestNow();
	closeRequestNowResultLayer();	
}

/***********************************
* functions of request now form
************************************/

function setDealerObject(isLayer, dealer){
	setDealer(isLayer, dealer.id, dealer.name, dealer.address, dealer.website, dealer.contact, dealer.phone, dealer.fax, dealer.email, dealer.hours, dealer.info);
}

function setDealer(isLayer, id, name, address, website, contact, phone, fax, email, hours, info){ 
	var dealer = new Dealer();
	dealer.id = id;
	dealer.name = name;
	dealer.address = address;
	dealer.website = website;
	dealer.contact = contact;
	dealer.phone = phone;
	dealer.fax = fax;
	dealer.email = email;
	dealer.hours = hours;
	dealer.info = info;
	dealer.save();
	
	if(isLayer == true){ 
		order.dealer = dealer;
		updateFormDisplay();
		parent.closeLocator();	
	}
}

function resetLabels(){
	var labels = dojo.query('label');
	if( labels.length > 1 ){
		for( var i = 0; i < labels.length; i++ ){
            labels[ i ].style.color = '#cccccc';
        }
	}
	var summaryElement = dojo.byId("summaryLink");
	if(summaryElement != null && typeof summaryElement == 'object'){
		summaryElement.style.color = '#cccccc';
	}
	dojo.byId("dealerAddress").style.color = '#cccccc';
	dojo.byId("marketingLabel_1").style.color = '#cccccc';
	dojo.byId("marketingLabel_2").style.color = '#cccccc';
	dojo.byId("termsLabel").style.color = '#cccccc';
	dojo.byId("commentLabel").style.color = '#ffffff';
	dojo.byId("copyPersonalData").style.color = '#ffffff';
}

function setErrorLabel(labelName){
	var currentLabels = dojo.query( 'label[for~=' + labelName + ']' );
    for( var i = 0; i < currentLabels.length; i++ ){
      currentLabels[ i ].style.color = '#cc0000';
    }
}

function getSummary(){
	var copy = summaryLabelCar+'<br />';
	copy += getCarSummary();
	
	copy += '<br /><br />'+summaryLabelWheel+'<br />';
	copy += getWheelSummary()+'<br /><br />';
	copy += hintText+'<br />';
	copy += configuratorLink;
	return copy;
}

function getCarSummary(){
	var copy = order.brand+' > ';
	if(order.year != null && order.year > 0 && order.year != '') copy += order.year+' > ';
	if(order.series!= null && order.series> 0 && order.series!= '') copy += order.series+' > ';
	copy += order.model;
	if(order.brake != null && order.brake != 'BASE' && order.brake != '') copy += ' > '+order.brake;
	return copy;
}
function getWheelSummary(){
	var copy = order.family+' > ';
	copy += order.dimension+' > ';
	copy += etLabel+" "+order.et+' > ';
	copy += order.finish+'<br />';
	copy += order.wheelDetails;
	return copy;
}



function changeQuantitiy(delta){
	order.quantity += delta;
    if(order.quantity < 1) order.quantity = 1;
    dojo.byId("quantityAmount").innerHTML = order.quantity;
    if(order.articleNo != null && order.articleNo != ''){
    	dojo.byId("quantityPrice").innerHTML  = order.getTotal()+" "+currency;
    } else {
		dojo.byId("quantityPrice").innerHTML  = '-'
	}
	// remember setting
	order.save();
}

function updateFormDisplay(){
	if(order.articleNo != null && order.articleNo != ''){
		dojo.byId("summary").innerHTML = getSummary();
		dojo.byId("quantityPrice").innerHTML  = order.getTotal()+" "+currency;
	} else {
		dojo.byId("summary").innerHTML = promptWheelSelectionCopy;
		dojo.byId("quantityPrice").innerHTML  = '-'
	}
	//dojo.byId("pricedetail").innerHTML = order.priceDetails;
	dojo.byId("quantityAmount").innerHTML = order.quantity;
	
	if(order.dealer != null && order.dealer.id != null && order.dealer.id != ''){
		dojo.byId("dealerAddress").innerHTML = order.dealer.address;
		dojo.byId("dealerName").innerHTML = order.dealer.name;
	} else {
		dojo.byId("dealerName").innerHTML = promptDealerSelectionCopy;
	}
	
}

function setWheelImage(movie){
	if(movie != null && movie != ''){
		dojo.byId("wheelPreview").className = "wheelPreviewMirror";
	    var so = new SWFObject(movie, "wheelPreviewFlash", "92", "92", "9.0.0", "#000000");
	    so.addParam("quality","high");
	    so.addParam("wmode", "transparent");
	    so.write("wheelPreview");	
	} else {
		removeWheelImage();
	}
}

function removeWheelImage(){
 	var preview = dojo.byId("wheelPreview")
	preview.className = "wheelPreview";
	preview.innerHTML = '';
	
}

    	
function init(orderData){
	if(orderData != null){ 	
		// preset stuff from cookie
		order.load();	
		// got data from flash, set it	
		order.price = orderData.price;
	    order.brand = orderData.brand;
	    order.year = orderData.year;
	    order.series = orderData.series;
	    order.model = orderData.model;
	    order.brake = orderData.brake;
	    order.wheelId = orderData.wheelId;
	    order.family = orderData.family;
	    order.dimension = orderData.dimension;
	    order.et = orderData.et;
	    order.finish = orderData.finish;
	    order.articleNo = orderData.articleNo;
	    order.wheelDetails = orderData.wheelDetails;
	    order.wheelImage = orderData.wheelImage;
	   // order.priceDetails = orderData.priceDetails;
	    
	    order.save();
	} else {
		// no order data from flash, try to get last settings from cookie
		order.load();	
	}
	
	// try to get dealer from cookie
	var dealer = new Dealer();
	dealer.load();
	if(dealer.id != null){
		order.dealer = dealer;	
	}
	
	if(order.articleNo != null && order.articleNo != ''){
		setWheelImage(order.wheelImage);
	} else {
		removeWheelImage();	
	}
	resetLabels();
	updateFormDisplay();
}

function sendRequest(){
	if(!sendingInProgress){
		sendingInProgress = true;
		
		// set order and dealer data into form
		var form = document.forms['requestNow'];
		
		form.elements['price'].value = order.price;
		form.elements['vehicle.brand'].value = order.brand;
		form.elements['vehicle.year'].value  = order.year;
		form.elements['vehicle.series'].value = order.series;
		form.elements['vehicle.model'].value = order.model;
		form.elements['vehicle.brake'].value = order.brake;
		form.elements['requestData.wheelId'].value = order.wheelId;
		form.elements['requestData.articleNo'].value = order.articleNo;
		form.elements['requestData.finish'].value = order.finish;
		
		form.elements['requestData.quantity'].value = order.quantity;
		
		if(order.dealer != null){
			form.elements['requestData.dealerNo'].value = order.dealer.id;
			form.elements['dealer.name'].value = order.dealer.name;
			form.elements['dealer.address'].value = order.dealer.address;
			form.elements['dealer.website'].value = order.dealer.website;
			form.elements['dealer.contact'].value = order.dealer.contact;
			form.elements['dealer.phone'].value = order.dealer.phone;
			form.elements['dealer.fax'].value = order.dealer.fax;
			form.elements['dealer.email'].value = order.dealer.email;
			form.elements['dealer.hours'].value = order.dealer.hours;
			form.elements['dealer.info'].value = order.dealer.info;
		}
		
		form.elements['wheelSummary'].value = getWheelSummary();
		form.elements['carSummary'].value = getCarSummary();
		
		resetLabels();
		
		// do request
		dojo.xhrPost(new orderRequest());	
	}
}