function delegate(obj, method) {
    return function(arg) {return method.apply(obj, arguments)};
}

jQuery.log = function(obj) {
    try {
        console.debug(obj);
    } catch (e) {
        /*
        if ($("#log").length == 0)
            $("body").append($("<div id='log'><h3>Log</h3></div>"));

        $("#log").append(obj.toString() + "<br />")
        */
    }
};

function program_url(program) {
    //return LANGUAGE_ID == 50 ? permalink(program.title) : program.programUid;
    return program_permalinks[program.programUid];
    //return program_permalinks[program.programUid];
}

function permalink(str) {
    return (str || "").replace(/[^\w\d]/g, "-").replace(/^-|-$/g, "").toLowerCase();
}

function selectThumbnail(thumbs, target_width) {
    var diff  = 1000;
    var thumb = null;
    //$.log("selectThumbnail");
    //$.log(thumbs);
    for (var i=0; i < thumbs.length; i++) {

        if (thumb == null || ((thumbs[i].width - target_width) < (diff < 0 ? (diff*-1) : diff) && (thumbs[i].width - target_width) >= 0 )) {
            //$.log("Selected thumb: "+ thumbs[i].width);
            //$.log(thumbs[i]);
            diff  = thumbs[i].width - target_width;
            thumb = thumbs[i];
        }
    }
    return thumb.url;
}

// temp UA crap
var ua     = navigator.userAgent.toLowerCase();
//var iphone = (ua.indexOf('iphone') > -1 || ua.indexOf('ipod') > -1 || ua.indexOf('ipad') > -1 || ua.indexOf('android') > -1)
var iphone = (ua.indexOf('iphone') > -1 || ua.indexOf('ipod') > -1 || ua.indexOf('ipad') > -1)
//var android = (ua.indexOf('android') > -1)

/** CopyRight: Dr Alexander J Turner - all rights reserved.
  * Please feel free to use this any way you want as long as you
  * mention I wrote it!
  */
var b64 = (function() {
    var maxLineLength = 76;
    var base64chars =  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
   
   var decode = function(encStr) {
        var base64charToInt = {};
        for (var i = 0; i < 64; i++) base64charToInt[base64chars.substr(i,1)] = i;
        encStr = encStr.replace(/\s+/g, "");
        var decStr = "";
        var decArray=new Array();
        var linelen = 0
        var el=encStr.length;
        var bits24;
        for (var i = 0; i < el; i += 4) {
            bits24  = ( base64charToInt[encStr.charAt(i)] & 0xFF  ) <<  18;
            bits24 |= ( base64charToInt[encStr.charAt(i+1)] & 0xFF  ) <<  12;
            bits24 |= ( base64charToInt[encStr.charAt(i+2)] & 0xFF  ) <<   6;
            bits24 |= ( base64charToInt[encStr.charAt(i+3)] & 0xFF  ) <<   0;
            decStr += String.fromCharCode((bits24 & 0xFF0000) >> 16);
            if (encStr.charAt(i + 2) != '=')  // check for padding character =
                decStr += String.fromCharCode((bits24 &   0xFF00) >>  8);
            if (encStr.charAt(i + 3) != '=')  // check for padding character =
                decStr += String.fromCharCode((bits24 &     0xFF) >>  0);
            if(decStr.length>1024)
            {
                decArray.push(decStr);
                decStr='';
            }
        }
        if(decStr.length>0)
        {
            decArray.push(decStr);
        }
        
        var ar2=new Array();
        for(;decArray.length>1;)
        {
            var l=decArray.length;
            for(var c=0;c<l;c+=2)
            {
                if(c+1==l)
                {
                    ar2.push(decArray[c]);
                }
                else
                {
                    ar2.push(''+decArray[c]+decArray[c+1]);
                }
            }
            decArray=ar2;
            ar2=new Array();
        }
        return decArray[0];
    };
   
    var encode = function(decStr)
    {
        var encArray=new Array();
        var bits, dual, i = 0, encOut = "";
        var linelen = 0;
        var encOut='';
        while(decStr.length >= i + 3){
            bits =    (decStr.charCodeAt(i++) & 0xff) <<16 |
                (decStr.charCodeAt(i++) & 0xff) <<8 |
                decStr.charCodeAt(i++) & 0xff;
            encOut +=
                base64chars.charAt((bits & 0x00fc0000) >>18) +
                base64chars.charAt((bits & 0x0003f000) >>12) +
                base64chars.charAt((bits & 0x00000fc0) >> 6) +
                base64chars.charAt((bits & 0x0000003f));
            linelen += 4;
            if (linelen>maxLineLength-3) {
                encOut += "\n";
                encArray.push(encOut);
                encOut='';
                linelen = 0;
            }
        }
        if(decStr.length -i > 0 && decStr.length -i < 3) {
            dual = Boolean(decStr.length -i -1);
            bits =
                ((decStr.charCodeAt(i++) & 0xff) <<16) |
                (dual ? (decStr.charCodeAt(i) & 0xff) <<8 : 0);
            encOut +=
                base64chars.charAt((bits & 0x00fc0000) >>18) +
                base64chars.charAt((bits & 0x0003f000) >>12) +
                      (dual ? base64chars.charAt((bits & 0x00000fc0) >>6) : '=') +
                      '=';
        }
       
        encArray.push(encOut);
        // this loop progressive concatonates the
        // array elements entil there is only one
        var ar2=new Array();
        for(;encArray.length>1;)
        {
            var l=encArray.length;
            for(var c=0;c<l;c+=2)
            {
                if(c+1==l)
                {
                    ar2.push(encArray[c]);
                }
                else
                {
                    ar2.push(''+encArray[c]+encArray[c+1]);
                }
            }
            encArray=ar2;
            ar2=new Array();
        }
        return encArray[0];
    };
    return {"encode": encode, "decode": decode};
})();


function set_cookie(key, value) {
    var today = new Date();
    today.setTime( today.getTime() );
    var expires_date = new Date( today.getTime() + (1 * 1000 * 60 * 60 * 24));
    document.cookie = key +"="+ escape(value) + ";expires=" + expires_date.toGMTString()
}

function get_cookie(check_name) {
	var a_all_cookies  = document.cookie.split( ';' );
	var a_temp_cookie  = '';
	var cookie_name    = '';
	var cookie_value   = '';
	var b_cookie_found = false;

	for ( i = 0; i < a_all_cookies.length; i++ ) {
		a_temp_cookie = a_all_cookies[i].split( '=' );
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
		if ( cookie_name == check_name ) {
			b_cookie_found = true;
			if ( a_temp_cookie.length > 1 )
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );

			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if (!b_cookie_found)
		return null;
}

