function domLoad(i){
    var u = navigator.userAgent;
    var e =/*@cc_on!@*/ false;
    var st = setTimeout;
    if (/webkit/i.test(u)) {
        st(function(){
            var dr = document.readyState;
            if (dr == "loaded" || dr == "complete") {
                i()
            } else {
                st(arguments.callee, 10);
            }
        }, 10);
    } else if ((/mozilla/i.test(u) && !/(compati)/.test(u)) || (/opera/i.test(u))) {
        document.addEventListener("DOMContentLoaded", i, false);
    } else if (e) {
        (function(){
            var t = document.createElement('doc:rdy');
            try {
                t.doScroll('left');
                i();
                t = null;
            } catch (e) {
                st(arguments.callee, 0);
            }
        })();
    } else {
        window.onload = i;
    }
}

function $id(element, from) {
    if (from) {
        var elem = from.getElementById(element);
    } else {
        var elem = document.getElementById(element);
    }
    if (elem) {
        return elem;
    } else {
        return false;
    }
}

function $tag(element, from) {
    if (from) {
        var elem = from.getElementsByTagName(element);
    } else {
        var elem = document.getElementsByTagName(element);
    }
    if (elem) {
        return elem;
    } else {
        return false;
    }
}

function arrow() {
    if ($id('news')) {
        var element = $id('news');
    } else if ($id('categoryThumbs')) {
        var element = $id('categoryThumbs');
    } else {
        return false;
    }
    var links = $tag('a', element);

    for(var i = 0; i < links.length; i++) {
        if (links[i].className == 'arrow') {
            var link = links[i];
        } else {
            break;
        }

        link.onmouseover = function() {
            this.style.background = "transparent url(images/arrow-right-small.jpg) no-repeat scroll 10px center";
        };

        link.onmouseout = function() {
            this.style.background = "transparent url(images/arrow-right-small.jpg) no-repeat scroll left center";
        };
    }
}

function slideText() {
    if(!$id('para')) return false;
    var para = $id('para');

    para.style.height = "387px";
    para.style.overflow = "hidden";

    var paraSlide = $id('paraSlide');
    paraSlide.style.position = "relative";

    var items = $tag('dl', paraSlide);

    if(items.length > 1) {
        /* dynamic link */
        var ul = document.createElement('ul');
        var previousList = document.createElement('li');
        previousList.setAttribute('id', 'previousList');
        var previousPara = document.createElement('a');
        previousPara.setAttribute('id', 'previousPara');
        previousPara.setAttribute('href', '#');
        var previousBtn = document.createElement('img');
        previousBtn.setAttribute('src', 'images/arrow-left-large.jpg');

        previousPara.style.display = "none";
        previousPara.appendChild(previousBtn);
        previousList.appendChild(previousPara);
        ul.appendChild(previousList);

        var nextList = document.createElement('li');
        nextList.setAttribute('id', 'nextList');
        var nextPara = document.createElement('a');
        nextPara.setAttribute('id', 'nextPara');
        nextPara.setAttribute('href', '#');
        var nextBtn = document.createElement('img');
        nextBtn.setAttribute('src', 'images/arrow-right-large.jpg');

        nextPara.appendChild(nextBtn);
        nextList.appendChild(nextPara);
        ul.appendChild(nextList);

        para.appendChild(ul);
        /* dynamic link */

        /* calculate total width of paraSlide */
        paraSlide.style.width = (para.offsetWidth * items.length) + "px";

        for(var i = 0; i < items.length; i++) {
            var item = items[i];
            
            /* reset item width as para and height as paraSlide */
            item.style.width = para.offsetWidth + "px";
            
            if(item.offsetHeight > parseInt(para.style.height)) {
                para.style.height = (parseInt(item.offsetHeight) + 20 + ul.offsetHeight) + "px";
                paraSlide.style.height = item.offsetHeight + "px";
            }
            
            item.style.height = parseInt(paraSlide.style.height) + "px";
            item.style.margin = 0;
        }

        previousPara.onclick = function() {
            var initPos = parseInt(item.style.width);
            var currentPos = parseInt(paraSlide.style.left);
            var totalDist = parseInt(paraSlide.style.width);

            if(currentPos == 0) {
                return false;
            }

            if (currentPos == initPos * -1) {
                this.style.display = "none";
            } else {
                $id('nextPara').style.display = "inline";
            }

            var distance = (currentPos + initPos) * -1;

            if(!this.className || this.className == 'run') {
                animePara('paraSlide', 'previous', distance);
            }
            
            return false;
        };

        nextPara.onclick = function() {
            var initPos = parseInt(item.style.width);
            var currentPos = parseInt(paraSlide.style.left);
            var totalDist = parseInt(paraSlide.style.width);

            if(currentPos <= ((totalDist - initPos) * -1)) {
                return false;
            }

            if (currentPos <= ((totalDist - (initPos * 2)) * -1)) {
                this.style.display = "none";
            } else {
                $id('previousPara').style.display = "inline";
            }

            if (currentPos) {
                var distance = (currentPos - initPos) * -1;
            } else {
                var distance = initPos;
            }

            if(!this.className || this.className == 'run') {
                animePara('paraSlide', 'next', distance);
            }
            
            return false;
        };
    }
}


function animePara(element, direction, distance) {
    if(!$id(element)) return false;
    var object = $id(element);
    var totalDistance = '-' + (parseInt(object.style.width) - distance);

    if(object.movement) {
        clearTimeout(object.movement);
    }

    if(!object.style.left) {
        object.style.left = "0px";
    }

    var position = parseInt(object.style.left);

    if(direction == 'previous' && distance > position) {
        var button = $id('previousPara');
        var move = Math.floor((position + distance) / 2);
        position = position - move;
    }

    if(direction == 'next' && position > ('-' + distance)) {
        var button = $id('nextPara');
        var move = Math.ceil((distance + position) / 2);
        position = position - move;
    }

    if(button && position == distance * -1) {
        button.className = "run";
    } else if (button) {
        button.className = "stop";
    }

    object.style.left = position + "px";
    var repeat = "animePara('" + element + "', '"+ direction + "' ," + distance + ")";
    object.movement = setTimeout(repeat, 75);
}


function gallery() {
    if(!$id('source')) return false;
    var source  = $id('source');
    var links = $tag('a', source);

    var indexImg = $id('indexImg');
    var titleImg = $id('titleImg');
    
    var currentImg = document.createElement('span');
    currentImg.setAttribute('id', 'currentImg');
    var index = document.createTextNode(' - ' + 1);
    currentImg.appendChild(index);

    var totalImg = document.createElement('span');
    totalImg.setAttribute('id', 'totalImg');
    var index = document.createTextNode(' di ' + links.length);
    totalImg.appendChild(index);

    indexImg.appendChild(currentImg);
    indexImg.appendChild(totalImg);

    if(!$id('zoom')) return false;
    var zoom = $id('zoom');
    if(!$id('zoomImg')) return false;
    var zoomImg = $id('zoomImg');

    zoomImg.style.display = "none";
    zoomImg.onload = function() {
        this.style.display = "inline";
    };

    if(zoomImg.complete) {
        zoomImg.style.display = "inline";
    }

    /* dynamic button */
    var previousImg = document.createElement('a');
    previousImg.setAttribute('id', 'previousImg');
    previousImg.setAttribute('href', '#');
    var previousBtn = document.createElement('img');
    previousBtn.setAttribute('src', 'images/arrow-left-medium.jpg');

    previousImg.appendChild(previousBtn);
    zoom.insertBefore(previousImg, zoomImg);

    var nextImg = document.createElement('a');
    nextImg.setAttribute('id', 'nextImg');
    nextImg.setAttribute('href', '#');
    var nextBtn = document.createElement('img');
    nextBtn.setAttribute('src', 'images/arrow-right-medium.jpg');

    nextImg.appendChild(nextBtn);
    zoom.appendChild(nextImg);
    /* dynamic button */
    if(links.length <= 1) {
        nextImg.style.display = "none";
    }
    previousImg.style.display = "none";

    previousImg.onclick = function() {
        var src = zoomImg.getAttribute('src');

        for(var i = 0; i < links.length; i++) {
            var href = links[i].getAttribute('href');
            if((src.indexOf(href) > 1) || src == href) {
                var pos = i;
            }
        }

        if (pos > 0) {
            nextImg.style.display = "block";
            var preHref = links[pos-1].getAttribute('href');
            
            zoomImg.setAttribute('src', preHref);
            zoomImg.style.display = "none";
            zoomImg.onload = function() {
                this.style.display = "inline";
            };
            
            if (links[pos - 1].getAttribute('title')) {
                var preTitle = links[pos - 1].getAttribute('title');
                titleImg.firstChild.nodeValue = preTitle;
            }
            
            currentImg.firstChild.nodeValue = " - " + (pos);
        }

        if(pos <= 1) {
            previousImg.style.display = "none";
        }
        return false;
    };

    nextImg.onclick = function() {
        var src = zoomImg.getAttribute('src');

        for(var i = 0; i < links.length; i++) {
            var href = links[i].getAttribute('href');
            if((src.indexOf(href) > 1) || src == href) {
                var pos = i;
            }
        }

        if (pos < links.length) {
            previousImg.style.display = "block";
            var nextHref = links[pos+1].getAttribute('href');
            
            zoomImg.setAttribute('src', nextHref);
            zoomImg.style.display = "none";
            zoomImg.onload = function() {
                this.style.display = "inline";
            };
            
            if (links[pos + 1].getAttribute('title')) {
                var nextTitle = links[pos + 1].getAttribute('title');
                titleImg.firstChild.nodeValue = nextTitle;
            }
            
            currentImg.firstChild.nodeValue = " - " + (pos + 2);
        }

        if(pos + 1 >= links.length - 1) {
            nextImg.style.display = "none";
        }
        return false;
    };
    
    for(var i = 0; i < links.length; i++) {
        
        var link = links[i];
        var pos = i;
        var href = link.getAttribute('href');
        var title = (link.getAttribute('title')) ? link.getAttribute('title') : null;
        var span = $tag('span', link)[0];

        /* load thumbnails */
        /*modificato da filippo*/
        if(href.indexOf('grandi') > 1) {
            var newImg = new Image();
            var thumb = href.replace('grandi', 'thumb');

			newImg.src = thumb;
        }

        link.pos = pos;
        link.href = href;
        link.title = (title) ? title : null;
        link.span = span;
        link.thumb = thumb;
        
        /* show thumb */
        link.onmouseover = function() {
            this.span.style.display = "none";

            var hover = document.createElement('img');
            hover.setAttribute('src', this.thumb);
            
            if (!this.getElementsByTagName('img')[0]) {
                this.appendChild(hover);
            }
            
            return false;
        };

        /* hide thumb */
        link.onmouseout = function(e) {
            if (!e) var e = window.event;

            var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;

            if (reltg) {
                while (reltg.tagName != 'BODY') {
                    if (reltg.href == this.href) {
                        return;
                    }
                    reltg = reltg.parentNode;
                }
            }

            this.span.style.display = "inline-block";
            
            if (this.getElementsByTagName('img')[0]) {
                var hover = this.getElementsByTagName('img')[0];
                this.removeChild(hover);
            }
            
            return false;
        };

        /* swap image */
        link.onclick = function() {
            
            nextImg.style.display = "block";
            previousImg.style.display = "block";
            if(this.pos == 0) {
                nextImg.style.display = "block";
                previousImg.style.display = "none";
            }
            if(this.pos == links.length - 1) {
                previousImg.style.display = "block";
                nextImg.style.display = "none";
            }

            var src = zoomImg.getAttribute('src');
            if(src.indexOf(this.href) > 1 || src == this.href) {
                return false;
            }

            zoomImg.setAttribute('src', this.href);
            zoomImg.style.display = "none";
            zoomImg.onload = function() {
                this.style.display = "inline";
            };
            
            if (this.title) {
                titleImg.firstChild.nodeValue = this.title;
            }
            currentImg.firstChild.nodeValue = " - " + (this.pos + 1);
            
            return false;
        };
    }
}

function metadata() {
    if(!$tag('meta')) return false;
    var metadata = $tag('meta');
    
    for (var i = 0; i < metadata.length; i++) {
        if (metadata[i].getAttribute('http-equiv') == "content-language") {
            var lang = metadata[i].getAttribute('content');
            return lang;
        }
    }    
}

function toggle() {
    /* preload image */
    var image = new Image();
    image.src = "images/open.jpg";

    if(!$id('text')) return false;
    var description = $id('text');
    if(!$tag('h1', description)) return false;
    var h1 = $tag('h1', description)[0];
    if(!$tag('blockquote', description)) return false;
    var blockquote = $tag('blockquote', description)[0];
    
    if(metadata() == "it") {
        var openText = "Visualizza testo";
        var closeText = "Nascondi testo";
    } else {
        var openText = "View text";
        var closeText = "Hide text";
    }
    /* dynamic link */
    var trigger = document.createElement('a');
    trigger.className = "toggle";
    trigger.setAttribute('href', '#');
    var text = document.createTextNode(closeText);
    trigger.appendChild(text);
    h1.appendChild(trigger);

    trigger.onclick = function() {
        var display = blockquote.style.display;
        var title = $tag('span', h1)[0];
        var text = this.firstChild;
        if(!display || display == 'block') {
            title.style.display = "none";
            blockquote.style.display = "none";
            
            if(text.nodeType == 3) {
                text.nodeValue = openText;
                this.style.backgroundImage = "url(images/open.jpg)";
            }
        } else {
            title.style.display = "block";
            blockquote.style.display = "block";
            
            if(text.nodeType == 3) {
                text.nodeValue = closeText;
                this.style.backgroundImage = "url(images/close.jpg)";
            }
        }
        return false;
    };
}

function prepareForm(){
    if (!document.getElementById('form')) return false;
    var form = document.getElementById('form');
    var email = document.getElementById('email');
    var messaggio = document.getElementById('messaggio');
    form.onsubmit = function(){
        return validateForm(this);
    }
    email.onblur = function(){
        if (!validMail(this)) {
            alert('Erreat Mail!');
        }
    }
    messaggio.onblur = function(){
        if (!validField(this)) {
            alert('Erreat Messaggio!');
        }
    }
}

function validField(field){
    if (field.value.length < 1 || field.value == field.defaultValue) {
        return false;
    } else {
        return true;
    }
}

function validMail(field){
    input = field.value;
    pattern = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;
    if (!input.match(pattern)) {
        return false;
    } else {
        return true;
    }
}

function validateForm(whichForm){
    for (var i = 0; i < whichForm.elements.length; i++) {
        var element = whichForm.elements[i];
        if (element.className == 'required') {
            if (!validField(element)) {
                if (element.getAttribute('name') == 'messaggio') {
                    alert("Errata Messaggio");
                } else {
                    alert("Errata");
                }
                return false;
            }
        }

        if (element.getAttribute('name') == 'email') {
            if (!validMail(element)) {
                alert("Errata Mail");
                return false;
            }
        }
    }
    return true;
}

domLoad(arrow);
domLoad(slideText);
domLoad(gallery);
domLoad(toggle);
domLoad(prepareForm);
