/**
 * Configuration for site components javascript
 *
 * Configuration array structure:
 * {<component>: {<parameter>: value, <parameter>: value, ... }, ...}
 */
var siteComponentsConfig = {
    'tooltip': {
        'positionby': 'element' //Valid values: mouse (default), element
     },

    'keywords': {
        'elements': ['placeholder-content'],
        'skiptags': ['h1','h2','h3','h4','h5','h6'],
        'usetooltip': true
    }
    
    /*
    // Use this to override the default fontsizes in the fontsize selector
    // (html/lib/fontsize.js)
    
    'fontsize': {
        'sizes': ["10pt", "15pt", "24pt"]
    }
    */
    
};

var languageStrings = [];
var activeLanguage = '';

function setActiveLanguage(languageCode) {
	this.activeLanguage = languageCode;
}

function setWord(key, value, language) {
	if (this.languageStrings[language] == null) {
		this.languageStrings[language] = [];
	}
	this.languageStrings[language][key] = value;
}

function getWord(key) {
	return this.languageStrings[this.activeLanguage][key];
}

document.observe("dom:loaded", function() {
	autoLabel();
	articleIllustration();
	errorAlert();
});

/**
* Extension to Prototype Framework to overcome Internet Explorer's
* lack of event capturing support. Elements may subscribe
* to event notifications from other elements using the
* Element.subscribe() method. Subscribing to event notifications
* for a 'click' event is done like this:
* element.subscribe('click', this);
* The element must then add an event observer for this event
* in the 'broadcast' event space, like this:
* element.observe('broadcast:click', function(event) { ... }); 
*/
Element.addMethods({
	addSubscription: function(element, eventName, applicant) {
		if (Object.isUndefined(element.subscribers)) {
			element.subscribers = [];
		}
	
		if (Object.isUndefined(element.subscribers[eventName])) {
			element.subscribers[eventName] = [];
		}

		// Make sure applicant won't be added to subscription list more than once
		if (element.subscribers[eventName].indexOf(applicant) == -1) { 
//			console.log('Adding element "' + applicant.select('span')[0].innerHTML + '" to "' + eventName + '" subscription list');
			element.subscribers[eventName].push(applicant);
		} else {
//			console.log('Element "' + applicant.select('span')[0].innerHTML + '" NOT added to "' + eventName + '" subscription list');
		}

		element.observe(eventName, function(event) {
			console.log('Event "' + eventName + '" observed by scope element. Event source is "' + event.target.select('span')[0].innerHTML + '", and current target is "' + event.currentTarget.id + '"');
			element.subscribers[eventName].each( function(subscriber) {
				// Make sure the event won't be broadcasted to the event's source element 
				if (subscriber != event.target) {
//					console.log('Event source "' + event.target.select('span')[0].innerHTML + '" and subscriber "' + subscriber.select('span')[0].innerHTML + '" are not the same. Notifying subscriber about "' + eventName + '" event.');
					// Change the event's name space, ie. from "foo:bar" to "broadcast:bar"
					eventName = 'broadcast:' + eventName.substring(eventName.indexOf(':') + 1);
					subscriber.fire(eventName);
				} else {
//					console.log('Event source "' + event.target.select('span')[0].innerHTML + '" and subscriber "' + subscriber.select('span')[0].innerHTML + '" are the same. Notification about "' + eventName + '" event canceled.');
				}
			});
		});
		return element;
	},

	subscribe: function(element, eventName, provider) {
		provider.addSubscription(eventName, element);
		return element;
	}
});

function autoLabel() {
	$$('.autolabel').each( function(field) {
		defaultValue = field.value;

		field.observe('focus', function(event) {
			field.setValue('');
			field.removeClassName('blurred');
			field.addClassName('focused');
		});
	
		field.observe('blur', function(event) {
			if (field.value.length == 0) {
				field.setValue(defaultValue);
				field.removeClassName('focused');
				field.addClassName('blurred');
			}
		});
	});
}

function articleIllustration() {
	$$('.illustration.top .container').each( function(container) {
		container.previous().style.height = container.getHeight() + "px";
	});

	$$('.illustration.bottom .container').each( function(container) {
		container.previous().style.height = container.getHeight() + "px";
	});

	$$('.illustration.left .veil').each( function(veil) {
		veil.style.height = "100%";
		//veil.style.height = veil.previous().getHeight() + "px";
	});

	$$('.illustration.right .veil').each( function(veil) {
		veil.style.height = "100%";
		//veil.style.height = veil.previous().getHeight() + "px";
	});
}

function errorAlert() {
	$$('.ctwebform-element-validationerror').each( function(element) {
		Effect.Pulsate(element, {pulses: 5, duration: 2.5});
	});
}

function hideAllCalendarsPopups() {
    $$('*.small-calendar-popup').each(function(element) {element.hide();});
}



function nmsAddPerson(course) {	
	$('person-spinner').show();
	var numPersons = $("0-additionalPersons").getValue();
	numPersons++;
	$("0-additionalPersons").setValue(numPersons);	
	
	var personDiv = document.createElement("div");
	personDiv.setAttribute("id", numPersons+"-person");
	
	if(numPersons == 1) {
		$("addPerson").appendChild(personDiv);
	} else {
		var prevDiv = numPersons - 1;
		$("addPerson").insertBefore(personDiv, $(prevDiv+"-person"));
	}
	
	nmsGetPersonHtml(numPersons, course);	
	
}

function nmsGetPersonHtml(num, course) {
	
	new Ajax.Request('/xmlhttprequest.php?service=winorg.getPersonHtml&courseNumber='+course+'&personNumber='+num, {
		onSuccess : function(response) {
			$(num+"-person").update(response.responseText);	
			$('person-spinner').hide();
			$(num+"-person").highlight({startcolor: '#ffff99', endcolor: '#ffffff'});
		}	
	});
}

function nmsValidatePersonForm(form) {
	var numPersons = $("0-additionalPersons").getValue();
	var i;
	var noValidationErrorFound = true;
	
    $$(".validationError").each(function(element) {
    	element.removeClassName("validationError");
    });
    $("validationErrorMsg").update("&nbsp;")
    
    var regexp = new RegExp("(0[1-9]|1[0-9]|2[0-9]|3[01])\\.(0[1-9]|1[12])\\.\\d\\d\\d\\d");

    if($("ctwebform-element-0-fornavn").down("input").getValue().length == 0) {
    	$("ctwebform-element-0-fornavn").down("input").addClassName("validationError");
    	noValidationErrorFound = false;
    }
    
    if($("ctwebform-element-0-etternavn").down("input").getValue().length == 0) {
    	$("ctwebform-element-0-etternavn").down("input").addClassName("validationError");
    	noValidationErrorFound = false;
    }
    
    if($("ctwebform-element-0-dato").down("input").getValue().length != 0) {    	
		if(!regexp.test($("ctwebform-element-0-dato").down("input").getValue())) {
			$("ctwebform-element-0-dato").down("input").addClassName("validationError");
			noValidationErrorFound = false;
		}    	
    }   

	
	for(i=1;i<=numPersons;i++) {
		//-fornavn
		//-etternavn
		if($(i+"-fornavn").getValue().length == 0) {
			$(i+"-fornavn").addClassName("validationError");	
			noValidationErrorFound = false;
		}
		if($(i+"-etternavn").getValue().length == 0) {
			$(i+"-etternavn").addClassName("validationError");
			noValidationErrorFound = false;
		}	
		if($(i+"-dato").getValue().length != 0) {
			// Validate date format DD.MM.YYYY
			if(!regexp.test($(i+"-dato").getValue())) {
				$(i+"-dato").addClassName("validationError");
				noValidationErrorFound = false;
			}			
		}
		
	}
	
	if(noValidationErrorFound == false) {
		$("validationErrorMsg").update("En eller flere felter mangler innhold eller har ugylig verdi og er markert med rød ramme.")
		$("validationErrorMsg").highlight({startcolor: '#ff0000', endcolor: '#ffffff'});
	}		
	
	return noValidationErrorFound;
	
}


function nmsSaveFormData(form) {
	
	var data = form.serialize(true);
	
	new Ajax.Request('/xmlhttprequest.php?service=winorg.saveData', {
		
		method: 'post',
		parameters: data,
		
		onSuccess : function(response) {
			//alert(response.responseText);
			$("test").update(response.responseText);	
		}	
	});	
	
}


document.observe("dom:loaded", function() {
    $$('div.suggestionform').first().down('h3').observe('click', function(event) {
        var contentElement = $$('div.suggestionform').first().down('div.tile-content');
        if (contentElement.getStyle('display') == 'block') {
            contentElement.setStyle('display:none;');
        } else {
            contentElement.setStyle('display:block;');
        }
    });
});
