/* jFeed : jQuery feed parser plugin
 * Copyright (C) 2007 Jean-François Hovinne - http://www.hovinne.com/
 * Dual licensed under the MIT (MIT-license.txt)
 * and GPL (GPL-license.txt) licenses.
 */
wordcount = 10000;

jQuery.getFeed = function(options) {

    options = jQuery.extend({
    
        url: null,
        data: null,
        success: null
        
    }, options);

    if(options.url) {

        $.ajax({
            type: 'GET',
            url: options.url,
            data: options.data,
            dataType: 'xml',
            success: function(xml) {
                var feed = new JFeed(xml);
                if(jQuery.isFunction(options.success)) options.success(feed);
            }
        });
    }
};

function JFeed(xml) {
    if(xml) this.parse(xml);
};

JFeed.prototype = {

    type: '',
    version: '',
    title: '',
    link: '',
    description: '',
    parse: function(xml) {
        
        if(jQuery('channel', xml).length == 1) {
        
            this.type = 'rss';
            var feedClass = new JRss(xml);

        } else if(jQuery('feed', xml).length == 1) {
        
            this.type = 'atom';
            var feedClass = new JAtom(xml);
        }
        
        if(feedClass) jQuery.extend(this, feedClass);
    }
};

function JFeedItem() {};

JFeedItem.prototype = {

    title: '',
    link: '',
    description: '',
    updated: '',
    author: '',
    thumbnail: '',
    id: ''
};

function JAtom(xml) {
    this._parse(xml);
};

JAtom.prototype = {
    
    _parse: function(xml) {
    
        var channel = jQuery('feed', xml).eq(0);

        this.version = '1.0';
        this.title = trimByWord(jQuery(channel).find('title:first').text());
        this.link = jQuery(channel).find('link:first').attr('href');
        this.description = jQuery(channel).find('subtitle:first').text();
        this.language = jQuery(channel).attr('xml:lang');
        this.updated = jQuery(channel).find('updated:first').text();
        
        this.items = new Array();
        
        var feed = this;
        
        jQuery('entry', xml).each( function() {
        
            var item = new JFeedItem();
            
            item.title = trimByWord(jQuery(this).find('title').eq(0).text());
            item.link = jQuery(this).find('link').eq(0).attr('href');
            item.description = trimByWord(jQuery(this).find('content').eq(0).text());
            item.updated = dateFormat(parseDate(jQuery(this).find('updated').eq(0).text()),'fullDate');
            item.author = jQuery(this).find('dc:creator').eq(0).text();
            item.id = jQuery(this).find('id').eq(0).text();
            
            feed.items.push(item);
        });
    }
};

function JRss(xml) {
    this._parse(xml);
};

JRss.prototype  = {
    
    _parse: function(xml) {
    
        if(jQuery('rss', xml).length == 0) this.version = '1.0';
        else this.version = jQuery('rss', xml).eq(0).attr('version');

        var channel = jQuery('channel', xml).eq(0);
    
        this.title = trimByWord(jQuery(channel).find('title:first').text());
        this.link = jQuery(channel).find('link:first').text();
        this.description = jQuery(channel).find('description:first').text();
        this.language = jQuery(channel).find('language:first').text();
        this.updated = jQuery(channel).find('lastBuildDate:first').text();
    
        this.items = new Array();
        
        var feed = this;
        
        jQuery('item', xml).each( function() {
        
            var item = new JFeedItem();
            
            item.title = jQuery(this).find('title').eq(0).text();
            item.link = jQuery(this).find('link').eq(0).text();
            item.description = jQuery.trim(jQuery(this).find('description').eq(0).text());
            item.updated = dateFormat(jQuery(this).find('pubDate').eq(0).text(),'fullDate') ;
            item.author = jQuery(this).find('dc\\:creator').eq(0).text();
            item.thumbnail = jQuery(this).find('enclosure').eq(0).attr('url').replace('m4v','jpg');
            item.id = jQuery(this).find('guid').eq(0).text();
            
            feed.items.push(item);
        });
    }
};

function trimByWord(sentence,link) {
var result = sentence;
result = result.replace('Advertisements','');
var resultArray = result.split(" ");
if(resultArray.length > wordcount){
resultArray = resultArray.slice(0, wordcount);
result = resultArray.join(" ") + "...";
}
return result;
}
function trimByWordHP(sentence,link) {
var result = sentence;
result = result.replace('Advertisements','');
var resultArray = result.split(" ");
if(resultArray.length > 40){
resultArray = resultArray.slice(0, 40);
result = resultArray.join(" ") + "...";
}
return result;
}

function getFeed(sender, uri) {
  jQuery.getFeed({
    url: '/scripts/proxy.php?url=' + uri,
    success: function(feed) {
      var html = '';
      if (feed.items.length==0){
        html += 'Apparently this pastor hasn\'t blogged yet - you should tell \'em to get on it...';
      }
      for(var i = 0; i < feed.items.length && i < 5; i++) {
        var item = feed.items[i];
        
        html += '<hr />';
        
        
        html += '<h5>'
        + '<a target="_blank" href="'
        + item.link
        + '">'
        + item.title
        + '</a>'
        + '</h5>';

        var author ='';
        //console.log(item.author.length);
        if (item.author.length>0) {
          author = '&nbsp;-&nbsp;' + item.author;
        }
        html += '<p>';
        html += '<i>'
        + item.updated
        + '</i>' + author + '<br />';         
        if (item.thumbnail!=""&&item.thumbnail!=undefined){
          html += '<a target="_blank" href="'
          + item.link
          + '">'
          + '<img src="' + item.thumbnail + '" width="284px" style="border: 1px solid #C6C6C2; padding: 5px; margin-top: 10px; margin-right: 10px; float: left;"/>'
          + '</a>';
        }
        
        html += '<div style="margin-top: 10px;">';
        html += item.description;
        html += '</div>';
               
        html += '<div style="clear: both"></div></p>';
        
      }

      jQuery(sender).html(html);
      $(".size-thumbnail").parent().prettyPhoto({theme:'facebook'});
    }    
  });
}

function getFeedHPDave(sender, uri) {
  jQuery.getFeed({
    url: '/scripts/proxy.php?url=' + uri,
    success: function(feed) {
      var html = '';


      for(var i = 0; i < feed.items.length && i < 2; i++) {
        var item = feed.items[i];
        

        html +=  '    <div id="home_blog_image" class="left "><div class="clear" style="margin-bottom: 0px;">';

        
        if (item.thumbnail!=""&&item.thumbnail!=undefined){
          html += '<a target="_blank" href="'
          + item.link
          + '">'
          + '<img src="' + item.thumbnail + '" width="140px"/>'
          + '</a>';
        }
        html +=  '    </div>';
        html +=  '    <div id="home_blog_details" class="left">';
        html +=  '      <h2>' + item.title + '</h2>';
        html +=  '      <p>' + trimByWordHP(item.description) + '</p>';
        html +=  '      <a style="float: left" class="more_link" href="/resources/pastors-blog/dave" target="_self">Find Out More »</a>';
        html +=  '    <div class="clear" style="margin-bottom: 20px;"></div></div>';

        

        
      }

      jQuery(sender).html(html);
			$(".size-thumbnail").parent().prettyPhoto({theme:'facebook'});
    }    
  });
}




String.prototype.linkify = function() {
   return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/gi, function(m) {
     return m.link(m);
   });
};

var dateFormat = function () {

	var	token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,

		timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,

		timezoneClip = /[^-+\dA-Z]/g,

		pad = function (val, len) {

			val = String(val);

			len = len || 2;

			while (val.length < len) val = "0" + val;

			return val;

		};



	// Regexes and supporting functions are cached through closure

	return function (date, mask, utc) {

		var dF = dateFormat;



		// You can't provide utc if you skip other args (use the "UTC:" mask prefix)

		if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {

			mask = date;

			date = undefined;

		}



		// Passing date through Date applies Date.parse, if necessary

		date = date ? new Date(date) : new Date;

		if (isNaN(date)) throw SyntaxError("invalid date");



		mask = String(dF.masks[mask] || mask || dF.masks["default"]);



		// Allow setting the utc argument via the mask

		if (mask.slice(0, 4) == "UTC:") {

			mask = mask.slice(4);

			utc = true;

		}



		var	_ = utc ? "getUTC" : "get",

			d = date[_ + "Date"](),

			D = date[_ + "Day"](),

			m = date[_ + "Month"](),

			y = date[_ + "FullYear"](),

			H = date[_ + "Hours"](),

			M = date[_ + "Minutes"](),

			s = date[_ + "Seconds"](),

			L = date[_ + "Milliseconds"](),

			o = utc ? 0 : date.getTimezoneOffset(),

			flags = {

				d:    d,

				dd:   pad(d),

				ddd:  dF.i18n.dayNames[D],

				dddd: dF.i18n.dayNames[D + 7],

				m:    m + 1,

				mm:   pad(m + 1),

				mmm:  dF.i18n.monthNames[m],

				mmmm: dF.i18n.monthNames[m + 12],

				yy:   String(y).slice(2),

				yyyy: y,

				h:    H % 12 || 12,

				hh:   pad(H % 12 || 12),

				H:    H,

				HH:   pad(H),

				M:    M,

				MM:   pad(M),

				s:    s,

				ss:   pad(s),

				l:    pad(L, 3),

				L:    pad(L > 99 ? Math.round(L / 10) : L),

				t:    H < 12 ? "a"  : "p",

				tt:   H < 12 ? "am" : "pm",

				T:    H < 12 ? "A"  : "P",

				TT:   H < 12 ? "AM" : "PM",

				Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),

				o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),

				S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]

			};



		return mask.replace(token, function ($0) {

			return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);

		});

	};

}();



// Some common format strings

dateFormat.masks = {

	"default":      "ddd mmm dd yyyy HH:MM:ss",

	shortDate:      "m/d/yy",

	mediumDate:     "mmm d, yyyy",

	longDate:       "mmmm d, yyyy",

	fullDate:       "dddd, mmmm d, yyyy",

	shortTime:      "h:MM TT",

	mediumTime:     "h:MM:ss TT",

	longTime:       "h:MM:ss TT Z",

	isoDate:        "yyyy-mm-dd",

	isoTime:        "HH:MM:ss",

	isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss'Z'",

	isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"

};



// Internationalization strings

dateFormat.i18n = {

	dayNames: [

		"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",

		"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"

	],

	monthNames: [

		"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",

		"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"

	]

};



// For convenience...

Date.prototype.format = function (mask, utc) {

	return dateFormat(this, mask, utc);

};

function parseDate(xmlDate)
{
      if (!/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}/.test(xmlDate)) {
           throw new RangeError("xmlDate must be in ISO-8601 format YYYY-MM-DD.");
      }
      //return new Date(xmlDate.substring(0,4), xmlDate.substring(5,7)-1, xmlDate.substring(8,10));
	  return new Date(xmlDate.substring(0,4), xmlDate.substring(5,7)-1, xmlDate.substring(8,10)-1); // http://support.monkdevelopment.com/admin.php?pg=request&reqid=19793
	  
}
