/*================================================== GLOBAL JAVASCRIPT */
/*
JavaScript Document for Dan Bladon's Career stones
Developed by Julien Decaudin - www.juliens.org 
February 2009
*/

$('html').addClass('js');

/************* GLOBAL VARIABLES *************/
var project_thumb_fadein_speed = "fast";
var project_thumb_fadeout_speed = "normal";
var project_thumb_fadeout_opacity = 0.3;
var project_slidedown_speed = 600;
var project_slideup_speed = 400;
var project_lock_duration = 1000;
var project_button_fadein_speed = "fast";
var project_button_fadeout_speed = "normal";
var lock_projects = false;

var current_project_id = "";
var current_project_alias = "";
var path_cs_setup = "cs_setup.xml";
var path_popup_audio = "../_shared/popup_audio.htm";
var popup_audio_width = 400;
var popup_audio_height = 200;

/************* SHADOWBOX SETUP *************/
Shadowbox.loadSkin('careerstones', '../_shared/scripts/shadowbox/skin'); 
Shadowbox.loadLanguage('en', '../_shared/scripts/shadowbox/lang'); 
Shadowbox.loadPlayer(['iframe', 'img', 'qt', 'flv', 'wmp', 'swf'], '../_shared/scripts/shadowbox/player'); 

$(document).ready(function() {
    /*////////////////////////////////////// INIT */
    $.preloadCssImages();
    projectsSetup();
    Shadowbox.init({
        animSequence: "sync",
        overlayColor: "#d3202e",
        overlayOpacity: 0.95,
        viewportPadding: 80
    });

    /*////////////////////////////////////// INTERACTIONS */
    /* ====================== PROJECTS BEHAVIOUR */
    //Project thumbnail rollover
    $('div.project_thumbnail').hover(function() {
        $(this).addClass('hover');
        //$(this).parent('div.project').addClass('hover');

        if ($(this).parent().hasClass('disabled')) {
            $(this).parent().stop().fadeTo(project_thumb_fadein_speed, 1);
        }
    }, function() {
        $(this).removeClass('hover');
        //$(this).parent('div.project').removeClass('hover');

        if ($(this).parent().hasClass('disabled')) {
            $(this).parent().stop().fadeTo(project_thumb_fadeout_speed, project_thumb_fadeout_opacity);
        }
    });

    //Project thumbnail click action handler
    $('div.project_thumbnail').click(function() {
        var current_project = $(this).parent('div.project');
        //var current_project_id = current_project.attr('id');
        var current_is_closed = true;
        var slide_required = true;

        current_project_id = current_project.attr('id');
        current_project_alias = current_project.data('project_alias');

        if (!lock_projects) {
            lock_projects = true;

            //If the current project is already open
            if (current_project.hasClass('open')) {
                current_is_closed = false;
            }

            //If another project is open and belongs to the same row as the current project: no slide is required
            $('div.project.open').each(function(i) {
                if (this.id != current_project_id &&
                    $(this).parents('div.project_row').find('div#' + current_project_id).length > 0) {
                    slide_required = false;
                }
            });

            if (current_is_closed) {
                //========== The current project has to open:
                //Update other projects state
                update_other_projects(current_project_id, current_is_closed, slide_required);

                //Open current project
                if (slide_required) {
                    window.setTimeout('toggle_project("' + current_project_id + '", ' + slide_required + ', ' + current_is_closed + ')', 400);
                } else {
                    toggle_project(current_project_id, slide_required, current_is_closed);
                }
            } else {
                //========== The current project has to close:                
                //Close current project
                toggle_project(current_project_id, slide_required, current_is_closed);

                //Update other projects state
                if (slide_required) {
                    window.setTimeout('update_other_projects("' + current_project_id + '", ' + current_is_closed + ', ' + slide_required + ')', 400);
                } else {
                    update_other_projects(current_project_id, current_is_closed, slide_required);
                }
                current_project_id = "";
                current_project_alias = "";
            }

            if (slide_required) {
                window.setTimeout('unlock_projects()', project_lock_duration);
            } else {
                unlock_projects();
            }
        }
        //console.log("current project id:" + current_project_id);
        //console.log("current project alias:" + current_project_alias);
        return false;
    });


    /* ====================== MEDIAS */
    /* ------------ ALL MEDIAS */
    //Media thumbnail click
    $('ul.list_media a').click(function() {
        return false;
    });

    //Media thumbnail rollover    
    $("ul.list_media li a").wTooltip({
        className: "tooltip",
        offsetY: 15,
        offsetX: 5
    });

    $('ul.list_media li').hover(function() {
        $(this).addClass('hover');
    }, function() {
        $(this).removeClass('hover');
    });

    /* ------------ MEDIA IMAGES */
    $('li.media_images a').click(function() {
        var images_id = this.id;
        var img_arraylist = new Array();

        $.ajax({
            type: "GET",
            url: "projects/" + current_project_alias + "/medias/media_images.xml",
            dataType: "xml",
            success: function(xml) {
                //Go through each image                
                $(xml).find('images[id=' + images_id + '] image').each(function() {
                    var img_object = {
                        player: 'img',
                        content: 'projects/' + current_project_alias + '/medias/images/' + $(this).find('filename').text(),
                        title: $(this).find('title').text()
                    };
                    img_arraylist.push(img_object);
                });
            },
            error: function() {
                //display error message                
            },
            complete: function() {
                if (img_arraylist.length > 0) {
                    Shadowbox.open(img_arraylist, {
                        continuous: true
                    });
                }
            }
        });

        return false;
    });

    /* ------------ MEDIA MOVIE */
    $('li.media_movie a').click(function() {
        var movie_id = this.id;
        var movie_object;

        $.ajax({
            type: "GET",
            url: "projects/" + current_project_alias + "/medias/media_movies.xml",
            dataType: "xml",
            success: function(xml) {
                //Get the selected movie
                var current_movie = $(xml).find('movie[id=' + movie_id + ']');
                movie_object = {
                    content: 'projects/' + current_project_alias + '/medias/videos/' + current_movie.find('filename').text(),
                    title: current_movie.find('title').text(),
                    player: current_movie.find('player').text(),
                    width: current_movie.find('width').text(),
                    height: current_movie.find('height').text()
                };
            },
            error: function() {
                //display error message
                //console.error('error');
            },
            complete: function() {
                Shadowbox.open(movie_object);
            }
        });

        return false;
    });

    /* ------------ MEDIA AUDIO */
    $('ul.list_media li.media_audio a').click(function() {
        var project_path = "../" + $('body').data('cs_alias') + "/projects/" + current_project_alias;
        window.open(path_popup_audio + '?project_path=' + project_path + '&audio_id=' + this.id, '_blank', 'height=' + popup_audio_height + ', width=' + popup_audio_width + ', toolbar=no, menubar=no, scrollbars=yes, resizable=yes, location=no, directories=no, status=no');
        return false;
    });

    /* ------------ MEDIA PDF */
    $('ul.list_media li.media_pdf a').click(function() {
        var pdf_id = this.id;
        var pdf_path = "";

        $.ajax({
            type: "GET",
            url: "projects/" + current_project_alias + "/medias/media_pdfs.xml",
            dataType: "xml",
            success: function(xml) {
                //Get the selected pdf                
                pdf_path = "projects/" + current_project_alias + "/medias/pdfs/" + $(xml).find('pdf[id=' + pdf_id + '] filename').text();
            },
            error: function() {
                //display error message
                //console.error('error');
            },
            complete: function() {
                window.open(pdf_path, '_blank', 'toolbar=no, menubar=no, scrollbars=yes, resizable=yes, location=no, directories=no, status=no');
            }
        });
        return false;
    });

});

function projectsSetup() {

    $.ajax({
        type: "GET",
        url: path_cs_setup,
        dataType: "xml",
        success: function(xml) {
            //Store the careerstone alias value for the page
            $('body').data('cs_alias', $(xml).find('cs_alias').text());

            //Store the project alias value for each project
            $('div.project', $('#content')).each(function() {
                var project_alias = $(xml).find('project[id=' + this.id + '] project_alias').text()
                $(this).data('project_alias', project_alias);
            });
        },
        error: function() {
            //display error message
            //console.error('projectsSetup error');
        },
        complete: function() {
        }
    });
}

function unlock_projects() {
    lock_projects = false;
}

function update_other_projects(current_project_id, current_is_closed, slide_required) {
    $('div.project').each(function(i) {
        if (this.id != current_project_id) {

            //close any other opened project
            if ($(this).hasClass('open')) {
                toggle_project(this.id, slide_required, false);

                //Update the current project to enable state
                enable_disable_project($('#' + current_project_id), 1);
            }

            //The current project will open: all others project go to disabled state
            if (current_is_closed) {
                enable_disable_project($(this), 0);
            } else {
                //The current project will close: all others project go to enabled state
                enable_disable_project($(this), 1);
            }
        }
    });
}

function toggle_project(project_full_id, slide_required, current_is_closed) {
    var project_id = project_full_id.split('project_')[1];
    var project_thumbnail = $('#project_' + project_id);
    var project_details = $('#project_details_' + project_id);

    if (!slide_required || current_is_closed) {
        project_thumbnail.toggleClass('open');
        project_details.toggleClass('open');
    }

    if (slide_required) {
        if (current_is_closed) {
            //Project opens
            project_details.slideDown(project_slidedown_speed, function() {
                if ($.browser.msie)
                    $(this).find('div.column_third').css('visibility', 'visible');
            });
        } else {
            //Project closes
            if ($.browser.msie)
                project_details.find('div.column_third').css('visibility', 'hidden');

            project_details.slideUp(project_slideup_speed, function() {
                project_thumbnail.removeClass('open');
                project_details.removeClass('open');
            });
        }

    } else {
        project_details.toggle();
        if ($.browser.msie) {
            if (current_is_closed) {
                //Project opens
                project_details.find('div.column_third').css('visibility', 'visible');
            } else {
                //Project closes
                project_details.find('div.column_third').css('visibility', 'hidden');
            }
        }
    }

    if (current_is_closed) {
        //Project opens
        project_thumbnail.find('a.project_button_open').fadeOut(project_button_fadeout_speed);
        project_thumbnail.find('a.project_button_close').fadeIn(project_button_fadein_speed);
    } else {
        //Project closes
        project_thumbnail.find('a.project_button_close').fadeOut(project_button_fadeout_speed);
        project_thumbnail.find('a.project_button_open').fadeIn(project_button_fadein_speed);
    }
}

function enable_disable_project(project, state) {

    if (state == 0) {
        project.fadeTo(project_thumb_fadeout_speed, project_thumb_fadeout_opacity);
        project.addClass('disabled');
    } else {
        project.fadeTo(project_thumb_fadein_speed, 1);
        project.removeClass('disabled');
    }
}