var store={
	'ajaxUrl':'/lib/php/ajax.php'
};
window.addEvent('domready', function(){
	initToolTips();
	window.colorSelector=new colorSelector();
});

function initToolTips(){
	$$('.tooltip').each(function(element,index) {
		if(element.title){
			var content = element.get('title').split('::');
			element.store('tip:title', content[0]);
			element.store('tip:text', content[1]);
		}
	});
	
	//create the tooltips
	var tipz = new Tips('.tooltip',{
		className: 'outer_tooltip  black shadow',
		hideDelay: 50,
		showDelay: 50
	});
}

/**
 * @name colorSelector
 * @class
 * @description
 * Im window-Namensraum registrierte Classe für den Zugriff auf eine colorSelect Classe
 * durch Angabe der ProduktID
 */
var colorSelector=new Class({
	/**
	 * @name colorSelector.initialize
	 * @function
	 * @description
	 * Construktor der colorSelector Classe. Es werden keine Parameter erwartet
	 */
	initialize: function(){
		/**
		 * Array mit Objekteinträgen in der Form
		 * { 
		 * 		'id': {Integer}, 
		 * 		'object': {Class} colorSelect 
		 * }
		 * @type {Array}
		 */
		this.produktIDs=[];
	},
	/**
	 * @name colorSelector.getColorSelect
	 * @function
	 * @param {Integer} produktID Die ProduktID für den Farbwähler
	 * @return {Class} colorSelect
	 * @description
	 * Durchläuft das Array colorSelector.produktIDs und gibt das Classen-Objekt
	 * für den colorSelect zurück falls vorhanden. Ansonsten wird ein neues Objekt erstellt 
	 */
	getColorSelect: function(produktID){		
		var cs=null;
		this.produktIDs.each(function(item){
			if(item.id==produktID){
				cs=item.object;
			}
		});
		if(cs==null){
			cs=new colorSelect(produktID);
			this.produktIDs.push({'id':produktID,'object':cs});
			devLog('colorSelector ProduktID ' + produktID + ' noch nicht in Cache-Array vorhanden');
		}else{
			devLog('colorSelector ProduktID ' + produktID + ' bereits in Cache-Array vorhanden');
		}
		return cs;
	},
	/**
	 * @name colorSelector.select
	 * @function
	 * @param {Integer} produktID Die ProduktID für den Farbwähler
	 * @see colorSelect.select
	 * @description
	 * Ausführen der open Methode der colorSelect Classe
	 */
	select: function(produktID){
		var cs=this.getColorSelect(produktID);
		cs.open();
	},
	/**
	 * @name colorSelector.getColorSelect
	 * @function
	 * @param {Integer} produktID Die ProduktID für den Farbwähler
	 * @return {Class} colorSelect
	 * @see colorSelect.submit
	 * @description
	 * Ausführen der submit Methode der colorSelect Classe
	 */
	submit: function(produktID){
		var cs=this.getColorSelect(produktID);
		cs.submit();
	},
	/**
	 * @name colorSelector.getColorSelect
	 * @function
	 * @param {Integer} produktID Die ProduktID für den Farbwähler
	 * @return {Class} colorSelect
	 * @see colorSelect.close
	 * @description
	 * Ausführen der close Methode der colorSelect Classe
	 */
	close: function(produktID){
		var cs=this.getColorSelect(produktID);
		cs.close();
	}
});

/**
 * @name colorSelect
 * @class
 * @description
 * Klasse für die Anzeige und zum Speichern der Farbauswahl für ein Produkt
 * 
 */
var colorSelect=new Class({
	/**
	 * @name colorSelect.initialize
	 * @function
	 * @param {Integer} produktID Die ProduktID für die Farbauswahl
	 * @description
	 * Construktor der colorSelect Classe.
	 */	
	initialize: function(produktID){
		this.produktID=produktID;
		devLog('Instanziere colorSelect mit ProduktID ' + produktID);
		this.popup=null;
	},
	/**
	 * @name colorSelect.open
	 * @function
	 * @description
	 * Funktion zur Anzeige der Farbauswahl, es wird die Ajax Funktion colorSelect aufgerufen.
	 * 
	 */		
	open: function(){
		devLog('colorSelect.open');
		var thisClass=this;
		var a=new Request.JSON({url:store.ajaxUrl,onSuccess:function(response){
			if(response.status=='OK'){
				var infoObject=Object.merge(response.info,{'produktID':thisClass.produktID,'farben':''});				
				response.data.each(function(color){
					if(color.pos.toInt().even()==true){
						color.tdclass='color2';
					}else{
						color.tdclass='grey';
					}
					infoObject.farben+=getTemplate('colorSelectRow').substitute(color);
				});
				devLog('v2 open colorSelect');
				thisClass.popup=new inlinePopup({
					'template':'colorSelect',
					'contentID':'colorSelect',
					'elementClass':'popup black shadow',
					'transID':'trans_background'					
				});				
				thisClass.popup.open(infoObject);
				/**
				 * Die Positionierung muß etwas hinausgezögert werden um 
				 * eine korrekte Messung durchführen zu können.
				 */
				(function(){
					thisClass.popup.resize();
					thisClass.popup.position(); 
				}).delay(100);
			}else{
				devLog(response.status);
			}
		}}).send('fn=colorSelect&produktID='+this.produktID);
	},
	/**
	 * @name colorSelect.submit
	 * @function
	 * @description
	 * Funktion zum Speichern der ausgewählten Farbauswahl, es wird die Ajax Funktion colorSelectSubmit aufgerufen.
	 * Die Ajax Funktion wird mit der Produkt ID und einem Array mit den gewählten Farben aufgerufen ({'pos','anzahl','color'}).
	 */	
	submit: function(){
		var data=[];
		$$('.color').each(function(item){
			if(item.value && item.value!='' && item.value>0){
				var pos=item.id.replace(/^anz/,'').toInt();
				data.push({'pos':pos,'anzahl':item.value.toInt(),'color':document.id('color'+pos).value});			
			}
		});
		/**
		 * 0 Auswahl fuer Löschmöglichkeit zulassen
		if(data.length > 0){
		}
		**/
		var thisClass=this;
		var a=new Request.JSON({
			'url':store.ajaxUrl,
			'onSuccess':function(response){
				if(response.status=='OK'){
					devLog('gespeichert');
					thisClass.close();
					top.location.href=top.location.href;
				}else{
					devLog(response.status);
				}
			}			
		}).send('fn=colorSelectSubmit&produktID='+this.produktID+'&data='+JSON.encode(data));		
	},
	/**
	 * @name colorSelect.close
	 * @function
	 * @see popup.close
	 * @description
	 * Ausführen der close Methode der popup Classe
	 */
	close: function(){
		this.popup.close();
	}
});

