// JavaScript Document
IncludeJavaScript('http://widgets.optasportsdata.com/js/api_lib/jquery.timers-1.2.js');


IncludeJavaScript('http://widgets.optasportsdata.com/js/api_lib/jquery.tinysort.min.js');

<!-- include the flXHR file -->
//<script type="text/javascript" src="./flxHR/flXHR.js"></script>
IncludeJavaScript('http://widgets.optasportsdata.com/js/flxHR/flXHR.js');

<!-- include an xhr jquery plugin, used from the flXHR jquery plugin -->
//<script type="text/javascript" src="jquery.xhr.js"></script>
IncludeJavaScript('http://widgets.optasportsdata.com/js/flxHR/jquery.xhr.js');

<!-- include the flXHR jquery plugin -->
//<script type="text/javascript" src="./flxHR/jquery.flXHRproxy.js"></script>
IncludeJavaScript('http://widgets.optasportsdata.com/js/flxHR/jquery.flXHRproxy.js');


function IncludeJavaScript(jsFile)
{
  document.write('<script type="text/javascript" src="'
    + jsFile + '"></scr' + 'ipt>'); 
}


var widget_count =0;
var live_widget_count =0;
var widgets=[];
var live=[];

function OPTA() {
  this.customer_id = false;
  this.language = 'en';
  this.animation = 'opta';
  this.timezone  = 0;
  
  this.init = function(customer_id,animation,language,timezone) {
    var allowed_animations = new Array('opta','none','hide','fade_and_hide');
    
    this.customer_id = customer_id ;
    this.language = language ;
    if (timezone)
      this.timezone = timezone ;
    else
      this.timezone = 0;
    if (inArray(animation,allowed_animations)) {
      this.animation = animation ;
    }
    else{
      this.animation = 'none'
    }
     
    // set up the domain that we're going to call and tell flXHR not to try to parse the response as XML..
    //$.flXHRproxy.registerOptions("http://server.widgets.staging.opta.net/", {xmlResponseText:false});
    $.flXHRproxy.registerOptions("http://widgets.optasportsdata.com/", {xmlResponseText:false});
    
     
    // set flXHR as the default XHR object used in jQuery AJAX requests
    $.ajaxSetup({transport:'flXHRproxy'});
    
    this.widgetize(this.customer_id,this.animation,this.language,this.timezone)
  }
  
  this.authorize = function(customer_id,reciver) {
    //TODO
  }
  
  
  
  this.widgetize = function(customer_id,animation,language,timezone) {
    
    $('opta').each(function(){
        
      $(this).addClass('widget_'+$(this).attr('widget'));
      widgets[widget_count] = loadwidget(customer_id,animation,language,$(this),widget_count,timezone);

      if  ($(this).attr('live') ) {
        live[live_widget_count] =  widgets[widget_count];  
        
        live_widget_count++;
      }
      
      widget_count++; 
    });    
  }
  
  this.set_widget_timer = function (calling_widget,start_time,interval,times){ 
          $(calling_widget).oneTime(start_time, function() {
            $(this).everyTime(interval, function() {
              OPTA.reload_order_by(this,null);     
          },times);
        });
  }
  
  this.reload_order_by_client = function (calling_widget,order_by){
    //alert($('#opta_widget_1>ul>li>span.opta_default_jersey_number').attr('class'));
    
    if (calling_widget.attr('class')=='widget_TeamStats')
      base = $base = calling_widget.find('ul>li');
    else
      $base = calling_widget.parent().parent().parent().parent().find('ul>li');
    var column = '';
    var direction = "desc";
    var use_attributes = false;
  
    if (order_by=='jersey_num') { column = 'opta_default_jersey_num';
      direction = "asc";
    }
    if (order_by=='player') { column = 'opta_default_player_name';
      direction = "asc";
    }
    if (order_by=='position') { column = 'opta_default_position';
      direction = "asc";
      use_attributes = true;
    }
    if (order_by=='appearances') column = 'opta_default_appearances';
    if (order_by=='minutes') column = 'opta_default_time_played';
    if (order_by=='goals') column = 'opta_default_goals';
    if (order_by=='mins_per_goal') column = 'opta_default_mins_per_goal';
    if (order_by=='total_shots') column = 'opta_default_total_shots';
    if (order_by=='shooting_accuracy'){
       column = 'opta_default_shooting_accuracy';
       use_attributes = true;
    }
    if (order_by=='conversion') { 
      column = 'opta_default_conversion';
      use_attributes = true;
    }
    if (order_by=='goal_assists') column = 'opta_default_goal_assists';
    if (order_by=='key_passes_attempt_assists') column = 'opta_default_key_passes_attempt_assists';
    if (order_by=='assists') column = 'opta_default_assists';
    if (order_by=='pass_completion') { 
      column = 'opta_default_pass_completion'; 
      use_attributes = true;
    }
    if (order_by=='cross_completion') { 
      column = 'opta_default_cross_completion';
      use_attributes = true;
    }
    if (order_by=='duels') column = 'opta_default_duels';
    if (order_by=='duels_precent') {
      column = 'opta_default_duels_precent';
      use_attributes = true;
    }
    if (order_by=='total_fouls_won') column = 'opta_default_total_fouls_won';
    if (order_by=='total_fouls_conceded') column = 'opta_default_total_fouls_conceded';
    if (order_by=='offsides') column = 'opta_default_offsides';
    if (order_by=='yellow_cards') column = 'opta_default_yellow_cards';
    if (order_by=='total_red_cards') column = 'opta_default_total_red_cards';
    
    if (use_attributes)
      $base.tsort('span.'+column+'.value',{attr:"sort",place:"first",order:direction});
    else
      $base.tsort('span.'+column+'.value',{place:"first",order:direction});
    calling_widget.parent().parent().parent().parent().find('ul>li>span').removeClass('active');
    calling_widget.parent().parent().parent().parent().find('ul>li>span.'+column).addClass('active');
    calling_widget.parent().parent().parent().parent().find('ul>li').removeClass('odd').removeClass('even');
    calling_widget.parent().parent().parent().parent().find('ul>li:even').addClass('odd') ;
    calling_widget.parent().parent().parent().parent().find('ul>li:odd').addClass('even');
    calling_widget.parent().parent().parent().parent().find('ul>li:first').removeClass('odd');
  }
  
  this.reload_order_by = function (calling_widget,order_by){
    for (i=0;i<widget_count;i=i+1) {
       if (widgets[i][0] == $(calling_widget).attr("id")){
          var widget = [];
          widget[0] = widgets[i][0] ; 
          widget[1] = widgets[i][1] ; 
          if (!order_by && widget[3]) { order_by = widget[3] }
          widget[2] = widgets[i][2] + '&reload_order_by=' + order_by;
          widget[3] = order_by;  
          this.reload (widget);
       }
    }
  }
  
  this.reload_team_compare = function (calling_widget,new_key,new_value){
    //widgets[][5] team_p1
    //widgets[][6] team_p2
    //widgets[][7] season_p1
    //widgets[][8] season_p2
    //widgets[][9] player_p1
    //widgets[][10] player_p2
    for (i=0;i<widget_count;i=i+1) {
       
       if (widgets[i][0] == $(calling_widget).attr("id")){
          var widget = [];
          widget[0] = widgets[i][0] ; 
          widget[1] = widgets[i][1] ; 
          old_params = '';
          
         
          
          if (new_key!='team_p1' && widgets[i][5]) { old_params +='&team_p1=' + widgets[i][5] }
          if (new_key!='team_p2' && widgets[i][6]) { old_params +='&team_p2=' + widgets[i][6] }
         
          
          if (new_key!='season_p1' && widgets[i][7]) { old_params +='&season_p1=' + widgets[i][7] }
          if (new_key!='season_p2' && widgets[i][8]) { old_params +='&season_p2=' + widgets[i][8] }
          
          widget[2] = widgets[i][2] + '&'+ new_key +'=' + new_value + old_params;
          
           
          
          if (new_key=='team_p1') 
            widgets[i][5] = new_value;
          
          if (new_key=='team_p2')  
            widgets[i][6] = new_value; 
            
          if (new_key=='season_p1') 
            widgets[i][7] = new_value;
          if (new_key=='season_p2')  
            widgets[i][8] = new_value;
          
            
          this.reload (widget);
       }
    }
  }
  
  this.reload_player_compare = function (calling_widget,new_key,new_value){
    //widgets[][5] team_p1
    //widgets[][6] team_p2
    //widgets[][7] season_p1
    //widgets[][8] season_p2
    //widgets[][9] player_p1
    //widgets[][10] player_p2
    for (i=0;i<widget_count;i=i+1) {
       
       if (widgets[i][0] == $(calling_widget).attr("id")){
          var widget = [];
          widget[0] = widgets[i][0] ; 
          widget[1] = widgets[i][1] ; 
          old_params = '';
          
          //prepare
          if (new_key!='team_p1' && widgets[i][5]) { old_params +='&team_p1=' + widgets[i][5] }
          if (new_key!='team_p2' && widgets[i][6]) { old_params +='&team_p2=' + widgets[i][6] }
          if (new_key!='season_p1' && widgets[i][7]) { old_params +='&season_p1=' + widgets[i][7] }
          if (new_key!='season_p2' && widgets[i][8]) { old_params +='&season_p2=' + widgets[i][8] }
          if (new_key!='player_p1' && widgets[i][9]) { old_params +='&player_p1=' + widgets[i][9] }
          if (new_key!='player_p2' && widgets[i][10]) { old_params +='&player_p2=' + widgets[i][10] }
          //execute
          widget[2] = widgets[i][2] + '&'+ new_key +'=' + new_value + old_params;
          
          
          //save
          if (new_key=='team_p1') 
            widgets[i][5] = new_value;
          if (new_key=='team_p2')  
            widgets[i][6] = new_value; 
          if (new_key=='season_p1') 
            widgets[i][7] = new_value;
          if (new_key=='season_p2')  
            widgets[i][8] = new_value;
          if (new_key=='player_p1') 
            widgets[i][9] = new_value;
          if (new_key=='player_p2')  
            widgets[i][10] = new_value;
            
          this.reload (widget);
       }
    }
  }
  
  this.reload = function(widget_data){
    var base_url = 'http://widgets.optasportsdata.com/?widget=';
    var callURL = base_url+widget_data[1]+widget_data[2];
    $('#'+widget_data[0]).load(callURL, function() {
      if(typeof window.beforeShowWidget == 'function') {
        //TODO fix it!
        // function exists, so we can now call it
        beforeShowWidget(this);
      }
    });
  }
  
} 

function loadwidget(customer_id,animation,language,widget,counter,timezone) {    
    var base_url = 'http://widgets.optasportsdata.com/?widget=';
    var params = '';
    params = params + '&language='+language;
    params = params + '&customer_id='+customer_id;
    params = params + '&timezone='+timezone;
    /******************* Fixtures ************************/ 
    if  (widget.attr('widget') == 'Fixtures') {
      if (widget.attr('season')){
        params = params + '&season='+widget.attr('season');
      }
      if (widget.attr('competition')){
        params = params + '&competition='+widget.attr('competition');
      }
      if (widget.attr('venue')){
        params = params + '&venue='+widget.attr('venue');
      }
      if (widget.attr('team')){
        params = params + '&team='+widget.attr('team');
      }
      if (widget.attr('team_type')){
        params = params + '&team_type='+widget.attr('team_type');
      }
      if (widget.attr('date_from')){
        params = params + '&date_from='+widget.attr('date_from');
      }
      if (widget.attr('date_to')){
        params = params + '&date_to='+widget.attr('date_to');
      }
      if (widget.attr('match_day')){
        params = params + '&match_day='+widget.attr('match_day');
      }
      if (widget.attr('status')){
        params = params + '&status='+widget.attr('status');
      }
      if (widget.attr('match')){
        params = params + '&match='+widget.attr('match');
      }
      if (widget.attr('group_name')){
        params = params + '&group_name='+widget.attr('group_name');
      }
      if (widget.attr('game_round')){
        params = params + '&game_round='+widget.attr('game_round');
      }
      if (widget.attr('show_venue')){
        params = params + '&show_venue='+widget.attr('show_venue');
      }
      if (widget.attr('show_time')){
        params = params + '&show_time='+widget.attr('show_time');
      }
      if (widget.attr('show_crest')){
        params = params + '&show_crest='+widget.attr('show_crest');
      }
      if (widget.attr('show_group')){
        params = params + '&show_group='+widget.attr('show_group');
      }
      if (widget.attr('show_attendance')){
        params = params + '&show_attendance='+widget.attr('show_attendance');
      }
      if (widget.attr('show_scorers')){
        params = params + '&show_scorers='+widget.attr('show_scorers');
      }
      if (widget.attr('show_referee')){
        params = params + '&show_referee='+widget.attr('show_referee');
      }
      if (widget.attr('show_cards')){
        params = params + '&show_cards='+widget.attr('show_cards');
      }
      if (widget.attr('show_subs')){
        params = params + '&show_subs='+widget.attr('show_subs');
      }
      if (widget.attr('show_indicator')){
        params = params + '&show_indicator='+widget.attr('show_indicator');
      }
      if (widget.attr('callback_details')){
        params = params + '&callback_details='+widget.attr('callback_details');
      }
      if (widget.attr('callback_team')){
        params = params + '&callback_team='+widget.attr('callback_team');
      }
      if (widget.attr('callback_score')){
        params = params + '&callback_score='+widget.attr('callback_score');
      }
      if (widget.attr('callback_player')){
        params = params + '&callback_player='+widget.attr('callback_player');
      }
      if (widget.attr('callback_venue')){
        params = params + '&callback_venue='+widget.attr('callback_venue');
      }
      if (widget.attr('callback_fixture')){
        params = params + '&callback_fixture='+widget.attr('callback_fixture');
      }  
      if (widget.attr('date_format')){
        params = params + '&date_format='+escape(widget.attr('date_format'));
      }
      if (widget.attr('group_by_date')){
        params = params + '&group_by_date='+escape(widget.attr('group_by_date'));
      }
      if (widget.attr('order_by')){
        params = params + '&order_by='+widget.attr('order_by');
      }
    /******************* Standings ************************/ 
    }else if(widget.attr('widget') == 'Standings') {
      if (widget.attr('season')){
        params = params + '&season='+widget.attr('season');
      }
      if (widget.attr('competition')){
        params = params + '&competition='+widget.attr('competition');
      }
      if (widget.attr('group')){
        params = params + '&group='+widget.attr('group');
      }
      if (widget.attr('type')){
        params = params + '&type='+widget.attr('type');
      }
      if (widget.attr('show_layout')){
        params = params + '&show_layout='+widget.attr('show_layout');
      }
      if (widget.attr('order_by')){
        params = params + '&order_by='+widget.attr('order_by');
      }
      if (widget.attr('callback_team')){
        params = params + '&callback_team='+widget.attr('callback_team');
      }/******************* TeamStats ************************/ 
    }else if(widget.attr('widget') == 'TeamStats') {
      if (widget.attr('sub')){
        params = params + '&sub='+widget.attr('sub');
      }
      if (widget.attr('season')){
        params = params + '&season='+widget.attr('season');
      }
      if (widget.attr('competition')){
        params = params + '&competition='+widget.attr('competition');
      }
      if (widget.attr('team')){
        params = params + '&team='+widget.attr('team');
      }
      if (widget.attr('callback_player')){
        params = params + '&callback_player='+widget.attr('callback_player');
      }
      if (widget.attr('order_by')){
        params = params + '&order_by='+widget.attr('order_by');
      }/******************* Venues ************************/  
    } else if(widget.attr('widget') == 'Venues') {
      if (widget.attr('season')){
        params = params + '&season='+widget.attr('season');
      }
      if (widget.attr('competition')){
        params = params + '&competition='+widget.attr('competition');
      }
      if (widget.attr('venue')){
        params = params + '&venue='+widget.attr('venue');
      }
      if (widget.attr('show_image')){
        params = params + '&show_image='+widget.attr('show_image');
      }/******************* PlayerProfile ************************/ 
    } else if(widget.attr('widget') == 'PlayerProfile') {
      if (widget.attr('player')){
        params = params + '&player='+widget.attr('player');
      }
      if (widget.attr('season')){
        params = params + '&season='+widget.attr('season');
      }
      if (widget.attr('team')){
        params = params + '&team='+widget.attr('team');
      }
      if (widget.attr('competition')){
        params = params + '&competition='+widget.attr('competition');
      }
       if (widget.attr('show_image')){
        params = params + '&show_image='+widget.attr('show_image');
      }
      if (widget.attr('show_bio')){
        params = params + '&show_bio='+widget.attr('show_bio');
      }
      if (widget.attr('show_nationality')){
        params = params + '&show_nationality='+widget.attr('show_nationality');
      }   
      if (widget.attr('callback_current_club')){
        params = params + '&callback_current_club='+widget.attr('callback_current_club');
      }/******************* Squads ************************/  
    } else if(widget.attr('widget') == 'Squads') {
      if (widget.attr('season')){
        params = params + '&season='+widget.attr('season');
      }
      if (widget.attr('competition')){
        params = params + '&competition='+widget.attr('competition');
      }
      if (widget.attr('team')){
        params = params + '&team='+widget.attr('team');
      }
      if (widget.attr('order_by')){
        params = params + '&order_by='+widget.attr('order_by');
      }
      if (widget.attr('group_by_position')){
        params = params + '&group_by_position='+widget.attr('group_by_position');
      }
      if (widget.attr('show_position')){
        params = params + '&show_position='+widget.attr('show_position');
      }
      if (widget.attr('show_numbers')){
        params = params + '&show_numbers='+widget.attr('show_numbers');
      }
      if (widget.attr('nationality')){
        params = params + '&nationality='+widget.attr('nationality');
      }
      if (widget.attr('show_nationality')){
        params = params + '&show_nationality='+widget.attr('show_nationality');
      }
      if (widget.attr('callback_player')){
        params = params + '&callback_player='+widget.attr('callback_player');
      }/******************* TeamProfile ************************/ 
     }else if(widget.attr('widget') == 'TeamProfile') {
      if (widget.attr('season')){
        params = params + '&season='+widget.attr('season');
      }
      if (widget.attr('competition')){
        params = params + '&competition='+widget.attr('competition');
      }
      if (widget.attr('team')){
        params = params + '&team='+widget.attr('team');
      }
      if (widget.attr('show_image')){
        params = params + '&show_image='+widget.attr('show_image');
      }
      if (widget.attr('show_bio')){
        params = params + '&show_bio='+widget.attr('show_bio');
      }/******************* TeamCompare ************************/ 
    }else if(widget.attr('widget') == 'TeamCompare') {
      if (widget.attr('sub')){
        params = params + '&sub='+widget.attr('sub');
      }
      if (widget.attr('season')){
        params = params + '&season='+widget.attr('season');
      }
      if (widget.attr('competition')){
        params = params + '&competition='+widget.attr('competition');
      }
      if (widget.attr('match')){
        params = params + '&match='+widget.attr('match');
      }
      if (widget.attr('season_p1')){
        params = params + '&season_p1='+widget.attr('season_p1');
      }
      if (widget.attr('season_p2')){
        params = params + '&season_p2='+widget.attr('season_p2');
      }
      if (widget.attr('competition_p1')){
        params = params + '&competition_p1='+widget.attr('competition_p1');
      }
      if (widget.attr('competition_p2')){
        params = params + '&competition_p2='+widget.attr('competition_p2');
      }
      if (widget.attr('team_p1')){
        params = params + '&team_p1='+widget.attr('team_p1');
      }
      if (widget.attr('team_p2')){
        params = params + '&team_p2='+widget.attr('team_p2');
      }
      if (widget.attr('dropdown')){
        params = params + '&dropdown='+widget.attr('dropdown');
      }/******************* PlayerCompare ************************/ 
    }else if(widget.attr('widget') == 'PlayerCompare') {
      if (widget.attr('sub')){
        params = params + '&sub='+widget.attr('sub');
      }
      if (widget.attr('season')){
        params = params + '&season='+widget.attr('season');
      }
      if (widget.attr('competition')){
        params = params + '&competition='+widget.attr('competition');
      }
      if (widget.attr('season_p1')){
        params = params + '&season_p1='+widget.attr('season_p1');
      }
      if (widget.attr('season_p2')){
        params = params + '&season_p2='+widget.attr('season_p2');
      }
      if (widget.attr('competition_p1')){
        params = params + '&competition_p1='+widget.attr('competition_p1');
      }
      if (widget.attr('competition_p2')){
        params = params + '&competition_p2='+widget.attr('competition_p2');
      }
      if (widget.attr('team_p1')){
        params = params + '&team_p1='+widget.attr('team_p1');
      }
      if (widget.attr('team_p2')){
        params = params + '&team_p2='+widget.attr('team_p2');
      }
      if (widget.attr('player_p1')){
        params = params + '&player_p1='+widget.attr('player_p1');
      }
      if (widget.attr('player_p2')){
        params = params + '&player_p2='+widget.attr('player_p2');
      }
      if (widget.attr('match')){
        params = params + '&match='+widget.attr('match');
      }
      if (widget.attr('dropdown')){
        params = params + '&dropdown='+widget.attr('dropdown');
      }/******************* PlayerStats ************************/ 
     }else if(widget.attr('widget') == 'PlayerStats') {
      if (widget.attr('season')){
        params = params + '&season='+widget.attr('season');
      }
      if (widget.attr('competition')){
        params = params + '&competition='+widget.attr('competition');
      }
      if (widget.attr('player')){
        params = params + '&player='+widget.attr('player');
      }/******************* PlayerRanking ************************/ 
     }else if(widget.attr('widget') == 'PlayerRanking') {
      if (widget.attr('season')){
        params = params + '&season='+widget.attr('season');
      }
      if (widget.attr('competition')){
        params = params + '&competition='+widget.attr('competition');
      }
      if (widget.attr('display')){
        params = params + '&display='+widget.attr('display');
      }
      if (widget.attr('show_image')){
        params = params + '&show_image='+widget.attr('show_image');
      }
      if (widget.attr('callback_player')){
        params = params + '&callback_player='+widget.attr('callback_player');
      }
      if (widget.attr('callback_team')){
        params = params + '&callback_team='+widget.attr('callback_team');
      }
    }
    /******************* General ************************/
     if (widget.attr('live')){
        params = params + '&live='+widget.attr('live');
     }
    
     var callURL = base_url+widget.attr('widget')+params;
    
    $('<div class="'+widget.attr("class")+'" id="widget_id_'+counter+'"></div>"').insertAfter(widget);
    
    var widget_id = 'opta_widget_'+counter;
    
    $('<div class="opta_loading"><div>Loading</div><img src="http://widgets.optasportsdata.com/images/loading9.gif" /></div>').insertAfter('#widget_id_'+counter).show() ;
    
    if (widget.attr('animation')){
         animation = widget.attr('animation') ;
      }
    
    if (animation == 'opta' || animation == 'hide')
      $('#widget_id_'+counter).hide();
    
    
    
    $('#widget_id_'+counter).load(callURL, function() {
      
      if(typeof window.beforeShowWidget == 'function') {
        // function exists, so we can now call it
        beforeShowWidget(this);
      } 
      
      //Team Stats after load reorder
      if(widget.attr('widget') == 'TeamStats') {
        if (widget.attr('order_by')){
          $widget_to_order = $(this) ;
          OPTA.reload_order_by_client($widget_to_order,widget.attr('order_by'));
        }
      }
      
      if (animation == '' || animation == 'none') {
         $(this).next('div').hide();
         $(this).show();
      }
      
      if (animation == 'opta'){
        $(this).next('div').fadeOut(1000, function () { 
          $(this).prev().show(2000);
        } );
      }
      
      if (animation == 'hide'){
         $(this).next('div').hide();
      }
      
      if (animation == 'fade_and_hide'){
          $(this).next('div').fadeOut(1000, function () { 
            $(this).next('div').hide();
          } );
      }
      
      if(typeof window.afterShowWidget == 'function') {
        // function exists, so we can now call it
        afterShowWidget(this);
      }
      
      
      
      if  ($(this).children('#next_call_time').attr("start_time") ) {
        var start_time = $(this).children('#next_call_time').attr("start_time");
        var times = $(this).children('#next_call_time').attr("times");
        var interval = $(this).children('#next_call_time').attr("interval");
        
        //alert('start_time'+start_time+' times'+times+' interval'+interval);
        OPTA.set_widget_timer(this,start_time,interval, parseInt(times)  );
      }
    });
    
    if(widget.attr("id")) 
      widget_id = widget.attr("id"); 
    
    
    
    $('#widget_id_'+counter).attr('id',widget_id);
    widget.remove() ;
    
    var save_widget = new Array();
    save_widget[0] = widget_id;
    save_widget[1] = widget.attr('widget');
    save_widget[2] = params; 
    
    return save_widget ;
    
  }
  

  

var OPTA = new OPTA(); 


//Functions

function inArray(needle, haystack) {
    var length = haystack.length;
    for(var i = 0; i < length; i++) {
        if(haystack[i] == needle) return true;
    }
    return false;
}
