/**
 *
 */
 
 /* duplicated in /html/js/dl/cookie.js, slated for removal */
 function checkCookies(cookieNames,nameDelimiter) {
     // split the cookie names by comma
     // and look for existence of each cookie.
     if(cookieNames.length == 0) {
         return false;
     }

     // comma is a separator.
     var cookieNameArray = cookieNames.split(nameDelimiter);
     if(null != cookieNameArray) {
         for(var i=0;i<cookieNameArray.length;i++) {
             if(false == checkCookie(cookieNameArray[i])) {
                 return false;
             }
         }
     }
     return true;
 }

 /* duplicated in /html/js/dl/cookie.js, slated for removal */
 // This function checks if the cookie identified
 // by the name of the cookie exists. If it does
 // exists, it returns true else false.
 function checkCookie(cookieName) {
     // customary null check.
     if(null == cookieName || cookieName.length == 0) {
         return false;
     }

     // get cookie data.
     var cookieData = getCookie(cookieName);
     if(null != cookieData) {
         return true;
     }
     return false;
 }

 /* duplicated in /html/js/dl/cookie.js, slated for removal */
 // get cookie data.
 function getCookie(cookieName) {
     // customary null check.
     if(null == cookieName || cookieName.length == 0) {
         return null;
     }

     //check if any cookies are on page
     if (document.cookie.length > 0) {
         //look for our cookie
         var begin = document.cookie.indexOf(cookieName+"=");
         if (begin != -1) {
             begin += cookieName.length+1;
             end = document.cookie.indexOf(";", begin);
             if (end == -1) {
                 end = document.cookie.length;
             }

             // here is the cookie information.
             return unescape(document.cookie.substring(begin, end));
         }
     }
     return null;
 }

 // function that checks existence of certain cookies.
 function redirectUser(delimitedCookieNames,
                       delimiter,
                       prefPageUrl,
                       openPrefPageInNewWindow,
                       jsFunctionName,
                       jsParam,
                       name) {
     // assigned default delimiter if one is not provided.
     if(null == delimiter) {
         delimiter = ",";
     }

	 // get the url of current page.
	 var referrer = window.location.href;

     // check if all the cookies whose names are delimited by a delimiter
     // are provided.
     var cookieExists = checkCookies(delimitedCookieNames,delimiter);
     if(!cookieExists && null != prefPageUrl) {
         referrer = cleanUrl(referrer,'jFunc','jParam');
         var paramAdded = false;
         // redirect user to pref page.
         var doesQSExist = prefPageUrl.indexOf('?');
         if(null != referrer) {
             prefPageUrl += (doesQSExist > 0) ? "&" : "?";
             prefPageUrl += "referrer=" + escape(referrer);
             doesQSExist = true;
         }

         // check for jsfunction name.
         if(null != jsFunctionName && jsFunctionName.length > 0) {
             prefPageUrl += (doesQSExist) ? "&jsFunc=" : "?jsFunc=";
             prefPageUrl += jsFunctionName;
             prefPageUrl += (doesQSExist) ? "&name=" : "?name=";
             prefPageUrl += name;
             // now add js parameter if provided.
             if(null != jsParam && jsParam.length > 0) {
                 prefPageUrl += "&jsParam=" + jsParam;
             }
         }

         if(null == openPrefPageInNewWindow || openPrefPageInNewWindow == false) {
             window.location.href = prefPageUrl;
         } else {
             openWindow(prefPageUrl);
         }
     } else {
         // execute the js function provided.
         if(null != jsFunctionName && jsFunctionName.length > 0) {
             var jsFunctionCall = buildJSFunctionCall(jsFunctionName,jsParam,name);
             // execute the js function here.
             eval(jsFunctionCall);
         }

     }
     return true;
 }

 function writeCookies(delimitedCookieNames,
                       delimitedCookieValues,
                       delimiter,
                       expirationDays) {
     // as usual sanity checks.
     if(null == delimitedCookieNames || delimitedCookieNames.length == 0) {
         return false;
     }

     // set default delimiter if its not provided.
     if(null == delimiter || delimiter.length == 0) {
         delimiter = ",";
     }

     // make sure cookie values are provided.
     if(null == delimitedCookieValues || delimitedCookieValues.length == 0) {
         return false;
     }

     // lets split the names and values into an array.
     var cookieNameArray = delimitedCookieNames.split(delimiter);
     var cookieValueArray = delimitedCookieValues.split(delimiter);

     if(null != cookieNameArray && null != cookieNameArray &&
        cookieNameArray.length == cookieValueArray.length) {
         for(var i=0;i<cookieNameArray.length;i++) {
             if(false == writeCookie(cookieNameArray[i],
                                      cookieValueArray[i],
                                      expirationDays)) {
                 return false;
             }
         }
     } else {
         return false;
     }
     return true;
 }

 // function to write cookie to browser.
 function writeCookie(cookieName,cookieValue,expirationDays) {
     // sanity check make sure cookie name and value are provided.
     if(null == cookieName || cookieName.length == 0) {
         return false;
     }

     // check for cookie value.
     if(null == cookieValue || cookieValue.length == 0) {
         return false;
     }

     // if expiration time is not set, set value of 0. Setting
     // expiration time to 0 makes it a session cookie which gets
     // deleted when the browser is closed.
     if(null == expirationDays) {
         expirationDays = 0;
     }

     // get domain name.
     var cookieDomain = "";
     var domainName = document.domain;
     if(domainName) {
         var domainNameComponents = domainName.split('.');
         var count = domainNameComponents.length;
         var added = 0;
         for(var i=count-1;i>=0;i--) {
             if(added > 0) {
                 cookieDomain = "." + cookieDomain;
             }
             cookieDomain = domainNameComponents[i] + cookieDomain;
             added++;
             if(added == 2) {
                 break;
             }
         }
     } else {
         cookieDomain = "download.com";
     }


     var expirationTime = new Date ();
     expirationTime.setTime(expirationTime.getTime() + (expirationDays * 24 * 3600 * 1000));
     document.cookie = cookieName + "=" +
                       escape(cookieValue) +
                       ";domain="+ cookieDomain +
                       ";path=/" +
                       ((null == expirationDays || expirationDays == 0) ? "" : ";expires=" + expirationTime.toGMTString());
     return true;
 }

 /* duplicated in /html/js/dl/cookie.js, slated for removal */
 function deleteCookies(delimitedCookieNames,delimiter,redirectUrl) {

     // ofcourse the sanity check.
     if(null == delimitedCookieNames || delimitedCookieNames.length == 0) {
         return false;
     }

     // set default delimiter if one is not provided.
     if(null == delimiter || delimiter.length == 0) {
         delimiter = ",";
     }

     var cookieNameArray = delimitedCookieNames.split(delimiter);
     for(var i=0;i<cookieNameArray.length;i++) {
         delCookie(cookieNameArray[i]);
     }

     // redirect user to the page if its provided.
     if(null != redirectUrl && redirectUrl.length > 0) {
         window.location.href = redirectUrl;
     }

     return true;
 }
 
 /* temp dupe for namespace conflict - remove with other cleanup */
  function mdlDeleteCookies(delimitedCookieNames,delimiter,redirectUrl) {
 
      // ofcourse the sanity check.
      if(null == delimitedCookieNames || delimitedCookieNames.length == 0) {
          return false;
      }
 
      // set default delimiter if one is not provided.
      if(null == delimiter || delimiter.length == 0) {
          delimiter = ",";
      }
 
      var cookieNameArray = delimitedCookieNames.split(delimiter);
      for(var i=0;i<cookieNameArray.length;i++) {
          delCookie(cookieNameArray[i]);
      }
 
      // redirect user to the page if its provided.
      if(null != redirectUrl && redirectUrl.length > 0) {
          window.location.href = redirectUrl;
      }
 
      return true;
 }

 // function to delete cookie based on a cookie name.
 function delCookie (cookieName) {
     if(getCookie(cookieName)) {
         document.cookie = cookieName + "=" +
                           ";domain=download.com" +
                           ";path=/" +
                           "; expires=Thu, 01-Jan-70 00:00:01 GMT";
     }
     return true;
 }

 function cleanUrl() {
     var argv = cleanUrl.arguments;
     var argc = argv.length;

     var url = (argc > 0) ? argv[0] : "";
     var queryString = "";
     var queryStringIndex = url.indexOf("?");
     if(queryStringIndex > 0) {
         queryString = url.substring(queryStringIndex+1);
         url = url.substring(0,queryStringIndex);
     }

     if(argc > 1) {
         for(var i=1;i<argc;i++) {
             var queryStringParamArray = queryString.split("&");
             var tmpQueryString = "";
             for(var j=0;j<queryStringParamArray.length;j++) {
                 var queryStringTerm = queryStringParamArray[j];
                 var index = queryStringTerm.indexOf(argv[i]);
                 // should not start with it.
                 if(index != 0) {
                     tmpQueryString += (tmpQueryString.length == 0) ? "" : "&";
                     tmpQueryString += queryStringTerm;
                 }
             }

             queryString = tmpQueryString;
         }
     } // end if(argc > 1) { ..
     url += (queryString.length > 0) ? "?" : "";
     url += queryString;
     return url;
 }

 function openWindow(url) {
     var windowName = window.open(url);
 }

function validatePrefs(submitFormName,userAction) {
     var connSpeed = null;
     var explicitContent = null;
     var submitForm = document.forms[submitFormName];
     var submit = true;
     var errors = 'You must choose a preference for'
     if (submitFormName == 'regForm') {
         if(getRadioValueMDL(submitFormName, "chooseExplicit") == "") {
             errors += '\n  - explicit content';
             submit=false;;
         }
         if(getRadioValueMDL(submitFormName, "connectionSpeed") == "") {
             errors += '\n  - connection speed';
             submit=false;
         }
         if(submit) {
             connSpeed = getRadioValueMDL(submitFormName, "connectionSpeed");
             explicitContent = getRadioValueMDL(submitFormName, "chooseExplicit");
         }
     } else if(submitFormName == 'login') {
         if(submitForm["chooseExplicit"].value == "") {
             errors += '\n  - explicit content';
             submit=false;;
         }
         if(submitForm["connectionSpeed"].value == "") {
             errors += '\n  - connection speed';
             submit=false;
         }

         if(submit) {
             explicitContent = submitForm["chooseExplicit"].value;
             connSpeed = submitForm["connectionSpeed"].value;
         }
     }
     if (submit) {
         // submitForm.submit;
         processUserAction(submitForm,connSpeed,explicitContent,userAction);
     } else {
         alert (errors);
     }
 }

 function validate(submitFormName,userAction) {
     var connSpeed = null;
     var explicitContent = null;
     var submitForm = document.forms[submitFormName];
     var submit = true;
     var errors = 'You must choose a preference for'
     if (submitFormName == 'regForm') {
         if(submitForm["chooseExplicit"].selectedIndex == 0) {
             errors += '\n  - explicit content';
             submit=false;;
         }
         if(submitForm["connectionSpeed"].selectedIndex == 0) {
             errors += '\n  - connection speed';
             submit=false;
         }

         if(submit) {
             connSpeed = submitForm["connectionSpeed"].options[submitForm["connectionSpeed"].selectedIndex].value;
             explicitContent = submitForm["chooseExplicit"].options[submitForm["chooseExplicit"].selectedIndex].value;
         }
     } else if(submitFormName == 'login') {
         if(submitForm["chooseExplicit"].value == "") {
             errors += '\n  - explicit content';
             submit=false;;
         }
         if(submitForm["connectionSpeed"].value == "") {
             errors += '\n  - connection speed';
             submit=false;
         }

         if(submit) {
             explicitContent = submitForm["chooseExplicit"].value;
             connSpeed = submitForm["connectionSpeed"].value;
         }
     }
     if (submit) {
         // submitForm.submit;
         processUserAction(submitForm,connSpeed,explicitContent,userAction);
     } else {
         alert (errors);
     }
 }

 function processUserAction(formObject,
                            connSpeed,
                            explicitContent,
                            userAction) {
     // get jsFunctionName
     var jsFunctionName = (formObject["jsFunctionName"]) ? formObject["jsFunctionName"].value : null;
     // get playlist Name
     var name = (formObject["name"]) ? formObject["name"].value : null;
     // get jsParam
     var jsParam = (formObject["jsParam"]) ? formObject["jsParam"].value : null;
     // get referrerUrl
     var referrerUrl = (formObject["referrerUrl"]) ? formObject["referrerUrl"].value : null;

     // set default value for referrerUrl.
     if(null == referrerUrl || referrerUrl.length == 0) {
        referrerUrl = "http://music.download.com";
     }

     // set cookies.
     if(userAction == 'session' || userAction == 'permanent') {
         // cookie names.
         var cookieNames = 'mdl_streaming_bandwidth,mdl_streaming_explicit';
         // cookie values.
         var cookieValues = connSpeed + "," + explicitContent;

         // write cookies.
         if(userAction == 'session') {
             writeCookies(cookieNames,cookieValues,',');
         } else if(userAction == 'permanent') {
             writeCookies(cookieNames,cookieValues,',',10950);
         }

         // finally execute the js function call.
         if(null != jsFunctionName && jsFunctionName.length > 0) {
             var qsIndex = referrerUrl.indexOf("?");
             referrerUrl += (qsIndex > 0) ? "&jFunc=" : "?jFunc=";
             referrerUrl += jsFunctionName;
             referrerUrl += "&jParam=" + jsParam;
             referrerUrl += "&name=" + name;
         }

         if(null != referrerUrl) {
             document.location.replace(referrerUrl);
         }
     } else if(userAction == 'register') {
         // create session cookie here.
         // cookie names.
         var cookieNames = 'mdl_streaming_bandwidth,mdl_streaming_explicit';
         // cookie values.
         var cookieValues = connSpeed + "," + explicitContent;
         // write cookies.
         writeCookies(cookieNames,cookieValues,',');

         var url = "/1324-1_32-143.html";
         // get path.
         var referrerUrl = formObject["path"].value;
         if(referrerUrl != undefined) {
             index = unescape(referrerUrl).indexOf("?");
         }
         var referrer = "referrerUrl=" +  referrerUrl;
         referrer += (index > 0) ? "&jFunc=" : "?jFunc=";
         referrer += (jsFunctionName + "&jParam=" + jsParam + "&name=" + name);
         var path = referrer + "&connectionSpeed=" + connSpeed + "&explicitContent=" + explicitContent;
         formObject["path"].value = "/3634-5_32-0.html?" + path;

         // now time to submit user to register form.
         formObject.action ="/1300-1_32-143.html";
         formObject.submit();
     } else if(userAction == 'login') {
         var url = "/1324-1_32-143.html";
         var index = -1;
         if(referrerUrl != undefined) {
             index = unescape(referrerUrl).indexOf("?");
         }
         var referrer = "referrerUrl=" +  referrerUrl;
         referrer += (index > 0) ? "&jFunc=" : "?jFunc=";
         referrer += (jsFunctionName + "&jParam=" + jsParam);
         var path = referrer + "&connectionSpeed=" + connSpeed + "&explicitContent=" + explicitContent;
         formObject["path"].value = "/3634-5_32-0.html?" + path;
         formObject.action = url;
         formObject.submit();
     }
     return true;
 }

 function buildJSFunctionCall() {
     var jsFunctionCall = "";
     var jsParameterString = "";
     var argv = buildJSFunctionCall.arguments;
     var argc = argv.length;
     var jsFunctionName = (argc > 0) ? argv[0] : "";
     for (var i = 1; i < argc; i++) {
         jsParameterString += (i > 1) ? "," : "";
         if(null == jsParameterString) {
             jsParameterString += argv[i];
         } else {
             jsParameterString += "'" + argv[i] + "'";
         }
     }

     jsFunctionCall = jsFunctionName + "(" + jsParameterString + ");";
     return jsFunctionCall;
 }

/*
Webmonkey GET Parsing Module
Language: JavaScript 1.0
The parsing of GET queries is fundamental
to the basic functionality of HTTP/1.0.
This module parses GET with JavaScript 1.0.
Source: Webmonkey Code Library
(http://www.hotwired.com/webmonkey/javascript/code_library/)
Author: Patrick Corcoran
Author Email: patrick@taylor.org
*/


function createRequestObject() {
  FORM_DATA = new Object();
    // The Object ("Array") where our data will be stored.
  separator = ',';
    // The token used to separate data from multi-select inputs
  query = '' + this.location;
    // Keep everything after the question mark '?'.
  if (query.length < 1 || query.indexOf('?') < 0) { 
	 // Perhaps we got some bad data?
		return false; 
	} else {
    // Get the current URL so we can parse out the data.
    // Adding a null-string '' forces an implicit type cast
    // from property to string, for NS2 compatibility.
		query = query.substring((query.indexOf('?')) + 1);
	} 
  keypairs = new Array();
    // Local vars used to store and keep track of name/value pairs
    // as we parse them back into a usable form.
  while (query.indexOf('&') > -1) {
    keypairs.push(query.substring(0,query.indexOf('&')));
    query = query.substring((query.indexOf('&')) + 1);
      // Split the query string at each '&', storing the left-hand side
      // of the split in a new keypairs[] holder, and chopping the query
      // so that it gets the value of the right-hand string.
  }
  keypairs.push(query);
    // Store what's left in the query string as the final keypairs[] data.<
  for (i=0; i < keypairs.length; i++) {
    keyName = keypairs[i].substring(0,keypairs[i].indexOf('='));
      // Left of '=' is name.
    keyValue = keypairs[i].substring((keypairs[i].indexOf('=')) + 1);
      // Right of '=' is value.
    while (keyValue.indexOf('+') > -1) {
      keyValue = keyValue.substring(0,keyValue.indexOf('+')) + ' ' + keyValue.substring(keyValue.indexOf('+') + 1);
        // Replace each '+' in data string with a space.
    }
    keyValue = unescape(keyValue);
      // Unescape non-alphanumerics
    if (FORM_DATA[keyName]) {
      FORM_DATA[keyName] = FORM_DATA[keyName] + separator + keyValue;
        // Object already exists, it is probably a multi-select input,
        // and we need to generate a separator-delimited string
        // by appending to what we already have stored.
    } else {
      FORM_DATA[keyName] = keyValue;
        // Normal case: name gets value.
    }
  }
  return FORM_DATA;
}

function openMDLPLayerOnload() {
    var jFunc = FORM_DATA['jFunc'];
    var jParam = FORM_DATA['jParam'];
    if (jFunc != undefined && jParam != undefined){
	var jCall = "redirectUser(\'mdl_streaming_bandwidth,mdl_streaming_explicit\',\',\',\'3632-5_32-0.html\',false,\'" + jFunc + "\',\'" + jParam + "\');";
        if (jCall != undefined){
        eval(jCall);
        }
    }
}

/* removeStreamingCookiesAndLogout should be deprecated -- replaced by removePrefCookies */
function removeStreamingCookiesAndLogout(logoutUrl) {
    var cookieNames = 'gdlPrefs,mdl_streaming_bandwidth,mdl_streaming_explicit';    
    mdlDeleteCookies(cookieNames,',',logoutUrl);    
}

 /* duplicated in /html/js/dl/cookie.js, slated for removal */
function removePrefCookies() {
     var cookieNames = 'gdlPrefs,mdl_streaming_bandwidth,mdl_streaming_explicit';
     mdlDeleteCookies(cookieNames,',','');
}

loadFunctions[loadFunctions.length]= new Function("createRequestObject();");
loadFunctions[loadFunctions.length]= new Function("openMDLPLayerOnload();");
