﻿var SKTF = {
	init: function() {
		//this.formHandler.init();
		/*@cc_on
		@if (@_jscript_version < 5.7)
			try {
				document.execCommand("BackgroundImageCache", false, true);
			} catch (e) {}
		@end @*/
		SKTF.tabs.init();
		SKTF.resize.init();
		SKTF.togglejob.init();
	},
	
	getActualWidth: function(elem) {
		var elem = $(elem);
		var margin = SKTF.stripPx(elem.getStyle("margin-left")) + SKTF.stripPx(elem.getStyle("margin-right"));
		return elem.offsetWidth + margin;
    },

    getActualHeight: function(elem) {
        var elem = $(elem);
        var margin = SKTF.stripPx(elem.getStyle("margin-bottom")) + SKTF.stripPx(elem.getStyle("margin-top"));
        return elem.offsetHeight + margin;
    },

    stripPx: function(str) {
		var value = parseInt(str.substring(0, str.length - 2));
        if (isNaN(value)) {
			return 0;
        }
        return value;
    },
     
	formHandler: {
		errors: new Array(),
		init: function() {
			var commentForm = $(document).elmsByTag("form")[0];
			if (commentForm != null) {
				$("form input[type=text]")[0].addEvent("blur", SKTF.formHandler.validateName);
				$("form input[type=checkbox]")[0].addEvent("click", SKTF.formHandler.validateName);
				$("form input[type=text]")[1].addEvent("blur", SKTF.formHandler.validateEmail);
				$("form textarea")[0].addEvent("blur", SKTF.formHandler.validateText);
				$(commentForm).addEvent("submit", function(e) {
						var errorText = $("form p.error")[0];
						if (errorText != null) {
							errorText.parentNode.removeChild(errorText);
						}
						var nameIsOk = SKTF.formHandler.validateName(e, $("form input[type=text]")[0]);
						var emailIsOk = SKTF.formHandler.validateEmail(e, $("form input[type=text]")[1]);
						var commmentIsOk = SKTF.formHandler.validateText(e, $("form textarea")[0]);
						if (!nameIsOk || !emailIsOk || !commmentIsOk) {
							var p = document.createElement("p");
							var errorText = "Du har missat att fylla i några av de markerade fälten ovan.";
							if (!emailIsOk) {
								errorText += " Dubbelkolla också att din e-postadress är korrekt."	
							}
							p.appendChild(document.createTextNode(errorText));
							p.className="error";
							var submit = $("form input[type=submit]")[0];
							submit.parentNode.insertBefore(p, submit);
						}
						return false;
					}
				);
			}
		},
		validateName: function(e, field) {
			var hasField = field != null;
			field = hasField ? field : this;
			if (field.type == "text") {
				var text = field;
				var checkbox = $(field.id.replace(/(.*)Name/, "$1Anonymous"));
			} else {
				var text = $(field.id.replace(/(.*)Anonymous/, "$1Name"));				
				var checkbox = field;
			}
			if (text.value.trim().length == 0 && !checkbox.checked) {
				SKTF.formHandler.reportError(field);
				if (hasField) {
					return false;				
				}
			} else {
				SKTF.formHandler.reportOk(field);
				return true;
			}
		},
		validateEmail: function(e, field) {
			field = field != null ? field : this;
			if (field.value.trim().search(/(\w|\.|\-)+\@(\w|\.|\-)+\.[a-z]{2,6}$/)) {
				SKTF.formHandler.reportError(field);
				return false;
			} else {
				SKTF.formHandler.reportOk(field);
				return true;
			}
		},
		validateText: function(e, field) {
			field = field != null ? field : this;
			if (field.value.trim().length == 0) {
				SKTF.formHandler.reportError(field);
				return false;
			} else {
				SKTF.formHandler.reportOk(field);
				return true;
			}
		},
		reportError: function(field) {
			$(field.parentNode).addClass("error");
		},
		reportOk: function(field) {
			$(field.parentNode).removeClass("error");
		}
	},
	
	tabs: {
		init: function() {
			var tabbed = $(".tabbed").each(
				function() {
					var tabs = $($(this).elmsByClass("tabs")[0]).elmsByTag("A");
					if (tabs != null) {
						for (var i = 0; i < tabs.length; i++) {
							var tabContent = SKTF.getAnchoredElement(tabs[i]);
							if (i == 0) {
								$(tabs[0].parentNode).addClass("current");
								tabContent.style.display = "block";
							} else {
								tabContent.style.display = "none";								
							}
							$(tabs[i]).addEvent("click",
								function(e) {
									DOMAssistant.preventDefault(e);
									var anchor = e.eventTarget;
									while (anchor.tagName != "A") {
										anchor = anchor.parentNode;
									}
									var parent = $(anchor.parentNode);
									if (!parent.hasClass("current")) {
										var active = $(parent.parentNode).elmsByClass("current")[0];
										if (active != null) {
											active.removeClass("current");
											SKTF.getAnchoredElement($(active).elmsByTag("A")[0]).style.display = "none";										
										}
										parent.addClass("current");
										SKTF.getAnchoredElement(anchor).style.display = "block";
									}									
								}
							)
						}
					}
				}
			)
		}
	},
	
	resize: {
		bigText: 'Öka storleken',
		normalText: 'Normal storlek',
		init: function() {
			$(".resize").elmsByTag("A").each(function() {
					var a = $(this);
					a.innerHTML = SKTF.resize.bigText;
					a.addEvent("click",
					function(e) {
						DOMAssistant.preventDefault(e);
						var article = $$("article");
						if(article != null) {
							if(!article.hasClass("supersize")) {
									article.addClass("supersize");
									this.innerHTML = SKTF.resize.normalText;
								}
								else {
									article.removeClass("supersize");
									this.innerHTML = SKTF.resize.bigText;
								}
							}
						}
					);
				}
			);
		}
	},
	
	togglejob: {
		init: function() {
			$(".job-ad").each(function() {
					var ad = $(this);
					var slider = new SKTF.slider(ad.elmsByClass("job-description")[0]);
					$(ad.cssSelect("h2 a")[0]).addEvent("click", function(e) {
							DOMAssistant.preventDefault(e);
							slider.toggle();
						}
					)
				}
			);
		}
	},
	
	getAnchoredElement: function(anchor) {
		return $$(anchor.href.replace(/.*\#(.*)/, "$1"));
	}
}

SKTF.slider = function(elem) {
       this.duration = 700;
       this.sliderObject = $(document.createElement("div"));
       this.elem = $(elem);
       this.elem.parentNode.insertBefore(this.sliderObject, this.elem);
       this.sliderObject.appendChild(this.elem);
       this.sliderObject.style.position = "relative";
       this.sliderObject.style.overflow = "hidden";
       this.elem.style.width = this.sliderObject.offsetWidth - (SKTF.stripPx(elem.getStyle("padding-left")) + SKTF.stripPx(elem.getStyle("padding-right"))) + "px";
       this.elem.style.position = "absolute";
       this.elem.style.bottom = "0px";
       this.elem.style.left = "0px";
       this.elem.style.display = "block";
       this.actualHeight = SKTF.getActualHeight(this.elem);
       if (this.elem.hasClass("display")) {
               this.sliderObject.style.height = this.actualHeight + "px";
               this.isVisible = true;
       } else {
               this.sliderObject.style.height = "0px";
               this.isVisible = false;
       }
}
SKTF.slider.prototype.open = function() {
       var elem = this.elem;
       this.sliderObject.animate({ height: SKTF.getActualHeight(elem) }, { duration: this.duration, easing: this.easing, callback: function() { this.style.height = "auto"; elem.style.position = "relative"; } });
       this.isVisible = true;
}
SKTF.slider.prototype.close = function() {
       var elem = this.elem;
       this.sliderObject.animate({ height: 0 }, { duration: this.duration, easing: this.easing, callback: function(){ elem.style.position = "absolute" } });
       this.isVisible = false;
}
SKTF.slider.prototype.toggle = function() {
       if (this.isVisible) {
               this.close();
       } else {
               this.open();
       }
}
SKTF.slider.prototype.easing = function(timediff, base, change, duration) {
       return (timediff==duration) ? base+change : change * (-Math.pow(2, -10 * timediff/duration) + 1) + base;
}

DOMAssistant.DOMReady(SKTF.init);

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g, "") ;
}
