Hand.Meld = new Class({
	Extends: Hand,


	//options
	options: {
		trackPoints: 		false,
		settings:			new Hash(),
		pegPoints:			new Hash()
	},


	Cards: new Array(),
	Points: new Array(),
	
	suit: 		'CDHS',
	rank:		'A23456789TJQK',
	

	initialize: function(options) {
		this.setOptions(options);
		this.initArrays();
	},
	
	
	add: function(card) {
		this.Cards.push(card);
	},
	
	
    isSortRun: function(cards) {
    	var ret = cards.length;
    	
    	if (cards.length >= 3) {
	    	cards = this.sortCards(cards);
			
			for (var curCard=0; curCard<cards.length-1; curCard++) {
				try {
					if (cards[curCard].getRank()+1 != cards[curCard+1].getRank()) {
						ret = 0;
						break;
					}
				}
				catch(e) {
					ret = 0;
					break;
				}
			}
    	} else {
    		ret = 0;
    	}

		return ret;
    },
    
      
	countRuns: function() {
    	var runPoints = 0;
		var cnt = 3;
		var done = false;
		var pos = 0;
    	
		if (this.Cards.length < 3) {
			return 0;
		} else {
			for (cnt=3; cnt<this.Cards.length+1; cnt++) {
				var runCards = new Array();
				runCards.append(this.Cards.slice(this.Cards.length-cnt));
				
				if (this.isSortRun(runCards)) {
					runPoints = cnt;
				}
			}
		}
		
		return runPoints;
    },
    

    countFifteens: function(num) {
		var total=0;
		
		if (this.Cards.length >= 2) {
			for (var curCard=0; curCard<this.Cards.length; curCard++) {
				total += parseInt(this.Cards[curCard].getValue());
			}
			
			if (total == 15) {
				return 1;
			} else {
				return 0;
			}
		} else {
			return 0;
		}
    },


    countPairs: function() {
    	var cnt=0, x=0, pairs=0;
    	var cards=new Array();

		var len = this.Cards.length;
		
		if (this.Cards.length >= 8) {
			if (this.Cards[len-1].getRank() == this.Cards[len-2].getRank() &&
					this.Cards[len-2].getRank() == this.Cards[len-3].getRank() &&
					this.Cards[len-3].getRank() == this.Cards[len-4].getRank() &&
					this.Cards[len-4].getRank() == this.Cards[len-5].getRank() &&
					this.Cards[len-5].getRank() == this.Cards[len-6].getRank() &&
					this.Cards[len-6].getRank() == this.Cards[len-7].getRank() &&
					this.Cards[len-7].getRank() == this.Cards[len-8].getRank()
			)	return 28;
		}
		
		if (this.Cards.length >= 7) {
			if (this.Cards[len-1].getRank() == this.Cards[len-2].getRank() &&
					this.Cards[len-2].getRank() == this.Cards[len-3].getRank() &&
					this.Cards[len-3].getRank() == this.Cards[len-4].getRank() &&
					this.Cards[len-4].getRank() == this.Cards[len-5].getRank() &&
					this.Cards[len-5].getRank() == this.Cards[len-6].getRank() &&
					this.Cards[len-6].getRank() == this.Cards[len-7].getRank()
			)	return 21;
		}
		
		if (this.Cards.length >= 6) {
			if (this.Cards[len-1].getRank() == this.Cards[len-2].getRank() &&
				this.Cards[len-2].getRank() == this.Cards[len-3].getRank() &&
				this.Cards[len-3].getRank() == this.Cards[len-4].getRank() &&
				this.Cards[len-4].getRank() == this.Cards[len-5].getRank() &&
				this.Cards[len-5].getRank() == this.Cards[len-6].getRank()
			)	return 15;
		}

		if (this.Cards.length >= 5) {
			if (this.Cards[len-1].getRank() == this.Cards[len-2].getRank() &&
				this.Cards[len-2].getRank() == this.Cards[len-3].getRank() &&
				this.Cards[len-3].getRank() == this.Cards[len-4].getRank() &&
				this.Cards[len-4].getRank() == this.Cards[len-5].getRank()
			)	return 10;
		}

		if (this.Cards.length >= 4) {
			if (this.Cards[len-1].getRank() == this.Cards[len-2].getRank() &&
				this.Cards[len-2].getRank() == this.Cards[len-3].getRank() &&
				this.Cards[len-3].getRank() == this.Cards[len-4].getRank()
			)	return 6;
		}

		if (this.Cards.length >= 3) {
			if (this.Cards[len-1].getRank() == this.Cards[len-2].getRank() &&
				this.Cards[len-2].getRank() == this.Cards[len-3].getRank()
			)	return 3;
		}
		
		if (this.Cards.length >= 2) {
			if (this.Cards[len-1].getRank() == this.Cards[len-2].getRank()
			)	return 1;
		}
		
		return 0;
    },


    countFlushPairs: function() {
        var pairs = this.countPairs();
        var flush = this.countFlush(2);
        var cnt = 0;
        
        if (pairs==1 && flush>=2) {
            cnt = pairs;
        }
        
        return cnt;
    },


    countFlush: function(minLen) {
		var points = 0;
		var suit = this.Cards[this.Cards.length-1].getSuit();
		var cnt = 0;

        if (minLen == undefined) {
            minLen = 3;
        }
        
		if (this.options.settings.get('theplayflush')==true && this.Cards.length >= minLen) {
			for (var c = this.Cards.length-1; c>=0; c--) {
				if (this.Cards[c].getSuit() == suit) {
					cnt++;
				} else {
					break;
				}
			}
		}
		
		if (cnt < minLen) {
			cnt = 0;
		}
		
    	return cnt;
    },


    countDifferentSuits: function() {
    	var ret = 0;
    	
        if (this.Cards.length >= 4) {
	        var handCards = this.getLastCards(4);
	        var suits = new Hash({
	            Clubs:      false,
	            Diamonds:   false,
	            Hearts:     false,
	            Spades:     false
	        });
	        var ret = 4;
	        
	        if (handCards.length==4) {
	            for (var x=0; x<handCards.length; x++) {
	                suits.set(handCards[x].getSuitName(), true);
	            }
	        }
	        
	        if (suits.hasValue(false)) {
	            ret = 0;
	        }
        }

		return ret;
    },
    

    countHisNobs: function() {
		return 0;
    },


    countThirtyOne: function() {
		var cards = new Array();
		var total = 0;
		var points = 0;
			
        this.Cards.each(function(card) {
        	total += parseInt(card.getValue());
        	cards.push(card);
        });
        
		if (total == 31) {
			points = 2;
		}		

        return points;
    }


});


