Add Syntax Highlighting (this will take a few seconds, probably freezing your browser while it works)
// ==UserScript==
// @name IRCTC Ticket Booking Automation
// @description Book tickets without using the keyboard. Automates the Booking, Quick booking, Passenger details page.
// @namespace IRCTC
// @include http://*irctc.co.in/*
// @include https://*irctc.co.in/*
// @version 1.0
// @author Varunkumar Nagarajan. Thanks to Sharath and Nitin Kishen for the older(beta) versions
// ==/UserScript==
//================Settings================================
var defaultUsername = GM_getValue("defaultUsername", '');
var defaultPassword = GM_getValue("defaultPassword", '');
var defaultFromStation = GM_getValue("defaultFromStation", '');
var defaultToStation = GM_getValue("defaultToStation", '');
var defaultTrainNo = GM_getValue("defaultTrainNo", '2759');
var defaultTicketType = GM_getValue("defaultTicketType","eticket");
var defaultClass = GM_getValue("defaultClass","SL");
var defaultAvailDays = GM_getValue("defaultAvailDays","3");
var blockAds = GM_getValue("blockAds", true );
var autoLogin = GM_getValue("autoLogin", true );
var isFirstRun = GM_getValue("firstRun", true );
var keepAlive = GM_getValue("keepAlive", true);
var refreshInterval = GM_getValue("refreshInterval", 2 * 60 * 1000);
var captchaSource = "75X56X30X6eX69X64X39X69X51X33X49X3dX";
var captchaImage = "D4062V";
var passengerCount = 6;
//Remove the idiotic "Sorry, you do not have permission to right click." message on right click
with (document.wrappedJSObject || document)
{
onmouseup = null;
onmousedown = null;
oncontextmenu = null;
}
// Add jQuery for easy Javascripting :)
var GM_JQ = document.createElement('script');
GM_JQ.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js';
GM_JQ.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(GM_JQ);
GM_wait();
var jQ = {};
function GM_wait()
{
if(typeof unsafeWindow.jQuery == 'undefined')
{
window.setTimeout(GM_wait,100);
}
else
{
jQ = unsafeWindow.jQuery.noConflict(true);
startAddingInfo();
if (keepAlive) {
var now = new Date();
if (now.getHours() == 7 && now.getMinutes() >= 30) {
window.setTimeout(GM_keepAlive, refreshInterval);
} else {
var stTime = new Date();
stTime.setHours(7);
stTime.setMinutes(30);
if (now.getTime() > stTime.getTime()) {
// Time has already crossed 7:30. Schedule it for the next morning (if the session is still alive ;) ).
stTime = new Date(stTime.getTime() + (24 * 60 * 60 * 1000));
stTime.setHours(7);
stTime.setMinutes(30);
}
window.setTimeout(GM_keepAlive, stTime.getTime() - now.getTime());
}
}
}
}
function GM_keepAlive() {
var quickBookURL = jQ("a[href*='quickBook']")[0].href;
window.location = quickBookURL;
window.setTimeout(GM_keepAlive, refreshInterval);
}
function startAddingInfo()
{
//Remove the annoying Ad banners
if( blockAds )
{
jQ("img[src*=banner]").remove();
jQ("iframe[src*=banner]").remove();
}
//Add Swap stations link.
var swapLink = jQ("<a href='#' style='font-size:15px; font-weight:bold; color:#0066BB; margin-left:10px;'>←Swap→</a>");
swapLink.click( function()
{
var fromStnInput = jQ("input[name='stationFrom']");
var toStnInput = jQ("input[name='stationTo']");
var tmp = fromStnInput.val();
fromStnInput.val( toStnInput.val() );
toStnInput.val( tmp );
return false;
});
var fromStnInput = jQ("input[name='stationFrom']");
fromStnInput.parents("td:first").append( swapLink);
//Make 'Train Reservation' link point to 'Plan My Travel' page.
//jQ("a[href*='helpandinfo.html']").attr("href", jQ("a:contains('Plan')").attr("href") ).removeAttr("target");
//Auto-login if username and password is given
if( jQ("input[value='Login']").length && defaultUsername.length && defaultPassword.length )
{
jQ("input[name='userName']").val(defaultUsername);
jQ("input[name='password']").val(defaultPassword);
if( autoLogin )
{
jQ("input[name='submit']").click();
}
}
if( document.location.href.match('planner.do') || document.location.href.match('quickBook.do') )
{
loadDefaultSettings();
if( isFirstRun )//Show the settings form for user to set if its a first run.
{
IRCTCSettings();
}
}
if ( document.location.href.match('planner.do') )
{
//Get the availability status of each train
showAvailStatus();
/*ToDo: Ajaxify the results for given form input.
jQ("input[name='Submit']").click( function()
{
jQ.post( jQ("form[name='BookTicketForm']").attr("action"), jQ("form[name='BookTicketForm']").serialize(), function(data)
{
alert(data ) ;
});
return false;
});
*/
}
if (document.location.href.match('bookticket.do')) {
loadDefaultPassengerSettings();
}
if( jQ("td:contains('Your Session has Expired')").length )
{
document.location.href = 'http://www.irctc.co.in';
}
else //If the re-enter password nag screen comes, here we re-enter :)
if( jQ("td:contains('Re-enter Password')").length && defaultPassword.length )
{
jQ("input[name='password']").val(defaultPassword);
if( autoLogin )
{
jQ("input[name='Submit']").click();
}
}
}
function showAvailStatus()
{
var bv_SessionIDValue = getURLParameter('BV_SessionID');
var bv_EngineIDValue = getURLParameter('BV_EngineID');
var trainTable = jQ(".TrainBackGround").eq(0).find("table:last");
// Holds the train numbers in an array
var trainNoArr = Array();
var row = 0;
if( trainTable.find("tr").length ==0 )
return;
trainTable.find("tr").each( function()
{
if( row != 0)//ignore first row (header).
{
trainNoArr[row-1] = jQ(this).children("td").eq(2).find("div").eq(0).html().trim();
}
row++;
});
var headerRow = jQ(trainTable).find("tr:first");
jQ(headerRow).children("td:last").attr("colspan", "7");//fix the silly excess colspan for last column.
newColumnHeader = document.createElement("td");
newColumnHeader.className = 'boldEleven';
//Append the Status text to the td
jQ(newColumnHeader).text("Status");
//Append the status td to the tr.
jQ(headerRow).append( newColumnHeader);
// Get the Date
var date = jQ("input[name='JDate1']").val();
var hdnMonth = date.split('/')[1];// Get the month
var hdnDay = date.split('/')[0];// Get the Date
var hdnYear = date.split('/')[2];// Get the year
// Get the class code
var hdnClasscode = jQ("select[name='classCode']").find("option:selected").val();
var fromStation;
var fromStationCode;
var toStation;
var toStationCode;
// Get the Quota information.
var quota = jQ("input[name='quota']").val();
var i =0;
trainTable.find("tr").each( function()
{
if( i++ != 0 )//ignore first row (header).
{
var onclickAttr = jQ(this).children("td").eq(1).find("div:first").html();
var startIndex = onclickAttr.indexOf('(') +1;
var endIndex = onclickAttr.indexOf(')');
var onClickArg = onclickAttr.substring(startIndex,endIndex);
var splitter = onClickArg.split(',');
// Get the From station
fromStation = splitter[splitter.length-2];
fromStationCode = fromStation.substring(1,fromStation.length-1);
// Get the To Station
toStation = splitter[splitter.length-1];
toStationCode = toStation.substring(1,toStation.length-1);
// Get the train number
var hdnTrnNo = trainNoArr[i-2];
////// AJAX for ticket availabilty /////
var url = "/cgi-bin/bv60.dll/irctc/enquiry/avail.do";
var getParams = {'BV_SessionID':bv_SessionIDValue,
'BV_EngineID':bv_EngineIDValue ,
'trainToStation': true,
'availabilityPop': true,
'hdnTrnNo':hdnTrnNo,
'hdnDay':hdnDay,
'hdnMonth':hdnMonth,
'hdnYear':hdnYear,
'hdnClasscode':hdnClasscode,
'fromStation':fromStationCode,
'toStation':toStationCode,
'hdnQuota':quota
};
var busyIcon = document.createElement("td");
jQ(busyIcon).addClass("autocomplete_text_busy");
jQ(this).append(busyIcon);
var thisRow = this;
jQ.get(url, getParams, function(data)
{
/*
var availResultTd = jQ(data).find("td:contains('Status'):last").parent().next().find("td").eq(2);
availResultTd.removeAttr("width");
jQ(thisRow).children(".autocomplete_text_busy").remove();
jQ(thisRow).append(availResultTd);
*/
if( data.length == 0)
{
jQ(thisRow).children(".autocomplete_text_busy").removeClass().addClass("boldFourteen").html("Error");
}
else
{
var availResultRow = jQ(data).find("td:contains('Status'):last").parent();
var statusHtml = "";
var i = 1;
while( i++ <= defaultAvailDays )
{
availResultRow = availResultRow.next();
var availDate = availResultRow.find("td").eq(1).html().split("-");
if( jQ.trim(availDate[0]).length == 1 )//Make single digit date to pad with zero (for alignment).
{
availDate[0] = "0" + jQ.trim(availDate[0]);
}
statusHtml = statusHtml + availDate[0] + "-" + jQ.trim(availDate[1]) + ":" + availResultRow.find("td").eq(2).html() + "<br/>";
}
jQ(thisRow).children(".autocomplete_text_busy").removeClass().addClass("boldFourteen").html(statusHtml).css("width", "150px");
}
//jQ(thisRow).append(availResultTd);
});
}
});
}
function IRCTCSettings()
{
mySpan=document.createElement('span');
mySpan.id='settingsSpan';
document.body.appendChild(mySpan);
mySpan.setAttribute("style", "position:fixed; width:100%; height: 100%; z-index:101; left: 0; top: 0; background-color: #444; opacity:.75; display:none;");
var myDiv = document.createElement('div');
myDiv.id = 'settingsDiv';
myDiv.setAttribute("style","position:fixed; width:650px; height: 650px; z-index: 102; background-color: #D9E6F7; border:8px solid #C1D9FF; text-align:center; display:none;font-family:verdana;font-weight:bold;-moz-border-radius: 10px;-webkit-border-radius: 10px;");
document.body.appendChild(myDiv);
myDiv.innerHTML="<span style='font-size:18px; color:#444; line-height:35px;'>IRCTC Ticket Booking Automation</span><br/><br/>\
<div style='padding-left:55px; font-size:10pt;line-height:22px;height:550px;'>\
<form name='defSettingsForm' id='defSettingsForm'>\
<div id='innerDiv1' style='float:left;text-align:left; background:#fff;color:#000;padding:16px; width:510px; height:520px;-moz-border-radius: 5px;-webkit-border-radius: 5px;'>\
<h4 style='background:#E0EDFE; color:#000;-moz-border-radius: 3px;-webkit-border-radius: 3px; padding-left:5px;'>Set Default Settings Here:</h4>\
<label style='display:inline-block; width:80px; height:30px;'>Username:</label>\
<input type='text' name='defUsername' id='defUsername'><br/>\
<label style='display:inline-block; width:80px; height:30px;'>Password:</label>\
<input type='password' name='defPassword' id='defPassword'><br/>\
<label style='display:inline-block; width:80px; height:30px;'>From:</label>\
<input type='text' name='defFromStn' id='defFromStn'>\
<img id='fetchFromStation' src='/Images/station_code.gif' style='vertical-align: middle;'> \
<label style='display:inline-block; width:35px; height:30px;'>To:</label> \
<input type='text' name='defToStn' id='defToStn'>\
<img id='fetchToStation' src='/Images/station_code.gif' style='vertical-align: middle;'><br/>\
<label style='display:inline-block; width:80px; height:30px;'>Class:</label>\
<select name='classCode' id='defClass'>\
<option value='SL' id='SL'>Sleeper Class(SL)</option>\
<option value='1A' id='1A'>First Class AC(1A)</option>\
<option value='FC' id='FC'>First Class(FC)</option>\
<option value='2A' id='2A'>AC 2-tier sleeper(2A)</option>\
<option value='3A' id='3A'>AC 3 Tier(3A)</option>\
<option value='CC' id='CC'>AC chair Car(CC)</option>\
<option value='2S' id='2S'>Second Sitting(2S)</option>\
<option value='3E' id='3E'>AC 3 Tier Economy(3E)</option>\
</select> \
<label style='display:inline-block; width:90px; height:30px;'>Train No:</label>\
<input type='text' name='defTrainNo' id='defTrainNo'><br/>\
<label style='display:inline-block; width:180px; height:30px;'>Show Avilability Days:</label>\
<select name='defAvailDays' id='defAvailDays'>\
<option value='1' id='availDays1'>1</option>\
<option value='2' id='availDays2'>2</option>\
<option value='3' id='availDays3'>3</option>\
<option value='4' id='availDays4'>4</option>\
<option value='5' id='availDays5'>5</option>\
<option value='6' id='availDays6'>6</option>\
</select><br/>\
<label style='display:inline-block; width:95px; height:30px;'>Ticket Type:</label> <input type='radio' name='defTicketType' id='eticketRadio' value='eticket'>e-ticket <input type='radio' name='defTicketType' id='iticketRadio' value='iticket'>i-ticket<br/>\
<input type='checkbox' name='blockAdsEnable' id='blockAdsEnable' /><label>Remove Ads</label> \
<input type='checkbox' name='autologinEnable' id='autologinEnable'/><label>Login/Relogin automatically</label><br/>\
<input type='checkbox' name='keepAliveEnable' id='keepAliveEnable' /><label>Keep Alive (the session between 07:30 to 08:00 for Tatkal booking)</label><br/>\
<h4 style='background:#E0EDFE; color:#000;-moz-border-radius: 3px;-webkit-border-radius: 3px; padding-left:5px;'>Set Passenger Details Here:</h4>\
<table width='500' cellspacing='1' cellpadding='0' border='0' bgcolor='#ffffff'> <tbody> <tr> <td width='8%' height='23' class='boldEleven'> <div align='center'>SNo </div> </td> <td width='16%' height='23' class='boldEleven'> <div align='center'>Name </div> </td> <td width='7%' height='23' class='boldEleven'> <div align='center'>Age </div> </td> <td width='13%' height='23' class='boldEleven'> <div align='center'>Sex </div> </td> <td width='18%' height='23' class='boldEleven'> <div align='center'>Berth Preference </div> </td> </tr> <tr> <td width='8%' height='26' class='boldFourteen'> <div align='center'>1 </div> </td> <td width='16%' height='26'> <div align='center'> <input type='text' class='formText135' value='' size='22' maxlength='16' id='spassengers[0].passengerName'> </div> </td> <td width='7%' height='26'> <div align='center'> <input type='text' class='formText135' value='' size='3' maxlength='3' id='spassengers[0].passengerAge'> </div> </td> <td width='13%' height='26'> <div align='center'> <select class='formText135' id='spassengers[0].passengerSex'> <option selected='' value=''>Select </option> <option value='m'>Male </option> <option value='f'>Female </option> </select> </div> </td> <td width='18%' height='26'> <div align='center'> <select class='formText135' id='spassengers[0].berthPreffer'> <option selected='' value=''>Choose Berth </option> <option value='Lower'>Lower </option> <option value='Middle'>Middle </option> <option value='Upper'>Upper </option> <option value='Side_Upper'>Side upper </option> <option value='Side_Lower'>Side lower </option> </select> </div> </td> </tr> <tr> <td width='8%' height='26' class='boldFourteen'> <div align='center'>2 </div> </td> <td width='16%' height='26'> <div align='center'> <input type='text' class='formText135' value='' size='22' maxlength='16' id='spassengers[1].passengerName'> </div> </td> <td width='7%' height='26'> <div align='center'> <input type='text' class='formText135' value='' size='3' maxlength='3' id='spassengers[1].passengerAge'> </div> </td> <td width='13%' height='26'> <div align='center'> <select class='formText135' id='spassengers[1].passengerSex'> <option selected='' value=''>Select </option> <option value='m'>Male </option> <option value='f'>Female </option> </select> </div> </td> <td width='18%' height='26'> <div align='center'> <select class='formText135' id='spassengers[1].berthPreffer'> <option selected='' value=''>Choose Berth </option> <option value='Lower'>Lower </option> <option value='Middle'>Middle </option> <option value='Upper'>Upper </option> <option value='Side_Upper'>Side upper </option> <option value='Side_Lower'>Side lower </option> </select> </div> </td> </tr> <tr> <td width='8%' height='26' class='boldFourteen'> <div align='center'>3 </div> </td> <td width='16%' height='26'> <div align='center'> <input type='text' class='formText135' value='' size='22' maxlength='16' id='spassengers[2].passengerName'> </div> </td> <td width='7%' height='26'> <div align='center'> <input type='text' class='formText135' value='' size='3' maxlength='3' id='spassengers[2].passengerAge'> </div> </td> <td width='13%' height='26'> <div align='center'> <select class='formText135' id='spassengers[2].passengerSex'> <option selected='' value=''>Select </option> <option value='m'>Male </option> <option value='f'>Female </option> </select> </div> </td> <td width='18%' height='26'> <div align='center'> <select class='formText135' id='spassengers[2].berthPreffer'> <option selected='' value=''>Choose Berth </option> <option value='Lower'>Lower </option> <option value='Middle'>Middle </option> <option value='Upper'>Upper </option> <option value='Side_Upper'>Side upper </option> <option value='Side_Lower'>Side lower </option> </select> </div> </td> </tr> <tr> <td width='8%' height='26' class='boldFourteen'> <div align='center'>4 </div> </td> <td width='16%' height='26'> <div align='center'> <input type='text' class='formText135' value='' size='22' maxlength='16' id='spassengers[3].passengerName'> </div> </td> <td width='7%' height='26'> <div align='center'> <input type='text' class='formText135' value='' size='3' maxlength='3' id='spassengers[3].passengerAge'> </div> </td> <td width='13%' height='26'> <div align='center'> <select class='formText135' id='spassengers[3].passengerSex'> <option selected='' value=''>Select </option> <option value='m'>Male </option> <option value='f'>Female </option> </select> </div> </td> <td width='18%' height='26'> <div align='center'> <select class='formText135' id='spassengers[3].berthPreffer'> <option selected='' value=''>Choose Berth </option> <option value='Lower'>Lower </option> <option value='Middle'>Middle </option> <option value='Upper'>Upper </option> <option value='Side_Upper'>Side upper </option> <option value='Side_Lower'>Side lower </option> </select> </div> </td> </tr> <tr> <td width='8%' height='26' class='boldFourteen'> <div align='center'>5 </div> </td> <td width='16%' height='26'> <div align='center'> <input type='text' class='formText135' value='' size='22' maxlength='16' id='spassengers[4].passengerName'> </div> </td> <td width='7%' height='26'> <div align='center'> <input type='text' class='formText135' value='' size='3' maxlength='3' id='spassengers[4].passengerAge'> </div> </td> <td width='13%' height='26'> <div align='center'> <select class='formText135' id='spassengers[4].passengerSex'> <option selected='' value=''>Select </option> <option value='m'>Male </option> <option value='f'>Female </option> </select> </div> </td> <td width='18%' height='26'> <div align='center'> <select class='formText135' id='spassengers[4].berthPreffer'> <option selected='' value=''>Choose Berth </option> <option value='Lower'>Lower </option> <option value='Middle'>Middle </option> <option value='Upper'>Upper </option> <option value='Side_Upper'>Side upper </option> <option value='Side_Lower'>Side lower </option> </select> </div> </td> </tr> <tr> <td width='8%' height='26' class='boldFourteen'> <div align='center'>6 </div> </td> <td width='16%' height='26'> <div align='center'> <input type='text' class='formText135' value='' size='22' maxlength='16' id='spassengers[5].passengerName'> </div> </td> <td width='7%' height='26'> <div align='center'> <input type='text' class='formText135' value='' size='3' maxlength='3' id='spassengers[5].passengerAge'> </div> </td> <td width='13%' height='26'> <div align='center'> <select class='formText135' id='spassengers[5].passengerSex'> <option selected='' value=''>Select </option> <option value='m'>Male </option> <option value='f'>Female </option> </select> </div> </td> <td width='18%' height='26'> <div align='center'> <select class='formText135' id='spassengers[5].berthPreffer'> <option selected='' value=''>Choose Berth </option> <option value='Lower'>Lower </option> <option value='Middle'>Middle </option> <option value='Upper'>Upper </option> <option value='Side_Upper'>Side upper </option> <option value='Side_Lower'>Side lower </option> </select> </div> </td> </tr> </tbody></table>\
</div>\
</form>\
</div>\
<div style='text-align:center; padding-top:12px;'><input type='button' id='cancelBtn' value='Cancel'> <input type='button' id='saveSettings' value='Save and Exit'></div>\
";
jQ('#settingsSpan').show();
jQ('#settingsDiv').css('top', parseInt( (jQ(window).height() - jQ('#settingsDiv').height() ) / 2) )
.css('left', parseInt( (jQ(window).width() - jQ('#settingsDiv').width() ) / 2) )
.show();
/*var url = "";
jQ.get(url, null, function(data)
{
if( data.length == 0)
{
jQ("#spnPassenger").html("Error");
}
else
{
jQ("#spnPassenger").html(data);
}
});*/
setTimeout( getDefaultsToSettingsForm, 0);
jQ('#fetchFromStation').click( function()
{
var bv_SessionIDValue = getURLParameter('BV_SessionID');
var bv_EngineIDValue = getURLParameter('BV_EngineID');
var stationCode = jQ("#defFromStn" ).val()
window.open("../enquiry/stationnames.do?BV_SessionID="+bv_SessionIDValue+"&BV_EngineID="+bv_EngineIDValue+"&stnName="+escape(stationCode)+"&formName=defSettingsForm&fieldName=defFromStn&leftWidth=0","","dependent=yes,width=350,height=375,screenX=200,screenY=300,titlebar=no,scrollbars=auto,maximize=no");
});
jQ('#fetchToStation').click( function()
{
var bv_SessionIDValue = getURLParameter('BV_SessionID');
var bv_EngineIDValue = getURLParameter('BV_EngineID');
var stationCode = jQ("#defToStn" ).val()
window.open("../enquiry/stationnames.do?BV_SessionID="+bv_SessionIDValue+"&BV_EngineID="+bv_EngineIDValue+"&stnName="+escape(stationCode)+"&formName=defSettingsForm&fieldName=defToStn&leftWidth=0","","dependent=yes,width=350,height=375,screenX=200,screenY=300,titlebar=no,scrollbars=auto,maximize=no");
});
jQ('#saveSettings')[0].addEventListener('click',function()
{
GM_setValue("defaultUsername", document.getElementById('defUsername').value );
GM_setValue("defaultPassword", document.getElementById('defPassword').value );
GM_setValue("defaultFromStation", document.getElementById('defFromStn').value );
GM_setValue("defaultToStation", document.getElementById('defToStn').value );
GM_setValue("defaultTrainNo", document.getElementById('defTrainNo').value );
GM_setValue("defaultClass", document.getElementById('defClass').value );
GM_setValue("defaultAvailDays", document.getElementById('defAvailDays').value );
if( document.getElementById('eticketRadio').checked )
{
GM_setValue("defaultTicketType", document.getElementById('eticketRadio').value );
}
else
if( document.getElementById('iticketRadio').checked )
{
GM_setValue("defaultTicketType", document.getElementById('iticketRadio').value );
}
if( document.getElementById("blockAdsEnable").checked )
{
GM_setValue("blockAds", true );
}
else
{
GM_setValue("blockAds", false );
}
if( document.getElementById("autologinEnable").checked )
{
GM_setValue("autoLogin", true );
}
else
{
GM_setValue("autoLogin", false );
}
if( document.getElementById("keepAliveEnable").checked )
{
GM_setValue("keepAlive", true );
}
else
{
GM_setValue("keepAlive", false );
}
// get the passenger details
for (var i = 0; i < passengerCount; i++) {
GM_setValue("passengers[" + i + "].passengerName", document.getElementById("spassengers[" + i + "].passengerName").value);
GM_setValue("passengers[" + i + "].passengerAge", document.getElementById("spassengers[" + i + "].passengerAge").value);
var sexMap = {m: 'Male', f: 'Female', s: 'Select'};
var val = document.getElementById("spassengers[" + i + "].passengerSex").value;
if (val == null || val == '')
val = 's';
GM_setValue("passengers[" + i + "].passengerSex", sexMap[val]);
var berthMap = {s: 'Choose Berth', Lower: 'Lower', Middle: 'Middle', Upper: 'Upper', Side_Upper: 'Side upper', Side_Lower: 'Side lower'};
val = document.getElementById("spassengers[" + i + "].berthPreffer").value;
if (val == null || val == '')
val = 's';
GM_setValue("passengers[" + i + "].berthPreffer", berthMap[val]);
}
GM_setValue("firstRun", false );
jQ("#settingsSpan").remove();
jQ("#settingsDiv").remove();
}, false);
jQ('#cancelBtn')[0].addEventListener('click',function()
{
GM_setValue("firstRun", false );
jQ("#settingsSpan").remove();
jQ("#settingsDiv").remove();
}, false);
}
function getURLParameter(name)
{
return unescape(
(RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
);
}
function getDefaultsToSettingsForm()
{
//Enable Autocomplete on from and to stations.
document.location.href="javascript:xmlhttpPost(document.getElementById('defFromStn'));xmlhttpPost(document.getElementById('defToStn'));";
document.getElementById("defUsername").value = GM_getValue("defaultUsername", '' );
document.getElementById("defPassword").value = GM_getValue("defaultPassword", '' );
document.getElementById("defFromStn").value = GM_getValue("defaultFromStation", '' );
document.getElementById("defToStn").value = GM_getValue("defaultToStation", '' );
document.getElementById("defTrainNo").value = GM_getValue("defaultTrainNo", '');
if( GM_getValue("defaultTicketType","eticket") == "iticket" )
{
document.getElementById('iticketRadio').checked = true;
}
else
if( GM_getValue("defaultTicketType","eticket") == "eticket" )
{
document.getElementById('eticketRadio').checked = true;
}
document.getElementById( GM_getValue("defaultClass","SL") ).selected = true;
document.getElementById( "availDays" + GM_getValue("defaultAvailDays","3") ).selected = true;
if( GM_getValue("blockAds", true ) )
{
document.getElementById("blockAdsEnable").checked = true;
}
if( GM_getValue("autoLogin", true ) )
{
document.getElementById("autologinEnable").checked = true;
}
if( GM_getValue("keepAlive", true ) )
{
document.getElementById("keepAliveEnable").checked = true;
}
// Passenger details
for (var i = 0; i < passengerCount; i++) {
// get the passenger details
for (var i = 0; i < passengerCount; i++) {
document.getElementById("spassengers[" + i + "].passengerName").value = GM_getValue("passengers[" + i + "].passengerName", '');
document.getElementById("spassengers[" + i + "].passengerAge").value = GM_getValue("passengers[" + i + "].passengerAge", '');
jQ("select[id='spassengers[" + i + "].passengerSex'] option:contains(" + GM_getValue("passengers[" + i + "].passengerSex", 'Select') + ")").attr("selected", true);
jQ("select[id='spassengers[" + i + "].berthPreffer'] option:contains(" + GM_getValue("passengers[" + i + "].berthPreffer", 'Choose Berth') + ")").attr("selected", true);
}
}
}
function loadDefaultSettings() //Load default settings given to the search input form.
{
var settingsLink = jQ( document.createElement('a') );
settingsLink.attr("href", "javascript:;");
settingsLink.text("IRCTC Ticket Booking Automation Settings");
settingsLink.css({'color':'#f2ff22', 'font-weight':'bold', 'padding':'3px', 'text-decoration':'underline'});
settingsLink.click(IRCTCSettings);
jQ("td:contains('Mandatory'):last").html("").append(settingsLink);
//Set default values according to user settings.
/*if(jQ("input[name='ticketType']:checked").length == 0)//Select default ticket type.
{
jQ("input[value='"+defaultTicketType+"']").click();
}*/
jQ("input[value='"+defaultTicketType+"']").click();
if( jQ("select[name='classCode'] option:selected").val() == "")
{
jQ("select[name='classCode'] option:contains("+defaultClass+")").attr("selected", true);//Select default class
}
if( jQ("input[name='stationFrom']").val() == "" || jQ("input[name='stationFrom']").val().match('Enter') )
{
jQ("input[name='stationFrom']").val(defaultFromStation);
}
if( jQ("input[name='stationTo']").val() == "" || jQ("input[name='stationTo']").val().match('Enter') )
{
jQ("input[name='stationTo']").val(defaultToStation);
}
if (document.location.href.match('quickBook.do')) {
loadDefaultPassengerSettings();
jQ("input[name='boardPoint']").val(defaultFromStation);
jQ("input[name='trainNo']").val(defaultTrainNo);
window.setTimeout(showQuickBookAvailability, 2 * 1000);
}
}
function showQuickBookAvailability() {
var bv_SessionIDValue = getURLParameter('BV_SessionID');
var bv_EngineIDValue = getURLParameter('BV_EngineID');
// Getting the station code
var fromStationCode = jQ("input[name='stationFrom']").val();
if(fromStationCode.indexOf("(")>0)
fromStationCode = fromStationCode.substring(fromStationCode.indexOf("(")+1,fromStationCode.indexOf(")"));
var toStationCode = jQ("input[name='stationTo']").val();
if(toStationCode.indexOf("(")>0)
toStationCode = toStationCode.substring(toStationCode.indexOf("(")+1,toStationCode.indexOf(")"));
// Get the Date
var date = jQ("input[name='JDate1']").val();
var hdnMonth = date.split('/')[1];// Get the month
var hdnDay = date.split('/')[0];// Get the Date
var hdnYear = date.split('/')[2];// Get the year
var hdnTrnNo = jQ("input[name='trainNo']").val();
var hdnClasscode = jQ("select[name='classCode'] option:selected").val();
var hdnQuota = jQ("input[name='quota']").val();
////// AJAX for ticket availabilty /////
var url = "/cgi-bin/bv60.dll/irctc/enquiry/avail.do";
var getParams = {'BV_SessionID':bv_SessionIDValue,
'BV_EngineID':bv_EngineIDValue ,
'trainToStation': true,
'availabilityPop': true,
'hdnTrnNo':hdnTrnNo,
'hdnDay':hdnDay,
'hdnMonth':hdnMonth,
'hdnYear':hdnYear,
'hdnClasscode':hdnClasscode,
'fromStation':fromStationCode,
'toStation':toStationCode,
'hdnQuota':hdnQuota
};
var busyIcon = document.createElement('span');
busyIcon.id = 'busyIcon';
document.body.appendChild(busyIcon);
busyIcon.setAttribute("style", "position:absolute; width:150; height: 40; left: 100; top: 310; border: 2px solid #C1D9FF;");
busyIcon.setAttribute("class", "autocomplete_text_busy");
jQ('#busyIcon').css('left', parseInt( (jQ(window).width() - jQ('#busyIcon').width() ) / 2 + 250)).show();
jQ.get(url, getParams, function(data)
{
if( data.length == 0)
{
jQ("#busyIcon").removeClass().addClass("boldFourteen").html("Error");
}
else
{
var availResultRow = jQ(data).find("td:contains('Status'):last").parent();
var statusHtml = "";
var i = 1;
while( i++ <= defaultAvailDays )
{
availResultRow = availResultRow.next();
var availDate = availResultRow.find("td").eq(1).html().split("-");
if( jQ.trim(availDate[0]).length == 1 )//Make single digit date to pad with zero (for alignment).
{
availDate[0] = "0" + jQ.trim(availDate[0]);
}
statusHtml = statusHtml + availDate[0] + "-" + jQ.trim(availDate[1]) + ":" + availResultRow.find("td").eq(2).html() + "<br/>";
}
jQ("#busyIcon").removeClass().addClass("boldFourteen").html(statusHtml).css("width", "150px");
}
});
/*window.open("../enquiry/avail.do?BV_SessionID=@@@@1974207299.1282168940@@@@&BV_EngineID=ccceadelfdkihdkcefecehidfgmdfhm.0&QuickNav=true&trainToStation=true&availabilityPop=true&hdnTrnNo="+document.forms[0].trainNo.value+"&hdnDay="+document.forms[0].day.value+"&hdnMonth="+document.forms[0].month.value+"&hdnYear="+document.forms[0].year.value+"&hdnClasscode="+document.forms[0].classCode.value+"&fromStation="+sf+"&toStation="+st+"&hdnQuota="+document.forms[0].qt.value+"&leftWidth=0","","dependent=yes,width=500,height=375,screenX=200,screenY=300,titlebar=no,scrollbars=yes,maximize=no");*/
}
function loadDefaultPassengerSettings() {
// Entering the passenger details
for (var i = 0; i < passengerCount; i++) {
if (jQ("input[name='passengers[" + i + "].passengerName']").val() == "") {
jQ("input[name='passengers[" + i + "].passengerName']").val(GM_getValue("passengers[" + i + "].passengerName", ''));
}
if (jQ("input[name='passengers[" + i + "].passengerAge']").val() == "") {
jQ("input[name='passengers[" + i + "].passengerAge']").val(GM_getValue("passengers[" + i + "].passengerAge", ''));
}
if( jQ("select[name='passengers[" + i + "].passengerSex'] option:selected").val() == "")
{
jQ("select[name='passengers[" + i + "].passengerSex'] option:contains(" + GM_getValue("passengers[" + i + "].passengerSex", 'Select') + ")").attr("selected", true);
}
if( jQ("select[name='passengers[" + i + "].berthPreffer'] option:selected").val() == "")
{
jQ("select[name='passengers[" + i + "].berthPreffer'] option:contains(" + GM_getValue("passengers[" + i + "].berthPreffer", 'Choose Berth') + ")").attr("selected", true);
}
}
// Breaking the Captcha
jQ("input[name='captchaImage']").val(captchaImage);
jQ("input[name='Submit']").click(function() {
jQ("img[src*='../recaptcha/articleGenImg.jsp?imageText=']").attr("src", "../recaptcha/articleGenImg.jsp?imageText=" + captchaSource);
jQ("input[name='imgPath']").val("../recaptcha/articleGenImg.jsp?imageText=" + captchaSource);
jQ("input[name='imgValueReal']").val(captchaSource);
return incrementClicks();
});
}
GM_registerMenuCommand("IRCTC Ticket Booking Automation Settings", IRCTCSettings);