

var MainClass = function() {

	// EXTERNAL LINKS IMAGE
	this.externalLinksImage = "resources/v2.0/images/external.png";
	// SLIDESHOW INTERVAL
	this.slideShowSpeeds = new Array(1000, 2000, 3000, 4000, 5000);
	this.slideShowRefresh = 1000;
	
	// SLIDESHOW
	this.slideShowSpeed = this.slideShowSpeeds[2] / this.slideShowRefresh;
	this.slideShowPlaying = false;
	this.slideShowCounter = 0;
	this.slideCurrent = null;

};


MainClass.prototype = {



	// INIT
	init: function() {

		this.setMinHeight();
		this.externalLinks();
		this.spamProtection();
		this.splashInit();
		this.prepareSplash();
		this.prepareSnowboardForms();
		this.highlightEvaluationForms();
		this.initColors();
		
	},



	// SET MIN-HEIGHT
	setMinHeight: function() {

		var navigation = document.getElementById('page-navigation');
		var sidebar = document.getElementById('side-bar');
		var content = document.getElementById('content');
		var minHeight = navigation.clientHeight;
		if (sidebar && sidebar.clientHeight > minHeight) {
			minHeight = sidebar.clientHeight;
		}
		content.style.minHeight = minHeight + "px";

	},


	// TOGGLE COLLAPSING
	toggleCollapsing: function() {
	
		toggleClass(document.getElementById('page-navigation'), "Expanded", "Collapsing");
		this.setMinHeight();

	},


	// HIDE SIDE BAR
	hideSideBar: function() {

		addClass(document.body, "HideSideBar");
		this.setMinHeight();

	},


	// EXTERNAL LINKS
	externalLinks: function() {

		var myAnchors = document.getElementsByTagName("A");
		for (var i = 0, n = myAnchors.length; i < n; i++) {
			var urlhref = myAnchors[i].href;
			var urlexternal = (
				(!urlhref.indexOf("http://") || !urlhref.indexOf("https://"))
				&& urlhref.indexOf("http://" + document.location.host)
				&& urlhref.indexOf("https://" + document.location.host)
			);
			if (urlhref && urlexternal) {
				myAnchors[i].className = "External " + myAnchors[i].className;
				myAnchors[i].target = "_blank";
				var currclass = " " + myAnchors[i].className + " ";
				if (currclass.indexOf(" NoExternalImage ") < 0) {
					var myImg = document.createElement("img");
					myImg.src = this.externalLinksImage;
					myImg.className = "External";
					myAnchors[i].appendChild(document.createTextNode("\u00a0"));
					myAnchors[i].appendChild(myImg);
				}
			}
		}

	},


	// SPAM PROTECTION
	spamProtection: function() {

		var collection = document.getElementsByTagName("SPAN");
		for (var ccnt = 0; ccnt < collection.length; ccnt++) {
			var myElem = collection[ccnt];
			if (myElem.className != 'Protection') continue;
			var mySrc = myElem.firstChild.src;
			var myExp = /e=(.*)&n=(.*)&d=(.*)$/;
			var myMatch = mySrc.match(myExp);
			if (!myMatch) { alert("error"); continue; }
			var to = myMatch[1] + '.' + myMatch[3] + '@' + myMatch[2];
			to = to.rot13().reverse();
			var link = document.createElement('A');
			link.href = "mailto:" + to;
			link.appendChild(document.createTextNode(to));
			myElem.removeChild(myElem.firstChild);
			myElem.appendChild(link);
		}
		
	},



	// SPLASH INIT
	splashInit: function() {
		
		var myContainer = document.createElement('DIV');
		myContainer.id = "SplashContainer";
		
		var myCurtain = document.createElement('DIV');
		myCurtain.id = "SplashCurtain";
		myCurtain.onclick = function() {
			myMainClass.splashClose();
		};
		
		var myContent = document.createElement('DIV');
		myContent.id = "SplashContent";
		myContent.onclick = function() {
			myMainClass.splashClose();
		};
		
		var myProgress = document.createElement('DIV');
		myProgress.id = "SplashProgress";
		
		var myBar = document.createElement('DIV');
		myBar.appendChild(document.createTextNode("\u00a0"));
		myProgress.appendChild(myBar);
		
		var myNavigation = document.createElement('DIV');
		myNavigation.id = "SplashNav";
		var myControls = document.createElement('SPAN');
		myControls.className = "NavControls";
		var mySpeeds = document.createElement('SPAN');
		mySpeeds.className = "NavSpeeds";

		var myLink;
		
		myLink = document.createElement('A');
		myLink.href = "#nogo";
		myLink.className = "Prev";
		myLink.title = "Prev";
		myLink.appendChild(document.createTextNode("\u00a0"));
		myLink.onclick = function() {
			myMainClass.slidePrev();  return false;
		};
		myControls.appendChild(myLink);
		
		var myLink = document.createElement('A');
		myLink.href = "#nogo";
		myLink.className = "Play";
		myLink.title = "Play";
		myLink.appendChild(document.createTextNode("\u00a0"));
		myLink.onclick = function() {
			myMainClass.slideActivateButton(this);
			myMainClass.slidePlay();  return false;
		};
		myControls.appendChild(myLink);
		
		var myLink = document.createElement('A');
		myLink.href = "#nogo";
		myLink.className = "Pause Active";
		myLink.title = "Pause";
		myLink.id = "SplashControlStop";
		myLink.appendChild(document.createTextNode("\u00a0"));
		myLink.onclick = function() {
			myMainClass.slideStop();  return false;
		};
		myControls.appendChild(myLink);
		
		var myLink = document.createElement('A');
		myLink.href = "#nogo";
		myLink.className = "Next";
		myLink.title = "Next";
		myLink.appendChild(document.createTextNode("\u00a0"));
		myLink.onclick = function() {
			myMainClass.slideNext();  return false;
		};
		myControls.appendChild(myLink);
		
		var myLink = document.createElement('A');
		myLink.href = "#nogo";
		myLink.className = "SlideSpeed1";
		myLink.appendChild(document.createTextNode("1"));
		myLink.onclick = function() {
			myMainClass.slideActivateButton(this);
			myMainClass.slideSpeed(1);  return false;
		};
		mySpeeds.appendChild(myLink);
		
		var myLink = document.createElement('A');
		myLink.href = "#nogo";
		myLink.appendChild(document.createTextNode("2"));
		myLink.onclick = function() {
			myMainClass.slideActivateButton(this);
			myMainClass.slideSpeed(2);  return false;
		};
		mySpeeds.appendChild(myLink);
		
		var myLink = document.createElement('A');
		myLink.href = "#nogo";
		myLink.className = "Active";
		myLink.appendChild(document.createTextNode("3"));
		myLink.onclick = function() {
			myMainClass.slideActivateButton(this);
			myMainClass.slideSpeed(3);  return false;
		};
		mySpeeds.appendChild(myLink);
		
		var myLink = document.createElement('A');
		myLink.href = "#nogo";
		myLink.appendChild(document.createTextNode("4"));
		myLink.onclick = function() {
			myMainClass.slideActivateButton(this);
			myMainClass.slideSpeed(4);  return false;
		};
		mySpeeds.appendChild(myLink);
		
		var myLink = document.createElement('A');
		myLink.href = "#nogo";
		myLink.className = "SlideSpeed5";
		myLink.appendChild(document.createTextNode("5"));
		myLink.onclick = function() {
			myMainClass.slideActivateButton(this);
			myMainClass.slideSpeed(5);  return false;
		};
		mySpeeds.appendChild(myLink);
		
		myNavigation.appendChild(myControls);
		myNavigation.appendChild(mySpeeds);
		myContainer.appendChild(myCurtain);
		myContainer.appendChild(myContent);
		myContainer.appendChild(myNavigation);
		myContainer.appendChild(myProgress);
		document.body.appendChild(myContainer);
		
	},


	// PREPARE SPLASH
	prepareSplash: function() {
	
		var myElems = document.getElementsByTagName("SPAN");
		for (var i = 0; i < myElems.length; i++) {
			if (hasClass(myElems[i], "ImageSplash")) {
				var myLinks = myElems[i].getElementsByTagName("A");
				myLinks[0].onclick = function() {
					myMainClass.splashLoad(this.parentNode);
					return false;
				};
			}
		}
		
		var myElems = document.getElementsByTagName("DIV");
		for (var i = 0; i < myElems.length; i++) {
			if (hasClass(myElems[i], "Slide")) {
				var myLinks = myElems[i].getElementsByTagName("A");
				myLinks[0].onclick = function() {
					myMainClass.splashLoad(this.parentNode);
					return false;
				};
			}
		}
		
	},


	// SPLASH - LOAD
	splashLoad: function(node) {
		
		if (this.slideCurrent == node) {
			this.splashClose();
			return;
		}
		this.slideCurrent = node;
		node = node.cloneNode(true);
		var myLink = node.getElementsByTagName("A")[0];
		var myImage = myLink.getElementsByTagName("IMG")[0];
		
		var spl = myLink.href.split(/\?/);
		var search = spl[spl.length - 1];
		var spl = search.split(/-/);
		myImage.width = spl[0];
		myImage.height = spl[1];
		myImage.src = myLink.href;
		myLink.onclick = function() { return false; }
		node.style.width = spl[0] + "px";
		// clean up
		var content   = document.getElementById("SplashContent");
		while (content.hasChildNodes()) {
			content.removeChild(content.lastChild);
		}
		// update
		content.appendChild(node);
		var container = document.getElementById("SplashContainer");
		container.className = 'Open';
		if (hasClass(node, "Slide")) {
			container.className = 'Open Slide';
			this.slidePreload();
		}
		
		if (self.pageYOffset) {
			// Good browser
		} else {
			// IE
			myImage.src = " " + myLink.href;
		}
		if (typeof document.body.style.maxHeight == "undefined") {
			// IE6 or worse
			myImage.src = "" + myLink.href; // needed for some strange reason.
			var navigat = document.getElementById("SplashNav");
			if (document.documentElement.clientWidth) {
				content.style.top = document.documentElement.scrollTop + "px";
				navigat.style.top = document.documentElement.scrollTop + "px";
				container.style.height = document.documentElement.scrollHeight + "px";
			} else if (document.body.clientWidth) {
				content.style.top = document.body.scrollTop + "px";
				navigat.style.top = document.body.scrollTop + "px";
				container.style.height = document.body.scrollHeight + "px";
			}
			addClass(document.body, "Splash");
		}
	
	},


	// SPLASH - CLOSE
	splashClose: function() {
		this.slideStop();
		this.slideCurrent = null;
		var container = document.getElementById("SplashContainer");
		container.className = '';
		if (typeof document.body.style.maxHeight == "undefined") {
			// IE6 or worse
			container.style.height = "1px";
		}
		removeClass(document.body, "Splash");
	},


	// SLIDE - PRELOAD
	slidePreload: function() {
		var node = this.slideCurrent.nextSibling;
		if (!node)  node = this.slideCurrent.parentNode.firstChild;
		var myLink = node.getElementsByTagName("A")[0];
		var myImage = new Image;
		myImage.src = myLink.href;
	},
	// SLIDE - NEXT
	slideNext: function() {
		var node = this.slideCurrent.nextSibling;
		if (!node)  node = this.slideCurrent.parentNode.firstChild;
		this.splashLoad(node);
	},
	// SLIDE - PREVIOUS
	slidePrev: function() {
		var node = this.slideCurrent.previousSibling;
		if (!node)  node = this.slideCurrent.parentNode.lastChild;
		this.splashLoad(node);
	},
	// SLIDE - PLAY
	slidePlay: function() {
		if (this.slideShowPlaying)  return;
		this.slideShowPlaying = true;
		window.setTimeout("myMainClass.slideCount()", this.slideShowRefresh);
	},
	slideCount: function() {
		if (! this.slideShowPlaying)  return;
		var percent = Math.round(100 * ((this.slideShowCounter) / this.slideShowSpeed));
		//window.status = percent + "%";
		var progress = document.getElementById("SplashProgress").firstChild;
		progress.style.width = percent + "%";
		if (this.slideShowCounter == 0) {
			myMainClass.slideNext();
		}
		this.slideShowCounter++;
		if (this.slideShowCounter > this.slideShowSpeed) {
			this.slideShowCounter = 0;
		}
		window.setTimeout("myMainClass.slideCount()", this.slideShowRefresh);
	},
	// SLIDE - STOP
	slideStop: function() {
		myMainClass.slideActivateButton(document.getElementById("SplashControlStop"));
		this.slideShowPlaying = false;
	},
	// SLIDE - SPEED
	slideSpeed: function(speed) {
		this.slideShowSpeed = this.slideShowSpeeds[speed-1] / this.slideShowRefresh;
	},
	// SLIDE - ACTIVATE BUTTON
	slideActivateButton: function(button) {
		var siblings = button.parentNode.childNodes;
		for (var i = 0; i < siblings.length; i++) {
			removeClass(siblings[i], "Active");
		}
		addClass(button, "Active");
	},



	// PREPARE SNOWBOARD FORMS
	prepareSnowboardForms: function() {

		var myForms = document.getElementsByTagName('FORM');
		for (var i = 0; i < myForms.length; i++) {
			if (myForms[i].className == 'Snowboard') {
				var elems = myForms[i].elements;
				for (var k = 0; k < elems.length; k++) {
					if (elems[k].tagName != "SELECT" && elems[k].type != 'checkbox' && elems[k].type != 'radio') continue;
					elems[k].onclick = elems[k].onchange = function() {
						myMainClass.snowboardFormUpdate(this.form);
					};
				}
				myMainClass.snowboardFormUpdate(myForms[i]);
			}
		}

	},


	// SNOWBOARD FORM - UPDATE
	snowboardFormUpdate: function(myform) {

		var price = 0;
		var fields = myform.elements;
		for (var f = 0; f < fields.length; f++) {
			var fval = fields[f].value;
			if (! fval) continue;
			var atidx = fval.indexOf('@€');
			if (atidx < 0) continue;
			if (fields[f].type == 'checkbox' && ! fields[f].checked) continue;
			if (fields[f].type == 'radio' && ! fields[f].checked) continue;
			var myprice = parseFloat(fval.substring(atidx+2));
			if (myprice) price += myprice;
		}
		//alert(price);
		fields["config_price"].value = Math.round(price*100)/100 + " €";
		
	},


	// HIGHLIGHT EVALUATION FORMS
	highlightEvaluationForms: function() {

		var myForms = document.getElementsByTagName('FORM');
		for (var i = 0; i < myForms.length; i++) {
			if (myForms[i].className == 'AnalysisForm') {
				var inputs = myForms[i].getElementsByTagName('INPUT');
				for (var k = 0; k < inputs.length; k++) {
					if (inputs[k].type != 'radio') continue;
					inputs[k].onclick = inputs[k].onchange = function() {
						var radios = this.parentNode.parentNode.parentNode.getElementsByTagName('INPUT');
						for (var r = 0; r < radios.length; r++) {
							radios[r].parentNode.parentNode.className = (radios[r].checked)? "SelectedAnswer" : "Answer";
						}
					};
					inputs[k].parentNode.parentNode.className = (inputs[k].checked)? "SelectedAnswer" : "Answer";
				}
			}
		}

	},


	// INIT COLOR CHOOSER
	initColors: function() {

		var myChooser = document.createElement('DIV');
		myChooser.id = "color-chooser";
		var myDiv = document.createElement('DIV');
		myChooser.appendChild(myDiv);
		var myEm = document.createElement('EM');
		myEm.onclick = function() {
			myMainClass.buildColors(this);
			toggleClass(this.parentNode.firstChild, "Open", "Closed");
		}
		myEm.appendChild(document.createTextNode("couleur"));
		myChooser.appendChild(myEm);
		document.body.appendChild(myChooser);
		
	},


	// BUILD COLOR CHOOSER
	buildColors: function(myEm) {

		var cookie_h = readCookie("color_h");
		var cookie_s = readCookie("color_s");
		var myDiv = myEm.parentNode.firstChild;
		if (myDiv.className)  return;
		for (sat = 255; sat > 0; sat -= 32) {
			var myP = document.createElement('P');
			for (hue = 0; hue < 256; hue += 16) {
				var mySpan = document.createElement('SPAN');
				mySpan.hue = hue;
				mySpan.sat = sat;
				mySpan.title = hue + "-" + sat;
				mySpan.style.background = mySpan.style.color = this.HSV_TO_RGB(hue, sat, 128);
				if (hue == cookie_h && sat == cookie_s) {
					mySpan.style.color = "white";
				}
				mySpan.onclick = function() {
					writeCookie("color_h", this.hue);
					writeCookie("color_s", this.sat);
					window.location = window.location;
				}
				mySpan.appendChild(document.createTextNode("X"));
				myP.appendChild(mySpan);
			}
			myDiv.appendChild(myP);
		}
		
	},


	// HSV TO RGB
	HSV_TO_RGB: function (H, S, V) {
		
		H = H / 255;
		S = S / 255;
		V = V / 255;
		var R, G, B;
		
		if (S == 0) {
			R = G = B = V * 255;
		}
		else {
			var_H = H * 6;
			var_i = Math.floor( var_H );
			var_1 = V * ( 1 - S );
			var_2 = V * ( 1 - S * ( var_H - var_i ) );
			var_3 = V * ( 1 - S * (1 - ( var_H - var_i ) ) );

			if       (var_i == 0) { var_R = V     ; var_G = var_3  ; var_B = var_1 ; }
			else if  (var_i == 1) { var_R = var_2 ; var_G = V      ; var_B = var_1 ; }
			else if  (var_i == 2) { var_R = var_1 ; var_G = V      ; var_B = var_3 ; }
			else if  (var_i == 3) { var_R = var_1 ; var_G = var_2  ; var_B = V     ; }
			else if  (var_i == 4) { var_R = var_3 ; var_G = var_1  ; var_B = V     ; }
			else                  { var_R = V     ; var_G = var_1  ; var_B = var_2 ; }

			R = parseInt(var_R * 255);
			G = parseInt(var_G * 255);
			B = parseInt(var_B * 255);
		}

		return "rgb(" + R + "," + G + "," + B + ")";
		
	}


};




// Trim String
String.prototype.trim = function() {
	var a = this.replace(/^\s+/, '');
	return a.replace(/\s+$/, '');
};


// Reverse String
String.prototype.reverse = function() { 
	return this.split('').reverse().join('');
};


// Rot13
String.prototype.rot13 = function(){
		return this.replace(/[a-zA-Z]/g, function(c){
				return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);
		});
};



// node class helper functions

function hasClass(anode, aclass) {
	var myClasses = " " + anode.className + " ";
	return (myClasses.indexOf(" " + aclass + " ") >= 0);
};

function addClass(anode, aclass) {
	var myClasses = " " + anode.className + " ";
	if (myClasses.indexOf(" " + aclass + " ") < 0) {
		myClasses += " " + aclass;
		myClasses.trim();
		anode.className = myClasses;
	}
};

function removeClass(anode, aclass) {
	var myClasses = " " + anode.className + " ";
	var idx = myClasses.indexOf(" " + aclass + " ");
	if (idx >= 0) {
		myClasses = myClasses.substring(0, idx) + myClasses.substring(idx + aclass.length + 1);
		myClasses.trim();
		anode.className = myClasses;
	}
};

function toggleClass(anode, classA, classB) {
	if (hasClass(anode, classA)) {
		removeClass(anode, classA);
		addClass(anode, classB);
	} else {
		removeClass(anode, classB);
		addClass(anode, classA);
	}
}

function writeCookie(name, value, days) {
	var expires = "";
	if (days) {
		var date = new Date();
		date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
		expires = "; expires=" + date.toGMTString();
	}
	document.cookie = name + "=" + escape(value) + expires + "; path=/";
}

function readCookie(name) {
	var cook = " " + document.cookie;
	var idx0 = cook.indexOf(" " + name + '=');
	if (idx0 < 0)  return null;
	var idx1 = idx0 + name.length + 2;
	var idx2 = cook.indexOf(";", idx1);
	if (idx2 < 0)  idx2 = cook.length;
	return unescape(cook.substring(idx1, idx2));
}


// class instance
var myMainClass = new MainClass();


document.write("\n");
document.write("\n	<style type='text/css'>");
document.write("\n	div.SlideShow div.Slide h3,");
document.write("\n	div.SlideShow div.Slide div.Comment,");
document.write("\n	span.Protection img {");
document.write("\n		display: none;");
document.write("\n	}");
document.write("\n	</style>");
document.write("\n\n");


