Thursday, 25 August 2016

Progress/Loading with Simple HTML

<HTML>
 <HEAD>
  <TITLE>Popup div with disabled background</TITLE>
  <style>
   .ontop {
    z-index: 999;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    display: none;
    position: absolute;  
    background-color: #cccccc;
    color: #aaaaaa;
    opacity: .4;
    filter: alpha(opacity = 50);
   }
   #popup {
 
    position: absolute;
    color: #000000;
 
    /* To align popup window at the center of screen*/
    top: 50%;
    left: 50%;
 
 
   }
  </style>
  <script type="text/javascript">
   function pop(div) {
    document.getElementById(div).style.display = 'block';
   }
//call this method when this have to close
   function hide(div) {
    document.getElementById(div).style.display = 'none';
   }
  window.setTimeout("hide('popDiv')",10000);
  </script>
 </HEAD>
 <BODY>
  <div id="popDiv" class="ontop">
  <div id='popup'> <img id="img-spinner" src="https://raw.githubusercontent.com/niklausgerber/PreLoadMe/master/img/status.gif" alt="Loading"/> </div>
     
  </div>
   <a href="#" onClick="pop('popDiv')">open</a>
 </BODY>
</HTML>

Sunday, 31 July 2016

Exception calling "ChangeDatabaseInstance" with "1" argument(s)

PS C:\Users\admin> $db.ChangeDatabaseInstance("DBNAME")
Exception calling "ChangeDatabaseInstance" with "1" argument(s): "An update
conflict has occurred, and you must re-try this action. The object SPServer
Name=SERVERNAME was updated by admin, in the powershell (2572)
process, on machine SERVERNAME.  View the tracing log for more information
about the conflict."
At line:1 char:1



Solution: Clear the Cache

Run the below script

Add-PSSnapin -Name Microsoft.SharePoint.PowerShell –erroraction SilentlyContinue

Stop-Service SPTimerV4
$folders = Get-ChildItem C:\ProgramData\Microsoft\SharePoint\Config
foreach ($folder in $folders)
    {
    $items = Get-ChildItem $folder.FullName -Recurse
    foreach ($item in $items)
        {
            if ($item.Name.ToLower() -eq "cache.ini")
                {
                    $cachefolder = $folder.FullName
                }
               
        }
    }
$cachefolderitems = Get-ChildItem $cachefolder -Recurse
    foreach ($cachefolderitem in $cachefolderitems)
        {
            if ($cachefolderitem -like "*.xml")
                {
                   $cachefolderitem.Delete()
                }
       
        }
       
$a = Get-Content  $cachefolder\cache.ini
$a  = 1
Set-Content $a -Path $cachefolder\cache.ini


Sunday, 24 July 2016

Could not load file or assembly '$SharePoint.Project.AssemblyFullName$' or one of its dependencies

Error=Could not load file or assembly '$SharePoint.Project.AssemblyFullName$' or one of its dependencies. The system cannot find the file specified.



Solution:--


The fix is simple, do the following:

1.  Open your project file .csproj  Edit the .csproj file in NotePad
2.  Find the PropertyGroup nodes.
3.  Add a new PropertyGroup node.
<PropertyGroup>
<TokenReplacementFileExtensions>ashx</TokenReplacementFileExtensions>
</PropertyGroup>
4.  Re-Open your project file

HTTPHandler in Sharepoint

1.Create empty project
2.Add HTTPHandler class from Teamplate if not exist then create manually
3.Open .asxh file paste the below code as per you project Name and Class name

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ WebHandler Language="C#" CodeBehind="FileUploader.ashx.cs" Class="SharePointProject1Test.Layouts.SharePointProject1Test.FileUploader" %>

and .ashx.cs code like below


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using Microsoft.SharePoint;
namespace SharePointProject1Test.Layouts.SharePointProject1Test
{
    /// <summary>
    /// Summary description for FileUploader
    /// </summary>
    ///
 
    public class FileUploader : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
         
            if (context.Request.Files.Count > 0)
            {
                HttpFileCollection files = context.Request.Files;
                for (int i = 0; i < files.Count; i++)
                {
                    HttpPostedFile file = files[i];
                    AddFile(file.InputStream,file.FileName);
                 
                }
                context.Response.ContentType = "text/plain";
                context.Response.Write("File Uploaded Successfully!");
            }

        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }



        public static void AddFile(Stream inputStream,string fileName)
        {
            SPSecurity.RunWithElevatedPrivileges(delegate() {

            using (SPSite site = new SPSite("http://siteName"))
            {
                site.AllowUnsafeUpdates = true;
                using (SPWeb web = site.OpenWeb())
                {
                    web.AllowUnsafeUpdates = true;
                    byte[] bytes = StreamToByteArray(inputStream);
                    SPFolder myLibrary = web.Folders["Documents_test"];
                    SPFile spfile = myLibrary.Files.Add(fileName, bytes, true);
                    myLibrary.Update();
                    web.AllowUnsafeUpdates = false;
                }
                site.AllowUnsafeUpdates = false;

            }
            });
        }
        public static byte[] StreamToByteArray(Stream inputStream)
        {
            byte[] bytes = new byte[16384];
            using (MemoryStream memoryStream = new MemoryStream())
            {
                int count;
                while ((count = inputStream.Read(bytes, 0, bytes.Length)) > 0)
                {
                    memoryStream.Write(bytes, 0, count);
                }
                return memoryStream.ToArray();
            }
        }
    }
}



4.In the Solution Explorer, click the .ashx file and in the Properties pane, set the Build Action to Content.
5. In the Solution Explorer, click the .ashx.cs file and in the Properties pane, set the Build Action to Compile.
6. Now we need to Save and Close the solution.
7. Edit the .csproj file and add the following text to a PropertyGroup,

<PropertyGroup>
<TokenReplacementFileExtensions>ashx</TokenReplacementFileExtensions>
</PropertyGroup>

8. and reload your project in Visual Studio.
9. test the HTTPHandler open browser and paste url like below
 http://SiteName/_Layouts/15/SharePointProject1Test/FileUploader.ashx
9. now HTTPHandler will catch the event and give a message
10. To call HTTPHandler in JQuery/JavaScript paste the code in your Visua webpart / applicationpage / in Content Editor Webpart like below

<script src="/_layouts/15/SharePointProject1Test/jquery-1.4.1.min.js"></script>

<script type="text/javascript">
    $(document).ready(function () {
        $("#btnUpload").click(function () {

            uploadfile();


        });
    });

    function uploadfile() {
        var bannerImage = $("#fupload").val();

        if (bannerImage) {
            var file = document.getElementById('fupload').files[0];
            var formData = new FormData();
            formData.append(file.name, file);
            var xhr = new XMLHttpRequest();
            var url = "/_Layouts/15/SharePointProject1Test/FileUploader.ashx";
            xhr.open('POST', url, true);
            xhr.onload = function (e) {
                var response = $.parseJSON(e.target.response);
alert(response);
           
            };

            xhr.send(formData);  // multipart/form-data

        }
    }
</script>

 <h3>Upload file Using HTTPHandler in SharePoint</h3>
    <table>
        <tr>  
        <td>
            <input id="fupload" type="file"/><br />
            </td>
 
        </tr>
        <tr>
 
        <td><input id="btnUpload"  value="Upload Selected File" type="button" /></td>
        </tr>
    </table>


Start A workflow programtically in sharepoint

private void StartWorkflowInstance()
        {
           
       
            try
            {

                //SPWorkflowManager objWorkflowManager = listItem.Web.Site.WorkflowManager;
                SPWorkflowManager objWorkflowManager = SPContext.Current.Web.Site.WorkflowManager;
                SPList _list = SPContext.Current.Web.Lists["listname"];
                SPListItem _listItem = _list.GetItemById(listItem.ID);

                if (objWorkflowManager.GetItemWorkflows(_listItem).Count == 0)
                {
                    SPWorkflowAssociationCollection objWorkflowAssociationCollection = _listItem.ParentList.WorkflowAssociations;

                    foreach (SPWorkflowAssociation objWorkflowAssociation in objWorkflowAssociationCollection)
                    {
                        if (objWorkflowAssociation.Name == rbClassificationOfOutgoingDocument.SelectedItem.Text  + " "+ ProcessModelOneConstants.FullAdHocWrokflowName)
                        {
                            SPWorkflow activeWorkflow = objWorkflowManager.StartWorkflow(_listItem, objWorkflowAssociation, objWorkflowAssociation.AssociationData, true);
                            SPUser initiator = activeWorkflow.AuthorUser;
                            string initName = initiator.Name;
                        }
                    }
                }
            }
            catch (Exception exception)
            {

            }
        }

Friday, 22 July 2016

Wait message in Sharepoint

For Client Side  code


//////////////////Wait and Close Dialog box//////////

    function WaitMessage() {
        window.parent.eval("window.waitDialog = SP.UI.ModalDialog.showWaitScreenWithNoClose('Wait request is processing..', '', 90, 50);");
    }

// close message
    function CloseWaitDialog() {
        if (window.frameElement != null) {
            if (window.parent.waitDialog != null) {
                window.parent.waitDialog.close();
            }
        }
        else
        {
            if (window.parent.waitDialog != null)
            {
                window.parent.waitDialog.close();
            }
        }

    }
//////////////////////////////


Use like below

<script>
$(document).ready(function () {
    SP.SOD.executeFunc('sp.js', 'SP.ClientContext', readyFunction);
});

function readyFunction() {
    WaitMessage();
 
////////////////////Write your long code here
 
    CloseWaitDialog();
}
</script>



if you want to call it server side please put the code like below


<asp:Button runat="server" ID="Button" Text="Submit" OnClick="Button_Click" OnClientClick="javascript:WaitMessage();" />

protected void Button_Click(object sender, EventArgs e)
         {
              // Do the complex operations here and at the end of the complex operation, we need to close the dialog box which we opened.

             this.ClientScript.RegisterStartupScript(this.GetType(), "CloseWaitDialog", @"
                     <script language='javascript'>
                         if (window.frameElement != null) {
                             if (window.parent.waitDialog != null) {
                                 window.parent.waitDialog.close();
                             }
                         }
                     </script>");
         }





Wednesday, 13 July 2016

Querystring value in JQuery/Javascript

function getQueryStringParameter(paramToRetrieve) {
        var params =
            document.URL.split("?")[1].split("&");
        var strParams = "";
        for (var i = 0; i < params.length; i = i + 1) {
            var singleParam = params[i].split("=");
            if (singleParam[0] == paramToRetrieve)
                return singleParam[1];
        }
    }

formated date in jquery/javascript

function getFormattedDate(formatedDate) {
  var year = formatedDate.getFullYear();
  var month = (1 + formatedDate.getMonth()).toString();
  month = month.length > 1 ? month : '0' + month;
  var day = formatedDate.getDate().toString();
  day = day.length > 1 ? day : '0' + day;
  return month + '/' + day + '/' + year;
}

Tuesday, 28 June 2016

Delete Read only field from Sharepoint list/library

How to remove/delete a read only field programatically? 




SPSecurity.RunWithElevatedPrivileges(delegate
{
    using (SPSite spSite = new SPSite("siteurl"))
        using (SPWeb spWeb = spSite.OpenWeb())
        {
          SPList list = spWeb.Lists["ListName"];
                    SPField spField = list.Fields["ColumnName"];
                    spField.ReadOnlyField = false ;
                    spField.Update();
                    spField.Delete();
                    spField.ParentList.Update();
        }
});

                    

Sunday, 26 June 2016

Failed to start workflow Procedure or function CreateWorkflowInstance

Error:-

Failed to start workflow. Procedure or function 'CreateWorkflowInstance' expects parameter '@InstanceID', which was not supplied.


If  you get the above error in Nintex Workflow 
while starting a workflow


Cause:-You  have done something wrong in Nintex workflow Database while taking backup or  you have updated the newer version of database.

Solution:-

1. Open Central Admin - Nintex Workflow Management - Database setup - Edit
2. Set SQLserver, dbname (check connect to existing) and OK
3. It will take 15 minutes to reflect the changes wait 15 minutes or to see immediate changes .
4. do IISRESET.
5. Restart SharePoint Timer Job in "Services" now test your workflow again.






Wednesday, 22 June 2016

change the language of textbox dynamically usign google API

How to change the language dynamically in textbox using  Google API


To change the language use the "CTRL+G" Key inside textbox


Example:-







 <script src="https://www.google.com/jsapi" type="text/javascript">
</script>
<script type="text/javascript" language="javascript">
    google.load("elements", "1", {
        packages: "transliteration"
    });

    function onLoad() {
        var options = {
            destinationLanguage: [google.elements.transliteration.LanguageCode.ARABIC],
            sourceLanguage: google.elements.transliteration.LanguageCode.ENGLISH,
         
            shortcutKey: 'ctrl+g',
            transliterationEnabled: true
        };

        var control = new google.elements.transliteration.TransliterationControl(options);
        control.makeTransliteratable(['<%=txt1.ClientID%>']);
   
        //txt11 is the id of the control which you will use for the transliteration.
    }
    google.setOnLoadCallback(onLoad);
</script>


 

<div>
 <div class="Google-transliterate-Way2blogging">
     <%--      <input id="Text1" type="text" style="width:600px;height:200px" />--%>

 <asp:TextBox ID="txt1" runat="server" Width="400" TextMode="MultiLine"></asp:TextBox>


</div>
    </div>

Tuesday, 21 June 2016

highlight the selected row in gridview using Jquery

How to highlight the selected row in gridview using Jquery






    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
 <script type="text/javascript">
     $(document).ready(function () {
     //click on row
         $("#<%=gdv1.ClientID%> tr:has(td)").click(function () {
         //go through each row of the table
             $("#<%=gdv1.ClientID%> tr").each(function () {
             //set the all rows's default background          
                 $(this).parent().children().removeClass("selection");
             });    
             $(this).addClass("selection");
         }, function () {    
          //   $(this).parent().children().removeClass("selection");
             $(this).addClass("selection");
         });      
     });
    </script>
<style type="text/css">
    .selection
    {
        background-color:Gray;
        border :1px groove #888888;
        color:White;
    }
</style>
   <asp:GridView ID="gdv1" runat="server">
   </asp:GridView>


Saturday, 18 June 2016

may be due to a misconfiguration of the Microsoft SharePoint Server State Service

Error:- When you start a workflow and get the below error


 The form cannot be rendered. This may be due to a misconfiguration of the Microsoft SharePoint Server State Service. For more information, contact your server administrator


Cause:- Because State Service is not working or not configured 


Solution:- Create New State Service Application
If you have already created remove them and reconfigure the state service application it will not harm the existing workflow configuration or InfoPath configuration

Create State Machine Service Application


$stateName ="State Service"
$stateDBName = "SP2013_State_Service"
$stateDB = New-SPStateServiceDatabase -Name $stateDBName
$state = New-SPStateServiceApplication -Name $stateName -Database $stateDB
New-SPStateServiceApplicationProxy -Name "State Service Application Proxy" -ServiceApplication $state –DefaultProxyGroup


Saturday, 11 June 2016

Feature for list template 'xx' is not installed in this farm



when get the such type of error




{"Feature '2bae83fc-4c6e-4587-a896-bf03c3d700d1' for list template '171' is not installed in this farm. The operation could not be completed."}.


Cause :- You have a Custom feature (wsp) or OOB template that has been uninstall or has been retracted.


Solution :- Re-Deploy the custom solution ( wsp ) or Activate the regarding feature .

Could not load file or assembly

To make Visual Studio adding 3rd party assembly or even your own assembly from other project in solution to GAC please do next:

  1. Open Package.package from Package folder in SharePoint project visual studio.
  2. Click Advanced in bottom area.
  3. Click Add and chose which type of assembly you want to add.
  4. In dialog select dll file, chec GAC or BIN, add safe controls and class resources entries if required. Click Ok.
Your assembly will be packaged to WSP, defined in manifest and deployed everytime.

Saturday, 7 May 2016

News Slider in SharePoint Dynamic

Object : Create a dynamic News slider with picture and some text,easy to use and customizable according to requirement .SharePoint Picture library holds the picture and news description .
Client Side HTML 



<%--<script src="../../../../_layouts/15/SharePointNewsLetter/jquery.cycle.all.min.js"></script>--%>


<script src="../../../../_layouts/15/SharePointNewsLetter/jquery.js"></script>
<link href="../../../../_layouts/15/SharePointNewsLetter/TopNews.css" rel="stylesheet" />

<script src="../../../../_layouts/15/SharePointNewsLetter/TopNews.js"></script>

<script src="../../../../_layouts/15/SharePointNewsLetter/jquery.cycle.all.js"></script>
 <div>
    <div id="Container">
<table cellpadding="0" cellspacing="4" style="width:100%" class="">
    <tr>
        <td style="width:40%" valign="top" valign="middle">
            <div class="main_news" style="width:100% !important">
                <div class="logo">Top News</div>
                <img id="imgMain" width="100%"/>
                <div class="desc">
                    <div class="block">
                        <table style="width:100%" cellpadding="0" cellspacing="0">
                            <tr>
                                <td><h4></h4></td>
                                <td id="toggleDescIcon" style="width:15px;font-weight:bold;padding:0px 5px;cursor:pointer;" align="center" >&#9472;</td>
                            </tr>
                        </table>
                        <small></small>
                        <p></p>
                    </div>
                </div>
            </div>
            <table style="width:100%;background:#111" cellpadding="0" cellspacing="0">
                <tr style="display:none;">
                    <td colspan="2" align="center" id="subtCont" style="display:none;">
                        <div class="subtitlebar">
                        </div>
                    </td>
                </tr>
                <tr class="toolbar">
                    <td align="right" style="white-space:nowrap;">
                        <ul></ul>
                    </td>
                    <td style="white-space:nowrap;width:1%;" align="center" >
                        <img alt="" id="btnPrev" src="../../../../_layouts/15/img/Prev.png" /> 
                        <img alt="" id="btnPausePlay" src="../../../../_layouts/15/img/Pause.png" width="25" height="25" /> 
                        <img alt="" id="btnNext" src="../../../../_layouts/15/img/Next.png" /> 
                    </td>
                </tr>
            </table>
        </td>
        <td align="left" valign="top" style="100%">
            <table cellpadding="0" cellspacing="0" width="60%">
                <tr>
                    <td style="margin:0;padding:0;background-image:url('../../../../_layouts/15/img/po_bottom.png');background-repeat:repeat-x;height:15px;"></td>
                </tr>
            </table>
            <div class="news_thumb">
            </div>
            
            <table style="text-align:justify" cellpadding="0" cellspacing="0" width="60%" >
                <tr>
                    <td colspan="3" style="margin:0;padding:0;background-image:url('../../../../_layouts/15/img/po_top.png');background-repeat:repeat-x;height:7px;"></td>
                </tr>
                <tr >
                    <td style="width:14px;height:20px;background-image:url('../../../../_layouts/15/img/pagerbl.png');background-repeat:no-repeat;"></td>
                    <td>
                        <table class="pagerbar" cellpadding="0" cellspacing="0" width="100%">
                            <tr >
                                <td align="center" style="width:10%;background:#111;"><span>Pages</span></td>
                                <td style="background:#111;"><ul ></ul></td>
                                <td align="center" style="width:10%;background:#111;"><span>Next</span></td>
                            </tr>
                        </table>
                    </td>
                    <td style="width:14px;height:20px;background-image:url('../../../../_layouts/15/img/pagerbr.png');background-repeat:no-repeat;"></td>
                </tr>
            </table>

        </td>
    </tr>
</table>
</div>
<script type="text/javascript">
    new TopNews('#Container', 7, true, 6000);
</script>  
    </div>
  

CS File


using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Microsoft.SharePoint;
using System.Web.Script.Serialization;
using System.Linq;
namespace SharePointNewsLetter.SharePointNewsLetter
{

    public partial class SharePointNewsLetterUserControl : UserControl
    {
        public SharePointNewsLetter WebPart { get; set; }

        List<News> currentNews = new List<News>();
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {

                GetAllNews();
                if (string.IsNullOrEmpty(Request.Params["Callback"]))
                {
                    return;
                }
                else
                {
                    // *** Route to the Page level callback 'handler'
                    this.HandleCallbacks();

                    //reading request JSON parameters
                    string requestJsonParam = "";
                    byte[] b = new byte[Request.ContentLength];
                    Request.InputStream.Read(b, 0, Request.ContentLength);
                    requestJsonParam = System.Text.UTF8Encoding.UTF8.GetString(b);

                    // do something with input request parameter, but nothing to do for now
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        // Callback routing
        public void HandleCallbacks()
        {
            // *** We have an action try and match it to a handler
            switch (Request.Params["Callback"])
            {
                case "fetchAllNews":
                    this.FetchAllNews();
                    break;
            }

            Response.StatusCode = 500;
            Response.Write("Invalid Callback Method");
            Response.End();
        }
        public void GetAllNews()
        {
            try
            {
                currentNews.Clear();
                SPSecurity.RunWithElevatedPrivileges(delegate
                {
                    using (SPSite site = new SPSite(SPContext.Current.Web.Url))
                    {

                        using (SPWeb web = site.OpenWeb())
                        {
                            SPList list = web.Lists.TryGetList(this.WebPart.libraryName);
                            SPQuery query = new SPQuery();
                            SPListItemCollection items = list.GetItems(query);
                            foreach (SPListItem item in items)
                            {
                                News n = new News
                                {
                                    Id = item.ID,
                                    ListName = item.ParentList.Title,
                                    Title = Convert.ToString(item["Title"]),
                                    ImgSrc = SPContext.Current.Web.Url + "/" + Convert.ToString(item.File.Url),
                                    Summary = Convert.ToString(item["Description"]),
                                    ImgThumbSrc = SPContext.Current.Web.Url + "/" + Convert.ToString(item.File.Url),
                                    NewsDate = Convert.ToDateTime(item["Created"])

                                };
                                currentNews.Add(n);



                            }
                        }
                    }
                });
            }
            catch (Exception ex)
            { 
            
            }
        
        }
        public void FetchAllNews()
        {
            List<NewsItem> lsttst = new List<NewsItem>();
            foreach (var newsItem in currentNews)
            {
                string summary = newsItem.Summary;
                if (summary.Length > 80)
                {
                    summary = summary.Substring(0, 75) + GetDivElements(SPContext.Current.Web.Url + "/" +newsItem.ListName+"/Forms/DispForm.aspx?ID="+newsItem.Id);
                }
                lsttst.Add(new NewsItem(newsItem.Title, newsItem.ImgSrc, newsItem.ImgThumbSrc, summary, DateTime.Now.ToShortDateString()));
            }
            Response.ContentType = "application/json; charset=utf-8";         
           //Response.Write(Newtonsoft.Json.JavaScriptConvert.SerializeObject(lsttst));
            var jsonScript = new JavaScriptSerializer().Serialize(lsttst);
            Response.Write(jsonScript.ToString());
            Response.End();
        }
        public string GetDivElements(string linkUrl)
        {
            // Initialize StringWriter instance.
            StringWriter stringWriter = new StringWriter();

            // Put HtmlTextWriter in using block because it needs to call Dispose.
            using (HtmlTextWriter writer = new HtmlTextWriter(stringWriter))
            {
                // Loop over some strings.
                // foreach (var word in _words)
                {
                    var word = "Read more";
                    // Some strings for the attributes.
                    //  string classValue = "ClassName";
                 //   string urlValue = "http://www.dotnetperls.com/";
                    // string imageValue = "image.jpg";

                    // The important part:
                    //    writer.AddAttribute(HtmlTextWriterAttribute.Class, classValue);

                    writer.RenderBeginTag(HtmlTextWriterTag.Div); // Begin #1
                    writer.AddAttribute(HtmlTextWriterAttribute.Style, "color:blue");
                    writer.AddAttribute(HtmlTextWriterAttribute.Href, linkUrl);
                    writer.AddAttribute(HtmlTextWriterAttribute.Target, "_blank");
                    writer.RenderBeginTag(HtmlTextWriterTag.A); // Begin #2

                    writer.Write(word);
                    writer.RenderEndTag(); // End #3

                    writer.Write("...");

                    writer.RenderEndTag(); // End #2
                    //  writer.RenderEndTag(); // End #1
                }
            }
            // Return the result.
            return stringWriter.ToString();
        }
        public class News
        {
            private string listName;

            public string ListName
            {
                get { return listName; }
                set { listName = value; }
            }
            private int id;

            public int Id
            {
                get { return id; }
                set { id = value; }
            }
            private string title;

            public string Title
            {
                get { return title; }
                set { title = value; }
            }
            private string imgSrc;

            public string ImgSrc
            {
                get { return imgSrc; }
                set { imgSrc = value; }
            }
            private string imgThumbSrc;

            public string ImgThumbSrc
            {
                get { return imgThumbSrc; }
                set { imgThumbSrc = value; }
            }
            private string summary;

            public string Summary
            {
                get { return summary; }
                set { summary = value; }
            }
            private DateTime newsDate;

            public DateTime NewsDate
            {
                get { return newsDate; }
                set { newsDate = value; }
            }
        
        }



    }
}
public class NewsItem
{
    public string Title = "";
    public string imgSrc = "";
    public string imgThumbSrc = "";
    public string Summary = "";
    public string newsDate = "";

    public NewsItem(string _Title, string _imgSrc, string _imgThumbSrc, string _Summary, string _newsDate)
    {
        this.Title = _Title;
        this.imgSrc = _imgSrc;
        this.imgThumbSrc = _imgThumbSrc;
        this.Summary = _Summary;
        this.newsDate = _newsDate;
    }
}


TopNews.js


function TopNews(objRoot,newsCountPerPage,viewSubtitle,Interval) {
    //Init
    //root element in DOM.module container.used in jquery selector to gain unique objects
    this._root=objRoot;
    this._currPageIndex = 0;
    this._currNewsIndex = 0;
    this._slideShowInterval = Interval;
    this.nextNewsIntervalId = 0;
    this._newsCountPerPage = newsCountPerPage;
    this._viewSubtitle = viewSubtitle;
    this.news = new Array();
    this.baseHeight = 0;
    
    this.fetchAllNews();
    
}

TopNews.prototype = {
    //call asp.net page method asynchronous (send and recives data in JSON format)
    PageMethod: function(fn, paramArray, successFn, errorFn) {
        var pagePath = window.location.pathname;
        var that = this;
        //Call the page method  
        $.ajax({
            type: "POST",
            url: pagePath + "?Callback=" + fn,
            contentType: "application/json; charset=utf-8",
            data: paramArray,
            dataType: "json",
            success: function(res) { successFn(res, that) },
            error: errorFn
        });
    },

    //override jquery selector to ensure selected DOM objects be unique in multiple instanse of module
    getElement: function(domElement) {
        return $(this._root).find(domElement);
    },

    ToggleDesc: function(itm) {
        var ht = this.getElement('.main_news').find('.block').height() - $(itm).parent().height();
        if (escape($(itm).text()) == '%u2500')
            this.getElement('.main_news .block').animate({ marginBottom: -ht }, 250, function() { $(itm).text('+'); });
        else
            this.getElement('.main_news .block').animate({ marginBottom: "0" }, 250, function() { $(itm).text(unescape('%u2500')); });
    },

    initUI: function() {
        var that = this;
        this.baseHeight = Math.ceil(this.getElement('.news_thumb div:first').height() / this.getElement('.news_thumb div:first ul li').length);
        var minHeight = this.getElement('.news_thumb div:first').height() > (this.baseHeight * 7) ? this.getElement('.news_thumb div:first').height() : (this.baseHeight * 7);
        this.getElement('.news_thumb').css({ 'height': minHeight + 'px', 'min-height': minHeight + 'px' });
        this.getElement('.news_thumb div').css({ 'height': minHeight + 'px', 'min-height': minHeight + 'px' });

      //  this.getElement('.main_news').height(this.getElement('.main_news').parent().height() - this.getElement('.main_news').siblings().height());
      //  this.getElement('.main_news').width(this.getElement('.main_news').height() * 1.5);

        this.getElement('.main_news .logo').animate({ opacity: 0.75 }, 1);

        for (var i = 0; i < this.getElement('.news_thumb div.active ul li').length; i++)
            this.getElement('.toolbar ul').append('<li>&#8226</li>');

        if (!this._viewSubtitle) {
            this.getElement('.subtitlebar').parents('tr:first').hide();
        }

        //add handlers
        this.getElement('#toggleDescIcon').click(function() { that.ToggleDesc(this); });
        this.getElement('.toolbar #btnPrev').click(function() { that.prevNews(); });
        this.getElement('.toolbar #btnNext').click(function() { that.nextNews(that); });
        this.getElement('.toolbar #btnPausePlay').click(function() { that.PausePlay(this); });
        this.getElement('.news_thumb ul li').click(function() {
            if ($(this).is('.active')) {
                return false;
            }
            else {
                that.getElement('.news_thumb ul li').removeClass('active');
                $(this).addClass('active');
                that._currNewsIndex = (that._currPageIndex * that._newsCountPerPage) + $(this).prevAll('li').size();
                that.setTopOne();
            }
            return false;
        }).hover(function() {
            $(this).addClass('hover');
        }, function() {
            $(this).removeClass('hover');
        });

        this.getElement('.pagerbar ul li').click(function() {
            if ($(this).is('.active')) {
                return false;
            }
            else {
                that.getElement('.pagerbar ul li').removeClass('active');
                $(this).addClass('active');

                var selectedPageIndex = $(this).prevAll('li').size();
                var ht = that.getElement('.news_thumb div.active').height();

                var step = Math.abs(selectedPageIndex - that._currPageIndex);

                if (selectedPageIndex > that._currPageIndex) {
                    var upStep = Math.abs(parseInt(that.getElement('.news_thumb div:first').css('margin-top'))) + (ht * step);
                    that.getElement('.news_thumb div:first').animate({ marginTop: -upStep }, 1000, function() {
                        that.getElement('.news_thumb div').removeClass('active');
                        that.getElement('.news_thumb div:eq(' + selectedPageIndex + ')').addClass('active');

                        that._currPageIndex = selectedPageIndex;

                        that.getElement('.toolbar ul').empty();
                        for (var i = 0; i < that.getElement('.news_thumb div.active ul li').length; i++) {
                            that.getElement('.toolbar ul').append('<li>&#8226</li>');
                        }

                        that.setSubtitle();
                        if (that._viewSubtitle)
                            that.getElement('.subtitlebar').cycle({ fx: 'scrollUp', random: 1, cleartype: 0, timeout: 6000 });

                        that.getElement('.news_thumb div.active ul li:first').click();
                    });
                }
                else {
                    var downStep = parseInt(that.getElement('.news_thumb div:first').css('margin-top')) + (ht * step);
                    that.getElement('.news_thumb div:first').animate({ marginTop: downStep }, 1000, function() {
                        that.getElement('.news_thumb div').removeClass('active');
                        that.getElement('.news_thumb div:eq(' + selectedPageIndex + ')').addClass('active');

                        that._currPageIndex = selectedPageIndex;

                        that.getElement('.toolbar ul').empty();
                        for (var i = 0; i < that.getElement('.news_thumb div.active ul li').length; i++) {
                            that.getElement('.toolbar ul').append('<li>&#8226</li>');
                        }

                        that.setSubtitle();
                        if (that._viewSubtitle)
                            that.getElement('.subtitlebar').cycle({ fx: 'scrollUp', random: 1, cleartype: 0, timeout: 6000 });

                        that.getElement('.news_thumb div.active ul li:first').click();
                    });
                }
            }
        }).hover(function() {
            $(this).addClass('hover');
        }, function() {
            $(this).removeClass('hover');
        });
    },

    setTopOne: function() {
        //set variables
        var that = this;
        var imgSrc = this.news[this._currNewsIndex].imgSrc;
        var newsTitle = this.news[this._currNewsIndex].Title;
        var newsDesc = this.news[this._currNewsIndex].Summary;
        var newsDate = this.news[this._currNewsIndex].newsDate;
        var newsDescHeight = this.getElement('.main_news').find('.block').height();

        this.getElement('.main_news .desc').show();

        this.getElement('.main_news .block').animate({ opacity: 0, marginBottom: -newsDescHeight }, 250, function() {
            that.getElement('.main_news .block h4').text(newsTitle);
            that.getElement('.main_news .block small').text(newsDate);
            //that.getElement('.main_news .block p').text(newsDesc);
            that.getElement('.main_news .block p').html(newsDesc);
            that.getElement('.main_news .block').animate({ opacity: 0.75, marginBottom: "0" }, 250, function() { that.getElement('.main_news .block #toggleDescIcon').text(unescape('%u2500')); });
            that.getElement('.main_news #imgMain').attr('src', imgSrc);
            that.getElement('.main_news #imgMain').hide(1, function() {
                if ($(this).height() > $(this).width())
                    $(this).css({ 'height': that.getElement('.main_news').height() });
                else
                    $(this).css({ 'width': that.getElement('.main_news').width() });
                $(this).show(1, function() { $(this).css('display', 'inline'); });
            });
        });

        this.getElement('.toolbar ul li').removeClass('active');
        this.getElement('.toolbar td ul li:eq(' + (this._currNewsIndex % this._newsCountPerPage) + ')').addClass('active');
    },

    BindTextNews: function() {
        for (var index = 0; index < this.news.length; index++) {
            if (index % this._newsCountPerPage == 0) {
                $('<div><ul></ul></div>').appendTo(this.getElement('.news_thumb'));
                this.getElement('.pagerbar td:eq(1) ul').append($('<li></li>').text(Math.floor(index / this._newsCountPerPage) + 1));
            }
            $('<li></li>').append($('<h4></h4>').text(this.news[index].Title)).appendTo(this.getElement('.news_thumb div:last ul'));
            this.getElement('.news_thumb div:last ul').append('<hr />');

        }

        this.getElement('.news_thumb div:first').addClass('active');
        this.getElement('.news_thumb ul li:first').addClass('active');

        this.getElement('.pagerbar td:eq(1) ul li:first').addClass('active');
    },

    setSubtitle: function() {
        if (this._viewSubtitle) {
            this.getElement('.subtitlebar').parents('tr:first').show();
            this.getElement('.subtitlebar').empty();

            var startIndex = this._currPageIndex * this._newsCountPerPage;
            var endIndex = startIndex + this.getElement('.news_thumb div.active ul li').length;
            for (var index = 0; index < this.news.length; index++) {
                if (index < startIndex || index >= endIndex) {
                    this.getElement('.subtitlebar').append($('<span></span>').text(this.news[index].Title));
                }
            }
            if (this.getElement('.subtitlebar span').length == 1)
                this.getElement('.subtitlebar').append('<span></span>');
        }

    },

    nextNews: function(that) {
        that.getElement('.news_thumb div.active ul li:eq(' + ((that._currNewsIndex + 1) % that._newsCountPerPage) % that.getElement('.news_thumb div.active ul li').length + ')').click();
    },

    prevNews: function() {
        if (this._currNewsIndex % this._newsCountPerPage == 0)
            this.getElement('.news_thumb div.active ul li:eq(' + (this.getElement('.news_thumb div.active ul li').length - 1) + ')').click();
        else
            this.getElement('.news_thumb div.active ul li:eq(' + ((this._currNewsIndex - 1) % this._newsCountPerPage) % this.getElement('.news_thumb div.active ul li').length + ')').click();
    },

    PausePlay: function(itm) {
        var str = new String($(itm).attr('src'));
        var pattern, s;
        if (str.toLowerCase().search('pause.png') != -1) {
            pattern = new RegExp('(Pause.png)', 'gi');
            s = $(itm).attr('src').replace(pattern, 'play.png');
            $(itm).attr('src', s);
            clearInterval(this.nextNewsIntervalId);
        }
        else {
            pattern = new RegExp('(play.png)', 'gi');
            s = $(itm).attr('src').replace(pattern, 'Pause.png');
            $(itm).attr('src', s);
            var that = this;
            this.nextNewsIntervalId = setInterval(function() { that.nextNews(that); }, this._slideShowInterval);
        }
    },

    BindNews: function() {
        this.BindTextNews();
        this.setSubtitle();
        this.initUI();
        this.setTopOne();
        if (this._viewSubtitle)
            this.getElement('.subtitlebar').cycle({ fx: 'scrollUp', random: 1, cleartype: 0, timeout: 6000 });
        var that = this;
        this.nextNewsIntervalId = setInterval(function() { that.nextNews(that); }, this._slideShowInterval);
    },

    SuccessFetchNews: function(response, that) {
        that.news = response;
        if (response.length == undefined)
            that.news = new Array(response);
        that.BindNews();
    },

    FailFetchNews: function(err) {
        alert('Error!  ' + err.responseText);
    },

    fetchAllNews: function() {
        this.PageMethod('fetchAllNews', '{}', this.SuccessFetchNews, this.FailFetchNews);
    }

}
TopNews.css


.main_news
{
background:#333;
position:relative;
overflow:hidden;  
color:#fff;
text-align:center;
}
.main_news .desc .block h4
{
margin:0px 10px;
padding:0;
font-size:85%;
}
.main_news .desc .block p 
{
font-family:Tahoma;
font-size:70%;
line-height:1.6em;
padding:5px 0px;
margin:0px 10px;
line-height:1.2em;
}
.main_news .desc .block small 
{
margin:0px 30px;
font-family:Tahoma;
font-size: 70%;
}
.main_news .desc{
position: absolute;
bottom: 0;
left: 0; 
width: 100%;
display: none; 
}
.main_news .desc .block{
width: 100%;
background: #111;
border-top: 1px solid #000;
text-align:justify;
}
.rtl .main_news .desc .block
{
direction:rtl;
}
.main_news .logo{
position: absolute;
text-align:center;
background:#111;
margin:10px;
padding:2px;
font-weight:bold;
top:0;
left:0;
}
.rtl .main_news .logo{right:0;left:auto !important;}
.subtitlebar
{
background:#fff;
width:98%;
}
.subtitlebar span
{
padding:2px 0px;
color:Navy;
white-space:nowrap;
font-family:Tahoma;
font-size:85%;
width:100%;
}
.toolbar
{
background:#111;
height:25px;
max-height:25px;
overflow:hidden;
}
.toolbar img
{
border:0;
vertical-align:middle;
cursor:pointer;
}
.toolbar ul
{
padding:0;
margin:0;
white-space:nowrap;
}
.toolbar ul li
{
margin-left:5px;
margin-right:5px;
display:inline;
font-weight:bold;
font-size:20px;
color:Gray;
}
.toolbar ul li.active {
color:#fff;
font-size:20px;
}
.rtl .pagerbar
{
direction:rtl;
}
.pagerbar span
{
color:#fff;
margin:0px 15px;
}
.pagerbar ul
{
padding:0;
margin:0;
white-space:nowrap;
}
.pagerbar ul li
{
margin:0px 1px;
padding:0px 5px;
display:inline;
font-weight:bold;
color:#e99;
}
.rtl .pagerbar ul li
{
float:right;
}
.pagerbar ul li.hover { 
cursor: pointer;
color:Yellow;
}
.pagerbar ul li.active {
color:#222;
cursor:default;
background-color:#aaa;
}

.picndate
{
float:left;
position:relative;
}
.picndate div
{
position:absolute;
bottom:0;
left:0;
background:#111;
font-size:9px;
font-family:Tahoma;
color:#fff;
padding-left:2px;
padding-right:2px;
}
.news_thumb
{
min-width: 300px;
vertical-align:top;
overflow:hidden;
position:relative;
text-align:justify;
width:60%;
}
.news_thumb img {
border-bottom: 1px solid #ccc;
border-left:1px solid #ccc;
border-top:none;
border-right:none;
padding: 2px;
background: #fff;
width:66px;
height:50px;
}
.news_thumb div
{
margin-top:0px;
}
.news_thumb ul {
margin: 0;
padding: 0;
list-style: none;
}
.rtl .news_thumb ul 
{
direction:rtl;
}
.news_thumb ul hr
{
margin:0px 3%;
color: #fff; 
background-color: #fff; 
border: 1px dotted #008080; 
border-style: none none dotted; 
}
.news_thumb ul li{
background: #f0f0f0;
margin: 2px 0px;
padding: 3px;
}
.news_thumb ul li.hover { 
background: #ddd;
cursor: pointer;
}
.news_thumb ul li.active {
background: #fff;
cursor: default;
}

.news_thumb ul li h4 {
margin:2px;
padding:0;
white-space:nowrap;
color:#0054E3;
font-family:Times New Roman;
font-size:15px;
}
.news_thumb ul li .block {
float: left;
margin-left: 4px;
padding: 0;
width: 75%;
overflow:hidden;
}
.news_thumb ul li p
{
background:#fff;
margin:0;
margin-top:5px;
padding:0;
white-space:nowrap;
}

jquery.cycle.all.js

/*!
 * jQuery Cycle Plugin (with Transition Definitions)
 * Examples and documentation at: http://jquery.malsup.com/cycle/
 * Copyright (c) 2007-2013 M. Alsup
 * Version: 3.0.3 (11-JUL-2013)
 * Dual licensed under the MIT and GPL licenses.
 * http://jquery.malsup.com/license.html
 * Requires: jQuery v1.7.1 or later
 */
;(function($, undefined) {
"use strict";

var ver = '3.0.3';

function debug(s) {
if ($.fn.cycle.debug)
log(s);
}
function log() {
/*global console */
if (window.console && console.log)
console.log('[cycle] ' + Array.prototype.join.call(arguments,' '));
}
$.expr[':'].paused = function(el) {
return el.cyclePause;
};


// the options arg can be...
//   a number  - indicates an immediate transition should occur to the given slide index
//   a string  - 'pause', 'resume', 'toggle', 'next', 'prev', 'stop', 'destroy' or the name of a transition effect (ie, 'fade', 'zoom', etc)
//   an object - properties to control the slideshow
//
// the arg2 arg can be...
//   the name of an fx (only used in conjunction with a numeric value for 'options')
//   the value true (only used in first arg == 'resume') and indicates
// that the resume should occur immediately (not wait for next timeout)

$.fn.cycle = function(options, arg2) {
var o = { s: this.selector, c: this.context };

// in 1.3+ we can fix mistakes with the ready state
if (this.length === 0 && options != 'stop') {
if (!$.isReady && o.s) {
log('DOM not ready, queuing slideshow');
$(function() {
$(o.s,o.c).cycle(options,arg2);
});
return this;
}
// is your DOM ready?  http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
return this;
}

// iterate the matched nodeset
return this.each(function() {
var opts = handleArguments(this, options, arg2);
if (opts === false)
return;

opts.updateActivePagerLink = opts.updateActivePagerLink || $.fn.cycle.updateActivePagerLink;
// stop existing slideshow for this container (if there is one)
if (this.cycleTimeout)
clearTimeout(this.cycleTimeout);
this.cycleTimeout = this.cyclePause = 0;
this.cycleStop = 0; // issue #108

var $cont = $(this);
var $slides = opts.slideExpr ? $(opts.slideExpr, this) : $cont.children();
var els = $slides.get();

if (els.length < 2) {
log('terminating; too few slides: ' + els.length);
return;
}

var opts2 = buildOptions($cont, $slides, els, opts, o);
if (opts2 === false)
return;

var startTime = opts2.continuous ? 10 : getTimeout(els[opts2.currSlide], els[opts2.nextSlide], opts2, !opts2.backwards);

// if it's an auto slideshow, kick it off
if (startTime) {
startTime += (opts2.delay || 0);
if (startTime < 10)
startTime = 10;
debug('first timeout: ' + startTime);
this.cycleTimeout = setTimeout(function(){go(els,opts2,0,!opts.backwards);}, startTime);
}
});
};

function triggerPause(cont, byHover, onPager) {
var opts = $(cont).data('cycle.opts');
if (!opts)
return;
var paused = !!cont.cyclePause;
if (paused && opts.paused)
opts.paused(cont, opts, byHover, onPager);
else if (!paused && opts.resumed)
opts.resumed(cont, opts, byHover, onPager);
}

// process the args that were passed to the plugin fn
function handleArguments(cont, options, arg2) {
if (cont.cycleStop === undefined)
cont.cycleStop = 0;
if (options === undefined || options === null)
options = {};
if (options.constructor == String) {
switch(options) {
case 'destroy':
case 'stop':
var opts = $(cont).data('cycle.opts');
if (!opts)
return false;
cont.cycleStop++; // callbacks look for change
if (cont.cycleTimeout)
clearTimeout(cont.cycleTimeout);
cont.cycleTimeout = 0;
if (opts.elements)
$(opts.elements).stop();
$(cont).removeData('cycle.opts');
if (options == 'destroy')
destroy(cont, opts);
return false;
case 'toggle':
cont.cyclePause = (cont.cyclePause === 1) ? 0 : 1;
checkInstantResume(cont.cyclePause, arg2, cont);
triggerPause(cont);
return false;
case 'pause':
cont.cyclePause = 1;
triggerPause(cont);
return false;
case 'resume':
cont.cyclePause = 0;
checkInstantResume(false, arg2, cont);
triggerPause(cont);
return false;
case 'prev':
case 'next':
opts = $(cont).data('cycle.opts');
if (!opts) {
log('options not found, "prev/next" ignored');
return false;
}
if (typeof arg2 == 'string') 
opts.oneTimeFx = arg2;
$.fn.cycle[options](opts);
return false;
default:
options = { fx: options };
}
return options;
}
else if (options.constructor == Number) {
// go to the requested slide
var num = options;
options = $(cont).data('cycle.opts');
if (!options) {
log('options not found, can not advance slide');
return false;
}
if (num < 0 || num >= options.elements.length) {
log('invalid slide index: ' + num);
return false;
}
options.nextSlide = num;
if (cont.cycleTimeout) {
clearTimeout(cont.cycleTimeout);
cont.cycleTimeout = 0;
}
if (typeof arg2 == 'string')
options.oneTimeFx = arg2;
go(options.elements, options, 1, num >= options.currSlide);
return false;
}
return options;
function checkInstantResume(isPaused, arg2, cont) {
if (!isPaused && arg2 === true) { // resume now!
var options = $(cont).data('cycle.opts');
if (!options) {
log('options not found, can not resume');
return false;
}
if (cont.cycleTimeout) {
clearTimeout(cont.cycleTimeout);
cont.cycleTimeout = 0;
}
go(options.elements, options, 1, !options.backwards);
}
}
}

function removeFilter(el, opts) {
if (!$.support.opacity && opts.cleartype && el.style.filter) {
try { el.style.removeAttribute('filter'); }
catch(smother) {} // handle old opera versions
}
}

// unbind event handlers
function destroy(cont, opts) {
if (opts.next)
$(opts.next).unbind(opts.prevNextEvent);
if (opts.prev)
$(opts.prev).unbind(opts.prevNextEvent);
if (opts.pager || opts.pagerAnchorBuilder)
$.each(opts.pagerAnchors || [], function() {
this.unbind().remove();
});
opts.pagerAnchors = null;
$(cont).unbind('mouseenter.cycle mouseleave.cycle');
if (opts.destroy) // callback
opts.destroy(opts);
}

// one-time initialization
function buildOptions($cont, $slides, els, options, o) {
var startingSlideSpecified;
// support metadata plugin (v1.0 and v2.0)
var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
var meta = $.isFunction($cont.data) ? $cont.data(opts.metaAttr) : null;
if (meta)
opts = $.extend(opts, meta);
if (opts.autostop)
opts.countdown = opts.autostopCount || els.length;

var cont = $cont[0];
$cont.data('cycle.opts', opts);
opts.$cont = $cont;
opts.stopCount = cont.cycleStop;
opts.elements = els;
opts.before = opts.before ? [opts.before] : [];
opts.after = opts.after ? [opts.after] : [];

// push some after callbacks
if (!$.support.opacity && opts.cleartype)
opts.after.push(function() { removeFilter(this, opts); });
if (opts.continuous)
opts.after.push(function() { go(els,opts,0,!opts.backwards); });

saveOriginalOpts(opts);

// clearType corrections
if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
clearTypeFix($slides);

// container requires non-static position so that slides can be position within
if ($cont.css('position') == 'static')
$cont.css('position', 'relative');
if (opts.width)
$cont.width(opts.width);
if (opts.height && opts.height != 'auto')
$cont.height(opts.height);

if (opts.startingSlide !== undefined) {
opts.startingSlide = parseInt(opts.startingSlide,10);
if (opts.startingSlide >= els.length || opts.startSlide < 0)
opts.startingSlide = 0; // catch bogus input
else 
startingSlideSpecified = true;
}
else if (opts.backwards)
opts.startingSlide = els.length - 1;
else
opts.startingSlide = 0;

// if random, mix up the slide array
if (opts.random) {
opts.randomMap = [];
for (var i = 0; i < els.length; i++)
opts.randomMap.push(i);
opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
if (startingSlideSpecified) {
// try to find the specified starting slide and if found set start slide index in the map accordingly
for ( var cnt = 0; cnt < els.length; cnt++ ) {
if ( opts.startingSlide == opts.randomMap[cnt] ) {
opts.randomIndex = cnt;
}
}
}
else {
opts.randomIndex = 1;
opts.startingSlide = opts.randomMap[1];
}
}
else if (opts.startingSlide >= els.length)
opts.startingSlide = 0; // catch bogus input
opts.currSlide = opts.startingSlide || 0;
var first = opts.startingSlide;

// set position and zIndex on all the slides
$slides.css({position: 'absolute', top:0, left:0}).hide().each(function(i) {
var z;
if (opts.backwards)
z = first ? i <= first ? els.length + (i-first) : first-i : els.length-i;
else
z = first ? i >= first ? els.length - (i-first) : first-i : els.length-i;
$(this).css('z-index', z);
});

// make sure first slide is visible
$(els[first]).css('opacity',1).show(); // opacity bit needed to handle restart use case
removeFilter(els[first], opts);

// stretch slides
if (opts.fit) {
if (!opts.aspect) {
       if (opts.width)
           $slides.width(opts.width);
       if (opts.height && opts.height != 'auto')
           $slides.height(opts.height);
} else {
$slides.each(function(){
var $slide = $(this);
var ratio = (opts.aspect === true) ? $slide.width()/$slide.height() : opts.aspect;
if( opts.width && $slide.width() != opts.width ) {
$slide.width( opts.width );
$slide.height( opts.width / ratio );
}

if( opts.height && $slide.height() < opts.height ) {
$slide.height( opts.height );
$slide.width( opts.height * ratio );
}
});
}
}

if (opts.center && ((!opts.fit) || opts.aspect)) {
$slides.each(function(){
var $slide = $(this);
$slide.css({
"margin-left": opts.width ?
((opts.width - $slide.width()) / 2) + "px" :
0,
"margin-top": opts.height ?
((opts.height - $slide.height()) / 2) + "px" :
0
});
});
}

if (opts.center && !opts.fit && !opts.slideResize) {
$slides.each(function(){
var $slide = $(this);
$slide.css({
"margin-left": opts.width ? ((opts.width - $slide.width()) / 2) + "px" : 0,
"margin-top": opts.height ? ((opts.height - $slide.height()) / 2) + "px" : 0
});
});
}
// stretch container
var reshape = (opts.containerResize || opts.containerResizeHeight) && $cont.innerHeight() < 1;
if (reshape) { // do this only if container has no size http://tinyurl.com/da2oa9
var maxw = 0, maxh = 0;
for(var j=0; j < els.length; j++) {
var $e = $(els[j]), e = $e[0], w = $e.outerWidth(), h = $e.outerHeight();
if (!w) w = e.offsetWidth || e.width || $e.attr('width');
if (!h) h = e.offsetHeight || e.height || $e.attr('height');
maxw = w > maxw ? w : maxw;
maxh = h > maxh ? h : maxh;
}
if (opts.containerResize && maxw > 0 && maxh > 0)
$cont.css({width:maxw+'px',height:maxh+'px'});
if (opts.containerResizeHeight && maxh > 0)
$cont.css({height:maxh+'px'});
}

var pauseFlag = false;  // https://github.com/malsup/cycle/issues/44
if (opts.pause)
$cont.bind('mouseenter.cycle', function(){
pauseFlag = true;
this.cyclePause++;
triggerPause(cont, true);
}).bind('mouseleave.cycle', function(){
if (pauseFlag)
this.cyclePause--;
triggerPause(cont, true);
});

if (supportMultiTransitions(opts) === false)
return false;

// apparently a lot of people use image slideshows without height/width attributes on the images.
// Cycle 2.50+ requires the sizing info for every slide; this block tries to deal with that.
var requeue = false;
options.requeueAttempts = options.requeueAttempts || 0;
$slides.each(function() {
// try to get height/width of each slide
var $el = $(this);
this.cycleH = (opts.fit && opts.height) ? opts.height : ($el.height() || this.offsetHeight || this.height || $el.attr('height') || 0);
this.cycleW = (opts.fit && opts.width) ? opts.width : ($el.width() || this.offsetWidth || this.width || $el.attr('width') || 0);

if ( $el.is('img') ) {
var loading = (this.cycleH === 0 && this.cycleW === 0 && !this.complete);
// don't requeue for images that are still loading but have a valid size
if (loading) {
if (o.s && opts.requeueOnImageNotLoaded && ++options.requeueAttempts < 100) { // track retry count so we don't loop forever
log(options.requeueAttempts,' - img slide not loaded, requeuing slideshow: ', this.src, this.cycleW, this.cycleH);
setTimeout(function() {$(o.s,o.c).cycle(options);}, opts.requeueTimeout);
requeue = true;
return false; // break each loop
}
else {
log('could not determine size of image: '+this.src, this.cycleW, this.cycleH);
}
}
}
return true;
});

if (requeue)
return false;

opts.cssBefore = opts.cssBefore || {};
opts.cssAfter = opts.cssAfter || {};
opts.cssFirst = opts.cssFirst || {};
opts.animIn = opts.animIn || {};
opts.animOut = opts.animOut || {};

$slides.not(':eq('+first+')').css(opts.cssBefore);
$($slides[first]).css(opts.cssFirst);

if (opts.timeout) {
opts.timeout = parseInt(opts.timeout,10);
// ensure that timeout and speed settings are sane
if (opts.speed.constructor == String)
opts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed,10);
if (!opts.sync)
opts.speed = opts.speed / 2;
var buffer = opts.fx == 'none' ? 0 : opts.fx == 'shuffle' ? 500 : 250;
while((opts.timeout - opts.speed) < buffer) // sanitize timeout
opts.timeout += opts.speed;
}
if (opts.easing)
opts.easeIn = opts.easeOut = opts.easing;
if (!opts.speedIn)
opts.speedIn = opts.speed;
if (!opts.speedOut)
opts.speedOut = opts.speed;

opts.slideCount = els.length;
opts.currSlide = opts.lastSlide = first;
if (opts.random) {
if (++opts.randomIndex == els.length)
opts.randomIndex = 0;
opts.nextSlide = opts.randomMap[opts.randomIndex];
}
else if (opts.backwards)
opts.nextSlide = opts.startingSlide === 0 ? (els.length-1) : opts.startingSlide-1;
else
opts.nextSlide = opts.startingSlide >= (els.length-1) ? 0 : opts.startingSlide+1;

// run transition init fn
if (!opts.multiFx) {
var init = $.fn.cycle.transitions[opts.fx];
if ($.isFunction(init))
init($cont, $slides, opts);
else if (opts.fx != 'custom' && !opts.multiFx) {
log('unknown transition: ' + opts.fx,'; slideshow terminating');
return false;
}
}

// fire artificial events
var e0 = $slides[first];
if (!opts.skipInitializationCallbacks) {
if (opts.before.length)
opts.before[0].apply(e0, [e0, e0, opts, true]);
if (opts.after.length)
opts.after[0].apply(e0, [e0, e0, opts, true]);
}
if (opts.next)
$(opts.next).bind(opts.prevNextEvent,function(){return advance(opts,1);});
if (opts.prev)
$(opts.prev).bind(opts.prevNextEvent,function(){return advance(opts,0);});
if (opts.pager || opts.pagerAnchorBuilder)
buildPager(els,opts);

exposeAddSlide(opts, els);

return opts;
}

// save off original opts so we can restore after clearing state
function saveOriginalOpts(opts) {
opts.original = { before: [], after: [] };
opts.original.cssBefore = $.extend({}, opts.cssBefore);
opts.original.cssAfter  = $.extend({}, opts.cssAfter);
opts.original.animIn = $.extend({}, opts.animIn);
opts.original.animOut   = $.extend({}, opts.animOut);
$.each(opts.before, function() { opts.original.before.push(this); });
$.each(opts.after,  function() { opts.original.after.push(this); });
}

function supportMultiTransitions(opts) {
var i, tx, txs = $.fn.cycle.transitions;
// look for multiple effects
if (opts.fx.indexOf(',') > 0) {
opts.multiFx = true;
opts.fxs = opts.fx.replace(/\s*/g,'').split(',');
// discard any bogus effect names
for (i=0; i < opts.fxs.length; i++) {
var fx = opts.fxs[i];
tx = txs[fx];
if (!tx || !txs.hasOwnProperty(fx) || !$.isFunction(tx)) {
log('discarding unknown transition: ',fx);
opts.fxs.splice(i,1);
i--;
}
}
// if we have an empty list then we threw everything away!
if (!opts.fxs.length) {
log('No valid transitions named; slideshow terminating.');
return false;
}
}
else if (opts.fx == 'all') {  // auto-gen the list of transitions
opts.multiFx = true;
opts.fxs = [];
for (var p in txs) {
if (txs.hasOwnProperty(p)) {
tx = txs[p];
if (txs.hasOwnProperty(p) && $.isFunction(tx))
opts.fxs.push(p);
}
}
}
if (opts.multiFx && opts.randomizeEffects) {
// munge the fxs array to make effect selection random
var r1 = Math.floor(Math.random() * 20) + 30;
for (i = 0; i < r1; i++) {
var r2 = Math.floor(Math.random() * opts.fxs.length);
opts.fxs.push(opts.fxs.splice(r2,1)[0]);
}
debug('randomized fx sequence: ',opts.fxs);
}
return true;
}

// provide a mechanism for adding slides after the slideshow has started
function exposeAddSlide(opts, els) {
opts.addSlide = function(newSlide, prepend) {
var $s = $(newSlide), s = $s[0];
if (!opts.autostopCount)
opts.countdown++;
els[prepend?'unshift':'push'](s);
if (opts.els)
opts.els[prepend?'unshift':'push'](s); // shuffle needs this
opts.slideCount = els.length;

// add the slide to the random map and resort
if (opts.random) {
opts.randomMap.push(opts.slideCount-1);
opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
}

$s.css('position','absolute');
$s[prepend?'prependTo':'appendTo'](opts.$cont);

if (prepend) {
opts.currSlide++;
opts.nextSlide++;
}

if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
clearTypeFix($s);

if (opts.fit && opts.width)
$s.width(opts.width);
if (opts.fit && opts.height && opts.height != 'auto')
$s.height(opts.height);
s.cycleH = (opts.fit && opts.height) ? opts.height : $s.height();
s.cycleW = (opts.fit && opts.width) ? opts.width : $s.width();

$s.css(opts.cssBefore);

if (opts.pager || opts.pagerAnchorBuilder)
$.fn.cycle.createPagerAnchor(els.length-1, s, $(opts.pager), els, opts);

if ($.isFunction(opts.onAddSlide))
opts.onAddSlide($s);
else
$s.hide(); // default behavior
};
}

// reset internal state; we do this on every pass in order to support multiple effects
$.fn.cycle.resetState = function(opts, fx) {
fx = fx || opts.fx;
opts.before = []; opts.after = [];
opts.cssBefore = $.extend({}, opts.original.cssBefore);
opts.cssAfter  = $.extend({}, opts.original.cssAfter);
opts.animIn = $.extend({}, opts.original.animIn);
opts.animOut   = $.extend({}, opts.original.animOut);
opts.fxFn = null;
$.each(opts.original.before, function() { opts.before.push(this); });
$.each(opts.original.after,  function() { opts.after.push(this); });

// re-init
var init = $.fn.cycle.transitions[fx];
if ($.isFunction(init))
init(opts.$cont, $(opts.elements), opts);
};

// this is the main engine fn, it handles the timeouts, callbacks and slide index mgmt
function go(els, opts, manual, fwd) {
var p = opts.$cont[0], curr = els[opts.currSlide], next = els[opts.nextSlide];

// opts.busy is true if we're in the middle of an animation
if (manual && opts.busy && opts.manualTrump) {
// let manual transitions requests trump active ones
debug('manualTrump in go(), stopping active transition');
$(els).stop(true,true);
opts.busy = 0;
clearTimeout(p.cycleTimeout);
}

// don't begin another timeout-based transition if there is one active
if (opts.busy) {
debug('transition active, ignoring new tx request');
return;
}


// stop cycling if we have an outstanding stop request
if (p.cycleStop != opts.stopCount || p.cycleTimeout === 0 && !manual)
return;

// check to see if we should stop cycling based on autostop options
if (!manual && !p.cyclePause && !opts.bounce &&
((opts.autostop && (--opts.countdown <= 0)) ||
(opts.nowrap && !opts.random && opts.nextSlide < opts.currSlide))) {
if (opts.end)
opts.end(opts);
return;
}

// if slideshow is paused, only transition on a manual trigger
var changed = false;
if ((manual || !p.cyclePause) && (opts.nextSlide != opts.currSlide)) {
changed = true;
var fx = opts.fx;
// keep trying to get the slide size if we don't have it yet
curr.cycleH = curr.cycleH || $(curr).height();
curr.cycleW = curr.cycleW || $(curr).width();
next.cycleH = next.cycleH || $(next).height();
next.cycleW = next.cycleW || $(next).width();

// support multiple transition types
if (opts.multiFx) {
if (fwd && (opts.lastFx === undefined || ++opts.lastFx >= opts.fxs.length))
opts.lastFx = 0;
else if (!fwd && (opts.lastFx === undefined || --opts.lastFx < 0))
opts.lastFx = opts.fxs.length - 1;
fx = opts.fxs[opts.lastFx];
}

// one-time fx overrides apply to:  $('div').cycle(3,'zoom');
if (opts.oneTimeFx) {
fx = opts.oneTimeFx;
opts.oneTimeFx = null;
}

$.fn.cycle.resetState(opts, fx);

// run the before callbacks
if (opts.before.length)
$.each(opts.before, function(i,o) {
if (p.cycleStop != opts.stopCount) return;
o.apply(next, [curr, next, opts, fwd]);
});

// stage the after callacks
var after = function() {
opts.busy = 0;
$.each(opts.after, function(i,o) {
if (p.cycleStop != opts.stopCount) return;
o.apply(next, [curr, next, opts, fwd]);
});
if (!p.cycleStop) {
// queue next transition
queueNext();
}
};

debug('tx firing('+fx+'); currSlide: ' + opts.currSlide + '; nextSlide: ' + opts.nextSlide);
// get ready to perform the transition
opts.busy = 1;
if (opts.fxFn) // fx function provided?
opts.fxFn(curr, next, opts, after, fwd, manual && opts.fastOnEvent);
else if ($.isFunction($.fn.cycle[opts.fx])) // fx plugin ?
$.fn.cycle[opts.fx](curr, next, opts, after, fwd, manual && opts.fastOnEvent);
else
$.fn.cycle.custom(curr, next, opts, after, fwd, manual && opts.fastOnEvent);
}
else {
queueNext();
}

if (changed || opts.nextSlide == opts.currSlide) {
// calculate the next slide
var roll;
opts.lastSlide = opts.currSlide;
if (opts.random) {
opts.currSlide = opts.nextSlide;
if (++opts.randomIndex == els.length) {
opts.randomIndex = 0;
opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
}
opts.nextSlide = opts.randomMap[opts.randomIndex];
if (opts.nextSlide == opts.currSlide)
opts.nextSlide = (opts.currSlide == opts.slideCount - 1) ? 0 : opts.currSlide + 1;
}
else if (opts.backwards) {
roll = (opts.nextSlide - 1) < 0;
if (roll && opts.bounce) {
opts.backwards = !opts.backwards;
opts.nextSlide = 1;
opts.currSlide = 0;
}
else {
opts.nextSlide = roll ? (els.length-1) : opts.nextSlide-1;
opts.currSlide = roll ? 0 : opts.nextSlide+1;
}
}
else { // sequence
roll = (opts.nextSlide + 1) == els.length;
if (roll && opts.bounce) {
opts.backwards = !opts.backwards;
opts.nextSlide = els.length-2;
opts.currSlide = els.length-1;
}
else {
opts.nextSlide = roll ? 0 : opts.nextSlide+1;
opts.currSlide = roll ? els.length-1 : opts.nextSlide-1;
}
}
}
if (changed && opts.pager)
opts.updateActivePagerLink(opts.pager, opts.currSlide, opts.activePagerClass);
function queueNext() {
// stage the next transition
var ms = 0, timeout = opts.timeout;
if (opts.timeout && !opts.continuous) {
ms = getTimeout(els[opts.currSlide], els[opts.nextSlide], opts, fwd);
         if (opts.fx == 'shuffle')
            ms -= opts.speedOut;
      }
else if (opts.continuous && p.cyclePause) // continuous shows work off an after callback, not this timer logic
ms = 10;
if (ms > 0)
p.cycleTimeout = setTimeout(function(){ go(els, opts, 0, !opts.backwards); }, ms);
}
}

// invoked after transition
$.fn.cycle.updateActivePagerLink = function(pager, currSlide, clsName) {
   $(pager).each(function() {
       $(this).children().removeClass(clsName).eq(currSlide).addClass(clsName);
   });
};

// calculate timeout value for current transition
function getTimeout(curr, next, opts, fwd) {
if (opts.timeoutFn) {
// call user provided calc fn
var t = opts.timeoutFn.call(curr,curr,next,opts,fwd);
while (opts.fx != 'none' && (t - opts.speed) < 250) // sanitize timeout
t += opts.speed;
debug('calculated timeout: ' + t + '; speed: ' + opts.speed);
if (t !== false)
return t;
}
return opts.timeout;
}

// expose next/prev function, caller must pass in state
$.fn.cycle.next = function(opts) { advance(opts,1); };
$.fn.cycle.prev = function(opts) { advance(opts,0);};

// advance slide forward or back
function advance(opts, moveForward) {
var val = moveForward ? 1 : -1;
var els = opts.elements;
var p = opts.$cont[0], timeout = p.cycleTimeout;
if (timeout) {
clearTimeout(timeout);
p.cycleTimeout = 0;
}
if (opts.random && val < 0) {
// move back to the previously display slide
opts.randomIndex--;
if (--opts.randomIndex == -2)
opts.randomIndex = els.length-2;
else if (opts.randomIndex == -1)
opts.randomIndex = els.length-1;
opts.nextSlide = opts.randomMap[opts.randomIndex];
}
else if (opts.random) {
opts.nextSlide = opts.randomMap[opts.randomIndex];
}
else {
opts.nextSlide = opts.currSlide + val;
if (opts.nextSlide < 0) {
if (opts.nowrap) return false;
opts.nextSlide = els.length - 1;
}
else if (opts.nextSlide >= els.length) {
if (opts.nowrap) return false;
opts.nextSlide = 0;
}
}

var cb = opts.onPrevNextEvent || opts.prevNextClick; // prevNextClick is deprecated
if ($.isFunction(cb))
cb(val > 0, opts.nextSlide, els[opts.nextSlide]);
go(els, opts, 1, moveForward);
return false;
}

function buildPager(els, opts) {
var $p = $(opts.pager);
$.each(els, function(i,o) {
$.fn.cycle.createPagerAnchor(i,o,$p,els,opts);
});
opts.updateActivePagerLink(opts.pager, opts.startingSlide, opts.activePagerClass);
}

$.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) {
var a;
if ($.isFunction(opts.pagerAnchorBuilder)) {
a = opts.pagerAnchorBuilder(i,el);
debug('pagerAnchorBuilder('+i+', el) returned: ' + a);
}
else
a = '<a href="#">'+(i+1)+'</a>';
if (!a)
return;
var $a = $(a);
// don't reparent if anchor is in the dom
if ($a.parents('body').length === 0) {
var arr = [];
if ($p.length > 1) {
$p.each(function() {
var $clone = $a.clone(true);
$(this).append($clone);
arr.push($clone[0]);
});
$a = $(arr);
}
else {
$a.appendTo($p);
}
}

opts.pagerAnchors =  opts.pagerAnchors || [];
opts.pagerAnchors.push($a);
var pagerFn = function(e) {
e.preventDefault();
opts.nextSlide = i;
var p = opts.$cont[0], timeout = p.cycleTimeout;
if (timeout) {
clearTimeout(timeout);
p.cycleTimeout = 0;
}
var cb = opts.onPagerEvent || opts.pagerClick; // pagerClick is deprecated
if ($.isFunction(cb))
cb(opts.nextSlide, els[opts.nextSlide]);
go(els,opts,1,opts.currSlide < i); // trigger the trans
// return false; // <== allow bubble
};
if ( /mouseenter|mouseover/i.test(opts.pagerEvent) ) {
$a.hover(pagerFn, function(){/* no-op */} );
}
else {
$a.bind(opts.pagerEvent, pagerFn);
}
if ( ! /^click/.test(opts.pagerEvent) && !opts.allowPagerClickBubble)
$a.bind('click.cycle', function(){return false;}); // suppress click
var cont = opts.$cont[0];
var pauseFlag = false; // https://github.com/malsup/cycle/issues/44
if (opts.pauseOnPagerHover) {
$a.hover(
function() { 
pauseFlag = true;
cont.cyclePause++; 
triggerPause(cont,true,true);
}, function() { 
if (pauseFlag)
cont.cyclePause--; 
triggerPause(cont,true,true);
);
}
};

// helper fn to calculate the number of slides between the current and the next
$.fn.cycle.hopsFromLast = function(opts, fwd) {
var hops, l = opts.lastSlide, c = opts.currSlide;
if (fwd)
hops = c > l ? c - l : opts.slideCount - l;
else
hops = c < l ? l - c : l + opts.slideCount - c;
return hops;
};

// fix clearType problems in ie6 by setting an explicit bg color
// (otherwise text slides look horrible during a fade transition)
function clearTypeFix($slides) {
debug('applying clearType background-color hack');
function hex(s) {
s = parseInt(s,10).toString(16);
return s.length < 2 ? '0'+s : s;
}
function getBg(e) {
for ( ; e && e.nodeName.toLowerCase() != 'html'; e = e.parentNode) {
var v = $.css(e,'background-color');
if (v && v.indexOf('rgb') >= 0 ) {
var rgb = v.match(/\d+/g);
return '#'+ hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);
}
if (v && v != 'transparent')
return v;
}
return '#ffffff';
}
$slides.each(function() { $(this).css('background-color', getBg(this)); });
}

// reset common props before the next transition
$.fn.cycle.commonReset = function(curr,next,opts,w,h,rev) {
$(opts.elements).not(curr).hide();
if (typeof opts.cssBefore.opacity == 'undefined')
opts.cssBefore.opacity = 1;
opts.cssBefore.display = 'block';
if (opts.slideResize && w !== false && next.cycleW > 0)
opts.cssBefore.width = next.cycleW;
if (opts.slideResize && h !== false && next.cycleH > 0)
opts.cssBefore.height = next.cycleH;
opts.cssAfter = opts.cssAfter || {};
opts.cssAfter.display = 'none';
$(curr).css('zIndex',opts.slideCount + (rev === true ? 1 : 0));
$(next).css('zIndex',opts.slideCount + (rev === true ? 0 : 1));
};

// the actual fn for effecting a transition
$.fn.cycle.custom = function(curr, next, opts, cb, fwd, speedOverride) {
var $l = $(curr), $n = $(next);
var speedIn = opts.speedIn, speedOut = opts.speedOut, easeIn = opts.easeIn, easeOut = opts.easeOut, animInDelay = opts.animInDelay, animOutDelay = opts.animOutDelay;
$n.css(opts.cssBefore);
if (speedOverride) {
if (typeof speedOverride == 'number')
speedIn = speedOut = speedOverride;
else
speedIn = speedOut = 1;
easeIn = easeOut = null;
}
var fn = function() {
$n.delay(animInDelay).animate(opts.animIn, speedIn, easeIn, function() {
cb();
});
};
$l.delay(animOutDelay).animate(opts.animOut, speedOut, easeOut, function() {
$l.css(opts.cssAfter);
if (!opts.sync) 
fn();
});
if (opts.sync) fn();
};

// transition definitions - only fade is defined here, transition pack defines the rest
$.fn.cycle.transitions = {
fade: function($cont, $slides, opts) {
$slides.not(':eq('+opts.currSlide+')').css('opacity',0);
opts.before.push(function(curr,next,opts) {
$.fn.cycle.commonReset(curr,next,opts);
opts.cssBefore.opacity = 0;
});
opts.animIn   = { opacity: 1 };
opts.animOut   = { opacity: 0 };
opts.cssBefore = { top: 0, left: 0 };
}
};

$.fn.cycle.ver = function() { return ver; };

// override these globally if you like (they are all optional)
$.fn.cycle.defaults = {
    activePagerClass: 'activeSlide', // class name used for the active pager link
    after:            null,     // transition callback (scope set to element that was shown):  function(currSlideElement, nextSlideElement, options, forwardFlag)
    allowPagerClickBubble: false, // allows or prevents click event on pager anchors from bubbling
    animIn:           null,     // properties that define how the slide animates in
    animInDelay:      0,        // allows delay before next slide transitions in
    animOut:          null,     // properties that define how the slide animates out
    animOutDelay:     0,        // allows delay before current slide transitions out
    aspect:           false,    // preserve aspect ratio during fit resizing, cropping if necessary (must be used with fit option)
    autostop:         0,        // true to end slideshow after X transitions (where X == slide count)
    autostopCount:    0,        // number of transitions (optionally used with autostop to define X)
    backwards:        false,    // true to start slideshow at last slide and move backwards through the stack
    before:           null,     // transition callback (scope set to element to be shown):     function(currSlideElement, nextSlideElement, options, forwardFlag)
    center:           null,     // set to true to have cycle add top/left margin to each slide (use with width and height options)
    cleartype:        !$.support.opacity,  // true if clearType corrections should be applied (for IE)
    cleartypeNoBg:    false,    // set to true to disable extra cleartype fixing (leave false to force background color setting on slides)
    containerResize:  1,        // resize container to fit largest slide
    containerResizeHeight:  0,  // resize containers height to fit the largest slide but leave the width dynamic
    continuous:       0,        // true to start next transition immediately after current one completes
    cssAfter:         null,     // properties that defined the state of the slide after transitioning out
    cssBefore:        null,     // properties that define the initial state of the slide before transitioning in
    delay:            0,        // additional delay (in ms) for first transition (hint: can be negative)
    easeIn:           null,     // easing for "in" transition
    easeOut:          null,     // easing for "out" transition
    easing:           null,     // easing method for both in and out transitions
    end:              null,     // callback invoked when the slideshow terminates (use with autostop or nowrap options): function(options)
    fastOnEvent:      0,        // force fast transitions when triggered manually (via pager or prev/next); value == time in ms
    fit:              0,        // force slides to fit container
    fx:               'fade',   // name of transition effect (or comma separated names, ex: 'fade,scrollUp,shuffle')
    fxFn:             null,     // function used to control the transition: function(currSlideElement, nextSlideElement, options, afterCalback, forwardFlag)
    height:           'auto',   // container height (if the 'fit' option is true, the slides will be set to this height as well)
    manualTrump:      true,     // causes manual transition to stop an active transition instead of being ignored
    metaAttr:         'cycle',  // data- attribute that holds the option data for the slideshow
    next:             null,     // element, jQuery object, or jQuery selector string for the element to use as event trigger for next slide
    nowrap:           0,        // true to prevent slideshow from wrapping
    onPagerEvent:     null,     // callback fn for pager events: function(zeroBasedSlideIndex, slideElement)
    onPrevNextEvent:  null,     // callback fn for prev/next events: function(isNext, zeroBasedSlideIndex, slideElement)
    pager:            null,     // element, jQuery object, or jQuery selector string for the element to use as pager container
    pagerAnchorBuilder: null,   // callback fn for building anchor links:  function(index, DOMelement)
    pagerEvent:       'click.cycle', // name of event which drives the pager navigation
    pause:            0,        // true to enable "pause on hover"
    pauseOnPagerHover: 0,       // true to pause when hovering over pager link
    prev:             null,     // element, jQuery object, or jQuery selector string for the element to use as event trigger for previous slide
    prevNextEvent:    'click.cycle',// event which drives the manual transition to the previous or next slide
    random:           0,        // true for random, false for sequence (not applicable to shuffle fx)
    randomizeEffects: 1,        // valid when multiple effects are used; true to make the effect sequence random
    requeueOnImageNotLoaded: true, // requeue the slideshow if any image slides are not yet loaded
    requeueTimeout:   250,      // ms delay for requeue
    rev:              0,        // causes animations to transition in reverse (for effects that support it such as scrollHorz/scrollVert/shuffle)
    shuffle:          null,     // coords for shuffle animation, ex: { top:15, left: 200 }
    skipInitializationCallbacks: false, // set to true to disable the first before/after callback that occurs prior to any transition
    slideExpr:        null,     // expression for selecting slides (if something other than all children is required)
    slideResize:      1,        // force slide width/height to fixed size before every transition
    speed:            1000,     // speed of the transition (any valid fx speed value)
    speedIn:          null,     // speed of the 'in' transition
    speedOut:         null,     // speed of the 'out' transition
    startingSlide:    undefined,// zero-based index of the first slide to be displayed
    sync:             1,        // true if in/out transitions should occur simultaneously
    timeout:          4000,     // milliseconds between slide transitions (0 to disable auto advance)
    timeoutFn:        null,     // callback for determining per-slide timeout value:  function(currSlideElement, nextSlideElement, options, forwardFlag)
    updateActivePagerLink: null,// callback fn invoked to update the active pager link (adds/removes activePagerClass style)
    width:            null      // container width (if the 'fit' option is true, the slides will be set to this width as well)
};

})(jQuery);


/*!
 * jQuery Cycle Plugin Transition Definitions
 * This script is a plugin for the jQuery Cycle Plugin
 * Examples and documentation at: http://malsup.com/jquery/cycle/
 * Copyright (c) 2007-2010 M. Alsup
 * Version: 2.73
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 */
(function($) {
"use strict";

//
// These functions define slide initialization and properties for the named
// transitions. To save file size feel free to remove any of these that you
// don't need.
//
$.fn.cycle.transitions.none = function($cont, $slides, opts) {
opts.fxFn = function(curr,next,opts,after){
$(next).show();
$(curr).hide();
after();
};
};

// not a cross-fade, fadeout only fades out the top slide
$.fn.cycle.transitions.fadeout = function($cont, $slides, opts) {
$slides.not(':eq('+opts.currSlide+')').css({ display: 'block', 'opacity': 1 });
opts.before.push(function(curr,next,opts,w,h,rev) {
$(curr).css('zIndex',opts.slideCount + (rev !== true ? 1 : 0));
$(next).css('zIndex',opts.slideCount + (rev !== true ? 0 : 1));
});
opts.animIn.opacity = 1;
opts.animOut.opacity = 0;
opts.cssBefore.opacity = 1;
opts.cssBefore.display = 'block';
opts.cssAfter.zIndex = 0;
};

// scrollUp/Down/Left/Right
$.fn.cycle.transitions.scrollUp = function($cont, $slides, opts) {
$cont.css('overflow','hidden');
opts.before.push($.fn.cycle.commonReset);
var h = $cont.height();
opts.cssBefore.top = h;
opts.cssBefore.left = 0;
opts.cssFirst.top = 0;
opts.animIn.top = 0;
opts.animOut.top = -h;
};
$.fn.cycle.transitions.scrollDown = function($cont, $slides, opts) {
$cont.css('overflow','hidden');
opts.before.push($.fn.cycle.commonReset);
var h = $cont.height();
opts.cssFirst.top = 0;
opts.cssBefore.top = -h;
opts.cssBefore.left = 0;
opts.animIn.top = 0;
opts.animOut.top = h;
};
$.fn.cycle.transitions.scrollLeft = function($cont, $slides, opts) {
$cont.css('overflow','hidden');
opts.before.push($.fn.cycle.commonReset);
var w = $cont.width();
opts.cssFirst.left = 0;
opts.cssBefore.left = w;
opts.cssBefore.top = 0;
opts.animIn.left = 0;
opts.animOut.left = 0-w;
};
$.fn.cycle.transitions.scrollRight = function($cont, $slides, opts) {
$cont.css('overflow','hidden');
opts.before.push($.fn.cycle.commonReset);
var w = $cont.width();
opts.cssFirst.left = 0;
opts.cssBefore.left = -w;
opts.cssBefore.top = 0;
opts.animIn.left = 0;
opts.animOut.left = w;
};
$.fn.cycle.transitions.scrollHorz = function($cont, $slides, opts) {
$cont.css('overflow','hidden').width();
opts.before.push(function(curr, next, opts, fwd) {
if (opts.rev)
fwd = !fwd;
$.fn.cycle.commonReset(curr,next,opts);
opts.cssBefore.left = fwd ? (next.cycleW-1) : (1-next.cycleW);
opts.animOut.left = fwd ? -curr.cycleW : curr.cycleW;
});
opts.cssFirst.left = 0;
opts.cssBefore.top = 0;
opts.animIn.left = 0;
opts.animOut.top = 0;
};
$.fn.cycle.transitions.scrollVert = function($cont, $slides, opts) {
$cont.css('overflow','hidden');
opts.before.push(function(curr, next, opts, fwd) {
if (opts.rev)
fwd = !fwd;
$.fn.cycle.commonReset(curr,next,opts);
opts.cssBefore.top = fwd ? (1-next.cycleH) : (next.cycleH-1);
opts.animOut.top = fwd ? curr.cycleH : -curr.cycleH;
});
opts.cssFirst.top = 0;
opts.cssBefore.left = 0;
opts.animIn.top = 0;
opts.animOut.left = 0;
};

// slideX/slideY
$.fn.cycle.transitions.slideX = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$(opts.elements).not(curr).hide();
$.fn.cycle.commonReset(curr,next,opts,false,true);
opts.animIn.width = next.cycleW;
});
opts.cssBefore.left = 0;
opts.cssBefore.top = 0;
opts.cssBefore.width = 0;
opts.animIn.width = 'show';
opts.animOut.width = 0;
};
$.fn.cycle.transitions.slideY = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$(opts.elements).not(curr).hide();
$.fn.cycle.commonReset(curr,next,opts,true,false);
opts.animIn.height = next.cycleH;
});
opts.cssBefore.left = 0;
opts.cssBefore.top = 0;
opts.cssBefore.height = 0;
opts.animIn.height = 'show';
opts.animOut.height = 0;
};

// shuffle
$.fn.cycle.transitions.shuffle = function($cont, $slides, opts) {
var i, w = $cont.css('overflow', 'visible').width();
$slides.css({left: 0, top: 0});
opts.before.push(function(curr,next,opts) {
$.fn.cycle.commonReset(curr,next,opts,true,true,true);
});
// only adjust speed once!
if (!opts.speedAdjusted) {
opts.speed = opts.speed / 2; // shuffle has 2 transitions
opts.speedAdjusted = true;
}
opts.random = 0;
opts.shuffle = opts.shuffle || {left:-w, top:15};
opts.els = [];
for (i=0; i < $slides.length; i++)
opts.els.push($slides[i]);

for (i=0; i < opts.currSlide; i++)
opts.els.push(opts.els.shift());

// custom transition fn (hat tip to Benjamin Sterling for this bit of sweetness!)
opts.fxFn = function(curr, next, opts, cb, fwd) {
if (opts.rev)
fwd = !fwd;
var $el = fwd ? $(curr) : $(next);
$(next).css(opts.cssBefore);
var count = opts.slideCount;
$el.animate(opts.shuffle, opts.speedIn, opts.easeIn, function() {
var hops = $.fn.cycle.hopsFromLast(opts, fwd);
for (var k=0; k < hops; k++) {
if (fwd)
opts.els.push(opts.els.shift());
else
opts.els.unshift(opts.els.pop());
}
if (fwd) {
for (var i=0, len=opts.els.length; i < len; i++)
$(opts.els[i]).css('z-index', len-i+count);
}
else {
var z = $(curr).css('z-index');
$el.css('z-index', parseInt(z,10)+1+count);
}
$el.animate({left:0, top:0}, opts.speedOut, opts.easeOut, function() {
$(fwd ? this : curr).hide();
if (cb) cb();
});
});
};
$.extend(opts.cssBefore, { display: 'block', opacity: 1, top: 0, left: 0 });
};

// turnUp/Down/Left/Right
$.fn.cycle.transitions.turnUp = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr,next,opts,true,false);
opts.cssBefore.top = next.cycleH;
opts.animIn.height = next.cycleH;
opts.animOut.width = next.cycleW;
});
opts.cssFirst.top = 0;
opts.cssBefore.left = 0;
opts.cssBefore.height = 0;
opts.animIn.top = 0;
opts.animOut.height = 0;
};
$.fn.cycle.transitions.turnDown = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr,next,opts,true,false);
opts.animIn.height = next.cycleH;
opts.animOut.top   = curr.cycleH;
});
opts.cssFirst.top = 0;
opts.cssBefore.left = 0;
opts.cssBefore.top = 0;
opts.cssBefore.height = 0;
opts.animOut.height = 0;
};
$.fn.cycle.transitions.turnLeft = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr,next,opts,false,true);
opts.cssBefore.left = next.cycleW;
opts.animIn.width = next.cycleW;
});
opts.cssBefore.top = 0;
opts.cssBefore.width = 0;
opts.animIn.left = 0;
opts.animOut.width = 0;
};
$.fn.cycle.transitions.turnRight = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr,next,opts,false,true);
opts.animIn.width = next.cycleW;
opts.animOut.left = curr.cycleW;
});
$.extend(opts.cssBefore, { top: 0, left: 0, width: 0 });
opts.animIn.left = 0;
opts.animOut.width = 0;
};

// zoom
$.fn.cycle.transitions.zoom = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr,next,opts,false,false,true);
opts.cssBefore.top = next.cycleH/2;
opts.cssBefore.left = next.cycleW/2;
$.extend(opts.animIn, { top: 0, left: 0, width: next.cycleW, height: next.cycleH });
$.extend(opts.animOut, { width: 0, height: 0, top: curr.cycleH/2, left: curr.cycleW/2 });
});
opts.cssFirst.top = 0;
opts.cssFirst.left = 0;
opts.cssBefore.width = 0;
opts.cssBefore.height = 0;
};

// fadeZoom
$.fn.cycle.transitions.fadeZoom = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr,next,opts,false,false);
opts.cssBefore.left = next.cycleW/2;
opts.cssBefore.top = next.cycleH/2;
$.extend(opts.animIn, { top: 0, left: 0, width: next.cycleW, height: next.cycleH });
});
opts.cssBefore.width = 0;
opts.cssBefore.height = 0;
opts.animOut.opacity = 0;
};

// blindX
$.fn.cycle.transitions.blindX = function($cont, $slides, opts) {
var w = $cont.css('overflow','hidden').width();
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr,next,opts);
opts.animIn.width = next.cycleW;
opts.animOut.left   = curr.cycleW;
});
opts.cssBefore.left = w;
opts.cssBefore.top = 0;
opts.animIn.left = 0;
opts.animOut.left = w;
};
// blindY
$.fn.cycle.transitions.blindY = function($cont, $slides, opts) {
var h = $cont.css('overflow','hidden').height();
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr,next,opts);
opts.animIn.height = next.cycleH;
opts.animOut.top   = curr.cycleH;
});
opts.cssBefore.top = h;
opts.cssBefore.left = 0;
opts.animIn.top = 0;
opts.animOut.top = h;
};
// blindZ
$.fn.cycle.transitions.blindZ = function($cont, $slides, opts) {
var h = $cont.css('overflow','hidden').height();
var w = $cont.width();
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr,next,opts);
opts.animIn.height = next.cycleH;
opts.animOut.top   = curr.cycleH;
});
opts.cssBefore.top = h;
opts.cssBefore.left = w;
opts.animIn.top = 0;
opts.animIn.left = 0;
opts.animOut.top = h;
opts.animOut.left = w;
};

// growX - grow horizontally from centered 0 width
$.fn.cycle.transitions.growX = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr,next,opts,false,true);
opts.cssBefore.left = this.cycleW/2;
opts.animIn.left = 0;
opts.animIn.width = this.cycleW;
opts.animOut.left = 0;
});
opts.cssBefore.top = 0;
opts.cssBefore.width = 0;
};
// growY - grow vertically from centered 0 height
$.fn.cycle.transitions.growY = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr,next,opts,true,false);
opts.cssBefore.top = this.cycleH/2;
opts.animIn.top = 0;
opts.animIn.height = this.cycleH;
opts.animOut.top = 0;
});
opts.cssBefore.height = 0;
opts.cssBefore.left = 0;
};

// curtainX - squeeze in both edges horizontally
$.fn.cycle.transitions.curtainX = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr,next,opts,false,true,true);
opts.cssBefore.left = next.cycleW/2;
opts.animIn.left = 0;
opts.animIn.width = this.cycleW;
opts.animOut.left = curr.cycleW/2;
opts.animOut.width = 0;
});
opts.cssBefore.top = 0;
opts.cssBefore.width = 0;
};
// curtainY - squeeze in both edges vertically
$.fn.cycle.transitions.curtainY = function($cont, $slides, opts) {
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr,next,opts,true,false,true);
opts.cssBefore.top = next.cycleH/2;
opts.animIn.top = 0;
opts.animIn.height = next.cycleH;
opts.animOut.top = curr.cycleH/2;
opts.animOut.height = 0;
});
opts.cssBefore.height = 0;
opts.cssBefore.left = 0;
};

// cover - curr slide covered by next slide
$.fn.cycle.transitions.cover = function($cont, $slides, opts) {
var d = opts.direction || 'left';
var w = $cont.css('overflow','hidden').width();
var h = $cont.height();
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr,next,opts);
opts.cssAfter.display = '';
if (d == 'right')
opts.cssBefore.left = -w;
else if (d == 'up')
opts.cssBefore.top = h;
else if (d == 'down')
opts.cssBefore.top = -h;
else
opts.cssBefore.left = w;
});
opts.animIn.left = 0;
opts.animIn.top = 0;
opts.cssBefore.top = 0;
opts.cssBefore.left = 0;
};

// uncover - curr slide moves off next slide
$.fn.cycle.transitions.uncover = function($cont, $slides, opts) {
var d = opts.direction || 'left';
var w = $cont.css('overflow','hidden').width();
var h = $cont.height();
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr,next,opts,true,true,true);
if (d == 'right')
opts.animOut.left = w;
else if (d == 'up')
opts.animOut.top = -h;
else if (d == 'down')
opts.animOut.top = h;
else
opts.animOut.left = -w;
});
opts.animIn.left = 0;
opts.animIn.top = 0;
opts.cssBefore.top = 0;
opts.cssBefore.left = 0;
};

// toss - move top slide and fade away
$.fn.cycle.transitions.toss = function($cont, $slides, opts) {
var w = $cont.css('overflow','visible').width();
var h = $cont.height();
opts.before.push(function(curr, next, opts) {
$.fn.cycle.commonReset(curr,next,opts,true,true,true);
// provide default toss settings if animOut not provided
if (!opts.animOut.left && !opts.animOut.top)
$.extend(opts.animOut, { left: w*2, top: -h/2, opacity: 0 });
else
opts.animOut.opacity = 0;
});
opts.cssBefore.left = 0;
opts.cssBefore.top = 0;
opts.animIn.left = 0;
};

// wipe - clip animation
$.fn.cycle.transitions.wipe = function($cont, $slides, opts) {
var w = $cont.css('overflow','hidden').width();
var h = $cont.height();
opts.cssBefore = opts.cssBefore || {};
var clip;
if (opts.clip) {
if (/l2r/.test(opts.clip))
clip = 'rect(0px 0px '+h+'px 0px)';
else if (/r2l/.test(opts.clip))
clip = 'rect(0px '+w+'px '+h+'px '+w+'px)';
else if (/t2b/.test(opts.clip))
clip = 'rect(0px '+w+'px 0px 0px)';
else if (/b2t/.test(opts.clip))
clip = 'rect('+h+'px '+w+'px '+h+'px 0px)';
else if (/zoom/.test(opts.clip)) {
var top = parseInt(h/2,10);
var left = parseInt(w/2,10);
clip = 'rect('+top+'px '+left+'px '+top+'px '+left+'px)';
}
}

opts.cssBefore.clip = opts.cssBefore.clip || clip || 'rect(0px 0px 0px 0px)';

var d = opts.cssBefore.clip.match(/(\d+)/g);
var t = parseInt(d[0],10), r = parseInt(d[1],10), b = parseInt(d[2],10), l = parseInt(d[3],10);

opts.before.push(function(curr, next, opts) {
if (curr == next) return;
var $curr = $(curr), $next = $(next);
$.fn.cycle.commonReset(curr,next,opts,true,true,false);
opts.cssAfter.display = 'block';

var step = 1, count = parseInt((opts.speedIn / 13),10) - 1;
(function f() {
var tt = t ? t - parseInt(step * (t/count),10) : 0;
var ll = l ? l - parseInt(step * (l/count),10) : 0;
var bb = b < h ? b + parseInt(step * ((h-b)/count || 1),10) : h;
var rr = r < w ? r + parseInt(step * ((w-r)/count || 1),10) : w;
$next.css({ clip: 'rect('+tt+'px '+rr+'px '+bb+'px '+ll+'px)' });
(step++ <= count) ? setTimeout(f, 13) : $curr.css('display', 'none');
})();
});
$.extend(opts.cssBefore, { display: 'block', opacity: 1, top: 0, left: 0 });
opts.animIn   = { left: 0 };
opts.animOut   = { left: 0 };
};

})(jQuery);