var relatedContentObj = new Object();
var findHttp = /^http/i;
var findDocPdf = /\.(pdf|doc)$/i;
var findVideo = /evp\/\?vidid=/i;
var findNewsroom = /http:\/\/newsroom\.cisco\.com/i;
var findQueryString = /\?.+$/;
var findBounceCount = /bounceCount/;

function cdcSyndication () {
 //default values
 this.dateFormat = null;
 this.linkCssClass = null;
 this.campaignCode = null;
 this.hrefTarget = null;
 this.getBoxContent = getBoxContent;
}      

function getContent (qty) {
  return getBoxContent (0, 'no box', qty);
}

function getBoxContent (prId, title, qty, theDateFormat) {

  var linkCssClass = '';
  
  //extensions for the object oriented version of the API
  if (this.excludeId != null) {prId = this.excludeId;}
  if (this.boxTitle != null) {title = this.boxTitle;}
  if (this.qtyHeadlines != null) {qty = this.qtyHeadlines;}
  if (this.dateFormat != null) {theDateFormat = this.dateFormat;}
  if (this.linkClass != null) {linkCssClass = 'class="' + this.linkClass + '"';}
  if (this.campaignCode == null) {this.campaignCode = 'sid=BAC-JsSynd';}

  if (title == 'new cdc' && theDateFormat == null) {
    theDateFormat = 'DD Mon YYYY';
  }
  else if (title.match(/tandberg/)!=null) theDateFormat = 'D.M.YYYY'; //////tandberg/////

  if (title == null) {
    title = 'Related News';
    linkCssClass = "class='modulecontentlink'";
  }
  if (qty == null) {
    qty = 5;
  }

  var box1stHalf = "<table cellSpacing='0' cellPadding='0' width='100%' bgColor='#336666' border='0'> <tbody> <tr><td width='5'><img height='17' src='http://www.cisco.com/swa/i/s.gif' width='5'></td><td vAlign='center' width='100%'> <span class='moduletitlerev'> " + title + " </span></td><td><img height='1' alt='' src='http://www.cisco.com/swa/i/s.gif' width='3'></td><td vAlign='top' align='right'><img height='7' alt=''src='http://www.cisco.com/swa/i/corner_ur_7.gif' width='7'></td> </tr> </tbody></table><table cellSpacing='0' cellPadding='0' width='100%' bgColor='#336666'border='0'> <tbody> <tr><td> <table cellSpacing='1' cellPadding='4' width='100%' border='0'><tbody><tr><td bgColor='#ffffff'><span class='modulecontent'>";
  var box2ndHalf = "</span></td></tr></tbody></table></td></tr></tbody></table>";

  var ids = new Array();
  var idSorter = new Array();

  //make sure the ids are sorted according to date
  for (i in relatedContentObj) {
    var theDate = relatedContentObj[i][0];
    var dateAsNum = formatDateAs(theDate, 'YYYYMMDD');
    idSorter.push(dateAsNum + ':' + i);
  }
  idSorter = idSorter.sort();
  idSorter = idSorter.reverse();
  for (var x=0; x<idSorter.length; x++) {
    var dateToId = idSorter[x];
    var splitInfo = dateToId.split(':');
    ids.push(splitInfo[1]);
  }

  if (ids.length > 0) {
    var relatedPrs = '';
    var prCount = 0;
    var tdbgCt = 0;
    for (var x=0; x<ids.length; x++) {
      var id = ids[x];
      if (id == prId) {continue;}
      var date = relatedContentObj[id][0];
      if (theDateFormat != null) {
        date = formatDateAs(date, theDateFormat);
      }
      var file = relatedContentObj[id][1];
      var headline = relatedContentObj[id][2];
      
      var theUrl = 'http://newsroom.cisco.com/dlls/' + file;
      if (findHttp.test(file)) {
        theUrl = file;
      }
      //set the campaign code
      if (this.campaignCode != null && findNewsroom.test(theUrl) && !findBounceCount.test(theUrl) && !findVideo.test(theUrl)) {
       if (findQueryString.test(theUrl)) {
         theUrl = theUrl.replace(findQueryString, '?' + this.campaignCode);
       }
       else {theUrl = theUrl + '?' + this.campaignCode;}
      }
       
      var theHrefTarget = '';
      if (findDocPdf.test(theUrl) || findVideo.test(theUrl)) {
        theHrefTarget = " target=\"_blank\" ";
      }
      else if (this.hrefTarget!=null) {
        theHrefTarget = ' target="' + this.hrefTarget  + '" ';
      }

      if (title == 'new cdc') {
        relatedPrs = relatedPrs + "<div class=\"NewsModuleItem\"><a" + theHrefTarget + " class=\"ModuleLink\" href='" + theUrl + "'>" + headline + '</a> <span class="NewsModuleContentDate">' + date + '</span></div>\n'; 
      }
	  else if (title == 'flagship') {
        relatedPrs = relatedPrs + "<li><a " + linkCssClass + theHrefTarget + " href='" + theUrl + "'>" + headline + "</a></li>\n"; 
      }
      else if (title == 'headline first') {
        relatedPrs = relatedPrs + "<a " + linkCssClass + theHrefTarget + " href='" + theUrl + "'>" + headline + "</a><br>" + date + "\n<p></p>\n"; 
      }
      else if (theDateFormat == 'no date') {
        relatedPrs = relatedPrs + "<a " + linkCssClass + theHrefTarget + " href='" + theUrl + "'>" + headline + "</a>\n<p></p>\n"; 
      }
      else if (title == 'tandberg') {
        tdbgCt++;
        var rowClass = tdbgCt%2==1 ? "grey" : "white";
        relatedPrs = relatedPrs + '<div class="newsArticle ' + rowClass + '"><p><a href="' + theUrl + '">' + headline + '</a><br />' + date + ' | Press Release </p></div>'+"\n\n";
      } 
      else if (title == 'tandberg homepage') {
        tdbgCt++;
        var divTxtOpen = "";
        if (tdbgCt==1) divTxtOpen = '<div id="prLink1">' + "\n";
        else if (tdbgCt%2==1) {
            var linkNum = ((tdbgCt+1)/2);
            divTxtOpen = '<div id="prLink'+linkNum+'" style="display:none;">' + "\n";
        }
        var divTxtClose = "";
        if (tdbgCt%2==0) divTxtClose = "\n" + '</div>';
        truncatedHeadline = headline;
        if (truncatedHeadline.length>91) {
            truncatedHeadline = truncatedHeadline.substring(0,91);
            if (truncatedHeadline.lastIndexOf(' ') !=-1) {
              truncatedHeadline = truncatedHeadline.substring(0,truncatedHeadline.lastIndexOf(' '));
            }
            truncatedHeadline = truncatedHeadline + '&hellip;';
        }
        relatedPrs = relatedPrs 
                   + divTxtOpen 
                   + '<p><strong>' + date + '</strong><br />' + "\n" + '<a href="' + theUrl + '" target="_blank">' + truncatedHeadline + '</a></p>'
                   + divTxtClose
                   + "\n"
                   ;
      } 
      else {
        relatedPrs = relatedPrs + date + "<br><a " + linkCssClass + theHrefTarget + " href='" + theUrl + "'>" + headline + "</a>\n<p><br></p>\n"; 
      } 
      if (++prCount >= qty) {break;}
    }
    //alert(relatedPrs); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    if (title == 'no box' || title == 'headline first' || title.match(/tandberg/)!=null) {
        return "\n\n" + relatedPrs + "\n\n";
    }
    else if (title == 'new cdc') {
        return '\n<div class="NewsModule">\n' + relatedPrs + "</div>\n\n";
    }
	else if (title == 'flagship') {
        return '\n<ul class="news">\n' + relatedPrs + "</ul>\n\n";
    }
    return box1stHalf + "\n\n" + relatedPrs + "\n\n" + box2ndHalf;
  }
  return '';
}

//Adding push method if necessary
if (!Array.prototype.push) {
  function _Array_push () {
    for (var a = 0; a < arguments.length; a++) {
      this[this.length] = arguments[a];
    }
    return this.length;
  }
  Array.prototype.push = _Array_push;
}

var monthConvert = new Object();
monthConvert['JAN'] = ['01', 'Jan'];
monthConvert['FEB'] = ['02', 'F&#233;v'];
monthConvert['MAR'] = ['03', 'Mars'];
monthConvert['APR'] = ['04', 'Avril'];
monthConvert['MAY'] = ['05', 'Mai'];
monthConvert['JUN'] = ['06', 'Juin'];
monthConvert['JUL'] = ['07', 'Juil'];
monthConvert['AUG'] = ['08', 'Ao&#251;t'];
monthConvert['SEP'] = ['09', 'Sept'];
monthConvert['OCT'] = ['10', 'Oct'];
monthConvert['NOV'] = ['11', 'Nov'];
monthConvert['DEC'] = ['12', 'D&#233;c'];

findMM = /mm/i;//non-case sensitive
findDD = /dd/i;//non-case sensitive
findYYYY = /yyyy/i;//non-case sensitive
findYY = /yy/i;//non-case sensitive
findMon = /Mon/;//case sensitive
findMON = /MON/;//case sensitive
findFrMon = /FrMon/;//case sensitive
findDPeriod = /D\./;//case sensitive - tandberg
findMPeriod = /M\./;//case sensitive - tandberg

//expected format: 01-MAR-04, 01-MAR-2004
var parseDate = /^(\d\d)-([A-Z]+)-(\d{2,4})/i;

//theDate is expected to be like:'01-MAR-04'
//theDateFormat: follows SQL standards
//supports any combination of MON, Mon, FrMon(French Month), 
//DD, dd, MM, mm, YYYY, yyyy, YY, yy
function formatDateAs (theDate, theDateFormat) {
    if (theDateFormat == null) {return theDate;}
    else if (theDateFormat == 'no date') {return '';}
    if (parseDate.test(theDate)) {
        var dd = new String(RegExp.$1);
        var MON = new String(RegExp.$2);
        MON = MON.toUpperCase();
        var Mon = MON.charAt(0) + MON.charAt(1).toLowerCase() + MON.charAt(2).toLowerCase();
        var yy = RegExp.$3;
	if(yy.length == 2){
           var yyyy = '20' + new String(yy);
           if (yy > 50) {yyyy = '19' + new String(yy);}
	}
	else if (yy.length == 4){
	  var yyyy = new String(yy);
	}
        var mm = '00';//a '00' would indicate an error
        var FrMon = 'Feb';//a 'Feb' would indicate an error
        if (monthConvert[MON] != null) {
          mm = monthConvert[MON][0];
          FrMon = monthConvert[MON][1];
        }
        var MPeriod = mm.replace(/^0/,'');
        var DPeriod = dd.replace(/^0/,'');
        
        theDateFormat = theDateFormat.replace(findDD, dd);
        theDateFormat = theDateFormat.replace(findMM, mm);
        theDateFormat = theDateFormat.replace(findYYYY, yyyy);
        theDateFormat = theDateFormat.replace(findYY, yy);
        theDateFormat = theDateFormat.replace(findFrMon, FrMon);
        theDateFormat = theDateFormat.replace(findMon, Mon);
        theDateFormat = theDateFormat.replace(findMON, MON);        

        theDateFormat = theDateFormat.replace(findDPeriod, DPeriod+'.');     // tandberg   
        theDateFormat = theDateFormat.replace(findMPeriod, MPeriod+'.');     // tandberg   

        return theDateFormat;
    }
    else {return theDate;}
}
