/*-- Combined Scripts for YUI Slideshow --*/

/*-- slideshow - slideShow_AJAX_init.js --*/

var slideShow_AJAX_xmlHttp = slideShow_AJAX_createXmlHttpRequestObject();

// create XMLHttpRequest
function slideShow_AJAX_createXmlHttpRequestObject() {
        
    // store link to the XMLHttpRequest
    var AJAX_xmlHttp;

    // IE
    if(window.ActiveXObject) {
        try {
            slideShow_AJAX_xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e) {
            slideShow_AJAX_xmlHttp = false;
        }
    }
    // Mozilla or any other browser
    else {
        try {
            slideShow_AJAX_xmlHttp = new XMLHttpRequest();
        }
        catch (e) {
            slideShow_AJAX_xmlHttp = false;
        }
    }
    
    if(!slideShow_AJAX_xmlHttp) {
        alert('Error! Can not create object XMLHttpRequest.');
    }
    else {
        return slideShow_AJAX_xmlHttp;
    }
}

function slideShow_AJAX_run_async_query(query, callback_func_name) {
    
    if(slideShow_AJAX_xmlHttp.readyState==4 || slideShow_AJAX_xmlHttp.readyState==0) {
        slideShow_AJAX_xmlHttp.open("GET", query, true);
        slideShow_AJAX_xmlHttp.onreadystatechange = function() { slideShow_AJAX_response_handler(callback_func_name); };
        slideShow_AJAX_xmlHttp.send(null);
    }
    else {
        setTimeout('slideShow_AJAX_run_async_query(\'' + query + '\',\'' + callback_func_name + '\')', 1000);
    }
}
 
function slideShow_AJAX_response_handler(callback_func_name) {

    if(slideShow_AJAX_xmlHttp.readyState==4) {
        if(slideShow_AJAX_xmlHttp.status==200) {
            var htmlResponse = slideShow_AJAX_xmlHttp.responseText;
            if (htmlResponse != null) {
                eval(callback_func_name + '(htmlResponse)');
            }
        }
        else {
            alert('There are problems with server - ' + slideShow_AJAX_xmlHttp.statusText);
        }
    }
}

/*-- slideshow - slideShow_config.js --*/

/**************************************
*   Config file for the slide show    *
*   Change it carefully, please!      *
**************************************/


/*******************************************************************************
* User Manual                                                                  *
********************************************************************************
*                                                                              *
* Please do not use '<div />' inside <div /> in the data file                  *
* It is possible to use only one <img /> per one <div /> tag in data file      *
*                                                                              *
* You can use follow functions for your own functions:                         *
* - setUnsetPause(mode); // set's pause or start's slide show                  *
* - isOnPause(); if slide show is paused - return's true else - false          *
* - showSlideById(id_slide, mode); // mode ('slideshow', 'intro', 'custom')    *
* - showPrevSlide(mode);                                                       *
* - showNextSlide(mode);                                                       *
* - transitionSetWidthInterval(width_min, width_max)                           *
* - transitionSetHeightInterval(height_min, height_max)                        *
* - transitionStart(object, transition)                                        *
* - preloadSlide(slide_html) // you must preload each slide before show        *
*******************************************************************************/

function slideShow_config() {

    // path to the file with data
    this.path_to_the_file_with_data_for_show = '/data_home.html';

    // default transition values
    this.transitionWidthMin = 0;
    this.transitionWidthMax = 630;
    this.transitionHeightMin = 0;
    this.transitionHeightMax = 260;
    
    // transitions
    this.arr_transition = new Array(// opacity is 0
                                    { opacity: { from: 0, to: 1 } },
                                    // opacity and width (from left to right) is 1
                                    { opacity: { from: 0, to: 1 }, width: { from: this.transitionWidthMin, to: this.transitionWidthMax } },
                                    // opacity and widh and height (from top left corner to the bottom right corner) is 2
                                    { opacity: { from: 0, to: 1 }, width: { from: this.transitionWidthMin, to: this.transitionWidthMax }, height: { from: this.transitionHeightMin, to: this.transitionHeightMax } }
                                   );

    
    // default
    this.default_number_of_seconds_to_show_each_slide = 7;
    this.default_transition = this.arr_transition[0];
    this.custom_func_name = ''; // run's one time
    
    // intro 
    // (if config.arr_id_data.length ==0 - show all exept intro)
    this.show_intro = false;
    this.arr_intro_id_data = new Array('intro');
    this.arr_intro_number_of_seconds_to_show_each_slide = new Array(10);
    this.arr_intro_transition = new Array(this.arr_transition[0]);
    this.arr_intro_call_back_function_name = new Array();

    // slide show 
    // if take_all_data_from_file is false, and arr_slideshow_id_data is null - 
    // script will try to show all slides from file, except intro slides
    this.show_only_first_slide = false;
    this.take_all_data_from_file = true;
    this.arr_slideshow_id_data = new Array('custom_0');
    this.arr_slideshow_number_of_seconds_to_show_each_slide = new Array();
    this.arr_slideshow_transition = new Array();
    this.arr_slideshow_call_back_function_name = new Array();

    // buttons
    this.button_show_button = true;
    //this.button_number_of_visible_buttons = 3; // doesn't work
    this.arr_img_button_normal = new Array('/images/home-btn1.jpg','/images/home-btn2.jpg', '/images/home-btn3.jpg','/images/home-btn4.jpg');
    //this.arr_img_button_over = new Array('btn1_over.jpg', 'btn2_over.jpg', 'btn3_over.jpg');
    this.arr_img_button_selected = new Array('/images/home-btnover1.jpg','/images/home-btnover2.jpg', '/images/home-btnover3.jpg','/images/home-btnover4.jpg');

	
    this.button_img_pause_normal = '/images/home-btnpause.jpg';
    //this.button_img_pause_over = 'btn_pause_over.jpg';
    this.button_img_pause_selected = '/images/home-btnplay.jpg';
	
// preload selected images

btn1= new Image(); 
  btn1.src=this.arr_img_button_selected[0]; 
  
btn2= new Image(); 
  btn2.src=this.arr_img_button_selected[1]; 
  
btn3= new Image(); 
  btn3.src=this.arr_img_button_selected[2]; 
  
btn4= new Image(); 
  btn4.src=this.arr_img_button_selected[3]; 
  
btn5= new Image(); 
  btn5.src=this.arr_img_button_selected[4]; 
  
btnp= new Image(); 
  btnp.src=this.button_img_pause_selected; 	

	
    this.button_img_arrow_next_normal = '/images/home-btnnext.jpg';
    this.button_img_arrow_next_over = '/images/home-btnnext.jpg';
    this.button_img_arrow_next_selected = '/images/home-btnnext.jpg';
    this.button_img_arrow_prev_normal = '/images/home-btnprev.jpg';
    this.button_img_arrow_prev_over = '/images/home-btnprev.jpg';
    this.button_img_arrow_prev_selected = '/images/home-btnprev.jpg';
}

/*-- slideshow - slideShow_engine.js --*/

// globals
var ua = navigator.userAgent.toLowerCase();
var isOpera = (ua.indexOf('opera') > -1);
var isSafari = (ua.indexOf('safari') > -1);
var isIE = (window.ActiveXObject);

if (isIE) {
    //MSIE HACK
    document.execCommand("BackgroundImageCache", false, true);
}
var config = new slideShow_config();

YAHOO.namespace('widget.slideshow');
YAHOO.widget.slideshow.timeOut = config.default_number_of_seconds_to_show_each_slide;
YAHOO.widget.slideshow.effects = config.default_transition;
YAHOO.widget.slideshow.currentSlide = 0;
YAHOO.widget.slideshow.currentZindex = 0;
YAHOO.widget.slideshow.timer = -1;


// functions

// functions that can be used by user ******************************************

// 
setUnsetPause = function(mode) {
    
    var obj_img_pause = document.getElementById('slideShow_img_pause');
    if(isOnPause()) {
        if(config.button_img_pause_normal != '' && obj_img_pause) {
            obj_img_pause.src = config.button_img_pause_normal;
        }
        startTimer(mode);
    }
    else {
        if(config.button_img_pause_selected != '' && obj_img_pause) {
            obj_img_pause.src = config.button_img_pause_selected;
        }
        stopTimer();
    }
}

// 
isOnPause = function() {
    
    var result = false;
    if(YAHOO.widget.slideshow.timer==null) {
        result = true;
    }

    return result;
}


// 
showSlideById = function(id_slide, mode) {

    if(mode != 'custom') {
        var slide_number = arraySearch(id_slide, config.arr_slideshow_id_data);
        if(slide_number!=-1) {
            if(YAHOO.widget.slideshow.currentSlide != slide_number) {
                YAHOO.widget.slideshow.currentSlide = slide_number;
                stopTimer();
                YAHOO.widget.slideshow.loadSlide(id_slide,  mode);
            }
        }
        else {
            alert('function showSlideById. Wrong id_slide.');
        }
    }
    else {
        YAHOO.widget.slideshow.loadSlide(id_slide,  mode);
    }
}

// 
showPrevSlide = function(mode) {
    // custom !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    if(config.button_img_arrow_prev_selected!='' && config.button_show_button) {
        document.getElementById('slideShow_button_prev').src = config.button_img_arrow_prev_selected;
    }
    
    if((YAHOO.widget.slideshow.currentSlide - 1) >= 0) {
        var slide_number = YAHOO.widget.slideshow.currentSlide - 1;
    }
    else {
        var slide_number = config.arr_slideshow_id_data.length - 1;
    }
    
    showSlideById(config.arr_slideshow_id_data[slide_number], mode);
}

// 
showNextSlide = function(mode) {
    // custom !!!!!!!!!!!!!!!!!!!!!!!!!!
    if(config.button_img_arrow_next_selected!='' && config.button_show_button) {
        document.getElementById('slideShow_button_next').src = config.button_img_arrow_next_selected;
    }
    
    if((YAHOO.widget.slideshow.currentSlide + 1) < config.arr_slideshow_id_data.length) {
        var slide_number = YAHOO.widget.slideshow.currentSlide + 1;
    }
    else {
        var slide_number = 0;
    }
    
    showSlideById(config.arr_slideshow_id_data[slide_number], mode);
}

//
transitionSetWidthInterval = function(width_min, width_max) {
    
    config.transitionWidthMin = width_min;
    config.transitionWidthMax = width_max;
}

//
transitionSetHeightInterval = function(height_min, height_max) {
    
    config.transitionHeightMin = height_min;
    config.transitionHeightMax = height_max;
}

//
transitionStart = function (object, transition) {
    
    var animSlide = new YAHOO.util.Anim(object, transition, 1, YAHOO.util.Easing.easeOut);
    animSlide.animate();
}

//
preloadSlide = function(slide_html) {
    
    document.getElementById('slide_container').innerHTML += slide_html;
}

// system functions ************************************************************

// this function is in the body onload tag
startSlideShow = function() {

    if(config.path_to_the_file_with_data_for_show != '' && (config.arr_slideshow_id_data.length > 0 || config.take_all_data_from_file)) {
        var slide_show_container = document.getElementById('slideshow');
        if (slide_show_container != null) {
            slide_show_container.innerHTML = '<div id="slide_container"></div>' +
                                             '<div id="button_container"></div>';
            slideShow_AJAX_run_async_query(config.path_to_the_file_with_data_for_show, 'getDataFromTheDataFileAndStartSlideShow')
        }
        else {
            alert('There is no container with id=slideshow!');
        }
    }
    else {
        alert('There is no data file!');
    }
}

// run's when response from the server recived with data for slide show
getDataFromTheDataFileAndStartSlideShow = function(htmlResponse) {

    var slide_container = document.getElementById('slide_container');
    if(slide_container != null) {
        // run custom function
        if(config.custom_func_name!='') {
            eval(config.custom_func_name);
        }
        // initialization
        slideShow_initialization(slide_container, htmlResponse);
        
        // show intro (no buttons, mode='intro')
        if(config.show_intro) {
            showIntro();
        }
        // show slides (mode='slideshow')
        else {
            YAHOO.widget.slideshow.loadSlide(config.arr_slideshow_id_data[0], 'slideshow');
        }
    }
    else {
        alert('There is a problem with HTML!');
    }
}

// Show intro (no buttons in intro mode)
showIntro = function() {
    
    if (config.arr_intro_id_data.length > 0) {
        YAHOO.widget.slideshow.loadSlide(config.arr_intro_id_data[0], 'intro');
    }
}

//
slideShow_initialization = function(slide_container, htmlResponse) {
        
    //slide_container.innerHTML = htmlResponse;
    preloadSlide(htmlResponse);
    YAHOO.widget.slideshow.box = new YAHOO.widget.Overlay("slideshow");
    YAHOO.widget.slideshow.box.cfg.setProperty("visible", true);
    
    // looking for all div ids
    var arr_all_slide_id_from_slide_container = getAllSlideIdFromSlideContainer(slide_container);
            
    // looking for all div ids that are not equals to the intro div ids
    if(config.take_all_data_from_file || config.arr_slideshow_id_data.length == 0) {       
        config.arr_slideshow_id_data = getAllSlideIdExceptIntro(arr_all_slide_id_from_slide_container);
    }

    // set all slide's (div's) opacity to 0 and all <img id /> to img_id_slide
    for(i = 0; i < arr_all_slide_id_from_slide_container.length; i++) {
        if (document.getElementById(arr_all_slide_id_from_slide_container[i]) != null) {
            YAHOO.util.Dom.setStyle(document.getElementById(arr_all_slide_id_from_slide_container[i]), 'opacity', 0);
            if(document.getElementById(arr_all_slide_id_from_slide_container[i]).getElementsByTagName('img').length == 1) {
                document.getElementById(arr_all_slide_id_from_slide_container[i]).getElementsByTagName('img')[0].id = 'img_' + arr_all_slide_id_from_slide_container[i];
            }
        }
    }
}

// Load slide
YAHOO.widget.slideshow.loadSlide = function(id_slide, mode) {

    var div = YAHOO.util.Dom.get(id_slide);
    var img = YAHOO.util.Dom.get('img_' + id_slide);
        
    if (YAHOO.widget.slideshow.effects.opacity) {
        YAHOO.util.Dom.setStyle(div, 'opacity', 0);
    }
    if (YAHOO.widget.slideshow.effects.width) {
        if (img!=null) {
            YAHOO.util.Dom.setStyle(img, 'width', config.transitionWidthMin);
        }
        YAHOO.util.Dom.setStyle(div, 'width', config.transitionWidthMin);
    }
    if (YAHOO.widget.slideshow.effects.height) {
        if (img!=null) {
            YAHOO.util.Dom.setStyle(img, 'height', config.transitionHeightMin);
        }
        YAHOO.util.Dom.setStyle(div, 'height', config.transitionHeightMin);
    }
    YAHOO.util.Dom.setStyle(div, 'z-index', YAHOO.widget.slideshow.currentZindex);
    YAHOO.widget.slideshow.currentZindex++;
    
    transitionStart(div, YAHOO.widget.slideshow.effects);
    if (img!=null) {
        transitionStart(img, YAHOO.widget.slideshow.effects);
    }
    
    // execute function for the current slide
    var arr_func_name = new Array();
    switch(mode) {
        case 'slideshow':
            arr_func_name = config.arr_slideshow_call_back_function_name;
            break;
        case 'intro':
            arr_func_name = config.arr_intro_call_back_function_name;
            break;
    }
    if(arr_func_name[YAHOO.widget.slideshow.currentSlide]) {
        setUnsetPause();
        eval(arr_func_name[YAHOO.widget.slideshow.currentSlide] + '()');
        setUnsetPause();
    }
    
    // show buttons
    buttons_show(mode);
   
    // start timer
    if(!isOnPause() && !config.show_only_first_slide) {
        startTimer(mode);
    }
}

// Load next slide !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
YAHOO.widget.slideshow.loadNextSlide = function(mode) {
// --bad code
    // get and increase current index for id slide array
    var arr_id_data = new Array();
    switch(mode) {
        case 'slideshow':
            arr_id_data = config.arr_slideshow_id_data;
            break;
        case 'intro':
            arr_id_data = config.arr_intro_id_data;
            break;
    }
    YAHOO.widget.slideshow.currentSlide++;
    if (!arr_id_data[YAHOO.widget.slideshow.currentSlide]) {
        YAHOO.widget.slideshow.currentSlide = 0;
        if(config.show_intro) {
            config.show_intro = false;
            mode = 'slideshow';
        }
    }
    var arr_id_data = new Array();
    var arr_transition = new Array();
    var arr_timeout = new Array();
    var arr_func_name = new Array();
    switch(mode) {
        case 'slideshow':
            arr_id_data = config.arr_slideshow_id_data;
            var arr_transition = config.arr_slideshow_transition;
            var arr_timeout = config.arr_slideshow_number_of_seconds_to_show_each_slide;
            var arr_func_name = config.arr_slideshow_call_back_function_name;
            break;
        case 'intro':
            arr_id_data = config.arr_intro_id_data;
            var arr_transition = config.arr_intro_transition;
            var arr_timeout = config.arr_intro_number_of_seconds_to_show_each_slide;
            var arr_func_name = config.arr_intro_call_back_function_name;
            break;
    }
// -- bad code

    // set transition for the current slide
    if(!arr_transition[YAHOO.widget.slideshow.currentSlide]) {
        YAHOO.widget.slideshow.effects = config.default_transition;
    }
    else {
        YAHOO.widget.slideshow.effects = arr_transition[YAHOO.widget.slideshow.currentSlide];
    }
    
    // set timeout for the current slide
    if(!arr_timeout[YAHOO.widget.slideshow.currentSlide]) {
        YAHOO.widget.slideshow.timeOut = config.default_number_of_seconds_to_show_each_slide;
    }
    else {
        YAHOO.widget.slideshow.timeOut = arr_timeout[YAHOO.widget.slideshow.currentSlide];
    }
    
    // load current slide
    var id_slide = arr_id_data[YAHOO.widget.slideshow.currentSlide];
    YAHOO.widget.slideshow.loadSlide(id_slide, mode);
    
    // hide previous slide
    /*if(YAHOO.widget.slideshow.currentSlide!=0) {
        id_slide = config.arr_slideshow_id_data[YAHOO.widget.slideshow.currentSlide-1];
    }
    else {
        id_slide = config.arr_slideshow_id_data[config.arr_slideshow_id_data.length-1];
    }
    if(document.getElementById('img_' + id_slide)) {
        document.getElementById('img_' + id_slide).style.opacity = 0;
    }
    document.getElementById(id_slide).style.opacity = 0;*/
}

// Show buttons and highlight button of current slide !!!!!!!!!!!!!!!!!!!!!!!!!!
buttons_show = function(mode) {
    
    if(config.button_show_button && mode=='slideshow') {
        var button_container = document.getElementById('button_container');
        if (button_container != null && config.arr_img_button_normal.length > 0 /*&& config.arr_img_button_over.length > 0 */&& config.arr_img_button_selected.length > 0) {
            var button_html = '';
            
            // arrow prev
            if(config.button_img_arrow_prev_normal != '') {
                button_html += '<a href="" onclick="showPrevSlide(\'' + mode + '\'); return false"><img src="' + config.button_img_arrow_prev_normal + '" id="slideShow_button_prev" /></a>';
            }
            
            // button pause
            /*if(config.button_img_pause_normal != '') {
                var img_pause = config.button_img_pause_normal;
            }
            if(isOnPause()) {
                if(config.button_img_pause_selected != '') {
                    img_pause = config.button_img_pause_selected;
                }
            }
            if(img_pause) {
                button_html += '<a href="" onclick="setUnsetPause(\'' + mode + '\'); return false"><img src="' + img_pause + '" id="slideShow_img_pause" /></a>';
            }*/
            
            // numbered buttons
            for(i = 0; (i < config.arr_img_button_normal.length && i < config.arr_slideshow_id_data.length); i++) {//колво слайдов содкт быть больше, коли&divide;ес&divide;то унопок - нет
                var button_img = config.arr_img_button_normal[i];
                if(i == YAHOO.widget.slideshow.currentSlide && config.arr_img_button_selected[i]) {
                    button_img = config.arr_img_button_selected[i];
                }
                button_html += '<a href="" onclick="showSlideById(\'' + config.arr_slideshow_id_data[i] + '\',\'' +  mode + '\'); return false;"><img src="' + button_img + '" /></a>';
            }
            
            // arrow next
            if(config.button_img_arrow_next_normal != '') {
                button_html += '<a href="" onclick="showNextSlide(\'' + mode + '\'); return false"><img src="' + config.button_img_arrow_next_normal + '" id="slideShow_button_next" /></a>';
            }
            
            // Z_INDEX!!!!!!!!!!!!!!!!!!!!!!! button_number_of_visible_buttons!!!!!!
            document.getElementById('button_container').innerHTML = button_html;
        }
    }
}

//
getAllSlideIdFromSlideContainer = function(slide_container) {
    
    var arr_id = new Array();
    var arr_div_obj = slide_container.getElementsByTagName('div');
    if(arr_div_obj.length > 0) {
        for(i = 0; i < arr_div_obj.length; i++ ) {
            arr_id[i] = arr_div_obj[i].id;
        }
    }
    else {
        alert('There is no data in data file. It should be <div id="your_id">your_slide_html</div>');
    }
    
    return arr_id;
}

//
getAllSlideIdExceptIntro = function(arr_all_slide_id_from_slide_container) {
    
    var arr_id = arr_all_slide_id_from_slide_container;
    var new_arr_id =new Array();
    var i_new_arr_id = 0;
    if(config.arr_intro_id_data.length > 0) {
        for(i = 0; i < arr_id.length; i++) {
            if(arraySearch(arr_id[i], config.arr_intro_id_data)==-1) {
                new_arr_id[i_new_arr_id] = arr_id[i];
                i_new_arr_id++;
            }
        }
        if(i_new_arr_id > 0) {
            arr_id = new_arr_id;
        }
    }
    
    return arr_id;
}

arraySearch = function(needle, arr) {
            
    var for_return = -1;
    for(i_arr=0; i_arr<arr.length; i_arr++) {
        if(needle==arr[i_arr]) {
            for_return = i_arr;
            break;    
        }    
    }
    return for_return;
}

startTimer = function (mode) {
    
    YAHOO.widget.slideshow.timer = setTimeout('YAHOO.widget.slideshow.loadNextSlide(\'' + mode + '\')', (YAHOO.widget.slideshow.timeOut * 1000));
}

stopTimer = function() {
 
    clearTimeout(YAHOO.widget.slideshow.timer);
    YAHOO.widget.slideshow.timer = null;
}

YAHOO.util.Event.addListener(window, 'load', YAHOO.widget.slideshow.init, YAHOO.widget.slideshow, true);

document.getElementsByTagName('body').ononload = startSlideShow();