/*
 * Text is the localized language pack, which is provided based on the viewers language settings
 */
var Text = {
    Error: {
        InvalidArray: 'You must supply a valid array',
        NoMatch: 'No items matched the criteria'
    }
};

/*
 * Array.remove rips out the first occurance of the given value from an array
 * @param s the string or number to remove
 */
Array.prototype.remove = function(s){
    var i = this.indexOf(s);
    if(i != -1) this.splice(i, 1);
};

// add array.indexOf to IE
if(!Array.indexOf){
	Array.prototype.indexOf = function(obj){
		for(var i=0; i<this.length; i++){
			if(this[i]==obj){
				return i;
			}
		}
		return -1;
	}
}

// used for array.sort to handle the problem of numbers sorting by 10,2,310,41 instead of 2,10,41,310
function sortNumber(a,b)
{
	return a - b;
}

/*
 * findOdd sifts through an intArray and returns any values that are found
 * to repeat an odd number of times
 *
 * @param {array} intArr is the array of integers
 * @return {object} {
        success: {bool} // true if at least one odd occurance is found, if false, 'error' will have a message
        items: {array}  // a list of valid odd occuring values as strings (to prevent massive array indexing)
        error: {string} // if an error occurs, it will be reported here
 * }
 */
var findOdd = function(intArr) { // unsorted
    // setup the default return object
    // TODO: this should be cloned from a default, defined in a master class or property
		
    var output = {
        success: false,
        items: [],
        error: ''
    };

    if(!intArr || !intArr.length) { // function is called without a value or supplied array is empty
        output.error = Text.Error.InvalidArray;
        return output;
    }

    // loop through the given array and build the item list
    for(var i=0; i < intArr.length; i++) {
        if(output.items.indexOf(intArr[i])!=-1)
            output.items.remove(intArr[i]);    // remove it (happens every even occurance)
        else                                // not yet defined
            output.items.push(intArr[i]);      // add it (happens every odd occurance)
    }
	output.items.sort(sortNumber); // sort ASC numeric
    // see if we found at least one item to return
    if(output.items.length)
        output.success = true;
    else
        output.error = Text.Error.NoMatch

    return output;
};