/*************************
*                        *
*  PROTOTYPE EXTENSIONS  *
*                        *
*************************/
String.prototype.removeLastChar=function() {
	var arr=this.split('');
	arr.splice(this.length-1,1);
	return arr.join('');
}




/*************************
*                        *
*  SETTINGS / VARIABLES  *
*                        *
*************************/
oregano=new Object();
oregano.eID='oregano_pi1';
oregano.requestURL='index.php?eID='+oregano['eID']+'&';
oregano.selectMultiple_currentObj=false;
oregano.AjaxActiveRequestCount=0;


Ajax.Responders.register({
  onCreate: function() {
    oregano['AjaxActiveRequestCount']++;
  },
  onComplete: function() {
    oregano['AjaxActiveRequestCount']--;
  }
});






/********************
*                   *
*  CHILI FUNCTIONS  *
*                   *
********************/
function chili_openPage(number) {
	new Ajax.Request(oregano['requestURL'],{
		parameters:'action=chili_getRendertItems&page='+number,
		onSuccess:function(transport) {
			$('oregano_itemContainer').update(transport.responseJSON['items']);
			$('oregano_carouselContainer').update(transport.responseJSON['carousel']);
		},
		onFailure:function(transport) {alert(transport.responseJSON['returnMessage']);}
	});
}
function chili_resetFilter() {
	new Ajax.Request(oregano['requestURL'],{
		parameters:'action=chili_resetFilter&page=1',
		onSuccess:function(transport) {
			$('oregano_itemContainer').update(transport.responseJSON['items']);
			$('oregano_carouselContainer').update(transport.responseJSON['carousel']);
		},
		onFailure:function(transport) {alert(transport.responseJSON['returnMessage']);}
	});
}
/*********************
*                    *
*  FILTER FUNCTIONS  *
*                    *
*********************/
function oregano_initSelectMultiple(id,preselection) {
	document.observe('dom:loaded',function(){
		// init main Object
		var selectMultipleObj=new Control.SelectMultiple('oregano_selectMultiple_selectbox_'+id,'oregano_selectMultiple_optionbox_'+id,{
			checkboxSelector: 'input.[type=checkbox]',
			nameSelector: '.oregano_selectMultiple_nameSelector',
			afterChange: function(value){
				if(selectMultipleObj) {this.currentValue=value;}
				if(selectMultipleObj && selectMultipleObj.setSelectedRows) {
					selectMultipleObj.setSelectedRows();
				}
				if(selectMultipleObj && !selectMultipleObj.numberOfCheckedBoxes) {
				   selectMultipleObj.select.selectedIndex=0;
				}
			}
		});
		selectMultipleObj.currentValue=preselection;
		selectMultipleObj.abortValue=preselection;

		// set startValues(preselection)
		selectMultipleObj.setValue(preselection);

		// adds and removes highlighting from table rows
		selectMultipleObj.setSelectedRows=function(){
			this.checkboxes.each(function(checkbox){
				var item=$(checkbox.up('.oregano_selectMultiple_item'));
				item.removeClassName('selected');
				if(checkbox.checked) {
					item.addClassName('selected');
				}
			});
		}.bind(selectMultipleObj);
		selectMultipleObj.setSelectedRows();

		//show selectMoreLink only if there are more than 1 option
		if(selectMultipleObj.checkboxes.size()<2) {
         $('oregano_selectMultiple_open_'+id).style.visibility='hidden';
         if(selectMultipleObj.select.options[0].value.blank()) {//deaktivate selectorbox if only 1 option and this option has an empty value
            selectMultipleObj.select.disable();
         }
         return;//abort init here!
		}

		// AjaxAction
		selectMultipleObj.startAjaxAction=function(){
			new Ajax.Request(oregano['requestURL'],{
				parameters:'action=chili_updateFilter&key='+encodeURIComponent(id)+'&value='+encodeURIComponent(this.currentValue),
				onSuccess:function(transport) {
					$('oregano_itemContainer').update(transport.responseJSON['items']);
					$('oregano_carouselContainer').update(transport.responseJSON['carousel']);
				},
				onFailure:function(transport) {alert(transport.responseJSON['returnMessage']);}
			});
		}.bind(selectMultipleObj);

		// Abort Optionbox
		selectMultipleObj.abortOptionbox=function(){
			oregano['selectMultiple_currentObj']=false;
			this.setValue(this.abortValue);
			$(this.select).style.visibility='visible';//IE
			new Effect.BlindUp(this.container,{duration:0.3});
		}.bind(selectMultipleObj);

		// observe: Optionbox open
		$('oregano_selectMultiple_open_'+id).observe('click',function(event){
			if(oregano['selectMultiple_currentObj']) {oregano['selectMultiple_currentObj'].abortOptionbox();}
			oregano['selectMultiple_currentObj']=this;
			//$(this.select).style.visibility='hidden';//IE
			new Effect.BlindDown(this.container,{duration:0.3});
			Event.stop(event);
			return false;
		}.bindAsEventListener(selectMultipleObj));

		// observe: Optionbox submit
		$('oregano_selectMultiple_submit_'+id).observe('click',function(event){
			this.startAjaxAction();
			this.abortValue=this.currentValue;
			oregano['selectMultiple_currentObj']=false;
			//$(this.select).style.visibility='visible';//IE
			new Effect.BlindUp(this.container,{duration:0.3});
			Event.stop(event);
			return false;
		}.bindAsEventListener(selectMultipleObj));

		// observe: Optionbox abort
		$('oregano_selectMultiple_abort_'+id).observe('click',function(event){
			this.abortOptionbox();
			Event.stop(event);
			return false;
		}.bindAsEventListener(selectMultipleObj));

		// observe: onChange of selectbox
		$('oregano_selectMultiple_selectbox_'+id).observe('click',function(event){
			this.startAjaxAction();
			Event.stop(event);
			return false;
		}.bindAsEventListener(selectMultipleObj));

		// observe: resetFilter-link
		$('oregano_resetFilter').observe('click',function(event){
			if(oregano['selectMultiple_currentObj']) {oregano['selectMultiple_currentObj'].abortOptionbox();}
			this.currentValue='';
			this.setValue('');
			this.select.selectedIndex=0;
			Event.stop(event);
			return false;
		}.bindAsEventListener(selectMultipleObj));
	});
}
function oregano_initSelectPrice2(price2_from,price2_to) {
	getSelectBoxOption('oregano_selectbox_price2_from',price2_from).selected=true;
	getSelectBoxOption('oregano_selectbox_price2_to',price2_to).selected=true;

	var price2AjaxAction=function() {
		if($F('oregano_selectbox_price2_from')>=$F('oregano_selectbox_price2_to')) {
			if(getSelectBoxOption('oregano_selectbox_price2_from',$F('oregano_selectbox_price2_to'))) {
			   getSelectBoxOption('oregano_selectbox_price2_from',$F('oregano_selectbox_price2_to')).selected=true;
			   $('oregano_selectbox_price2_from').selectedIndex=$('oregano_selectbox_price2_from').selectedIndex-1;
			} else {
				$('oregano_selectbox_price2_from').selectedIndex=0;
			}
		}
		new Ajax.Request(oregano['requestURL'],{
			parameters:'action=chili_updateFilter&key=price2&value='+encodeURIComponent($F('oregano_selectbox_price2_from'))+'&value2='+encodeURIComponent($F('oregano_selectbox_price2_to')),
			onSuccess:function(transport) {
				$('oregano_itemContainer').update(transport.responseJSON['items']);
				$('oregano_carouselContainer').update(transport.responseJSON['carousel']);
			},
			onFailure:function(transport) {alert(transport.responseJSON['returnMessage']);}
		});
	}

	// observe: price2_from selectbox and price2_to selectbox
	$('oregano_selectbox_price2_from').observe('change',function(event){
		price2AjaxAction();
		Event.stop(event);
		return false;
	});
	$('oregano_selectbox_price2_to').observe('change',function(event){
		price2AjaxAction();
		Event.stop(event);
		return false;
	});

	// observe: resetFilter-link
	$('oregano_resetFilter').observe('click',function(event){
		getSelectBoxOption('oregano_selectbox_price2_from','0').selected=true;
		getSelectBoxOption('oregano_selectbox_price2_to','99999').selected=true;
		Event.stop(event);
		return false;
	});
}
function oregano_initResetFilter() {
	// observe: resetFilter-link
	$('oregano_resetFilter').observe('click',function(event){
		chili_resetFilter();
		Event.stop(event);
		return false;
	});
}




/***************************
*                          *
*  SHOPING-CART FUNCTIONS  *
*                          *
***************************/
function oregano_initAddToCart() {
	document.observe('dom:loaded',function(){
//		var cartWindow=false;
//		$('oregano_cartWindow').hide();
		// observe: oregano_addToCart
		$('oregano_addToCart').observe('click',function(event){
			var uid=$F('oregano_uid');
			var variant=$F('oregano_variant');
			if(!variant) {variant=0;}
			new Ajax.Request(oregano['requestURL'],{
				parameters:'action=add_to_cart&uid='+uid+'&variant='+variant,
				onSuccess:function(transport) {
					//alert(transport.responseText);
					//$('statusMessageNode').update('<div class="statusMessageType_0">'+transport.responseJSON['returnMessage']+'</div>');
					//$('statusMessageNode').show();
/*					if(!cartWindow) {//create obj only one time!
						cartWindow=Control.Modal.open('',{overlayOpacity:0.75,className:'modal'});
						cartWindow.container.update($('oregano_cartWindow'));
						$('oregano_cartWindow').show();
						cartWindow.position('center');//set position of window again, because we insert new content into container after opening
					} else {
						cartWindow.open();
					}*/
					Lightview.show({href:'index.php?id=addtocart',rel:'iframe',options:{width:400,height:110,topclose:true}});
				},
				onFailure:function(transport) {alert('ERROR: '+transport.responseJSON['returnMessage']);}
			});
			return false;
		});
	});
}
function oregano_addToCart(uid,count) {
	new Ajax.Request(oregano['requestURL'],{
		parameters:'action=add_to_cart&uid='+uid+'&variant=0&count='+count,
		onSuccess:function(transport) {
			Lightview.show({href:'index.php?id=addtocart',rel:'iframe',options:{width:340,height:90,topclose:true}});
		},
		onFailure:function(transport) {alert('ERROR: '+transport.responseJSON['returnMessage']);}
	});
	return false;
}
function oregano_deleteFromCart(uid,variant) {
	new Ajax.Request(oregano['requestURL'],{
		parameters:'action=delete_from_cart&uid='+uid+'&variant='+variant,
		onSuccess:function(transport) {
			//alert(transport.responseText);
			if(transport.responseJSON['emptyCart']) {//last product in cart was deleted
			   $('oregano_cartContainer').update(transport.responseJSON['emptyCart']);
			} else {
				$('id_'+uid+'_'+variant).remove();
				oregano_calculateCartPrices(transport);
			}
			//$('statusMessageNode').update('<div class="statusMessageType_0">'+transport.responseJSON['returnMessage']+'</div>');
         //$('statusMessageNode').show();
		},
		onFailure:function(transport) {alert(transport.responseJSON['returnMessage']);}
	});
}
function oregano_changeInCart(uid,variant,value) {
	if(!variant) {variant=0;}
	new Ajax.Request(oregano['requestURL'],{
		parameters:'action=change_in_cart&uid='+uid+'&variant='+variant+'&value='+value,
		onSuccess:function(transport) {
			//alert(transport.responseText);
			if(transport.responseJSON['newQuantity']>0) {
			   $('id_'+uid+'_'+variant).down('.oregano_cart_itemQuantity').update(transport.responseJSON['newQuantity']);
			   $('id_'+uid+'_'+variant).down('.oregano_cartPrice_itemSubtotal').update(transport.responseJSON['newQuantityPrice']);
            oregano_calculateCartPrices(transport);
			} else {//delete item
			   oregano_deleteFromCart(uid,variant);
			}
		},
		onFailure:function(transport) {alert(transport.responseJSON['returnMessage']);}
	});
}
function oregano_deleteCart() {
	new Ajax.Request(oregano['requestURL'],{
		parameters:'action=delete_cart',
		onSuccess:function(transport) {
			alert(transport.responseText);
		},
		onFailure:function(transport) {alert(transport.responseJSON['returnMessage']);}
	});
}
function oregano_calculateCartPrices(transport) {
	$('oregano_cartPrice_subtotal').update(transport.responseJSON['price_subtotal']);
//	$('oregano_cartPrice_shipping').update(transport.responseJSON['price_shipping']);
//	$('oregano_cartPrice_payment').update(transport.responseJSON['price_payment']);
//	if($('oregano_cartPrice_discountGlobal')) {
//		$('oregano_cartPrice_discountGlobal').update(transport.responseJSON['price_discount_global']);
//	}
	$('oregano_cartPrice_grandtotalBrutto').update(transport.responseJSON['price_grandtotal_brutto']);
//	$('oregano_cartPrice_grandtotalNetto').update(transport.responseJSON['price_grandtotal_netto']);
//	$('oregano_cartPrice_grandtotalTax').update(transport.responseJSON['price_grandtotal_tax']);
}





/********************************
*                               *
*  SHOPPING-CHECKOUT FUNCTIONS  *
*                               *
********************************/
function oregano_initMethodLink(ID,method) {
	// observe: ID
	$(ID).observe('click',function(event){
		new Ajax.Request(oregano['requestURL'],{
			parameters:'action=update_field&key=method&value='+method,
			onSuccess:function(transport) {
				//alert(transport.responseText);
				location.href=$(ID).href;
			},
			onFailure:function(transport) {alert(transport.responseJSON['returnMessage']);}
		});
		Event.stop(event);
		return false;
	});
}
function oregano_initUpdateFields() {
	var fieldArray=$$('.oregano_updateField');
	fieldArray.each(function(item){
		var wraperDiv=$(item.up('div'));
		// observe: input(FORM)Fields
		item.observe('blur',function(event){
			if(item.toolTip) {item.toolTip.destroy();item.toolTip=false;}
			new Ajax.Request(oregano['requestURL'],{
				parameters:'action=update_field&key='+encodeURIComponent(item.id.substr(8))+'&value='+encodeURIComponent($F(item)),
				onSuccess:function(transport) {
					//alert(transport.responseText);
					if(transport.responseJSON['fieldIsEmpty']==1) {
						wraperDiv.className='oregano_field_neutral';
					} else if(transport.responseJSON['fieldIsValid']==1) {
						wraperDiv.className='oregano_field_valid';
					} else {
						wraperDiv.className='oregano_field_invalid';
						//item.toolTip=new Control.ToolTip(item,transport.responseJSON['returnMessage'],{className:'tooltip'});
					}
				},
				onFailure:function(transport) {alert(transport.responseJSON['returnMessage']);}
			});
			Event.stop(event);
			return false;
		});
	});
}
function oregano_initShowShippingAddress() {
	// observe: useShippingAddress-checkBox
	$('oregano_useShippingAddress').observe('click',function(event){
		var fieldValue;
		if($('oregano_useShippingAddress').checked) {
			fieldValue=1;
			new Effect.BlindDown($('oregano_checkoutShipping'),{duration:0.3});
		} else {
			fieldValue=0;
			new Effect.BlindUp($('oregano_checkoutShipping'),{duration:0.3});
		}
		new Ajax.Request(oregano['requestURL'],{
			parameters:'action=update_field&key=use_shipping_address&value='+fieldValue,
			//onSuccess:function(transport) {alert(transport.responseText);},
			onFailure:function(transport) {alert(transport.responseJSON['returnMessage']);}
		});
		return false;
	});
}
function oregano_initPaymentShippingMethod(ID,key) {//key = shipping_method or payment_method
	// observe: ID
	$(ID).observe('click',function(event){
		new Ajax.Request(oregano['requestURL'],{
			parameters:'action=update_field&key='+key+'&value='+$F(ID),
			//onSuccess:function(transport) {alert(transport.responseText);},
			onFailure:function(transport) {alert(transport.responseJSON['returnMessage']);}
		});
		return false;
	});
}
function oregano_initPaymentShippingMethodSpecial() {//shipping_method is specail because of "Ladengeschäft"
   //check for active/inactive Radio-buttons on start
	if($('oregano_shipping_method_99').checked) {
		$('oregano_payment_method_1').disabled=true;
		$('oregano_payment_method_2').disabled=true;
		//$('oregano_payment_method_3').disabled=true;
		$('oregano_payment_method_10').disabled=true;
	} else {
	   $('oregano_payment_method_99').disabled=true;
	}
	
	// observe: shippingMethod-3 (UPS Standard)
	$('oregano_shipping_method_3').observe('click',function(event){
		new Ajax.Request(oregano['requestURL'],{
			parameters:'action=update_field&key=shipping_method&value='+$F('oregano_shipping_method_3'),
			//onSuccess:function(transport) {alert(transport.responseText);},
			onFailure:function(transport) {alert(transport.responseJSON['returnMessage']);}
		});
		$('oregano_payment_method_1').disabled=false;
		$('oregano_payment_method_2').disabled=false;
		//$('oregano_payment_method_3').disabled=false;
		$('oregano_payment_method_10').disabled=false;
		$('oregano_payment_method_99').disabled=true;
		if($('oregano_payment_method_99').checked) {
			$('oregano_payment_method_99').checked=false;
			new Ajax.Request(oregano['requestURL'],{parameters:'action=update_field&key=payment_method&value='});
		}
		return false;
	});
	
	// observe: shippingMethod-98 (andere Versandart)
	$('oregano_shipping_method_98').observe('click',function(event){
		new Ajax.Request(oregano['requestURL'],{
			parameters:'action=update_field&key=shipping_method&value='+$F('oregano_shipping_method_98'),
			//onSuccess:function(transport) {alert(transport.responseText);},
			onFailure:function(transport) {alert(transport.responseJSON['returnMessage']);}
		});
		$('oregano_payment_method_1').disabled=false;
		$('oregano_payment_method_2').disabled=false;
		//$('oregano_payment_method_3').disabled=false;
		$('oregano_payment_method_10').disabled=false;
		$('oregano_payment_method_99').disabled=true;
		if($('oregano_payment_method_99').checked) {
			$('oregano_payment_method_99').checked=false;
			new Ajax.Request(oregano['requestURL'],{parameters:'action=update_field&key=payment_method&value='});
		}
		return false;
	});
	
	// observe: shippingMethod-99 (Abholung im Ladengeschäft)
	$('oregano_shipping_method_99').observe('click',function(event){
		new Ajax.Request(oregano['requestURL'],{
			parameters:'action=update_field&key=shipping_method&value='+$F('oregano_shipping_method_99'),
			//onSuccess:function(transport) {alert(transport.responseText);},
			onFailure:function(transport) {alert(transport.responseJSON['returnMessage']);}
		});
		new Ajax.Request(oregano['requestURL'],{parameters:'action=update_field&key=payment_method&value=99'});
		$('oregano_payment_method_1').disabled=true;
		$('oregano_payment_method_2').disabled=true;
		//$('oregano_payment_method_3').disabled=true;
		$('oregano_payment_method_10').disabled=true;
		$('oregano_payment_method_99').disabled=false;
		$('oregano_payment_method_99').checked=true;
		return false;
	});
}
function oregano_updateField(ID,eventHandler) {
	// observe: ID
	$(ID).observe(eventHandler,function(event){
		new Ajax.Request(oregano['requestURL'],{
			parameters:'action=update_field&key='+encodeURIComponent($(ID).id.substr(8))+'&value='+$F(ID),
			//onSuccess:function(transport) {alert(transport.responseText);},
			onFailure:function(transport) {alert(transport.responseJSON['returnMessage']);}
		});
		return false;
	});
}




/********************
*                   *
*  IMAGE FUNCTIONS  *
*                   *
********************/
function oregano_initHoverWindows() {
	document.observe('dom:loaded',function(){
		$$('[class=openOnImageLayer]').each(function(item){
			var window_close=new Element('div',{className:'modal_windowClose'});
			var window_content=new Element('div',{className:'modal_windowContent'});
			var tmp=new Control.Modal(item,{
				overlayOpacity:0.75,
				className:'modal',
				insertRemoteContentAt:window_content,//So the content(image) is put the window_contentElement
				closeOnClick:window_content,
				afterOpen:function(){window_close.update('X')}
			});
			window_content.insert(window_close);
			tmp.container.insert(window_content);
		});
		$('control_overlay').observe('click',function(event){//close when overlay clicked
			Control.Modal.close();
			Event.stop(event);
			return false;
		});
	});
}





/*******************
*                  *
*  MISC FUNCTIONS  *
*                  *
*******************/
function doNothing() {}//This function does nothing ;) useFull in A-Elements like this:href="javascript:doNothing();"
function noBlur(element) {if(element.blur){element.blur();}}//useFull in A-Elements like this:onfocus="noBlur(this);" or with keyboardNavigation:onmouseup="noBlur(this);
function getSelectBoxOption(selectBoxID,optionValue) {
	var result={};
	$(selectBoxID).childElements().each(function(option){
		if(option.value==optionValue) {result[0]=option;}
	});
	return result[0];
}



