/* Rich Media JavaScript: 
Browser Related Routines

VS - 11.24.09
Edited:

06.16.10 - added parseString(theString);
06.16.10 - added isPalm, isiPhone, isiPad, isAndroid vars;
12.01.10 - added isBlackBerry var...


*/

var  isiPad = navigator.userAgent.match(/iPad/i)  != null;
var  isiPhone = navigator.userAgent.match(/iPhone/i)  != null;
var  isAndroid = navigator.userAgent.match(/Android/i)  != null;
var  isPalm = navigator.userAgent.match(/webOS/i)  != null;
var  isBlackBerry = navigator.userAgent.match(/BlackBerry/i)  != null;



function browserWindowSize() {
    //gets browserWindowSize for all IEs and FFs.
    
    //browserWindowSize()[0] = width
    //browserWindowSize()[1] = height
    var myWidth = 0, myHeight = 0;
    if( typeof( window.innerWidth ) == 'number' ) {
        //Non-IE
        myWidth = window.innerWidth;
        myHeight = window.innerHeight;
    } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
        //IE 6+ in 'standards compliant mode'
        myWidth = document.documentElement.clientWidth;
        myHeight = document.documentElement.clientHeight;
    } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
        //IE 4 compatible
        myWidth = document.body.clientWidth;
        myHeight = document.body.clientHeight;
    }
    return [ myWidth, myHeight ];
}



//Detailed Browser Dectection. Runs when file is called
//Example data:
//BrowserDetect.browser = "Explorer"
//BrowserDetect.version = 6
//BrowserDetect.OS = "Windows"
var BrowserDetect = {
    init: function () {
        this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
        this.version = this.searchVersion(navigator.userAgent)
            || this.searchVersion(navigator.appVersion)
            || "an unknown version";
        this.OS = this.searchString(this.dataOS) || "an unknown OS";
    },
    searchString: function (data) {
        for (var i=0;i<data.length;i++) {
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            this.versionSearchString = data[i].versionSearch || data[i].identity;
            if (dataString) {
                if (dataString.indexOf(data[i].subString) != -1)
                    return data[i].identity;
            }
            else if (dataProp)
                return data[i].identity;
        }
    },
    searchVersion: function (dataString) {
        var index = dataString.indexOf(this.versionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
    },
    dataBrowser: [
        {
            string: navigator.userAgent,
            subString: "Chrome",
            identity: "Chrome"
        },
        {   string: navigator.userAgent,
            subString: "OmniWeb",
            versionSearch: "OmniWeb/",
            identity: "OmniWeb"
        },
        {
            string: navigator.vendor,
            subString: "Apple",
            identity: "Safari"
        },
        {
            prop: window.opera,
            identity: "Opera"
        },
        {
            string: navigator.vendor,
            subString: "iCab",
            identity: "iCab"
        },
        {
            string: navigator.vendor,
            subString: "KDE",
            identity: "Konqueror"
        },
        {
            string: navigator.userAgent,
            subString: "Firefox",
            identity: "Firefox"
        },
        {
            string: navigator.vendor,
            subString: "Camino",
            identity: "Camino"
        },
        {       // for newer Netscapes (6+)
            string: navigator.userAgent,
            subString: "Netscape",
            identity: "Netscape"
        },
        {
            string: navigator.userAgent,
            subString: "MSIE",
            identity: "Explorer",
            versionSearch: "MSIE"
        },
        {
            string: navigator.userAgent,
            subString: "Gecko",
            identity: "Mozilla",
            versionSearch: "rv"
        },
        {       // for older Netscapes (4-)
            string: navigator.userAgent,
            subString: "Mozilla",
            identity: "Netscape",
            versionSearch: "Mozilla"
        }
    ],
    dataOS : [
        {
            string: navigator.platform,
            subString: "Win",
            identity: "Windows"
        },
        {
            string: navigator.platform,
            subString: "Mac",
            identity: "Mac"
        },
        {
            string: navigator.platform,
            subString: "Linux",
            identity: "Linux"
        }
    ]

};
BrowserDetect.init();


//The qs function gets the query string
//it places them in a array:
//
// qsParm['varName']

var qsParm = new Array();

function qs() {
    var query = window.location.search.substring(1);
    var parms = query.split('&');
    for (var i=0; i<parms.length; i++) {
        var pos = parms[i].indexOf('=');
        if (pos > 0) {
            var key = parms[i].substring(0,pos);
            var val = parms[i].substring(pos+1);
            qsParm[key] = val;
        }
    }
}
qs();




function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

//addLoadEvent(nameOfSomeFunctionToRunOnPageLoad);
//addLoadEvent(function() {
  /* more code to run on page load */
//});



function parseString(theString) {
    //parses a comma seperated string (key=val,key2=val)
    //returns an array
    //usage:
    //var parsedParm = parseString(dataString);

    var parsedParm = new Array();
    
    if (typeof theString != 'undefined') {
        
        var params = theString.split(',');
        for (var i=0; i<params.length; i++) {
            var pos = params[i].indexOf('=');
            if (pos > 0) {
                var key = params[i].substring(0,pos).trim();
                var val = params[i].substring(pos+1);
                parsedParm[key] = val;
            }
        }
        
    } else {
        //theString is undefined, return just 1 parm...
        parsedParm['none'] = 'nothing';
    }
    
    return parsedParm;
}




/*
Written by Steve Tucker, 2006, http://www.stevetucker.co.uk
Full documentation can be found at http://www.stevetucker.co.uk/page-innerxhtml.php
Released under the Creative Commons Attribution-Share Alike 3.0  License, http://creativecommons.org/licenses/by-sa/3.0/

Change Log
----------
15/10/2006  v0.3    innerXHTML official release.
21/03/2007  v0.4    1. Third argument $appendage added (Steve Tucker & Stef Dawson, www.stefdawson.com)
            2. $source argument accepts string ID (Stef Dawson)
            3. IE6 'on' functions work (Stef Dawson & Steve Tucker)
*/
innerXHTML = function($source,$string,$appendage) {
    // (v0.4) Written 2006 by Steve Tucker, http://www.stevetucker.co.uk
    if (typeof($source) == 'string') $source = document.getElementById($source);
    if (!($source.nodeType == 1)) return false;
    var $children = $source.childNodes;
    var $xhtml = '';
    if (!$string) {
        for (var $i=0; $i<$children.length; $i++) {
            if ($children[$i].nodeType == 3) {
                var $text_content = $children[$i].nodeValue;
                $text_content = $text_content.replace(/</g,'&lt;');
                $text_content = $text_content.replace(/>/g,'&gt;');
                $xhtml += $text_content;
            }
            else if ($children[$i].nodeType == 8) {
                $xhtml += '<!--'+$children[$i].nodeValue+'-->';
            }
            else {
                $xhtml += '<'+$children[$i].nodeName.toLowerCase();
                var $attributes = $children[$i].attributes;
                for (var $j=0; $j<$attributes.length; $j++) {
                    var $attName = $attributes[$j].nodeName.toLowerCase();
                    var $attValue = $attributes[$j].nodeValue;
                    if ($attName == 'style' && $children[$i].style.cssText) {
                        $xhtml += ' style="'+$children[$i].style.cssText.toLowerCase()+'"';
                    }
                    else if ($attValue && $attName != 'contenteditable') {
                        $xhtml += ' '+$attName+'="'+$attValue+'"';
                    }
                }
                $xhtml += '>'+innerXHTML($children[$i]);
                $xhtml += '</'+$children[$i].nodeName.toLowerCase()+'>';
            }
        }
    }
    else {
        if (!$appendage) {
            while ($children.length>0) {
                $source.removeChild($children[0]);
            }
            $appendage = false;
        }
        $xhtml = $string;
        while ($string) {
            var $returned = translateXHTML($string);
            var $elements = $returned[0];
            $string = $returned[1];
            if ($elements) {
                if (typeof($appendage) == 'string') $appendage = document.getElementById($appendage);
                if (!($appendage.nodeType == 1)) $source.appendChild($elements);
                else $source.insertBefore($elements,$appendage);
            }
        }
    }
    return $xhtml;
}
function translateXHTML($string) {
    var $match = /^<\/[a-z0-9]{1,}>/i.test($string);
    if ($match) {
        var $return = Array;
        $return[0] = false;
        $return[1] = $string.replace(/^<\/[a-z0-9]{1,}>/i,'');
        return $return;
    }
    $match = /^<[a-z]{1,}/i.test($string);
    if ($match) {
        $string = $string.replace(/^</,'');
        var $element = $string.match(/[a-z0-9]{1,}/i);
        if ($element) {
            var $new_element = document.createElement($element[0]);
            $string = $string.replace(/[a-z0-9]{1,}/i,'');
            var $attribute = true;
            while ($attribute) {
                $string = $string.replace(/^\s{1,}/,'');
                $attribute = $string.match(/^[a-z1-9_-]{1,}="[^"]{0,}"/i);
                if ($attribute) {
                    $attribute = $attribute[0];
                    $string = $string.replace(/^[a-z1-9_-]{1,}="[^"]{0,}"/i,'');
                    var $attName = $attribute.match(/^[a-z1-9_-]{1,}/i);
                    $attribute = $attribute.replace(/^[a-z1-9_-]{1,}="/i,'');
                    $attribute = $attribute.replace(/;{0,1}"$/,'');
                    if ($attribute) {
                        var $attValue = $attribute;
                        if ($attName == 'value') $new_element.value = $attValue;
                        else if ($attName == 'class') $new_element.className = $attValue;
                        else if ($attName == 'style') {
                            var $style = $attValue.split(';');
                            for (var $i=0; $i<$style.length; $i++) {
                                var $this_style = $style[$i].split(':');
                                $this_style[0] = $this_style[0].toLowerCase().replace(/(^\s{0,})|(\s{0,1}$)/,'');
                                $this_style[1] = $this_style[1].toLowerCase().replace(/(^\s{0,})|(\s{0,1}$)/,'');
                                if (/-{1,}/g.test($this_style[0])) {
                                    var $this_style_words = $this_style[0].split(/-/g);
                                    $this_style[0] = '';
                                    for (var $j=0; $j<$this_style_words.length; $j++) {
                                        if ($j==0) {
                                            $this_style[0] = $this_style_words[0];
                                            continue;
                                        }
                                        var $first_letter = $this_style_words[$j].toUpperCase().match(/^[a-z]{1,1}/i);
                                        $this_style[0] += $first_letter+$this_style_words[$j].replace(/^[a-z]{1,1}/,'');
                                    }
                                }
                                $new_element.style[$this_style[0]] = $this_style[1];
                            }
                        }
                        else if (/^on/.test($attName)) $new_element[$attName] = function() { eval($attValue) };
                        else $new_element.setAttribute($attName,$attValue);
                    }
                    else $attribute = true;
                }
            }
            $match = /^>/.test($string);
            if ($match) {
                $string = $string.replace(/^>/,'');
                var $child = true;
                while ($child) {
                    var $returned = translateXHTML($string,false);
                    $child = $returned[0];
                    if ($child) $new_element.appendChild($child);
                    $string = $returned[1];
                }
            }
            $string = $string.replace(/^\/>/,'');
        }
    }
    $match = /^[^<>]{1,}/i.test($string);
    if ($match && !$new_element) {
        var $text_content = $string.match(/^[^<>]{1,}/i)[0];
        $text_content = $text_content.replace(/&lt;/g,'<');
        $text_content = $text_content.replace(/&gt;/g,'>');
        var $new_element = document.createTextNode($text_content);
        $string = $string.replace(/^[^<>]{1,}/i,'');
    }
    $match = /^<!--[^<>]{1,}-->/i.test($string);
    if ($match && !$new_element) {
        if (document.createComment) {
            $string = $string.replace(/^<!--/i,'');
            var $text_content = $string.match(/^[^<>]{0,}-->{1,}/i);
            $text_content = $text_content[0].replace(/-->{1,1}$/,'');           
            var $new_element = document.createComment($text_content);
            $string = $string.replace(/^[^<>]{1,}-->/i,'');
        }
        else $string = $string.replace(/^<!--[^<>]{1,}-->/i,'');
    }
    var $return = Array;
    $return[0] = $new_element;
    $return[1] = $string;
    return $return;
}



