var General = {
	container: null,

	// @var Date Time from lightstreamer
	dateTime: null,


    // @var string - contains time formatted as HH:MM:SS
    timeString: '',

    // @var PushPage Lightstrearer page
    lsPage: null,

    demoDialog:null,
	init: function() {    
    if($('.refer-a-friend').length) {
      $('.refer-a-friend').click(function() {
        if(!$('.refer-popup').length) {           
          var cont = '<div class="refer-popup">';
          cont += '<div class="close"></div>';
          cont += '<div class="button"></div>';
          cont += '</div>';
          $('#globalFrame').append(cont);                          
          $('.refer-popup .close').click(function() {
            $(this).parent().hide();
          });
        } else {
          $('.refer-popup').show();
          $('.refer-popup').removeClass('thanks');
        }
        $('.refer-popup .button').click(General.openFeed);

      })
    }
      
    (function(d){
      var js, id = 'facebook-jssdk';
      if (d.getElementById(id)) {
        return;
      }
      js = d.createElement('script');
      js.id = id;
      js.async = true;
      js.src = "//connect.facebook.net/en_US/all.js";
      d.getElementsByTagName('head')[0].appendChild(js);
    }(document));

		if (!console) var console;
		var userTime = new Date();
		General.browserOffset = -userTime.getTimezoneOffset() * 60 * 1000;
		General.serverOffset = AppData.timeZoneOffset;
		//Apply browser (user) timezone offset to the server offset, to correct times
		AppData.timeZoneOffset = General.serverOffset - General.browserOffset;

		General.startClock();
		General.container = $('#rootContainer');
		
		General.container.find('li input[name="email"]').focus(General.onFocusEmail).blur(General.onBlurEmail);
		General.container.find('li input[name="passwordFake"]').bind('focus', {container: 'li.textPassword'}, General.onFocusPassword);
		General.container.find('li input[name="password"]:not("input.noFadingLabels")').bind('blur', {container: 'li.textPassword'}, General.onBlurPassword);
                document.domain = document.domain.replace("www.", "");
        
        //live person click
        $('#liveChatFrameButton').click(this.onClickLiveChat);
	},
  openFeed : function() {    
    FB.init({
      appId      : '151400244962235',
      status     : true, 
      cookie     : true,
      xfbml      : true
    });      
    $('.refer-popup').hide()    
    FB.login(function(response) {
      
      if (response.status = 'connected') {
        var obj = {
          method: 'feed',                                
          name: AppData.facebookReferTitle,                
          link : 'http://www.onetwotrade.com/OpenAccount?facebookRefer='+AppData.customerId,
          description: AppData.facebookReferContent
        };
        FB.ui(obj, function(respone) {          
          if(respone != null) {
            $('.refer-popup').addClass('thanks');
            $('.refer-popup.thanks').click(function() {
              $(this).hide();
            });
            
            $('.refer-popup').show()
          }
        });
      }
    }, {
      scope: 'email'
    });  
  },
	onFocusEmail: function(event){
		var field = $(event.target);
		var value = $.trim(field.val());
		
		if(value == AppData.generalLang.email)
			field.val('');
	},

	onBlurEmail: function(event){
		var field = $(event.target);
		var value = $.trim(field.val());
		if(value == '')
			field.val(AppData.generalLang.email)

	},

	onFocusName: function(event){
		var field = $(event.target);
		var value = $.trim(field.val());
		if(value == AppData.generalLang.name)
			field.val('');
	},

	onBlurName: function(event){
		var field = $(event.target);
		var value = $.trim(field.val());
		if(value == '')
			field.val(AppData.generalLang.name)

	},

	onFocusPhone: function(event){
		var field = $(event.target);
		var value = $.trim(field.val());
		if(value == AppData.generalLang.phone)
			field.val('');
	},

	onBlurPhone: function(event){
		var field = $(event.target);
		var value = $.trim(field.val());
		if(value == '')
			field.val(AppData.generalLang.phone)

	},

	onFocusPassword: function(event){
	
		var elementContainer = event.data.container;
        
		var fakeField = $(event.target);
		var realField = fakeField.parent().parent().find(elementContainer + ' input[name="password"]');
		//hide fake field, and show the real one
		fakeField.addClass('hidden');
		realField.removeClass('hidden').focus();
	},

	onBlurPassword: function(event){
		var elementContainer = event.data.container;
		var field = $(event.target);
		var fakeField = field.parent().parent().find(elementContainer + ' input[name="passwordFake"]');
		var value = $.trim(field.val());
		if(value == ''){
			field.addClass('hidden');
			fakeField.removeClass('hidden');
		}
	},


	onFocusPasswordPopup: function(event){

		var elementContainer = event.data.container;
		var fakeField = $(event.target);
		var realField = General.container.find(elementContainer + ' input[name="password"]');
		//hide fake field, and show the real one
		fakeField.addClass('hidden');
		realField.removeClass('hidden').focus();
	},

	onBlurPasswordPopup: function(event){
		var elementContainer = event.data.container;
		var field = $(event.target);
		var fakeField = General.container.find(elementContainer + ' input[name="passwordFake"]');
		var value = $.trim(field.val());
		if(value == ''){
			field.addClass('hidden');
			fakeField.removeClass('hidden');
		}
	},


	onFocusPasswordConfirm: function(event){

		var elementContainer = event.data.container;

		var fakeField = $(event.target);
		var realField = General.container.find(elementContainer + ' input[name="realPasswordConf"]');
		//hide fake field, and show the real one
		fakeField.addClass('hidden');
		realField.removeClass('hidden').focus();
	},

	onBlurPasswordConfirm: function(event){
		var elementContainer = event.data.container;
		var field = $(event.target);
		var fakeField = General.container.find(elementContainer + ' input[name="passwordFakeConf"]');
		var value = $.trim(field.val());
		if(value == ''){
			field.addClass('hidden');
			fakeField.removeClass('hidden');
		}
	},



    /**
     * Intiates lightstreamer
     *
     * @return PushPage - light streamer's page object
     */
     initLightstreamer: function() {
        if ( General.lsPage === null ) {
            var page = new PushPage();
            General.lsPage = page;
            if ( AppData.domain.indexOf('server') !== -1 && jQuery.browser.msie) {
                // page domain in IE should be null when in local server
                page.context.setDomain( null );
            } else {
                page.context.setDomain(AppData.domain.substring(AppData.domain.indexOf('.')+1));
				
            }


            page.context.setDebugAlertsOnClientError(false);

            page.onEngineCreation = function(engine) {
                    if (AppData.domain.indexOf('server') !== -1)  {
                        engine.connection.setLSHost(AppData.domain);
                        engine.connection.setLSPort(8080);
                    } else {
                        engine.connection.setLSHost("ls." + AppData.domain.substring(AppData.domain.indexOf('.')+1));
                        engine.connection.setLSPort(80);
                    }
                    engine.connection.setAdapterName("SOLSDataAdapter");
                    
                    engine.changeStatus("STREAMING");

                    engine.onStatusChange = function(status) {
                        console.log('ls status change trigger, new status: ' + status)
                    }
					

            }



            /*           page.onClientError = function(msg) {
                if (console) {
                    console.log(msg);
                }
            }

            page.onClientAlert = page.onClientError;*/

            page.bind();
            page.createEngine("SpotOption", "appProxy", "SHARE_SESSION", true);
            console.log('init lightstreamer');
        } // end if ( typeof General.lsPage === 'undefined' )

        return General.lsPage;
    },

    /**
     * Initializes a clock which starts its sync from the server's own clock.
     * Ticks every 100ms
     *
     */
    startClock: function ( ) {
        if (!$('#LStime #LShour').length) {
           
        	return;
        }
	
        var hoursDiv   = $('#LShour');
        var minutesDiv = $('#LSminute');
        var secondsDiv = $('#LSseconds');
        var dateLi     = $('#LSdate');

        var page = General.initLightstreamer();

        var timeTable   = new NonVisualTable(['time'], ['dateTime'], "MERGE");
        page.addTable(timeTable, "timeTable");
        /**
         *
         * item, itemUpdate, itemName) {

        if (itemUpdate.isValueChanged('rate')) {
            var rate = itemUpdate.getNewValue('rate');
            //alert(rate);
            var lastUpdated = itemUpdate.getNewValue('lastUpdated');

         */
        timeTable.onItemUpdate = function( item, itemUpdate, itemName ) {
             if (itemUpdate.isValueChanged('dateTime')) {
                var serverTime = new Number(itemUpdate.getNewValue('dateTime'));
             	
                General.dateTime = new Date(serverTime + AppData.timeZoneOffset);

				var hours = General.dateTime.getHours();
                var minutes =  General.dateTime.getMinutes();
                var seconds =  General.dateTime.getSeconds();
				
                if ( hours < 10) hours     = '0' + hours;
                if ( minutes < 10) minutes = '0' + minutes;
                if ( seconds < 10) seconds = '0' + seconds;


                hoursDiv.text( hours );
                minutesDiv.text ( minutes );
                secondsDiv.text ( seconds );

                General.timeString =  hours + ':' + minutes + ':' + seconds;
                
                var day = General.dateTime.getDate();
                var month = General.dateTime.getMonth() + 1;
                var year = new String(General.dateTime.getFullYear()).substring(2);

                if (day < 10) day     = '0' + day;
                if (month < 10) month = '0' + month;

				var date = AppData.daysLang[General.dateTime.getDay()] + ' ' +  day + '.' + month + '.' + year;
				
                if (dateLi.html() != date)  {
                      dateLi.html(date);
                }
                
                if ( typeof Graphs !== 'undefined' ) {
                    Graphs.onUpdateTime();
                }

               
                if( typeof window[AppData.pageId] === 'object' ) {    
                    window[AppData.pageId].onUpdateTime();
                } else if (AppData.pageId == 'home') {
                	if(typeof AppData.oneTouchCompact != 'undefined'){
                		OneTouch.onUpdateTime();//Reffers to one touch compact
                	}
                	else{
                     Home.onUpdateTime();
                	}
                }
               // console.log('after Home.onUpdateTime()');
            }
			
        } // end timeTable.onItemUpdate
    },
    

       redirect:function(page, langId , moreGetParams){
           if(typeof page == 'undefined' || page == '' || page == null)
               page = AppData.pageId;
           if(typeof langId == 'undefined' || langId == '' || langId == null)
               langId = AppData.langId;

              newLocation = location.protocol + '//' +location.hostname
               + AppData.url + page + '?lang=' + langId
               if(typeof moreGetParams != 'undefined'){
                   newLocation += '&' + moreGetParams;
               }
               window.location =  newLocation ;
       },
     getURLParam: function( name )
        {
          name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
          var regexS = "[\\?&]"+name+"=([^&#]*)";
          var regex = new RegExp( regexS );
          var results = regex.exec( window.location.href );
          if( results == null )
            return "";
          else
            return results[1];
        },

    // Checks a string to see if it in a valid date format
    // of (D)D/(M)M/(YY)YY and returns true/false
    isValidDate:function(s) {
        // format D(D)/M(M)/(YY)YY
        var dateFormat = /^\d{1,4}[\.|\/|-]\d{1,2}[\.|\/|-]\d{1,4}$/;

        if (dateFormat.test(s)) {
            // remove any leading zeros from date values
            s = s.replace(/0*(\d*)/gi,"$1");
            var dateArray = s.split(/[\.|\/|-]/);

            // correct month value
            dateArray[1] = dateArray[1]-1;

            // correct year value
            if (dateArray[2].length<4) {
                // correct year value
                dateArray[2] = (parseInt(dateArray[2]) < 50) ? 2000 + parseInt(dateArray[2]) : 1900 + parseInt(dateArray[2]);
            }

            var testDate = new Date(dateArray[2], dateArray[1], dateArray[0]);
            if (testDate.getDate()!=dateArray[0] || testDate.getMonth()!=dateArray[1] || testDate.getFullYear()!=dateArray[2]) {
                return false;
            } else {
                return true;
            }
        } else {
            return false;
        }
    },
        
      onClickLiveChat: function(event) {
       lpButtonCTTUrl = 'https://server.iad.liveperson.net/hc/37185907/?cmd=file&file=visitorWantsToChat&site=37185907&imageUrl=https://server.iad.liveperson.net/hcp/Gallery/ChatButton-Gallery/English/General/1a&referrer='+escape(document.location);
       lpButtonCTTUrl = (typeof(lpAppendVisitorCookies) != 'undefined' ? lpAppendVisitorCookies(lpButtonCTTUrl) : lpButtonCTTUrl);
       lpButtonCTTUrl = ((typeof(lpMTag)!='undefined' && typeof(lpMTag.addFirstPartyCookies)!='undefined')?lpMTag.addFirstPartyCookies(lpButtonCTTUrl):lpButtonCTTUrl);
       
       window.open(lpButtonCTTUrl,'LiveChat','width=475,height=400,resizable=yes');
       return false;
      
    }
}

$(document).ready(function() {
	General.init();
	
});

	/* define function for creating border around an element for debugging purposes */
		jQuery.fn.border =  function() {
			var that = $(this[0]) // It's your element

			that.css('border','1px solid red');
		}

