﻿/*<![CDATA[*/
//<!--
/*
		Libreria: re.libreria
		riscrittura in formato OOP della vecchia libreria, con aggiunta di nuove funzionalità.
		
		Autore: Marco Grazia
			data: 09 gennaio 2010
			versione: 0.0.1
			
		Rilasciata con licenza GPL 3.0
*/

// Evita che il sito venga incluso in un Frameset
if (self != top) {
	if (document.images) top.location.replace(window.location.href);
	else top.location.href = window.location.href;
} 

/*
	Classe element
	Permette di lavorare con gli elementi DOM della pagina
	
	Metodo d'uso: element.setStyle('pippo', 'color', 'red').setStyle('pippo', 'display', 'block');

*/
var elements = [];
var element = {
	/*
	        Metodo: cache
	        Mette nella cache un elemento DOM (metodo privato)
	        Argomenti:
	            - [string] id : l'id dell'elemento desiderato
	*/
	cache: function(id) {
				if(!elements[id]) {
					//elements[id] = document.getElementById(id);
					if (document.getElementById) {	// 	Mozilla + IE6/7
						elements[id] = document.getElementById(id);
					} else if (document.all) {	//	IE4
						elements[id] = document.all[id];
					} else if (document.layers) {	// 	Netscape 4
						elements[id] = document.layers[id];
					}
				}
    return elements[id];
    },	//	cache()
	
	/*
	        Metodo: get
	        Restituisce un elemento DOM basandosi sull'id dello stesso
	        Argomenti:
	            - [string] id : l'id dell'elemento desiderato
				
			Esempio d'uso: var valore = element.get('pippo').value;
	*/
	get: function(id) {
	return element.cache(id);
	},	//	get()	
	
	/*
	        Metodo: getStyle
	        recupera il valore dell stile inline di una proprietà css specificata
	        Argomenti:
	            - [string] id : l'id dell'elemento desiderato
	            - [string] css: la proprietà css
				
			Esempio d'uso: var valore = element.getStyle('pippo', 'color');
    */
    getStyle: function(id, css) {
		var ret = element.cache(id).style[css];
	return ret;
    },	//	getStyle()
	     
    /*
	        Metodo: setStyle
	        imposta lo stile inline ad una proprietà css specificata
	        Argomenti:
	            - [string] id : l'id dell'elemento desiderato
	            - [string] css: la proprietà css
	            - [string] value: il valore della proprietà css
				
			Esempio d'uso:  element.setStyle('pippo', 'color', 'red');
    */
    setStyle: function(id, css, value) {
		element.cache(id).style[css] = value;
	return element;
    },	//	setStyle() 
	
	/*
	        Metodo: setStyles
	        imposta lo stile inline ad una moltitudine di proprietà css specificate
	        Argomenti:
	            - [string] id : l'id dell'elemento desiderato
	            - [object] css: le proprietà css da impostare
				
			Esempio d'uso: element.setStiles('pippo', {'color': 'red', 'display': 'block', 'fontSize': '14px'});
	*/
	setStyles: function(id, css) {
		for (var p in css) {
			element.cache(id).style[p] = css[p];
		}
	return element;
	},	//	setStyles()
	
	/*
			Metodo: externalLinks
			sostituisce l'argomento target delle ancore, che in xhml strict non è previsto.
				
			Esempio d'uso: nel codice xhtml usare rel="" all'interno delle ancore a seconda che il link
				- [rel : external] per siti in lingua inglese
				- [rel : esterno] per siti in lingua italiana
				- [rel : interno] per aggiungere nel title la frase: "link interno al sito"
	*/
	externalLinks: function() {
		var anchors = document.getElementsByTagName("a");
		for (var i=0; i<anchors.length; i++) {
			var anchor = anchors[i];
			if (anchor.getAttribute("href")) {
				switch (anchor.getAttribute("rel")) {
					case 'esterno':	// Versione italiana.
						anchor.target = "_blank";
						if (anchor.title) anchor.title += " (Il link apre una nuova finestra)";
						if (!anchor.title) anchor.title = "Il link apre una nuova finestra";
					break;
					case 'interno':
						if (anchor.title) anchor.title += " (link interno al sito)";
						if (!anchor.title) anchor.title = "link interno al sito";
					break;
					case 'nofollow interno':	//	Caso di utilizzo del tag per Google (è una prova)
						if (anchor.title) anchor.title += " (link interno al sito)";
						if (!anchor.title) anchor.title = "link interno al sito";
					break;
					case 'external':	// Versione inglese.
						anchor.target = "_blank";
						if (anchor.title) anchor.title += " (Il link apre una nuova finestra in inglese)";
						if (!anchor.title) anchor.title = "Il link apre una nuova finestra in inglese";
					break;
					
					default:	//	se non è definito nessun attributo rel, non fa nulla!
				}
			}
		}
	},	//	externalLinks()
	
	/*
			Metodo: statusString
			sostituisce defaulStatus
			Argomenti:
				- [string] frase: una frase che sui vecchi browser viene mostrata nella status bar
				
			Esempio d'uso: element.statusString('frase da mostrare');
	*/
	statusString: function(frase) {
		defaultStatus = frase;
	},	//	statusString()
	
	/*
			Metodo: hideShow
			mostra o nasconde una sezione di testo nella pagina.
			nell'elemento da mostrare/nascondere, deve essere settata la proprietà CSS display: none;
			Argomenti:
				- [string] id: l'identificativo della sezione da mostrare/nascondere
				
			Esempio d'uso: element.hideShow('pippo');
	*/
	hideShow: function(id) {
		if (element.getStyle(id, 'display') == 'none') {
			element.setStyle(id, 'display', 'block');
		} else element.setStyle(id, 'display', 'none');
	},	//	hideShow()
	
	/*
			Metodo: stillLoading
			mostra un box a centro pagina in cui una gif animata simula l'attesa di caricamento pagina
			scompare appena la pagina è pronta	
			Argomenti:
				- nessuno
				
			Esempio d'uso: è caricato direttamente nell'evento load della pagina.
	*/
	stillLoading: function() {				
		document.write("<div id=\"loading\" style=\"position:absolute;top:50%;left:50%;width:250px;height:160px;margin:-80px 0 0 -125px;"+
				"text-align:center;border:1px solid red;padding:10px;background-color:#dcdcdc;\">");
		document.write("<p style=\"margin-top:30px;text-align:center;\">Attendi il caricamento</p>");
		document.write("<img style=\"margin:15px;\" src=\"img/loading.gif\" alt=\"Loader\" />");
		document.write("<p style=\"text-align:center;\">Please wait while loading</p>");
		document.write("</div>");
	}	//	stillLoading()
	
}
// Fine della classe Element

/*
	    Function: $
	    Recupera un elemento DOM basandosi sull'id
		abbrevia i nomi delle funzioni ad un semplice $
	    Argomenti:
	        - [string] id : l'id dell'elemento desiderato
				
		Esempio d'uso: var elemento = $('pippo');
*/
var $ = function(id) {
return element.get(id);
}
//	Fine di $

/*
	Class: Window
	Wrapper per l'oggetto window
*/
var Window = {
	/*
		Metodo: load
		imposta l'evento load
	*/
	load: function(fn) {
		window.addEventListener('load', fn, false);	
	}
}
//	Fine della classe Window


//	Gestisce i link nella pagina.
Window.load(function() {element.externalLinks();});
//	Definisce una frase di default sulla status bar dei vecchi browser.
Window.load(function() {element.statusString('StilisticaMente.biz');});

//	Mostra una icona di attesa caricamento pagina
//var oldBackColor = element.getStyle('sm', 'backgroundColor');
//element.setStyle('sm', 'backgroundColor', '#333');
element.stillLoading();
Window.load(function() {
	element.setStyle("loading", "display", "none");
	//element.setStyle('sm', 'backgroundColor', oldBackColor);
});
//-->
/*]]>*/
