/*--------------------------------------------------------------
		    BERŞAN'S EFFING LITTLE LOGGER
---------------------------------------------------------------*/

(function (window) {
	
	var con = window.console || {log:function(){}};
	
	if (typeof(window.log) !== 'function') {
		
		window.log = function () {
			
			var date			= new Date(),
				time			= date.toLocaleTimeString(),
				milliseconds	= date.getMilliseconds(),
				args			= [],
				a				= arguments.length;
			
			milliseconds = ((milliseconds < 100) ? ((milliseconds < 10) ? "00" + milliseconds : "0" + milliseconds) : milliseconds);
			
			time = "[" + time + "." + milliseconds + "]";
			
			args.push(time);
			
			while (a--) {
				args.push(Array.prototype.shift.call(arguments));
			}
			
			/*	LOG GEÇMİŞİ İÇİN UNCOMMENT  */
			// window.log.history = window.log.history || [];
			// window.log.history.push(args);
			
			con.log.apply(con, args);
		}
		
	}
})(window);

/*--------------------------------------------------------------
		    BEGIN DOMREADY FREE ACTIONS
---------------------------------------------------------------*/



/*--------------------------------------------------------------
		    END DOMREADY FREE ACTIONS
---------------------------------------------------------------*/
	
/*--------------------------------------------------------------
		    BEGIN PAGE BASED SCRIPT DEFINITONS
---------------------------------------------------------------*/

Scripts = {};

Scripts.Common = function () {
	
	var attachSubmenus = function (elements) {
		
		//var stillHovered = false;
		
		elements.each( function (element) {
			
			var parent		= element.getParent(),
				subNav		= parent.getChildren(".subNav")[0],
				stillHovered = false;
			
			if ( subNav !== undefined ) {
				
				element.addEvent('mouseenter', function(){
					
					if ( !element.hasClass("current") ) {
						element.addClass("current");
					}
					
					stillHovered = true;
					
					subNav.setStyles({
						'visibility': "visible"
					});
					
				});
				
				element.addEvent('mouseleave', function(){
					
					stillHovered = false;
					
					(function(){
						
						if ( stillHovered ) {
						
							return true;
							
						} else {
							
							if ( element.hasClass("current") ) {
								element.removeClass("current");
							}
							
							subNav.setStyles({
								'visibility': "hidden"
							});
							
						}
						
					}).delay(50);
					
				});
				
				subNav.addEvent('mouseenter', function (){
					stillHovered = true;
				});
				
				subNav.addEvent('mouseleave', function (){
					
					stillHovered = false;
					
					element.fireEvent('mouseleave');
					
				});
				
				if ( subNav.getElements(".subNav").length > 0 ) {
					attachSubmenus(subNav.getElements('.subNav-item > a'));
				}
			}
			
		});
		
	}
	
	attachSubmenus(document.getElements(".navigation > li.nav-item > a"));
	
	/*-----*/
	/*
	if (swfobject) {
		var params = { 'menu': "false", 'wmode': "transparent" };
		swfobject.embedSWF("static/swf/logo.swf", "logo-swf", "530", "110", "9.0.0", false, false, params, false);
		
		if (document.id("indexAnimation") !== undefined) {
			swfobject.embedSWF("static/swf/epsa.swf", "indexAnimation", "100%", "370", "9.0.0", false, false, params, false);
		}
	}
	*/
	/*-----*/
	
	if (document.getElement(".btnGoBack")) {
		if (history.length < 1) {
			
			document.getElement(".btnGoBack").setStyles({
				'color': "#999",
				'cursor': "default",
				'text-decoration': "none"
			}).addEvent('click', function (event) {
				event.stop();
			});
		}
	}
	
	/*-----*/
	
	document.getElements("input.overtext[type=text][title]").each(function(element){
		element.overtext = new OverText(element, {"positionOptions": {
			'offset': {
				'x': element.getStyle("padding-left").toInt(),
				'y': element.getStyle("padding-top").toInt() + element.getStyle("padding-bottom").toInt()
			}
		}});
	});
	
	/*-----*/
	
	var smoothScroll = new Fx.SmoothScroll({
		'transition': Fx.Transitions.Cubic.easeInOut,
		'wheelStops': true
	});
	
	/*-----*/
	
	var forms = document.getElements("form");
	
	forms.each( function (form) {
		if (form.hasClass("validate")) {
		
			var options;
			
			if (typeof Lang !== "undefined" && typeof Lang.bdValidator !== "undefined" && typeof Lang.bdValidator.errorMessages !== "undefined" ) {
				options = Lang.bdValidator.errorMessages;
			} else {
				options = undefined;
			}
			
			new bdValidator(form, options);
			
			form.addEvent('validatedsubmit', function(event){
				
				if(this.get('method').toLowerCase() === 'post') {
					var form = this;
					var req = new Request({
						'url': this.action,
						'method': "post",
						'link': "ignore",
						'onRequest': function () {
							if ( form.get('class').contains('frmNewsletter') ) {
								form.spin({
									'content': {
										'styles': {
											'margin-left': -275
										}
									}
								});
							} else {
								form.spin();
							}
						},
						'onSuccess': function (responseTXT) {
							alert(responseTXT);
							form.unspin();
						},
						'onFailure': function () {
							alert('ERROR!');
							form.unspin();
						},
						'onComplete': function() {
							var id = ( form.get('id') || '');
							if ( id.contains('contactForm') ) {
								var captcha = form.getElement('img[src*=captcha.php]');
								captcha.set('src', captcha.get('src').replace(/cachebuster=\d+/, 'cachebuster='+Date.now()));
							}
						}
					});
					req.send(this.toQueryString());
				} else {
					document.location = this.get('action') + '?' + this.toQueryString();
				}
				
			});
		}
	});
	
	/*-----*/
	
	if (document.getElement(".btnPrint")) {
		document.getElement(".btnPrint").addEvent('click', function(event){
			event.stop();
			window.print();
		});
	}
	
	/*-----*/
	
	if (document.id('mb_presentationVideo')) {
		
		var size = document.id('mb_presentationVideo').measure(function(){return this.getSize()});
		
		document.getElement('.btnIntroVideo').set('rel', 'lightbox[inline '+size.x+' '+size.y+']');
		
	}
	
	/*-----*/
	
}

Scripts.Index = function () {
	
	var newsPanel = new NewsPanel(document.getElement(".news-list"), document.getElement(".news-pager"));
	
}

Scripts.Products = function () {
	if(document.getElement('.hasGallery')){document.getElements('.content-body table').each(function(table){table.setStyle('width', table.getSize().x - document.getElement('.productImages').getSize().x - 15)});}
}

/*--------------------------------------------------------------
		    END PAGE BASED SCRIPT DEFINITONS
---------------------------------------------------------------*/

/*--------------------------------------------------------------
		    BEGIN PAGE BASED SCRIPT INVOKER
---------------------------------------------------------------*/

document.addEvent("domready", function () {
	
	Scripts.Common();
	
	if (document.id("pageConfig") !== null) {
		window.pageConfig = JSON.decode(document.id("pageConfig").value);
	} else {
		var data = document.getElement(".wrapper").className.match(/lang_([a-zA-Z0-9]+)|page_([a-zA-Z0-9]+)/ig);
		data[0] = data[0] || "";
		data[1] = data[1] || "";
		window.pageConfig = {'id': data[1].replace("page_", ""), 'lang': data[0].replace("lang_", "")};
	}
	
	if (window.pageConfig !== null && typeof Scripts[window.pageConfig.id] === "function") {
		(Scripts[window.pageConfig.id])();
	}
	
});

/*--------------------------------------------------------------
		    END PAGE BASED SCRIPT INVOKER
---------------------------------------------------------------*/

/*--------------------------------------------------------------
		    BEGIN FORM VALIDATOR CLASS
---------------------------------------------------------------*/

var bdValidator = new Class({
	
	Implements: [Options],
	
	options: {
		'errorMessages': {
			'tr': {
				'title': "İşleminizi gerçekleştirmek için lütfen aşağıdaki hataları giderin:",
				'required': "Lütfen '%s' alanını doldurun.",
				'email': "Lütfen geçerli bir e.posta adresi girin",
				'number': "'%s' alanına yalnızca 0-9 arası sayılar girebilirsiniz.",
				'min': "Lütfen '%s' alanına en az %i karakter girin.",
				'max': "'%s' alanına en fazla %i karakter girebilirsiniz.",
				'checkbox': "'%s' seçeneklerinden en az %i adet seçmelisiniz.",
				'not': "Lütfen '%s' seçeneklerinden birini seçin." /* HACK */
			},
			'en': {
				'title': "Please correct the errors below:",
				'required': "Please fill in the '%s' field.",
				'email': "Please enter a valid e-mail address",
				'number': "You can only enter numbers in '%s' field.",
				'min': "Please enter at least %i characters in '%s' field.",
				'max': "'You can enter up to %i characters in '%s' field.",
				'checkbox': "You must choose at least %i option from '%s' options.",
				'not': "Please elect an option from '%s' list." /* HACK */
			}
		}
	},
	
	initialize: function (form, options) {
		
		var self = this;
		
		self.setOptions(options);
		
		self.form = $(form);
		self.elements = $(form).getElements("input[class*=validate_], textarea[class*=validate_], select[class*=validate_]");
		
		self.errors = [];
		
		self.attach();
		
	},
	
	attach: function () {
		
		var self = this;
		
		self.form.addEvent('submit', function (event) {
			
			
			event.stop();
			
			self.errors = [];
			
			for (var i = 0; i < self.elements.length; i++) {
				self.validate(self.elements[i]);
			}
			
			if (self.errors.length > 0) {
				
				var errorMsg = self.options.errorMessages[window.pageConfig['lang']]['title'];
					errorMsg += "\n\n----------------------------------------------------------------";
					errorMsg += "\n  [-]  ";
					errorMsg += self.errors.join("\n  [-]  ");
					errorMsg += "\n----------------------------------------------------------------";
				
				alert(errorMsg);
			} else {
				self.form.fireEvent('validatedsubmit', event);
			}
			
		});
		
	},
	
	validate: function (element) {
		
		var self = this;
		
		var classes = element.className.split(" ");
		
		for (var i = 0; i < classes.length; i++) {
			
			if (classes[i].indexOf("validate_") !== -1) {
				var testType = classes[i].replace("validate_", "").split("_")[0];
				
				var result = self.test(testType, element.get("value"), classes[i], element);
				
				if (result !== true) {
					self.errors.push(result);
					break;
				}
				
			}
			
		}
		
	},
	
	test: function (type, string, rawClass, element) {
		
		var self = this,
			isValid = true,
			invalidMessage = "";
		
		var fieldName = (element.get('title') !== null) ? element.get('title') : document.getElement("label[for="+element.get('id')+"]").get('text').replace(":", "");
		
		switch (type) {
			
			case "required":
				isValid = (string.length > 0);
				invalidMessage = self.options.errorMessages[window.pageConfig['lang']]['required'].replace("%s", fieldName);
			break;
			
			case "email":
				isValid = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(string);
				invalidMessage = self.options.errorMessages[window.pageConfig['lang']]['email'];
			break;
			
			case "number":
				isValid = !string.test(/[^0-9]/g);
				invalidMessage = self.options.errorMessages[window.pageConfig['lang']]['number'].replace("%s", fieldName);
			break;
			
			case "min":
				var minLength = rawClass.replace("validate_min_", "").toInt();
				isValid = (string.length >= minLength);
				invalidMessage = self.options.errorMessages[window.pageConfig['lang']]['min'].replace("%s", fieldName).replace("%i", minLength);
			break;
			
			case "max":
				var maxLength = rawClass.replace("validate_max_", "").toInt();
				isValid = (string.length <= maxLength);
				invalidMessage = self.options.errorMessages[window.pageConfig['lang']]['max'].replace("%s", fieldName).replace("%i", maxLength);
			break;
			
			case "checkbox":
				var atLeast = rawClass.replace("validate_checkbox_", "").toInt(),
					checkboxes = document.getElements("input[type=checkbox][name=" + element.get("name") + "]"),
					checkedCount = 0;
					
				for (var i = 0; i < checkboxes.length; i++) {
					checkedCount = (checkboxes[i].checked === true) ? checkedCount + 1 : checkedCount;
				}
				
				isValid = (checkedCount > atLeast);
				invalidMessage = self.options.errorMessages[window.pageConfig['lang']]['checkbox'].replace("%s", fieldName).replace("%i", atLeast);
			break;
			
			case "not":
				var not = rawClass.replace("validate_not_", "");
				isValid = (string != not);
				invalidMessage = self.options.errorMessages[window.pageConfig['lang']]['not'].replace("%s", fieldName);
			break;
		}
		
		if (isValid) {
			return true;
		} else {
			return invalidMessage;
		}
		
	}
});

/*--------------------------------------------------------------
		    END FORM VALIDATOR CLASS
---------------------------------------------------------------*/

/*--------------------------------------------------------------
		    BEGIN NEWS PANEL FX CLASS
---------------------------------------------------------------*/

var NewsPanel = new Class({
	
	initialize: function(panel, controllers) {
		
		var self = this;
		
		self.newsPanel = $(panel);
		self.news = $(panel).getElements("li");
		self.newsControllers = $(controllers).getElements("li");
		
		self.currentNews = ( controllers.getElement("li.current a") ) ? controllers.getElement("li.current a").get("text").toInt() - 1 : 0;
		
		self.attachEvents();
	},
	
	attachEvents: function () {
		
		var self = this;
		
		self.newsControllers.each(function (controller) {
			controller.addEvent("click", function (e) {
			
				e.stop();
				
				self.changeTo(this.get("text").toInt() - 1);
			});
		});
		
		self.newsPanel.addEvent("mousewheel", function(e) {
		
			e = new Event(e);
			e.stop();
			
			/* Mouse Wheel Up */
			if (e.wheel > 0) {
				self.changeTo(self.currentNews - 1);
			} 
			
			/* Mouse Wheel Down */
			else if (e.wheel < 0) {
				self.changeTo(self.currentNews + 1);
			}
		});
		
	},
	
	changeTo: function (newsIndex) {
		
		var self = this;
		
		if ( newsIndex >= 0 && newsIndex < self.news.length ) {
			
			self.newsPanel.morph({
				"margin-left": -(300 * newsIndex)
			});
			
			(self.news[self.currentNews]).fade("out");
			(self.news[newsIndex]).fade("in");
			
			(self.newsControllers[self.currentNews]).removeClass("current");
			(self.newsControllers[newsIndex]).addClass("current");
			
			self.currentNews = newsIndex;
		}
		
	}
});

/*--------------------------------------------------------------
		    END NEWS PANEL FX CLASS
---------------------------------------------------------------*/
