/**
* Базов клас, който е индивидуален за всяка страница. Наследява други класове, с които ние няма да работим
* Ако се почваме работа с нова страница е достатъчно да изчистим съдържанието на този клас (и да напишем ново)
* Author: Alexadner Gavazov
* Created date: 2007-07-17
*/

var myActions = {
	loadProductHovers: '',
	filterOldLevels: new Array(),

	loadProduct: function (loadProducId)
	{
		this.loadProducId = loadProducId;

		if($(this.loadProductHovers))
		{
			$(this.loadProductHovers).className = '';
		}

		this.loadProductHovers = 'prod' + loadProducId;
		$(this.loadProductHovers).className = 'product_hover2';

		$('ipage_slide').hide();
		$('ipage_products').show();

		$('ipage_products_loading').innerHTML = '<img src="' + root_directory + 'images/preloader.gif" alt="Loading..." />';

		this.fadeOut('ipage_products', "$('ipage_products').hide(); $('ipage_products_loading').show(); myActions.fadeIn('ipage_products_loading'); myActions.loadProductAjax");
	},
	loadProductAjax: function ()
	{
		var parameters = 'loadProduct=' + this.loadProducId;

		new Ajax.Updater('ipage_products', root_directory + lang + '/shops/', {
			method: 'post',
			parameters: parameters,
			onComplete: function () {
				$('ipage_products_loading').hide();
				$('ipage_products').show();
				myActions.fadeIn('ipage_products');
			}
		});
	},



	showMap: function (hideId, showId, swfWriteId, markedCells, titleId, titleString, strLabel1, strLabel2, strLabel3, strLabel4)
	{
		if($(titleId))
		{
			$(titleId).innerHTML = titleString;
		}

		this.fadeOut(hideId, "$('" + hideId + "').hide(); $('" + showId + "').show(); $('" + showId + "').show(); vsNothing");

		writeSwf(swfWriteId, root_directory + 'images/floors.swf', '860', '300', '', {
			xmlUrl: root_directory + 'xml/map.html?' + markedCells,
			label1: strLabel1,
			label2: strLabel2,
			label3: strLabel3,
			label4: strLabel4
		});
	},

	filterSet: function (ajax)
	{
		if(!ajax)
		{
			document.location = root_directory + lang + '/shops/?show_catalog&level1=' + $('level1').value + '&level2=' + $('level2').value + '&level3=' + $('level3').value + '&level4=' + $('level4').value;
			return;
		}

		this.fadeOut('listing_internal_content', "$('listing_internal_content').hide(); $('listing_internal_loading').show(); myActions.filterAjax");
		$('listing_internal_loading').innerHTML = '<img src="' + root_directory + 'images/preloader.gif" alt="Loading..." />';
	},
	filterAjax: function ()
	{
		if(!this.filterOldLevels['level1']) this.filterOldLevels['level1'] = $('level1').value;
		if(!this.filterOldLevels['level2']) this.filterOldLevels['level2'] = $('level2').value;
		if(!this.filterOldLevels['level3']) this.filterOldLevels['level3'] = $('level3').value;
		if(!this.filterOldLevels['level4']) this.filterOldLevels['level4'] = $('level4').value;


		var parameters = 'filter=true';
		parameters += '&level1=' + $('level1').value;

		if($('level1').value == this.filterOldLevels['level1'])
		{
			parameters += '&level2=' + $('level2').value;
		}

		if($('level1').value == this.filterOldLevels['level1'] && $('level2').value == this.filterOldLevels['level2'])
		{
			parameters += '&level3=' + $('level3').value;
		}

		if($('level1').value == this.filterOldLevels['level1'] && $('level2').value == this.filterOldLevels['level2'] && $('level3').value == this.filterOldLevels['level3'])
		{
			parameters += '&level4=' + $('level4').value;
		}

		this.filterOldLevels['level1'] = $('level1').value;
		this.filterOldLevels['level2'] = $('level2').value;
		this.filterOldLevels['level3'] = $('level3').value;
		this.filterOldLevels['level4'] = $('level4').value;

		new Ajax.Updater('listing_internal_content', root_directory + lang + '/shops/', {
			method: 'get',
			parameters: parameters,
			onComplete: function () {
				$('listing_internal_loading').hide();
				$('listing_internal_content').show();
				myActions.fadeIn('listing_internal_content');


				$$('#listing_home_scroll img').each(function(elem) {
					myActions.setOpacity(elem.id, 50);
				});
				$$('#listing_catalog_scroll img').each(function(elem) {
					myActions.setOpacity(elem.id, 50);
				});

				myActions.moveBoxCnt['listing_home_scroll'] = 0;
			}
		});
	},


	homeAccents: function ()
	{
		this.slideShow('home_accents', "myActions.homeAccentsCallBack", 10, 0.2, 5);
	},
	homeAccentsCallBack: function (elementId)
	{
		$$('#home_accents .fadeMe').each(function(elem) {
			$(elem.id + '_lister').className = '';
		});

		$(elementId + '_lister').className = 'active';
	},


	newsLetterSubmit: function ()
	{
		this.fadeOut('news_letter_form', "$('news_letter_form').hide(); $('news_letter_messages').show(); $('news_letter_loading').show(); myActions.newsLetterAjax");

		$('news_letter_loading').innerHTML = '<img src="' + root_directory + 'images/preloader.gif" alt="Loading..." />';
	},
	newsLetterAjax: function ()
	{
		var parameters = 'action=news_letter';
		parameters += '&newsletter=' + $('news_letter_email').value;
		new Ajax.Updater('news_letter_messages', root_directory + lang + '/ajax/', {
			method: 'post',
			parameters: parameters,
			onComplete: function () {
				$('news_letter_loading').hide();
				myActions.fadeIn('news_letter_messages');

				setTimeout("myActions.newsLetterBack()", 3000);
			}
		});
	},
	newsLetterBack: function ()
	{
		this.fadeOut('news_letter_messages', "$('news_letter_messages').hide(); $('news_letter_form').show(); myActions.fadeIn('news_letter_form'); vsNothing");
	},


	contactSubmit: function ()
	{
		this.fadeOut('site_form_fileds', "$('site_form_fileds').hide(); $('site_form_messages').show(); $('site_form_loading').show(); myActions.contactAjax");

		$('site_form_loading').innerHTML = '<img src="' + root_directory + 'images/preloader.gif" alt="Loading..." />';
	},
	contactAjax: function ()
	{
		var parameters = 'action=contact_form';
		parameters += '&name=' + $('nameid').value;
		parameters += '&email=' + $('emailid').value;
		parameters += '&subject=' + $('subjectid').value;
		parameters += '&reciver=' + $('reciverid').value;
		parameters += '&text=' + $('textid').value;

		new Ajax.Updater('site_form_messages', root_directory + lang + '/ajax/', {
			method: 'post',
			parameters: parameters,
			onComplete: function () {
				$('site_form_loading').hide();
				myActions.fadeIn('site_form_messages');

				setTimeout("myActions.contactSubmitCallBack()", 3000);
			}
		});
	},
	contactSubmitCallBack: function ()
	{
		this.fadeOut('site_form_messages', "$('site_form_messages').hide(); $('site_form_fileds').show(); myActions.fadeIn('site_form_fileds'); vsNothing");
	}
}



/// DO NOT MODIFIED / CONTROLS ARE IN: myActions ///



/**
* Fade effects class
* Author: Alexadner Gavazov
* Created date: 2007-07-17
*/
var visualFade = Class.create();
visualFade.prototype = Object.extend(myActions, {
	defFadeStep: 20, // Стъпка за намаляне на алфа филтъра !!! Min value < 10 !!!
	defFadeSec: 0.1, // Секунди за изпълнение на fade ефект
	defFadeStandSec: 2, // Секунди за показване на елемента преди да започне fade ефекта

	incrementZIndex: 1,


	/**
	 * Задаване на прозрачност за даден елемент
	 *
	 * @param	string		elementId	- ID на елемента с който ше работим
	 * @param	integer		opacity		- Прозрачност на елемент (0->100)
	 */
	setOpacity: function (elementId, opacity)
	{
		var element = $(elementId);

		element.style.opacity = opacity / 100;

		if(typeof element.style.MozOpacity == 'string')
		{
    		element.style.MozOpacity = opacity / 100;
		}
		else if(typeof element.style.KhtmlOpacity == 'string')
		{
    		element.style.KhtmlOpacity = opacity / 100;
		}
		else if(typeof element.style.filter == 'string')
		{
			if(element.style.width)
			{
				element.style.width = element.getWidth();
			}
			element.style.filter = 'alpha(opacity=' + opacity + ')';
		}
	},


	/**
	 * Рекурсивно задаване на прозрачност за даден елемент -> от 100 до 0
	 *
	 * @param	string		elementId	- ID на елемента с който ше работим
	 * @param	string		onComplete- стринг който ще се изпълни (eval) в края на рекурсията
	 * @param	integer		fadeStep	- Стъпка за намаляне на алфа филтъра
	 * @param	integer		fadeSec		- Секунди за изпълнение на fade ефект
	 * @param	integer		opacity		- Прозрачност на елемент (0->100)
	 */
	fadeOut: function (elementId, onComplete, fadeStep, fadeSec, opacity)
	{
		if(!fadeStep)
		{
			var fadeStep = this.defFadeStep;
		}
		if(fadeStep < 10)
		{
			var fadeStep = 10;
		}
		if(!fadeSec)
		{
			var fadeSec = this.defFadeSec;
		}

		var element = $(elementId);

		var outSec = fadeSec / fadeStep * 1000;

		if(!opacity && opacity != 0)
		{
			var opacity = 100;
		}

		this.setOpacity(elementId, opacity);

		if(opacity <= 0)
		{
			if(onComplete && onComplete != 'undefined')
			{
				eval(onComplete + '("' + elementId + '")');
			}

			return;
		}

		opacity = opacity - fadeStep;

		onComplete = onComplete.gsub('\'', '\\\'');
		onComplete = onComplete.gsub('"', '\"');

		setTimeout("myActions.fadeOut('" + elementId + "', '" + onComplete + "', " + fadeStep + ", " + fadeSec + ", " + opacity + ");", outSec);
	},


	/**
	 * Рекурсивно задаване на прозрачност за даден елемент -> от 0 до 100
	 *
	 * @param	string		elementId	- ID на елемента с който ше работим
	 * @param	string		onComplete- стринг който ще се изпълни (eval) в края на рекурсията
	 * @param	integer		fadeStep	- Стъпка за намаляне на алфа филтъра
	 * @param	integer		fadeSec		- Секунди за изпълнение на fade ефект
	 * @param	integer		opacity		- Прозрачност на елемент (0->100)
	 */
	fadeIn: function (elementId, onComplete, fadeStep, fadeSec, opacity)
	{
		if(!fadeStep)
		{
			var fadeStep = this.defFadeStep;
		}
		if(fadeStep < 10)
		{
			var fadeStep = 10;
		}
		if(!fadeSec)
		{
			var fadeSec = this.defFadeSec;
		}

		var element = $(elementId);

		// fun start
		element.style.zIndex = this.incrementZIndex;
		this.incrementZIndex++;

		var outSec = fadeSec / fadeStep * 1000;

		if(!opacity)
		{
			var opacity = 0;
		}

		this.setOpacity(elementId, opacity);

		if(opacity >= 100)
		{
			if(onComplete && onComplete != 'undefined')
			{
				eval(onComplete + '("' + elementId + '")');
			}

			element.style.zIndex--;
			return;
		}
		opacity = opacity + fadeStep;
		setTimeout("myActions.fadeIn('" + elementId + "', '" + onComplete + "', " + fadeStep + ", " + fadeSec + ", " + opacity + ");", outSec);
	},


	/**
	 * Slide show
	 *
	 * @param	string		elementId		- ID на елемента с който ше работим
	 * @param	string		onComplete		- стринг който ще се изпълни (eval) в края на рекурсията
	 * @param	integer		fadeStep		- Стъпка за намаляне на алфа филтъра
	 * @param	integer		fadeSec			- Секунди за изпълнение на fade ефект
	 * @param	integer		fadeStandSec	- Секунди за показване на елемента преди да започне fade ефекта
	 * @param	bool		isNoFirstExec	- Прозрачност на елемент (0->100)
	 */
	slideShow: function (elementId, onComplete, fadeStep, fadeSec, fadeStandSec, isNoFirstExec)
	{
		if(!fadeStep)
		{
			var fadeStep = this.defFadeStep;
		}
		if(fadeStep < 10)
		{
			var fadeStep = 10;
		}
		if(!fadeSec)
		{
			var fadeSec = this.defFadeSec;
		}
		if(!fadeStandSec)
		{
			fadeStandSec = this.defFadeStandSec;
		}

		var outSec = 0;
		var i = 1;

		this.incrementZIndex++;
		var this_z_increment = this.incrementZIndex;

		$$('#' + elementId + ' .fadeMe').each(function(elem) {
			if(!isNoFirstExec)
			{
				elem.style.zIndex = this_z_increment;
				isNoFirstExec = true;
			}
			else
			{
				outSec = ((fadeSec / fadeStep) + fadeStandSec) * i * 1000;
				setTimeout("myActions.fadeIn('" + elem.id + "', '" + onComplete + "', " + fadeStep + ", " + fadeSec + ");", outSec);
				i++;
			}
		});

		setTimeout("myActions.slideShow('" + elementId + "', '" + onComplete + "', " + fadeStep + ", " + fadeSec + ", " + fadeStandSec + ", true);", outSec);
	}
});





/**
* Author: Alexadner Gavazov
* Created date: 2007-07-19
*/
var visualMove = Class.create();
visualMove.prototype = Object.extend(myActions, {
	defMoveStep: 15,
	usedIdInTheMoment: new Array(),
	usedIdExec: 1,
	defRecursionTime: 100,
	moveBoxCnt: new Array(),


	arrowMove: function (elementId, containerId, action, movieStep)
	{
		var element = $(elementId);
		var container = $(containerId);

		var elementWidth = element.getWidth();
		var containerWidth = container.getWidth();

		if(action == 'stop' || elementWidth < containerWidth)
		{
			this.usedIdInTheMoment[elementId] = 'stop';
			return;
		}

		if(!movieStep)
		{
			var movieStep = this.defMoveStep;
		}

		this.usedIdInTheMoment[elementId] = 0;

		var stopTo = 0;
		if(action == 'left')
		{
			var stopTo = containerWidth - elementWidth;
		}
		else if(action == 'right')
		{
			var stopTo = 0;
		}
		else if(action == 'stop')
		{
			this.usedIdInTheMoment[elementId] = 'stop';
			return;
		}

		this.move(elementId, 'none', stopTo, movieStep, 75);
	},


	moveBox: function (elementId, moveStep, cntMovies, arrowLeft, arrowRight, action)
	{
		if(this.usedIdInTheMoment[elementId])
		{
			return;
		}


		if(!this.moveBoxCnt[elementId])
		{
			this.moveBoxCnt[elementId] = 0;
		}


		var element = $(elementId);

		var elementWidth = element.getWidth();
		var elementLeft = parseInt(element.style.left);

		var stopTo = 0;
		var exec = false;

		var leftClassName = $(arrowLeft).className.gsub('_active', '');
		var rightClassName = $(arrowRight).className.gsub('_active', '');

		if(action == 'left' && this.moveBoxCnt[elementId] - 1 > -cntMovies)
		{
			this.moveBoxCnt[elementId]--;
			var stopTo = elementLeft - moveStep;
			exec = true;
		}

		if(action == 'right' && this.moveBoxCnt[elementId] < 0)
		{
			this.moveBoxCnt[elementId]++;
			var stopTo = elementLeft + moveStep;
			exec = true;
		}


		// Change arrows
		if(action == 'right' && this.moveBoxCnt[elementId] == 0)
		{
			$(arrowLeft).className = leftClassName + '_active';
		}
		else if(cntMovies >= 2)
		{
			$(arrowLeft).className = leftClassName;
		}

		if(action == 'left' && this.moveBoxCnt[elementId] == (cntMovies * -1 + 1))
		{
			$(arrowRight).className = rightClassName + '_active';
		}
		else if(cntMovies >= 2)
		{
			$(arrowRight).className = rightClassName;
		}


		if(exec)
		{
			this.move(elementId, 'none', stopTo, 60, 50);
		}
	},


	move: function (elementId, startFrom, stopTo, moveStep, recursionTime, direction, usedIdExec)
	{
		if(this.usedIdInTheMoment[elementId] == 'stop')
		{
			this.usedIdInTheMoment[elementId] = 0;
			return;
		}
		else if(!this.usedIdInTheMoment[elementId])
		{
			var usedIdExec = this.usedIdExec
			this.usedIdInTheMoment[elementId] = usedIdExec;
			this.usedIdExec++;
		}
		else if(this.usedIdInTheMoment[elementId] != usedIdExec)
		{
			return;
		}

		if(!recursionTime)
		{
			var recursionTime = this.defRecursionTime;
		}

		if(!moveStep)
		{
			var moveStep = this.defMoveStep;
		}


		var element = $(elementId);


		if(startFrom != 'none')
		{
			startFrom = parseInt(startFrom);
			element.style.left = startFrom + 'px';
		}


		var leftPosition = parseInt(element.style.left);


		if(!direction)
		{
			var direction = (leftPosition < stopTo) ? 'right' : 'left';
		}


		if(direction == 'right')
		{
			element.style.left = (leftPosition + moveStep) + 'px';
		}
		else if(direction == 'left')
		{
			element.style.left = (leftPosition - moveStep) + 'px';
		}


		if((direction == 'right' && leftPosition < stopTo) || (direction == 'left' && leftPosition > stopTo))
		{
			setTimeout("myActions.move('" + elementId + "', 'none', " + stopTo + ", " + moveStep + ", " + recursionTime + ", '" + direction + "', " + usedIdExec + ");", recursionTime);
		}
		else
		{
			this.usedIdInTheMoment[elementId] = 0;
			element.style.left = stopTo + 'px';
		}
	}
});


// Call Back function on VS exec
function vsNothing()
{
	// Do nothing
}