//
//  javascriptUtil.js
//  OnstreamQuickSearch
//
//  Created by John Fox on 8/16/05.
//  Copyright 2005 __MyCompanyName__. All rights reserved.
//

/*
 String Prototypes: We'd like the Javascript String class to more closely resemble NSString...
 */

String.prototype.doubleQuotedString = function() { return  ('\"' +this +'\"') };

String.prototype.pathComponents = function()
{
    return this.split(pathSeparator());
};

String.prototype.lastPathComponent = function()
{
    var myArray = this.split(pathSeparator());
    
    return myArray.splice((myArray.length -1), 1);
};

function pathSeparator()
{
    var mySeparator = "/";
    
    if (system.platform == "windows")
    {
        //        mySeparator = "\\"
    }
    
    return mySeparator;
}

String.prototype.stringByDeletingLastPathComponent = function()
{
    var myArray = this.pathComponents();
    var myString;
    
    // Remove last object in the array, then join it
    myArray.splice((myArray.length -1), 1);
    myString = myArray.join(pathSeparator());
    
    return myString;
};

String.prototype.xmlSafeString = function()
{
    var myOuputString = this ;

    // Convert &
    myOuputString = this.split('&').join('&amp;');

    // Convert > and <
    myOuputString = myOuputString.split('>').join('&gt;').split('<').join('&lt;');

    // Convert double quotes
    myOuputString = myOuputString.split('\"').join('&quot;');
        
    // Convert single quotes
    myOuputString = myOuputString.split("'").join('&apos;');

    return myOuputString;
}

String.prototype.entityReference = function()
{
	var string2 = "";
	for (var i = 0; i < this.length; i++)
	{
		string2 = string2 + "&#" + this.charCodeAt(i) + ";";
	}
	return string2;
}

Array.prototype.indexOf = function(val)
{
	for (var i=0; i<this.length; i++)
		if (this[i] == val)
			return i;
                return -1;
}

Array.prototype.remove = function(val)
{
	var id = this.indexOf(val)
	if (id<0)
		return false;
    this.splice(id, 1);
	return true;
}

/*
 Array.prototype.addObjectsFromArray = function(anArray)
 {
     for (var i = 0; i < anArray.length; i ++)
     {
         this[this.length] = anArray[i];
     }
 };
 
 */

 
Array.prototype.containsObject = function(anObject)
{
	 var foundObject = false;
	 
	 for (var i = 0; i < this.length; i ++)
	 {
		 if (this[i] == anObject)
		 {
			 foundObject = true;
			 
			 break;
		 }
	 }
	 
	 return foundObject;
}
 
function MMHash()
{
    this.length = 0;
    
    this.values = new Array();
    this.keys = new Array();

    for (var i = 0; i < arguments.length; i += 2) 
    {
        if (typeof(arguments[i + 1]) != 'undefined') 
        {
            this.values[arguments[i]] = arguments[i + 1];
            
            this.keys.ak(arguments[i]);
            
            this.length++;
        }
    }
    
	this.removeItem = function(in_key)
    {
		var tmp_value;
		if (typeof(this.values[in_key]) != 'undefined') {
			this.length--;
			var tmp_value = this.values[in_key];
			delete this.values[in_key];
            
			this.keys.rk(in_key);
		}
        
		return tmp_value;
    }
    
	this.getItem = function(in_key)
	{
		return this.values[in_key];
	}
    
    this.setItem = function(in_key, in_value)
    {
		if (typeof(in_value) != 'undefined') {
			if (typeof(this.values[in_key]) == 'undefined') {
				this.length++;
			}
            
			this.values[in_key] = in_value;
			this.keys.ak(in_key);
		}
        
		return in_value;
    }
    
    this.getItemAt = function(id)
    {
        return this.getItem(this.getKeyAt(id))
    }
    
    this.getKeyAt = function(id)
    {
        return this.keys[id]
    }
    
    this.hasItem = function(in_key)
    {
        return typeof(this.values[in_key]) != 'undefined';
    }
    
    this.indexOf = function(in_key)
    {
        for (var i=0; i<this.keys.length; i++)
            if (this.keys[i] == in_key)
                return i;
        return -1;
    }
    
    // do not invoke from the outside world!
    this.keys.ak = function(key)
    {
        if (this.indexOf(key)<0)
            this[this.length] = key;
    }
    
    // do not invoke from the outside world!
    this.keys.rk = function(key)
    {
        for (var i=0; i<this.length; i++)
            if (this[i]== key){
                this.splice(i, 1);
                this.rk(key); // do another pass in case mor than one - just security
                return;
            }
    }
}

// Return a string representation of the current time using the form HH:MM:SS
function timeStamp()
{
    var myNowDate = new Date();
    var myHoursString = myNowDate.getHours().toString();
    var myMinutesString = myNowDate.getMinutes().toString();
    var mySecondsString = myNowDate.getSeconds().toString();
    var myTimeStamp;
    
    if (myHoursString.length == 1)
    {
        myHoursString = +'0' +myHoursString;
    }
    
    if (myMinutesString.length == 1)
    {
        myMinutesString = +'0' +myMinutesString;
    }
    
    if (mySecondsString.length == 1)
    {
        mySecondsString = +'0' +mySecondsString;
    }
    
    myTimeStamp = +myHoursString +':' +myMinutesString +':' +mySecondsString;
    
    return myTimeStamp;
}

// Return a string representation of the current time using the form MM-DD-YYYY-HHMMSS
function dateTimeStamp()
{
    var myNowDate = new Date();
    var myDateStamp = myNowDate.getMonth() +'-' +myNowDate.getDate() +'-' +myNowDate.getFullYear() +'-' +myNowDate.getHours() +myNowDate.getMinutes() +myNowDate.getSeconds();
    
    return myDateStamp;
}

Date.prototype.monthDayYearStringWithSeparator = function(aSepString)
{
    if (aSepString == null)
    {
        aSepString = "/";
    }
        
    var myDateString = (this.getMonth() + 1) +aSepString +this.getDate() +aSepString +this.getFullYear();
    
    return myDateString;
}

Date.prototype.hoursMinutesStringWithSeparator = function(aSepString)
{
    var amPMDesignator = "AM";
    var myHours = this.getHours();
    var myMinutes = this.getMinutes();
    
    if (aSepString == null)
    {
        aSepString = ":";
    }
    
    if (myHours >= 12)
    {
        amPMDesignator = "PM";
    }
    
    if (myHours == 0)
    {
        myHours = 12;
    }
        
    if (myHours > 12)
    {
        myHours = myHours - 12;
    }

    if (myMinutes < 10)
    {        
        myMinutes = new String('0' +myMinutes);
    }
    
    var myTimeString = myHours +aSepString +myMinutes +' ' +amPMDesignator;
    
    return myTimeString;
}

function getCookie (name)
{
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen) {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg)
            return getCookieVal (j);
        i = document.cookie.indexOf(" ", i) + 1;
        if (i == 0) break;
    }
    return null;
}

function setCookie (name,value,expires,path,domain,secure) {
    document.cookie = name + "=" + escape (value) +
	((expires) ? "; expires=" + expires.toGMTString() : "") +
	((path) ? "; path=" + path : "") +
	((domain) ? "; domain=" + domain : "") +
	((secure) ? "; secure" : "");
}

function DeleteCookie (name,path,domain) {
    if (getCookie(name)) {
        document.cookie = name + "=" +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}

function getCookieVal (offset)
{
    var endstr = document.cookie.indexOf (";", offset);
    if (endstr == -1)
        endstr = document.cookie.length;
    return unescape(document.cookie.substring(offset, endstr));
}

function createDOMTreeFromRequest(aRequest)
{
    var myXMLData = aRequest.responseXML;

    if (isIE)
    {
        var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async="false";
        xmlDoc.loadXML(aRequest.responseText);

        myXMLData = xmlDoc;
    }

    return myXMLData;
}

function getBrowserLanguage()
{
	if (navigator.appVersion.indexOf("MSIE") >= 0)
		return navigator.browserLanguage.substring(0,2);
	else
		return navigator.language.substring(0,2);
}

