/**
 * Swdesign_StilfolShop extension
 *
 *
 * @category   Swdesign
 * @package    Swdesign_StilfolShop
 * @copyright  Copyright (c) 2009 SchÃ¶rwerth Webdesign
 */

/**
 * @category   Swdesign
 * @package    Swdesign_StilfolShop
 * @author     Oliver SchÃ¶rwerth <info@schoerwerthwebdesign.de>
 */
var _MOTIV_EXCLUSIV_CAT = 3;
var _MOTIV_ADDS_CAT = 4;

var _BREADCRUMB_CONTAINER = 'categories-breadcrumb'; //has to be id	and existing on load

var _CATEGORY_CONTAINER = 'categories';	//has to be id	and existing on load
var _CATEGORY_ITEMS = '.categoryItem';	//has to be class with leading dot

var _GALLERY_CONTAINER = 'gallery'; 		//has to be id	and existing on load
var _GALLERY_ITEMS = '.gallery-links';		//has to be class with leading dot
var _PAGER_ITEMS = '.pagerobs';			//pager items must be class name with leading dot
var _PAGER_USERPAGE = 'pager-userpage';	//id for input paging

var _IMAGEHOVER_BOX = 'littleImpr'; 		//id for toggling images hover box
var _IMAGEHOVER_BOX_CONTENT = 'littleImprCont'; 	//id for box content in which bigger images are loaded

var _IMAGE_UPLOAD_PREVIEW = 'uploadedImagePreview'; //id for container who gets uploaded image

var _AJAX_ERROR = '<div align="center">Leider ist beim Ladevorgang ein Fehler aufgetreten. Bitte versuchen Sie es erneut</div>';
var _IMAGE_UPLOAD_SET = false;			//true if User uploaded an Image

 var sw = {};
 
 var General = Class.create({
 	initialize: function()
	{
		this.activeAjax = new Array();
	},
	
	oneLineError: function(container,message,type) {
		if(type == 'error')
			var holder = new Element('div',{'class':'one-line-error'});
		if(type == 'success')
			var holder = new Element('div',{'class':'one-line-success'});
		if(type == 'warning')
			var holder = new Element('div',{'class':'one-line-warning'});
		holder.update(message);
		container.insert(holder);
	},
	
	pUFChange: function(el,targetid)
	{
		try{
			$(targetid).writeAttribute({'value':el.value})
		} catch(e) { }
	},
	
	failure: function(message,type)
	{
		if (!$$('.messages')[0]) {
			var holder = new Element('ul', {
				'class': 'messages'
			});
			var liHolder = new Element('li',{'class':type + '-msg'});
				var ulInner = new Element('ul');
					var liInnerUl = new Element('li');
					liInnerUl.update(message);
			holder.insert({top: liHolder});
			liHolder.insert({top: ulInner});
			ulInner.insert(liInnerUl);
			$$('.page-title')[0].insert({after: holder});
		}
		setLocation('#toTop');
	},
	
	deleteMessage: function()
	{
		if($$('.messages')[0]) {
			$$('.messages')[0].remove();
		}
	},
	
	getAjaxLoader: function(parent) 
	{
		var SRC =  BASE_URL+'skin/frontend/stilfol/default/images/ajax-loader.gif';
		//var parent = $$('.ajaxloader')[0].up(0);
		var dimensions = parent.getDimensions(); 
		return '<img src="'+SRC+'" title="Loading..." class="ajaxloader" style="margin-top:'+dimensions.height/2+'px; margin-left:'+dimensions.width/2+'px;" alt="Loading" />'; 	
	},
	
	ajax: function(controller,parameters,container,execObserver) {
		//abort ajax if twice of same type
		if (controller != false) {
			var abortIdentifier = controller.gsub('/', '');
			if (sw.general.activeAjax[abortIdentifier] && !sw.general.activeAjax[abortIdentifier]._complete) {
				sw.general.activeAjax[abortIdentifier].transport.abort();
			}
		}
		sw.general.activeAjax[abortIdentifier] = new Ajax.Request(BASE_URL + controller, {
			method: 'get',
			parameters: parameters,
			onCreate: function(){
				container.update(sw.general.getAjaxLoader(container));
			},
			onSuccess: function(transport){ 
				var response = transport.responseText;
				container.update(response);
				return response;
			},
			onFailure: function(){
				//var response = _AJAX_ERROR;
				//container.update(transport.responseText);
                                 //error in case of no result in fsearch
                                $('gallery').update('');
                                sw.general.oneLineError(container,"Leider ergab Ihre Anfrage kein Ergebnis.","error");
			},
			onComplete: function(transport){
				switch(execObserver) {
					case 'product':
						sw.product.productObserver();
												
						sw.pager.pagerObserver();
						sw.pager.callCustomPage();
						break;
					case 'category':
						sw.category.categoryObserver();
						break;
					case 'hover':
						if (transport.responseText) {
							sw.cache.save(sw.product.currentHoverImage, transport.responseText);
						}
					case 'pager':
						break;
					case false:
                                                //error in case of no result in fsearch
                                                $('gallery').update('');
                                                sw.general.oneLineError(container,"Leider ergab Ihre Anfrage kein Ergebnis.","error");
						break;
				}
				//because of abort this var can become <0
				if (Ajax.activeRequestCount < 0) {
				    Ajax.activeRequestCount = 0;
				}
			}
		});
	},
	
	/**
	 * aborts an ajax request if it is running
	 */
	abortCurrentRequest: function(request,id) {
		if (request) { 
			request.transport.abort();
		}
	}
});

var ProductHandling = Class.create({
 	initialize: function() {
		this.activeImageRequest;
		this.galleryContainer = $(_GALLERY_CONTAINER);
		this.imageHoverBox = $(_IMAGEHOVER_BOX);
		this.imageHoverBoxContent = $(_IMAGEHOVER_BOX_CONTENT);
	},
	
	/**
	 * General
	 * Eventhandler
	 * for the Galleries
	 */
	productObserver: function(){
		$$(_GALLERY_ITEMS).each( function(item){ 
			var overHandler = sw.product.overHandler.bind(sw.product);
			item.observe('mouseover', overHandler);
			
			var outHandler = sw.product.outHandler.bind(sw.product);
			item.observe('mouseout', outHandler);
			
			var moveHandler = sw.product.moveHandler.bind(sw.product);
			item.observe('mousemove', moveHandler);
			/*
			var clickHandler = sw.product.clickHandler.bind(sw.product);
			item.observe('click', clickHandler);*/
		});
	},
	/*
	clickHandler: function(event) {
		var element =  event.element();
		var id = element.readAttribute('rel');
		var product = sw.shop.productType;
		var motive = sw.shop.motiveType;
		sw.product.imageHoverBox.hide();
		setLocation(BASE_URL + 'shop/configurate?motive=' + motive + '&product=' + product + '&pid=' + id + '&addsactive=' + sw.shop.motiveAdds);
	},*/
	
	overHandler: function(event) {
		var controller = false;
		var element = event.element();
		
		element.isHover = true;
		
		//if (sw.shop.motiveType == 'sffotolia') {
			$('hoverImage').writeAttribute({'src': $(element.readAttribute('rel')).readAttribute('src')});
			$('hoverImage').writeAttribute({'alt': $(element.readAttribute('rel')).innerHTML});
			$$('.impressionHoverFooter')[0].update('<span class="price">Motivpreis ' + $(element.readAttribute('rel')).readAttribute('rel') + ' Euro</span>');
		/*} 
		else {
			if(sw.shop.motiveType == 'sfmotiv' || sw.shop.motiveType == 'sfindividual') { 
				$('hoverImage').writeAttribute({'src': $(element.readAttribute('rel')).readAttribute('src')});
				$('hoverImage').writeAttribute({'alt': $(element.readAttribute('rel')).innerHTML});
				$$('.impressionHoverFooter')[0].update('<span class="price">Motivpreis ' + $(element.readAttribute('rel')).readAttribute('rel') + ' Euro</span>');
			}
		}*/
		sw.product.imageHoverBox.show(); 
	},
	
	outHandler: function(event) { 
		var element = event.element();
		element.isHover = false;
		sw.product.imageHoverBox.hide();
	},
	
	moveHandler: function(event) {
		var element = event.element();
		var mouseX = Event.pointerX(event);
		var mouseY = Event.pointerY(event);
		var elementOffset = element.viewportOffset();
		this.viewport = document.viewport.getDimensions();
		var posX = elementOffset[0]; 
		var posY = elementOffset[1];
		var elementDim = $('littleImpr').getDimensions();
		var imageDim = ($('hoverImage')) ? $('hoverImage').getDimensions() : {height:15};
		
		if(window.innerWidth < (parseInt(posX) + parseInt(elementDim.width) + 400)) {
			var posCorrX = - (elementDim.width + 15);
		} else { var posCorrX = 15; }

		if(window.innerHeight < (parseInt(posY) + parseInt(imageDim.height)) + 15) {
			var posCorrY = - (imageDim.height + 15);
		} else { var posCorrY = 15; }
		
		sw.product.imageHoverBox.setStyle({
			left: mouseX + posCorrX + 'px',
			top: mouseY + posCorrY + 'px'
		});	
	}
});

var Pager = Class.create({
 	initialize: function() {
		
	},
	
	pagerEvent: function(e) {
		var element = e.element();
		loadPage = element.value;	
		if (parseInt(element.readAttribute('rel')) < parseInt(loadPage)) {
			//sw.general.failure('Bitte geben Sie eine Zahl zwischen 1 und ' + element.readAttribute('rel') + ' ein.','error');
			alert('Bitte geben Sie eine Zahl zwischen 1 und ' + element.readAttribute('rel') + ' ein.');
			return;
		} else {
			$('pager-form').submit();
		}
	},
	
	callCustomPage: function() {
		var loadNewPage = sw.pager.pagerEvent.bind();
		$(_PAGER_USERPAGE).observe('change',loadNewPage);
	}
});

var StilfolShop = Class.create({
 	initialize: function() {
		this.currentStep;
		this.productType;	
		this.motiveType;
		this.individualImage;
		this.verify;
		this.individualHref;
		this.motiveAdds = false;
		this.individual = false;
	},
	
	
	/**
	 * Checks the usability of the
	 * users uploaded image, calling after
	 * completed upload
	 */
	checkImageUsability: function() {
		var resultcontainer = $('ciu-results');
		var width = $('ciuUserWidth').value;
		var height = $('ciuUserHeight').value;
		
		sw.general.ajax('swcatalog/upload/checksize',{userwidth:width,userheight:height},resultcontainer,false); 
	},
	
	/**
	 * Locks options (motive type footer) for 
	 * stilfol individual (adds and image upload)
	 */
	lockIndividualOptions: function() {
		try {
			if(sw.shop.individual) {
				$('motiveIndividualFooter').show();
				//$('motiveIndividualFooter').scrollTo();
				new Effect.ScrollTo('motiveIndividualFooter', { duration:'0.2', offset:0, axis:'y' });
				new Effect.Opacity('individualContinue', { from: 0.0, to: 1.0, duration: 0.4 }); 
				new Effect.Opacity('motiveIndividualFooter', { from: 0.0, to: 1.0, duration: 0.4 }); 
				$('individualContinue').show();
			} else { 
				new Effect.Opacity('individualContinue', { from: 1.0, to: 0.0, duration: 0.4 });
				new Effect.Opacity('motiveIndividualFooter', { from: 1.0, to: 0.0, duration: 0.4 }); 
				$('motiveIndividualFooter').hide();
				$('individualContinue').hide();
			}
		} catch (e) { console.log(e+', In Line 406'); }
	},

	/**
	 * Switcher for the Stilfol-Adds
	 * products
	 */
	addsHandler: function(el) 
	{ 
		//if(sw.shop.productType=='door') {  //swedit -> gilt jetzt immer
			$$('.motiveAddsButtonActive')[0].toggle();
			//el.firstDescendant().toggle();
			if(this.motiveAdds == false) {
				this.motiveAdds = true; 
				//$('individualContinueLink').writeAttribute({'href':sw.shop.individualHref + 'addsactive/1'});
				//$('individualContinueLink').writeAttribute({'href':sw.shop.individualHref2});
				$('individualContinue').observe('click',function(e) { if(!_IMAGE_UPLOAD_SET) { sw.general.failure('Bitte laden Sie zuerst ein Foto hoch.','error'); } else { window.location=sw.shop.individualHref2; } });
				//http://www.stilfol.de/shop/configurate?motive=sfindividual&product=door&pid=false&addsactive=false
				
							
			} else { 
				this.motiveAdds = false; 
				//$('individualContinueLink').writeAttribute({'href':BASE_URL + 'shop/configurate?motive=sfindividual&product=door&pid=false&addsactive=false'});	
				//$('individualContinueLink').writeAttribute({'href':sw.shop.individualHref});
				$('individualContinue').observe('click',function(e) { if(!_IMAGE_UPLOAD_SET) { sw.general.failure('Bitte laden Sie zuerst ein Foto hoch.','error'); } else { window.location=sw.shop.individualHref; } });
				//sw.shop.individualHref + '/addsactive/1'	
				
			}
		//}
	},
	
	smoothOpacity: function(ifElement,value,elementId)
	{
		try {
			if ($(elementId).getStyle('opacity') == 0.4) {
				if(ifElement == value)
					new Effect.Opacity(elementId, { from: 0.4, to: 1.0, duration: 0.4 });

			} else {
				if(ifElement != value)
					new Effect.Opacity(elementId, { from: 1.0, to: 0.4, duration: 0.4 });
			}
		} catch(e) { }
	}
	

 });
 
 function initLib() {
 	sw.general 		= new General();
	sw.pager 		= new Pager();
 	sw.shop 		= new StilfolShop();
 } 
 //initLib();
 var oldImage;
 document.observe('dom:loaded',initLib);

