/**
* SABS Agent Search And Booking Software
* <http://www.sabsagent.com>
* Copyright(c) 2001-2009, Micros Travel
*
* @author Jacek Spera <jspera@micros.com>
*/

/**
* The class is a singleton. It retrieves session id (when not existent, it
* initiates creation of it
*/



SessionDataProvider = function(){
    var sessionType = 'INQ';

    // cookie functions
    var readCookie = function(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for(var i=0;i < ca.length;i++) {
            var c = ca[i];
            while (c.charAt(0)==' '){ c = c.substring(1,c.length); }
            if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length, c.length); }
        }
        return null;
    };
    var createCookie = function(name,value,days) {
        var date, ex;
        if (days) {
            date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            expires = "; expires="+date.toGMTString();
        } else {
            expires = "";
        }
        document.cookie = name+"="+value+expires+"; path=/";
    };
    var eraseCookie = function(name) {
        createCookie(name,"",-1);
    };

    // connection used for session retrieval
    var connection;
    var getConnection = function(){
        if(!connection){
            connection = ExtFactory.get('Connection');
        }
        return connection;
    };

    var sessionCallback;
    var sessionCallbackScope;

    // connection callback
    var connCallback = function(opts, success, response){
        if(success){
            response = Ext.decode(response.responseText);
            sessionCallback.call(sessionCallbackScope,
                response.MessageText);
        }
    };
    
    return {
        getDate: function(){
            var params=readCookie('mySAPSPARAMS');
            if(params){
                var depdate = Ext.decode(params).DepDateOut;
                return Date.parseDate(depdate, 'ymd');
            }
        },
		getParams: function(){
            var params=readCookie('mySAPSPARAMS');
            if(params){
                return params;
            }
        },
		getCookie: function(name){
			return readCookie(name);	
		},
		hasCookie: function(name){
            return readCookie(name)?true:false;
        },
        hasSession: function(){
            return readCookie('SAPPER')?true:false;
        },
		hasBookingSession: function(){
            return readCookie('booking')?true:false;
        },
        clearSession: function(){
            eraseCookie('SAPPER');
        },
		getSearchSession: function(){
            var sessid = readCookie('search_saps');
            if(sessid){
                    return sessid;
            }
			return; 
        },
         getBasketSession: function(){
            var sessid = readCookie('basket');
            if(sessid){
                return sessid;
            }
		return; 
        },
        getSession: function(callback, scope){
            var sessid = readCookie('SAPPER');
            if(sessid){
                if(!callback){
                    return sessid;
                }
                else {
                    callback.call(scope || null, sessid);
                }
            }
            else {
                sessionCallback = callback;
                sessionCallbackScope = scope;
                getConnection().request({
                    url: '/cgi-bin/SAPS/getSession.pl',
                    callback: sessionCallback || function(){}
                });
            }
        },
		addToBasket: function(records, callback){
        	var sessid = readCookie('basket');
		    if(sessid){
                var conn = getConnection();
                var json = Ext.encode({
                    SessionID : sessid,
                    Data: records,
                    BookingStage: sessionType
                });
        //        console.log(json); 
                conn.request({
                    url: '/cgi-bin/SAPS/APIAccessor.pl',
                    params: {
                        search: 'ADD',
                        json: json,
                        r: readCookie('user')
                    },
                    success: callback
                });
            }
            else {
                throw 'No Session!1';
            }
        },
		addToBookingBasket: function(records, callback, sessType){
            var sessid = readCookie('booking');
            var Type = sessType || sessionType;

			if(sessid){
                var conn = getConnection();
                var json = Ext.encode({
                    SessionID : sessid,
                    Data: records,
                    BookingStage: Type
                });
        //        console.log(json);
                conn.request({
                    url: '/cgi-bin/SAPS/APIAccessor.pl',
                    params: {
                        search: 'ADD',
                        json: json,
                        r: readCookie('user')
                    },
                    success: callback
                });
            }
            else {
                throw 'No Session!2';
            }
        },
	    createCookie: function(name, data){
			createCookie(name, data);	
		},
		eraseCookie: function(name){
			eraseCookie(name);	
		},
        retrieveBasketContents: function(callback){
             var sessid = readCookie('basket');
            if(sessid){
                var conn = getConnection();
                //var json = Ext.encode({
                    //SessionID : sessid,
                    //BookingStage: sessionType
                //});
                conn.request({
                    url: '/cgi-bin/SAPS/JsponPollwk.pl',
//http://sabsdev-ext.saturn.co.uk:8010/cgi-bin/SAPS/JsponPollwk.pl?session=JAC-766523-1409-1&reqhcached=1&want=INQ%3A0
                    params: {
                        want: 'INQ:0',
                        session: sessid,
                        //json: json,
                        reqhcached: 1
                        //r: readCookie('user')
                    },
                    success: callback
                });
            }
            else { throw 'No Session!3'; }
        },
		retrieveBookingBasketContents: function(callback, scope){
            var sessid = readCookie('booking');
            var callbackFcn;
			
			if (typeof scope === 'undefined'){
				callbackFcn = callback;
			}else{
				callbackFcn = callback.createDelegate(scope);
			}
			
			if(sessid){
                var conn = getConnection();
                //var json = Ext.encode({
                    //SessionID : sessid,
                    //BookingStage: sessionType
                //});
                conn.request({
                    url: '/cgi-bin/SAPS/JsponPollwk.pl',
//http://sabsdev-ext.saturn.co.uk:8010/cgi-bin/SAPS/JsponPollwk.pl?session=JAC-766523-1409-1&reqhcached=1&want=INQ%3A0
                    params: {
                        want: 'INQ:0',
                        session: sessid,
                        //json: json,
                        reqhcached: 1
                        //r: readCookie('user')
                    },
                    success: callbackFcn
                });
            }
            else { throw 'No Session!4'; }
        },
		deleteFromBasket: function(records, callback){
	         var sessid = readCookie('basket');
            if(sessid){
                var ids = [];
                 Ext.each(records, function(o){
                var RecordNum;
				if (o.apiRecNum){
				    RecordNum = o.apiRecNum
				}else{
				    RecordNum = o.RecNum
				}
				ids.push(RecordNum);
                
				});
                var conn = getConnection();
                var json = Ext.encode({
                    SessionID : sessid,
                    RecordIDs: ids,
                    BookingStage: sessionType
                });
                //console.log(json);
                conn.request({
                    url: '/cgi-bin/SAPS/APIAccessor.pl',
                    params: {
                        search: 'DEL',
                        json: json,
                        r: readCookie('user')
                    },
                    success: callback
                });
            }
            else {
                throw 'No Session!5';
            }
        },
		deleteFromBookingBasket: function(records, callback){
            var sessid = readCookie('booking');
            if(sessid){
                var ids = [];
                Ext.each(records, function(o){
                var RecordNum;
				if (o.apiRecNum){
				    RecordNum = o.apiRecNum
				}else{
				    RecordNum = o.RecNum
				}
				ids.push(RecordNum);
                
				});
                var conn = getConnection();
                var json = Ext.encode({
                    SessionID : sessid,
                    RecordIDs: ids,
                    BookingStage: sessionType
                });
                //console.log(json);
                conn.request({
                    url: '/cgi-bin/SAPS/APIAccessor.pl',
                    params: {
                        search: 'DEL',
                        json: json,
                        r: readCookie('user')
                    },
                    success: callback
                });
            }
            else {
                throw 'No Session!6';
            }
        },
        storeSearchObject: function(so, cback){
            so = Ext.encode(so);
            createCookie('mySAPSPARAMS', so);
            //var so = readCookie('SAPSPARAMS');
            //if(!so){
                //throw 'no SAPSPARAMS cookie set';
            //}
            this.addToBasket([{
                 'RecType': 'NTE',
                'Title': 'SearchRequest',
                 'Content': so
            }], cback);
			
			
			this.addToBookingBasket([{
                'RecType': 'NTE',
                'Title': 'SearchRequest',
                'Content': so
            }], cback);
			
        },
        sendConfirmationEmails: function(cback){
        	var sessid = readCookie('basket');
            if(sessid){
                var conn = getConnection();
                conn.request({
                    url: '/cgi-bin/SAPS/SendConfirmEmail.pl',
                    params: {
                        basket_type: sessionType,
                        session: sessid
                    },
                    success: cback
                });
            }
            else {throw 'No Session!7';}
        },
        sendBookingErrorEmails: function(cback){
            var sessid = readCookie('booking');
            if(sessid){
                var conn = getConnection();
                conn.request({
                    url: '/cgi-bin/SAPS/SendConfirmEmail.pl',
                    params: {
                        basket_type: sessionType,
                        session: sessid
                    },
                    success: cback
                });
            }
            else {throw 'No Session!7';}
        },
        
		getCosts: function(){
			var costs = [];
			
			Ext.Ajax.request({
				    url: '/cgi-bin/merchant_details.pl',
					disableCaching: false,
					method: 'GET',
					async: false,
					success: function(response, opts) {
					var obj;
					try {
						obj = Ext.decode( response.responseText );
					}
					catch (e) {
						options.fail.call(options.scope,
						'Unable to decode the server response from ' +
						ProfileAccess.PROFILE_ACCESS_URL +
						'. The json error is: ' + e.message);
						return;
					}

					if (obj.keys['bookings.merchantfee_name'] === null || obj.keys['bookings.merchantfee_name'] === ''){
						obj.keys['bookings.merchantfee_name'] = 'Credit Card Surcharge';
					}
					
					costs = obj;
					return;
					} 
			});
			return costs;
		}
		
    };
}();

