////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Plugin Name: Vertical carousel slideshow
// Plugin URI: http://gopi.coolpage.biz/demo/2009/09/26/vertical-carousel-slideshow/
// Description: Don't just display images, showcase them in style using this Vertical carousel slideshow plugin.  
// Author: Gopi.R
// Version: 1.0
// Author URI: http://gopi.coolpage.biz/demo/about/
// Donate link: http://gopi.coolpage.biz/demo/2009/09/26/vertical-carousel-slideshow/
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


function vertical_carousel_slideshow(params){
  if(!(params.width_vcs>0 && isFinite(params.width_vcs)))params.width_vcs=100;
  if(!(params.height>0 && isFinite(params.height)))params.height=100;
  if(!(params.sides_vcs>2 && isFinite(params.sides_vcs)))params.sides_vcs=4;
  if(!(params.steps_vcs>0 && params.steps_vcs<100 && isFinite(params.steps_vcs)))params.steps_vcs=20;
  if(!(params.speed_vcs>0 && isFinite(params.speed_vcs)))params.speed_vcs=8;
  if(!(params.image_border_vcs_width>=0 && isFinite(params.image_border_vcs_width)))params.image_border_vcs_width=0;
  if(isFinite(params.id)||!params.id)params.id='bad_id_given_'+Math.random();
  
  document.write("<div style='position:relative;overflow:hidden;' id='"+params.id.replace(/[^a-zA-Z0-9]+/g,'_')+"'></div>");
  var cdiv=document.getElementById(params.id.replace(/[^a-zA-Z0-9]+/g,'_'))
  cdiv.style.width=params.width_vcs+'px';
  cdiv.style.height=params.height+'px';
  cdiv.style.border=params.border_vcs;
  cdiv.style.position='relative';
  cdiv.style.overflow='hidden';
  cdiv.title='';
    
  var counter=0,spinning=true,interval=Math.floor(60000/params.sides_vcs/params.steps_vcs/params.speed_vcs)-5;
  interval=isNaN(interval)?200:interval;
  var img_position=[],images_vcs=[],img_dimension=[];
  var img_index=params.images_vcs.length+1,img_index_cap=2*params.images_vcs.length;
  var faces=Math.ceil(params.sides_vcs/2), dimension, direction_vcs, targ, attr, faraway;

  function init(){
    if(params.direction_vcs=="left" || params.direction_vcs=="right"){
      direction_vcs=params.direction_vcs;
      dimension="width";
      }
    else if(params.direction_vcs=="top" || params.direction_vcs=="bottom"){
      direction_vcs=params.direction_vcs;
      dimension="height";
      }
    else {
      direction_vcs="left";
      dimension="width";
      }      
    faraway=(direction_vcs=="left"||direction_vcs=="top")?'-20000px':'20000px';
    cdiv.style[dimension]=params[dimension]/(params.size_mode_vcs=='image'?Math.sin(Math.PI/params.sides_vcs):1)+'px';
    var img=new Image();
    img.style.position='absolute';
    img.style[direction_vcs]=faraway;
    img.style.width=params.width_vcs-2*params.image_border_vcs_width+'px';
    img.style.height=params.height-2*params.image_border_vcs_width+'px';
    img.style.border_vcs=(params.image_border_vcs_width||0)+'px solid '+params.image_border_vcs_color;
  
    for(var i_vcs=0;i_vcs<params.images_vcs.length;i_vcs++){
      images_vcs[i_vcs]=img.cloneNode(true);
      images_vcs[i_vcs].src=params.images_vcs[i_vcs];
      if(params.links_vcs && params.links_vcs[i_vcs] && params.links_vcs[i_vcs]!=''){
        targ=params.lnk_targets_vcs && params.lnk_targets_vcs[i_vcs]||params.lnk_base_vcs||'new';
        if(targ=="_blank"){
          attr=(params.lnk_attr_vcs && params.lnk_attr_vcs[i_vcs])?",'"+params.lnk_attr_vcs[i_vcs]+"'":"";
          images_vcs[i_vcs].onclick=new Function("window.open('"+params.links_vcs[i_vcs]+"','"+targ+"'"+attr+")");
          }
        else if(targ.substr(0,1)=="_"){
          images_vcs[i_vcs].onclick=new Function(targ.substr(1)+".location='"+params.links_vcs[i_vcs]+"'");
          }
        else{
          attr=(params.lnk_attr_vcs && params.lnk_attr_vcs[i_vcs])?",'"+params.lnk_attr_vcs[i_vcs]+"'":"";
          images_vcs[i_vcs].onclick=new Function("var t='"+targ+"';if(window[t]){try{window[t].close()}catch(z){}}window[t]=window.open('"+params.links_vcs[i_vcs]+"',t"+attr+");window[t].focus()");
          }
        images_vcs[i_vcs].style.cursor=document.all?'hand':'pointer';
        }

      if(params.titles_vcs && params.titles_vcs[i_vcs] && params.titles_vcs[i_vcs]!='')
        images_vcs[i_vcs].title=params.titles_vcs[i_vcs];
      if(document.all)
        images_vcs[i_vcs].alt=images_vcs[i_vcs].title;
      images_vcs[i_vcs+params.images_vcs.length]=images_vcs[i_vcs];
      if(params.images_vcs.length==faces)
        images_vcs[i_vcs+2*params.images_vcs.length]=images_vcs[i_vcs];
      cdiv.appendChild(images_vcs[i_vcs]);
      }
  
    var face_size=params.size_mode_vcs=='image'?params[dimension]:params[dimension]*Math.sin(Math.PI/params.sides_vcs);
    var face_offset=params[dimension]*Math.cos(Math.PI/params.sides_vcs)/(params.size_mode_vcs=='image'?Math.sin(Math.PI/params.sides_vcs):1)/2-.5;
    var pi_piece=2*Math.PI/params.steps_vcs/params.sides_vcs;
    for(i_vcs=0;i_vcs<=params.steps_vcs*faces;i_vcs++){
      img_dimension[i_vcs]=face_size*Math.sin(pi_piece*i_vcs);
      img_position[i_vcs]=(i_vcs<params.steps_vcs*params.sides_vcs/2)?Math.floor(params[dimension]/2/(params.size_mode_vcs=='image'?Math.sin(Math.PI/params.sides_vcs):1)-face_offset*Math.cos(pi_piece*i_vcs)-img_dimension[i_vcs]/2)+'px':faraway;
      img_dimension[i_vcs]=img_dimension[i_vcs]-2*params.image_border_vcs_width>1?Math.ceil(img_dimension[i_vcs])-2*params.image_border_vcs_width+'px':'1px';
      }
    }
  init();

  cdiv.rotate = function(){
    setTimeout('document.getElementById("'+cdiv.id+'").rotate()',interval);
    if(!spinning) return;
    if(++counter>=params.steps_vcs){
      counter=0;
      if(++img_index>=img_index_cap)
        img_index=params.images_vcs.length;
      }
    images_vcs[img_index-faces].style[direction_vcs]=faraway;
    for(var i_vcs=faces-1;i_vcs>=0;i_vcs--){
      images_vcs[img_index-i_vcs].style[direction_vcs]=img_position[counter+i_vcs*params.steps_vcs];
      images_vcs[img_index-i_vcs].style[dimension]=img_dimension[counter+i_vcs*params.steps_vcs];
      }
    }
  cdiv.onmouseover=function(){
    spinning=false;
    }
  cdiv.onmouseout=function(){
    spinning=true;
    }
  setTimeout('document.getElementById("'+cdiv.id+'").rotate()',100);
  }
