/*
 PiyoFeedsCommon1.1.js
 version 1.1 (2004/10/3)

 Copyright (C) 2004 kuki, All rights reserved.
*/

/*
 * objects
 */
// rss object
function PF_RSS(channel, items, link) {
   this.channel = channel;
   this.items = items;
   this.link = link;
}

// channel object
function PF_Channel(title, link, description, language, copyright, managingEditor, webMaster, pubDate, lastBuildDate, categories, generator, docs, cloud, ttl, image, rating, textInput, skipHours, skipDays) {
   this.title = title;
   this.link = link;
   this.description = description;
   this.language = language;
   this.copyright = copyright;
   this.managingEditor = managingEditor;
   this.webMaster = webMaster;
   this.pubDate = pubDate;
   this.lastBuildDate = lastBuildDate;
   this.categories = categories;
   this.generator = generator;
   this.docs = docs;
   this.cloud = cloud;
   this.ttl = ttl;
   this.image = image;
   this.rating = rating;
   this.textInput = textInput;
   this.skipHours = skipHours;
   this.skipDays = skipDays;
}

// categories object
function PF_Category(title) {
   this.title = title;
}

// skipHours object
function PF_SkipHours(hours) {
   this.hours = hours;
}

// skipDays object
function PF_SkipDays(days) {
   this.days = days;
}


// image object
function PF_Image(url, title, link, width, height, description) {
   this.url = url;
   this.title = title;
   this.link = link;
   this.width = width;
   this.height = height;
   this.description = description;
}

// cloud object
function PF_Cloud(domain, port, path, registerProcedure, protocol) {
   this.domain = domain;
   this.port = port;
   this.path = path;
   this.registerProcedure = registerProcedure;
   this.protocol =  protocol;
}

// textInput object
function PF_TextInput(title, description, name, link) {
   this.title = title;
   this.description = description;
   this.name = name;
   this.link = link;
}

// item object
function PF_Item(title, link, description, author, categories, comments, enclosure, guid, pubDate, source) {
   this.title = title;
   this.link = link;
   this.description = description;
   this.author = author;
   this.categories = categories;
   this.comments = comments;
   this.enclosure = enclosure;
   this.guid = guid;
   this.pubDate = pubDate;
   this.source = source;
}

// source object
function PF_Source(value, url) {
   this.value = value;
   this.url = url;
}

// enclosure object
function PF_Enclosure(url, length, type) {
   this.url = url;
   this.length = length;
   this.type = type;
}

// guid object
function PF_Guid(url, isPermaLink) {
   this.url = url;
   this.isPermalLink = isPermaLink;
}

/*
 * functions
 */
// get entry link list
function getPfEntryLinkList(rss, baseUrl) {
   var i;
   var result = new Array();
   var itemLinkList = getPfItemLinkList(rss.items);
   var entryUUID;
   var entryLink;

   for (i = 0; i < itemLinkList.length - 1; i++) {
      entryUUID = getPfEntryUUIDFromHaloScanUrl(itemLinkList[i]);
      result.push(getEntryLink(baseUrl, entryUUID));
   }

   return result;
}

// get item title list
function getPfItemTitleList(items) {
   var i;
   var result = new Array();
   var items = items;
   var item;
   var itemTitle;

   for (i = 0; i < items.length - 1; i++) {
      item = items[i];
      itemTitle = item.title;
      result.push(itemTitle);
   }

   return result;
}

// get item link list
function getPfItemLinkList(items) {
   var i;
   var result = new Array();
   var items = items;
   var item;
   var itemLink;

   for (i = 0; i < items.length - 1; i++) {
      item = items[i];
      itemLink = item.link;
      result.push(itemLink);
   }

   return result;
}

// get item description list
function getPfItemDescriptionList(items) {
   var i;
   var result = new Array();
   var items = items;
   var item;
   var itemDescription;

   for (i = 0; i < items.length - 1; i++) {
      item = items[i];
      itemDescription = item.description;
      result.push(itemDescription);
   }

   return result;
}

// get entryUUID from haloscan url
function getPfEntryUUIDFromHaloScanUrl(url) {
   if (!String(url).match(/^http:\/\/www\.haloscan\.com\/comments\/[a-zA-Z_]+\/(E\d+)\/$/)) {
      return null;
   }
   return RegExp.$1;
}

// get entry link
function getPfEntryLink(baseUrl, entryUUID) {
   var entryLink = baseUrl + "/" + getCategoryUUIDForEntry(entryUUID);
   entryLink = entryLink + "/" + entryUUID + "/index.html";
   return entryLink; 
}
