/**
 *******************************************
 * $Id: revver.js 189 2006-10-22 21:10:16Z gregbrown $
 * REVVER
 * Copyright 2006 REVVER, Inc.
 * Author: Greg Brown, greg@onfocus.net
 * Description:
 *  This is the root js api file.
 *******************************************
 */

var REVVER = {
    Version: '1.0',
    showDebug: false,
    wsApiURL: 'http://api.revver.com/json/1.0/',
    jsApiURL:  'http://widget.revver.com/js/1.0/', // js api files root url
    flashApiURL:  'http://flash.revver.com/player/1.0/', // flash api files root url,

    require: function(libraryName) {
        // inserting via DOM fails in Safari 2.0, so brute force approach
        document.write('<script type="text/javascript" src="scripts/'+libraryName+'"></script>');
    },
    requireCss: function(styleName) {
        // inserting via DOM fails in Safari 2.0, so brute force approach
        document.write('<link rel="stylesheet" type="text/css" media="screen" href="styles/'+styleName+'" />');
    }
}

/**
 * The REVVER global namespace
 * @constructor
 */
var REVVER = window.REVVER || {};

/**
 * Returns the namespace specified and creates it if it doesn't exist
 *
 * REVVER.namespace("property.package");
 * REVVER.namespace("REVVER.property.package");
 *
 * Either of the above would create REVVER.property, then
 * REVVER.property.package
 *
 * @param  {String} sNameSpace String representation of the desired 
 *                             namespace
 * @return {Object}            A reference to the namespace object
 */
REVVER.namespace = function( sNameSpace ) {
    if (!sNameSpace || !sNameSpace.length) {
        return null;
    }
    var levels = sNameSpace.split(".");
    var currentNS = REVVER;
    // REVVER is implied, so it is ignored if it is included
    for (var i=(levels[0] == "REVVER") ? 1 : 0; i<levels.length; ++i) {
        currentNS[levels[i]] = currentNS[levels[i]] || {};
        currentNS = currentNS[levels[i]];
    }
    return currentNS;
};

/**
 * Global log method.
 */
REVVER.log = function(sMsg,sType) {
    if(REVVER.showDebug) {
        switch (sType) {
            case "debug":
                jslog.debug(sMsg);
                break;
            case "error":
                jslog.error(sMsg);
            case "text":
                jslog.text(sMsg);
                break;
            case "warning":
                jslog.warning(sMsg);
                break;
            default:
                jslog.info(sMsg);
                break;
        }
    } else {
        return false;
    }
};

// set the namespaces for revver components
REVVER.namespace("util");
REVVER.namespace("widget");

// highlight utility function 'QueryString Driven Query'
// enables video searches by bypassing highlight caching
REVVER.QSDQ = function(qry,inp){
	var sVal, sST, sSW, sRF, sRD;
	sRD=null;
	var types=['collection','keywords','keyword','titles','title','authors','author'];
	var sortslc=['publicationdate','modifieddate','createddate','title','author','views','completes','ratingcount','ratingsum','ratingaverage','duration','size'];
	var sorts=['publicationDate','modifiedDate','createdDate','title','author','views','completes','ratingCount','ratingSum','ratingAverage','duration','size'];
	var sdirs=['asc','desc'];
	var qsa=document.location.href.split("?");
	var qs=(qsa.length>1)?qsa[1].toQueryParams():{};
	var m=inp.split(/[:;|]/);
	for(var i=0;i<m.length;i++){
		sVal=m[i];
		sVal=qs[sVal]?qs[sVal]:sVal;
		switch(i){
			case 0:
				if(!isNaN(sVal)){
					sST="collection";
					sSW=parseInt(sVal);
				}else if(types.indexOf(sVal.toLowerCase())==-1){
					sST="keywords";
					sSW=sVal.split(",");
				}else{
					sST=sVal.toLowerCase();
				}
				break;
			case 1:
				if(!sSW){
					if(sST=="collection"){
						sSW=parseInt(sVal);
					}else{
						sSW=sVal.split(",");
					}
				}else if((sn=sortslc.indexOf(sVal.toLowerCase()))>-1){
					sRF=sorts[sn];
				}
				break;
			case 2:
				if(sdirs.indexOf(sVal.toLowerCase())>-1){
					sRD=sVal.toLowerCase()=="asc"?true:false;
				}else if((sn=sortslc.indexOf(sVal.toLowerCase()))>-1){
					sRF=sorts[sn];
				}
				break;
			case 3:
				if(sdirs.indexOf(sVal.toLowerCase())>-1){
					sRD=sVal.toLowerCase()=="asc"?true:false;
				}
				break;
		}
	}
	switch(sST){
		case "keywords":
		case "keyword":
			qry["criteria"]["keywords"]=[sSW]
			break;
		case "titles":
		case "title":
			qry["criteria"]["titles"]=sSW;
			break;
		case "authors":
		case "author":
			qry["criteria"]["owners"]=sSW;
			break;
		case "collection":
			qry.collection=sSW;
			break;
	}
	if(sRF&&sRD!=null){
		qry.orderBy=[sRF,sRD];
	}
	return qry;
}

REVVER.QSK=function(sQSKey,oDefault){
	var qsa=document.location.href.split("?");
	var qsv=(qsa.length>1)?qsa[1].toQueryParams():{};
	return qsv[sQSKey]?qsv[sQSKey]:oDefault;
}
