// Nicola Zordan 17:42 4/28/2008 www.MappedTrips.com
// Delta Reservatio to Trip 


function reservationText2Trip (textIn) {
  var trip;
  trip= DeltaReservation2Trip(textIn);
  TripXMLdocument=trip;
  window.open(ShowXMLtripURL);
  return trip;
};

//
//var skipLines=[]; // ['','OperatedBy'];
//var skipLines=['','          Operated by'];
var skipLines=['          Operated by'];

function DeltaReservation2Trip (textIn) {
  if (textIn==null) return null;
  var text=textIn.replace(/\r/g,'');
  var trip=null, locations=[], connections=[], description='', data,tmp;
  var textLines=text.split('\n');
  var line='',l=0;
  //0 Reservation
  // l++
  line=textLines[l];
  description+='\n'+line;
  data=line.split(':');
  var reservation=data[data.length-1];
  //1 Passengers
  l++;
  line=textLines[l];
  description+='\n'+line;
  //2 - start
  //l++;
  while ((line=textLines[++l])!='') {
    //line=textLines[l];
//alert(l+'\n['+line+']');
    // passengers
    description+='\n'+line;
    //data=line.split(':');
    //l++;
  };
  description+='\n';
  // headers
  line=textLines[++l];
  //var headers=removeDoubleBlanks(line).split(' ');
  var headersLine=line;
  // separators
  line=textLines[++l];
  //var separators=removeDoubleBlanks(line).split(' ');
  var separators=line;
  var definition=getDataDefinition(separators);
//alert(separators+'\n'+definition);
  var headers=getData(headersLine,definition);
//alert(separators+'\n'+definition+'\n'+headers);
  //-var definition=DeltaDataDefinition;
  //alert(definition);
  //alert(separators+'\n'+getData(separators,definition));
  //alert(headers+'\n'+getData(headers,definition));
//alert(headers+'\n\n'+separators);
  // Itinerary data
  //l++;
  var itinerary=[];
  var nextLine,skipCheck;
  while ((line=textLines[++l])!='') {
//alert(l+'\n['+line+']');
    // passengers
    description+='\n'+line.substring(0,DeltaDataDefinition[DeltaDataDefinition.length-1][1]);
//alert('['+line+']\n['+line.substring(0,DeltaDataDefinition[DeltaDataDefinition.length-1][1])+']'+'\n'+DeltaDataDefinition[DeltaDataDefinition.length-1][1]);
    //data=line.split(':');
    data=getData(line,definition);
    //alertData(line,definition,headers);
    //alertData(line,definition,DeltaDataHeaders);
    itinerary[itinerary.length]=data;
    //l++;
/*
    if (textLines[l+1]=='') l++;
    if (textLines[l+1]=='') l++;
*/
    nextLine=textLines[l+1];
    if (nextLine=='') {
      // skip empty lines
      l++;
     } else {
      for (var i=0;i<skipLines.length;i++) {
        skipCheck=nextLine.substring(0,skipLines[i].length);
        //alert(skipLines[i].length-1+': '+i+'\n['+nextLine+']\n['+skipCheck+']');
        if (skipCheck==skipLines[i]) {
          l++;
          //alert('skipping: ['+nextLine+']');
          nextLine=textLines[l+1];
          if (nextLine=='') {
            // skip empty lines
            l++;
          };
        };
      };
    };
  };
  description+='\n\n';
  //description+='\n\n[z]';
//alert(l+'\n\n'+reservation+'\n\n'+description);   
  var arrays=DeltaItinerary2TripArrays(itinerary, description);
  var trip=DeltaItinerary2TripXML(itinerary, description)
  return trip;
};

function OpenDeltaReservation2Trip (textIn) {
  var trip=DeltaReservation2Trip(textIn);
  TripXMLdocument=trip;
  window.open(ShowXMLtripURL);
};


function removeDoubleBlanks(str) {
  var before=str;
  var after=null, tmp;
  while (before!=after) {
    //tmp=after;
    before=before.replace(/  /g,' ');
    after=before.replace(/  /g,' ');
    //if (tmp!=null) before=tmp;
  };
//alert(str+'\n'+after)
  return after;
};

function getDataDefinition(separators) {
  var stringDefinition=[];
  var ch, chp, blank=' ', from=null, to=null;
  for (var i=0;i<separators.length;i++) {
    ch=separators.charAt(i);
    if (ch!=blank) {
      if (from==null) { from=i; to=i }
       else { to=i; };
     } else {
      if (from!=null && to!=null) {
        stringDefinition[stringDefinition.length]=[from,to];
//alert(stringDefinition.length-1+'.\n'+stringDefinition[stringDefinition.length-1]);
        from=null;
      };  
    };
  };
//alert(separators+'\n'+stringDefinition);
  return stringDefinition;
};

function getData(str,definition) {
  var data=[];
  var from, to, d;
  for (var i=0;i<definition.length;i++) {
    d=definition[i];
    from=d[0];
    to=d[1];
    data[i]=str.substring(from,to+1);
  };
//alert(data);
  return data;
};

function alertData(line,definition,headers) {
  var str='';  
  var headersData=headers;
  if (typeof(headers)=='string') headersData=getData(headers,definition);
  var data=getData(line,definition);
  for (var i=0;i<headersData.length;i++) {
    if (i>0) str+='\n';
    str+='['+headersData[i]+']: \t['+data[i]+']';
  };
  alert(str);
  return str;
};

function trimblanks(str) { 
 return str.split(/\s/).join(' '); 
};

//var DeltaDataDefinition=[[0,8],[10,15],[17,22],[24,33],[38,51],[43,57],[59,64],[66,72],[74,82]];
//var DeltaDataHeaders=['Date','Flight','Status','Carrier','City','Time','Seat','Class','Meal'];
var DeltaDataDefinition=[[0,8],[10,15],[17,22],[24,33],[35,36],[38,51],[53,57],[59,64],[66,72],[74,82]];
var DeltaDataHeaders0=['Date','Flight','Status','Carrier','Action','City','Time','Seat','Class','Meal'];
var DeltaDataHeaders=['Date','Flight','Status','Carrier','City','Time','Seat','Class','Meal'];
var DeltaDataXLocationIndex=[];
function DeltaData2Location(idIn,data,dataPre) {
  var location=[];
  var id,name,address,tel,lon,lat,desc,url, dateStart, timeStart, dateEnd, timeEnd, image, pushpinImage;
    // Locations[Locations.length]=["id","name","address","tel",longitude,latitude, "<a href='http://www.NicolaZordan.net' target='_blank'>www.NicolaZordan.net</a> 12a", "detailsURL", dateStart, timeStart, dateEnd, timeEnd, image, pushpinImage ];	
    // Locations[Locations.length]=["id","name","address","tel",longitude,latitude, "<a href='http://www.NicolaZordan.net' target='_blank'>www.NicolaZordan.net</a> 12a", "detailsURL", dateStart, timeStart, dateEnd, timeEnd, imageUrl ];	
  id=idIn;
  //name=data[5];
  //address=data[5];
  name=data[4];
  address=data[4];
  tel='';
  lon='';
  lat='';
  desc=data[3]+': '+data[1];
//alert('['+trimblanks(desc)+']');
  if (dataPre!=null && trimblanks(desc)==':') 
    desc=dataPre[3]+': '+dataPre[1];
  url='';
  dateStart=data[0];
  if (dataPre!=null && trimblanks(dateStart)=='') dateStart=dataPre[0];
  //timeStart=data[6];
  timeStart=data[5];
  dateEnd='';
  timeEnd='';
  image='';
  pushpinImage='';

  dateStart=FormatDeltaDate(dateStart); 
  timeStart=FormatDeltaTime(timeStart); 
  dateEnd  =FormatDeltaDate(dateEnd  ); 
  timeEnd  =FormatDeltaTime(timeEnd  ); 
  // if (dateEnd=='' && timeEnd!='') dateEnd=dateStart;

  location=[id,name,address,tel,lon,lat,desc,url, dateStart, timeStart, dateEnd, timeEnd, image, pushpinImage];
  return location;
};

function DeltaData2Connection(idIn,dataFrom,dataTo) {
  var connection=[];
  var index, name, text, url, transportType, company, id, dateStart, timeStart, dateEnd, timeEnd, duration, description,imageURL;
    // Connections[Connections.length]=[index, name, text, (url), (transportType), (company), (id), (dateStart), (timeStart), (dateEnd), (timeEnd), (duration), (description) ];
  index=idIn;
  name='';
  //name=idIn;
  name='connection';
  text='';
  url='';
  transportType='Airline';
  company=dataFrom[3];
  id=dataFrom[1];
  dateStart=dataFrom[0];
  //timeStart=dataFrom[6];
  timeStart=dataFrom[5];
  dateEnd=dataTo[0];
  //if (trimblanks(dateEnd)=='') dateEnd=dateStart;
  //timeEnd=dataTo[6];
  timeEnd=dataTo[5];
  duration='';
  description='';
  //description='Class: '+dataFrom[8]+'<br/>'+'Meal: '+dataFrom[9];
  description='Class: '+dataFrom[7]+'<br/>'+'Meal: '+dataFrom[8];
  imageURL='';

  dateStart=FormatDeltaDate(dateStart); 
  timeStart=FormatDeltaTime(timeStart); 
  dateEnd  =FormatDeltaDate(dateEnd  ); 
  timeEnd  =FormatDeltaTime(timeEnd  ); 
  // if (dateEnd=='' && timeEnd!='') dateEnd=dateStart;

  connection=[index, name, text, url, transportType, company, id, dateStart, timeStart, dateEnd, timeEnd, duration, description, imageURL];
//alert(connection);
  return connection;
};

function Delta2TripData (description,locations,connections) {
  var tripData=[];
  var name, text, url, imageURL, dateStart, timeStart, dateEnd, timeEnd, tel;
    // TripData=[ name, text, (url), (imageURL), (dateStart), (timeStart), (dateEnd), (timeEnd), tel ];
  name='';
  text=description;
  //-if (description!=null) text=description.replace(/\n/g,'<br/>\n');
  //if (description!=null) name=description.split('\n')[1];
  if (description!=null) {
    var l1=description.split('\n')[1];
    var confirmData=l1.split('#: ');
    name=confirmData[1];
  };
  if (name==null) 
    if (description!=null) name=description.split('\n')[1];
//alert(name);
  url='';
  imageURL='';
  dateStart=connections[0][7];
  timeStart=connections[0][8];
  dateEnd=connections[connections.length-1][9];
  if (trimblanks(dateEnd)=='') dateEnd=connections[connections.length-1][7];
  timeEnd=connections[connections.length-1][10];
  //alert('['+connections[connections.length-1][9]+']\n['+connections[connections.length-2][9]+']\n\n'+dateStart+' - '+timeStart+'\n'+dateEnd+' - '+timeEnd);
  tel='';

  //dateStart=FormatDeltaDate(dateStart); 
  //timeStart=FormatDeltaTime(timeStart); 
  //dateEnd  =FormatDeltaDate(dateEnd  ); 
  //timeEnd  =FormatDeltaTime(timeEnd  ); 

  tripData=[name, text, url, imageURL, dateStart, timeStart, dateEnd, timeEnd, tel];
  return tripData;
};


function DeltaItinerary2TripArrays(itinerary, description) {
  var locations=[], connections=[], trip=[], itPre=null, c;
  for (var i=0;i<itinerary.length;i++) {
    locations[locations.length]=DeltaData2Location(i, itinerary[i],itPre);
    if (i<itinerary.length-1) {
      //connections[connections.length]=DeltaData2Connection(i+1, itinerary[i],itinerary[i+1]);
      c=[];
      if (i%2==0) c=DeltaData2Connection(i+1, itinerary[i],itinerary[i+1]);
      connections[connections.length]=c;
    };
    itPre=itinerary[i];
  };
  trip=Delta2TripData(description,locations,connections);
  var r=[trip, locations, connections];
  return r;
};

function DeltaItinerary2TripXMLtext(itinerary, description) {
  var arrays=DeltaItinerary2TripArrays(itinerary, description);
  var trip=arrays[0];
  var locations=arrays[1];
  var connections=arrays[2];
  var areas=[];
  TripData=trip;
  //Locations=locations;
  TLocations=locations;
  Connections=connections;
  Areas=areas;
//alert(Connections[0]);
  var tripXMLtext=Trip2XMLtext();
  return tripXMLtext;
};

function DeltaItinerary2TripXML(itinerary, description) {
  var xmlText=DeltaItinerary2TripXMLtext(itinerary, description);
  var xmlTrip=String2XML(xmlText);
  return xmlTrip;
};

//--

function FormatDeltaDate (dDate) {
  var fDate='';
  // simple conversion
  if (trimblanks(dDate)=='') return fDate;
  // no conversion
  var wd=dDate.substring(0,3);
  var d=dDate.substring(4,6);
  var m=dDate.substring(6,9);
  fDate=wd+' '+d+'/'+m;
  fDate=wd+' '+d+' '+m;
  return fDate;
  //
  // --
  var d=dDate.substring(0,2);
  var m=dDate.substring(2,5);
  var y='08'; // get current year or something
  var yN=parseInt(y);
  var yyyy=1900+yN;
  if (yN<60) yyyy=2000+yN;
  var fDate=d+'/'+m+'/'+yy;
  return fDate;
};

function FormatDeltaTime (dTime) {
  var fTime='';
  if (trimblanks(dTime)=='') return fTime;
  var h=dTime.substring(0,2);
  var m=dTime.substring(2,4);
  var p=dTime.substring(4,1);
  var pa='am';
  if (p.toUpperCase()=='P') pa='pm';
  fTime=h+':'+m+' '+pa;
/* 24 hours
  if (pa=='pm') {
    var hh=parseInt(trimblanks(h));
    hh=hh+12;
  };
  fTime=hh+':'+m;
*/
  // no conversion
  return fTime;
};
