﻿
jQuery.noConflict();
i = 1;
init = false;

jQuery(document).ready(function() {
    productsTimeOuts = new Array();
    newsTimeOuts = new Array();
    if (!init) {
        initSlide(newsTimeOuts, jQuery('#news-list'), jQuery('#news-list').find("li"), null, null, null, 1, 1, 0, 20, 10, jQuery('#news-list'), 2);
    }
    initSlide(productsTimeOuts, jQuery('#product-list'), jQuery('#product-list').find("td"), jQuery('.product-prev'), jQuery('.product-next'), 3, 96, 0);
});

function initSlide(repository, holder, items, prev, next, startEvent, step, dir, auto, duration, wait, stop, stopEvent) {

    /*  holder: Container element to move. Element 'position' style must to be 'relative' or 'absolute', to allow the movement effect.
        items: Container items list.
        prev: Selectable element for go to previous item.
        next: Selectable element for go to next item.
        startEvent: Type of mouse event for the selectables elements (0- click, 1- click automatic, 2- mouseenter, 3- mouseenter automatic, 4- mouseleave, 5- mouseleave automatic)
        step: Length of the unitary movement ('auto'- step = holder length)
        dir: Movement direction (0- Horizontal, 1- Vertical)
        auto: Automatic movement direction (null- Manual, 0- Left/Up, 1- Right/Down)
        duration: Unitary movement duration.
        wait: Delay time beteen movements.
        stop: Stop the movement in automatics movements, when mouse enter in the horder, and renew the movement when mouse leave the holder.
        stopEvent: Type of mouse event for the selectables elements (0- click, 1- click manual, 2- mouseenter, 3- mouseenter manual, 4- mouseleave, 5- mouseleave manual)
    */

    init = true;
    
    var container = items.parent();
    var containerHTML = container.html();
    container.append(containerHTML + containerHTML);

    if (duration == null) {duration = 1000;}
    if (wait == null | wait < 13) { wait = 13; }
    wait = duration + wait;

    if (stop != null && stop[0] != null) {
        switch (stopEvent) {
            case 0:
                stop.click(function() {
                    clearAllTimeouts(repository, holder);
                    return false;
                });
                break
            case 2:
                stop.mouseenter(function() {
                    clearAllTimeouts(repository, holder);
                });
                stop.mouseleave(function() {
                    //                        var new_pos = Math.ceil(len - (holder.css("top").replace("px", "").replace("-", "") - len));
                    //                        var new_dur = Math.ceil((duration * (new_pos * 100 / len)) / 100);
                    //                        goUp(holder, new_pos, len, auto, new_dur, wait);
                    restart(dir, repository, holder, step, len, auto, duration, wait);
                });
                break
            case 3:
                stop.mouseenter(function() {
                    clearAllTimeouts(repository, holder);
                });
                stop.mouseleave(function() {
                    restart(dir, repository, holder, step, len, null, duration, wait);
                });
                break    
            case 4:
                stop.mouseleave(function() {
                    clearAllTimeouts(repository, holder);
                });
                //                stop.mouseenter(function() {
                //                    restart(dir, holder, step, len, auto, duration, wait);
                //                });
                break
            case 5:
                stop.mouseleave(function() {
                    clearAllTimeouts(repository, holder);
                });
                //                stop.mouseenter(function() {
                //                    restart(dir, holder, step, len, auto, duration, wait);
                //                });
                break    
            default:
                stop.click(function() {
                    clearAllTimeouts(repository, holder);
                    return false;
                });
        }
    }

    if (dir == 0) {
        var len = Math.ceil(container.width() / 3);
        if (step == "auto") { step = len; }
        holder.css("left", "-" + len + "px");

        if (auto != null) {
            if (auto == 0) {
                goLeft(repository, holder, step, len, auto, duration, wait);
            }
            else {
                goRight(repository, holder, step, len, auto, duration, wait);
            }
        }

        if (next != null && next[0] != null) {
            switch (startEvent) {
                case 0:
                    next.click(function(event) {
                        clearAllTimeouts(repository, holder);
                        goLeft(repository, holder, step, len, auto, duration, wait);
                        return false;
                    });
                    break
                case 1:
                    next.click(function(event) {
                        clearAllTimeouts(repository, holder);
                        goLeft(repository, holder, step, len, 0, duration, wait);
                        return false;
                    });
                    break
                case 2:
                    next.mouseenter(function(event) {
                        clearAllTimeouts(repository, holder);
                        goLeft(repository, holder, step, len, auto, duration, wait);
                        return false;
                    });
                    break
                case 3:
                    next.mouseenter(function(event) {
                        clearAllTimeouts(repository, holder);
                        goLeft(repository, holder, step, len, 0, duration, wait);
                        next.mouseleave(function(event) { clearAllTimeouts(repository, holder); });
                        return false;
                    });
                    break
                case 4:
                    next.mouseleave(function(event) {
                        clearAllTimeouts(repository, holder);
                        goLeft(repository, holder, step, len, auto, duration, wait);
                        return false;
                    });
                    break
                case 5:
                    next.mouseleave(function(event) {
                        clearAllTimeouts(repository, holder);
                        goLeft(repository, holder, step, len, 0, duration, wait);
                        return false;
                    });
                    break
                default:
                    next.click(function(event) {
                        clearAllTimeouts(repository, holder);
                        goLeft(repository, holder, step, len, auto, duration, wait);
                        return false;
                    });
            }
        }

        if (prev != null && prev[0] != null) {
            switch (startEvent) {
                case 0:
                    prev.click(function(event) {
                        clearAllTimeouts(repository, holder);
                        goRight(repository, holder, step, len, auto, duration, wait);
                        return false;
                    });
                    break
                case 1:
                    prev.click(function(event) {
                        clearAllTimeouts(repository, holder);
                        goRight(repository, holder, step, len, 1, duration, wait);
                        return false;
                    });
                    break
                case 2:
                    prev.mouseenter(function(event) {
                        clearAllTimeouts(repository, holder);
                        goRight(repository, holder, step, len, auto, duration, wait);
                        return false;
                    });
                    break
                case 3:
                    prev.mouseenter(function(event) {
                        clearAllTimeouts(repository, holder);
                        goRight(repository, holder, step, len, 1, duration, wait);
                        prev.mouseleave(function(event) { clearAllTimeouts(repository, holder); });
                        return false;
                    });
                    break
                case 4:
                    prev.mouseleave(function(event) {
                        clearAllTimeouts(repository, holder);
                        goRight(repository, holder, step, len, auto, duration, wait);
                        return false;
                    });
                    break
                case 5:
                    prev.mouseleave(function(event) {
                        clearAllTimeouts(repository, holder);
                        goRight(repository, holder, step, len, 1, duration, wait);
                        return false;
                    });
                    break
                default:
                    prev.click(function(event) {
                        clearAllTimeouts(repository, holder);
                        goRight(repository, holder, step, len, auto, duration, wait);
                        return false;
                    });
            }
        }
    }
    else {
        var len = Math.ceil(container.height() / 3);
        if (step == "auto") { step = len; }
        holder.css("top", "-" + len + "px");

        if (auto != null) {
            if (auto == 0) {
                goUp(repository, holder, step, len, auto, duration, wait);
            }
            else {
                goDown(repository, holder, step, len, auto, duration, wait);
            }
        }

        if (next != null && next[0] != null) {
            switch (startEvent) {
                case 0:
                    next.click(function(event) {
                        clearAllTimeouts(repository, holder);
                        goUp(repository, holder, step, len, auto, duration, wait);
                        return false;
                    });
                    break
                case 1:
                    next.click(function(event) {
                        clearAllTimeouts(repository, holder);
                        goUp(repository, holder, step, len, 0, duration, wait);
                        return false;
                    });
                    break
                case 2:
                    next.mouseenter(function(event) {
                        clearAllTimeouts(repository, holder);
                        goUp(repository, holder, step, len, auto, duration, wait);
                        return false;
                    });
                    break
                case 3:
                    next.mouseenter(function(event) {
                        clearAllTimeouts(repository, holder);
                        goUp(repository, holder, step, len, 0, duration, wait);
                        next.mouseleave(function(event) { clearAllTimeouts(repository, holder); });
                        return false;
                    });
                    break
                case 4:
                    next.mouseleave(function(event) {
                        clearAllTimeouts(repository, holder);
                        goUp(repository, holder, step, len, auto, duration, wait);
                        return false;
                    });
                    break
                case 5:
                    next.mouseleave(function(event) {
                        clearAllTimeouts(repository, holder);
                        goUp(repository, holder, step, len, 0, duration, wait);
                        return false;
                    });
                    break
                default:
                    next.click(function(event) {
                        clearAllTimeouts(repository, holder);
                        goUp(repository, holder, step, len, auto, duration, wait);
                        return false;
                    });
            }

        }

        if (prev != null && prev[0] != null) {
            switch (startEvent) {
                case 0:
                    prev.click(function(event) {
                        clearAllTimeouts(repository, holder);
                        goDown(repository, holder, step, len, auto, duration, wait);
                        return false;
                    });
                    break
                case 1:
                    prev.click(function(event) {
                        clearAllTimeouts(repository, holder);
                        goDown(repository, holder, step, len, 1, duration, wait);
                        return false;
                    });
                    break
                case 2:
                    prev.mouseenter(function(event) {
                        clearAllTimeouts(repository, holder);
                        goDown(repository, holder, step, len, auto, duration, wait);
                        return false;
                    });
                    break
                case 3:
                    prev.mouseenter(function(event) {
                        clearAllTimeouts(repository, holder);
                        goDown(repository, holder, step, len, 1, duration, wait);
                        prev.mouseleave(function(event) { clearAllTimeouts(repository, holder); });
                        return false;
                    });
                    break
                case 4:
                    prev.mouseleave(function(event) {
                        clearAllTimeouts(repository, holder);
                        goDown(repository, holder, step, len, auto, duration, wait);
                        return false;
                    });
                    break
                case 5:
                    prev.mouseleave(function(event) {
                        clearAllTimeouts(repository, holder);
                        goDown(repository, holder, step, len, 1, duration, wait);
                        return false;
                    });
                    break
                default:
                    prev.click(function(event) {
                        clearAllTimeouts(repository, holder);
                        goDown(repository, holder, step, len, auto, duration, wait);
                        return false;
                    });
            }
        }
    }
}

function goLeft(r, h, s, l, a, d, sp) {

    var s1 = s + 5;
    h.animate({ "left": "-=" + s1 + "px" }, d, function() {
    
        h.animate({ "left": "+=5px" }, 350, function() {
        
            var x = h.css("left").replace("px", "");
            if (x <= -l * 2) {
                h.css("left", "-" + l + "px");
            }

            if (a != null) {
                i += 1;
                r[i] = setTimeout(function() {
                    if (a == 0) {
                        goLeft(r, h, s, l, a, d, sp);
                    }
                    else {
                        goRight(r, h, s, l, a, d, sp);
                    }
                }, sp);
            }
        
        })
        
    });
}

function goRight(r, h, s, l, a, d, sp) {

    var s1 = s + 5;
    h.animate({ "left": "+=" + s1 + "px" }, d, function() {

        h.animate({ "left": "-=5px" }, 350, function() {
        
            var x = h.css("left").replace("px", "");
            if (x >= 0) {
                h.css("left", "-" + l + "px");
            }

            if (a != null) {
                i += 1;
                r[i] = setTimeout(function() {
                    if (a == 0) {
                        goLeft(r, h, s, l, a, d, sp);
                    }
                    else {
                        goRight(r, h, s, l, a, d, sp);
                    }
                }, sp);
            }

        })
        
    });
}

function goUp(r, h, s, l, a, d, sp) {

    h.animate({ "top": "-=" + s + "px" }, d, function() {
    
        var y = h.css("top").replace("px", "");
        if (y <= -l * 2) {
            h.css("top", "-" + l + "px");
        }

        if (a != null) {
            i += 1;
            r[i] = setTimeout(function() {
                if (a == 0) {
                    goUp(r, h, s, l, a, d, sp);
                }
                else {
                    goDown(r, h, s, l, a, d, sp);
                }
            }, sp);
        }
        
    });
}

function goDown(r, h, s, l, a, d, sp) {

    h.animate({ "top": "+=" + s + "px" }, d, function() {
    
        var y = h.css("top").replace("px", "");
        if (y >= 0) {
            h.css("top", "-" + l + "px");
        }

        if (a != null) {
            i += 1;
            r[i] = setTimeout(function() {
                if (a == 0) {
                    goUp(r, h, s, l, a, d, sp);
                }
                else {
                    goDown(r, h, s, l, a, d, sp);
                }
            }, sp);
        }
        
    });
}

function restart(dir, r, h, s, l, a, d, sp) {

    if (dir == 0) {
        if (a == 0) {
            goLeft(r, h, s, l, a, d, sp);
        }
        else {
            goRight(r, h, s, l, a, d, sp);
        }
    }
    else {
        if (a == 0) {
            goUp(r, h, s, l, a, d, sp);
        }
        else {
            goDown(r, h, s, l, a, d, sp);
        }
    }
}

function clearAllTimeouts(r, h) {
    h.stop(true, true);
    for (key in r) {
        clearTimeout(r[key]);
    }
}  

