if(typeof console == 'undefined' || typeof console.info == 'undefined' 
    || typeof console.error == 'undefined' || typeof console.debug == 'undefined') {

  window.console = {
    error: function(str){
//      alert('error: ' + str);
    },
    info: function(str){
      //alert('debug: ' + str);
    },
    debug: function(str){
      //alert('debug: ' + str);
    }
  }
}

window.onerror = function (msg, url, lno) {
  console.error(msg + ":" + url + ":" + lno);
  return true;
};


var globalUserData = null;
var loginTimer = null;

var globalAjaxListener = new Object();
// execute function aasigned to globalAjaxListener
function fireAjaxEvent(event, response) {
  // create object if it doesnt exist so that we dont run into errors
  if(typeof(window.globalAjaxListener)!='object') {
    window.globalAjaxListener = new Object();
  }
  try {
      if(typeof(window.globalAjaxListener[event])=='function') {
          window.globalAjaxListener[event](response);
      }
      // TODO: remove globalAjaxListener and leave only this code
      document.fire('ajax:' + event, response);
  }
  catch(err) {
    console.error(err);
  }
}

// observeEvent(event, handler, options) -  function for observing custom events
// var options  = {
//    once : true if handler is called only once
// }
function observeEvent(event, handler, options) {
  if (typeof event !== 'string') {
    console.error('Event name must be a string');
    return;
  }
  else {
    event = 'ajax:'+event;
  }
  if (typeof handler !== 'function') {
    console.error('Event handler must be a function');
    return;
  }
  var rand = getRandom();
  var handlerName = 'handler_' + rand;
  window[handlerName] = function(ev) {
    if (options && (options.once === true || options.once === 'true')) {
      Event.stopObserving(document, event, window[handlerName]);
      window[handlerName] = undefined;
    }
    handler(ev.memo);
  }
  if (typeof handler.eventHandlers !== 'array') {
    handler.eventHandlers = new Array();
  }
  handler.eventHandlers.push(window[handlerName]);
  Event.observe(document, event, window[handlerName]);
}

function stopObserving(event, handler) {
  if (typeof event !== 'string') {
    console.error('Event name must be a string');
    return;
  }
  else {
    event = 'ajax:'+event;
  }
  if (handler && typeof handler.eventHandlers == 'array') {
    handler.eventHandlers.each(function(el)  {
      if (el && typeof el === 'function') {
        Event.stopObserving(document, event, el);
      }
    });
  }
  else {
    Event.stopObserving(document, event);
  }
}


//servers
//var SERVER_URL = "http://staging.blockr.com/api/";  //staging server
//var SERVER_URL = "http://10.201.105.151/api/";    //dev server
var SERVER_URL = "/api/";  //live server
//var ROOT_URL = "http://82.78.33.125";  // not used?

var HOME_PAGE_URL = "/";

var GET_USER_METADATA_URL = SERVER_URL + "GetUserMetadata";
var SAVE_USER_METADATA_URL = SERVER_URL + "SaveUserMetadata";
var CHANGE_PASSWORD_URL = SERVER_URL + "ChangePassword";
var REGISTER_USER_URL = SERVER_URL + "RegisterUser";
var LOGIN_USER_URL = SERVER_URL + "LoginUser";
var UPGRADE_USER_URL = SERVER_URL + "UpgradeUser";
var LOGOUT_USER_URL = SERVER_URL + "LogoutUser";
var APPLY_FOR_CAMPUS_PRO_URL = SERVER_URL + 'ApplyForCampusPro';



// ajax response codes
var RESPONSE_CODES = {
  SUCCESS : "1000",
  GENERIC_ERROR : "9000",
  MISSING_VALID_INPUT : "9010",
  NOT_FOUND_ERROR : "9020",
  INVALID_CONTENT : "9030",
  INVALID_FILE_TYPE : "9040",
  SAVE_ERROR : "9050",
  PASSWORD_MISMATCH : "9060",
  REGISTRATION_ERROR : "9070",
  EXISTING_EMAIL : "9080",
  EXISTING_DISPLAY_NAME : "9090",
  INVALID_THEME : "9100",
  BLOCK_NOT_PUBLISHABLE : "9110",
  BLOCK_NOT_READY : "9120",
  INVALID_RANK_ATTEMPT : "9150",
  UNAUTHORIZED_ACCESS : "9151",
  NOT_ENOUGH_EARNINGS : "9160",
  BLOCK_IMAGES_NOT_SET : "9170",
  BLOCK_TEXTS_NOT_SET : "9180",
  BLOCK_FIELDS_NOT_SET : "9190"
}

var USER_MESSAGES = {
  PASSWORD_MISSMATCH : "Your password doesn't match! Please try again.",
  EXISTING_DISPLAY_NAME : "There is a registered user with given display name. Please try another.",
  EXISTING_EMAIL : "There is a registered user with given email. Please try another.",
  REGISTRATION_ERROR : "Could not complete registration. Please try again.",
  EMAIL_NOT_FOUND : "There is no registered user with given email. Please try another.",
  CANT_VIEW_BLOCK : "You don't have the right to view this block."
}


var tempUserId = null;

var resellBlockId = null; // block ID user only by saveResellerId()
//get info on this user
Event.observe(window, 'load', function(evt) {
  tempUserId=getCookie('BLOCKR_USER');
  if (tempUserId) getUserMetaData(tempUserId);
  else getUserMetaData(false);
});


/**
 * returns a string of format "&field=value" or "" for value=null/undefined
 * be aware to set value to "" (not null) if you want to send the parameter
 */
function addParameterToUrl(field, value) {
  if (typeof value != 'undefined' && value !== null) {
    return "&" + field + "=" + escape(value);
  }
  return "";

}


function saveUserMetaData() {
 
  //if the user form exists, save new data
  if (globalUserData) {
    if($('acct-form')) {
      var displayName = $('acct-name').value;
      var email = $('acct-email').value;
    }
    //make update
    var pars = "id=" + globalUserData.userId;
    pars += (displayName ? "&displayName=" + displayName : "");
    pars += (email ? "&email=" + email : "");

    pars += addParameterToUrl("firstName", globalUserData.firstName);
    pars += addParameterToUrl("lastName", globalUserData.lastName);
    pars += addParameterToUrl("age", globalUserData.age);
    pars += addParameterToUrl("location", globalUserData.location);
    pars += addParameterToUrl("occupation", globalUserData.occupation);
    pars += addParameterToUrl("favoriteAuthor", globalUserData.favoriteAuthor);
    pars += addParameterToUrl("whyIBlockr", globalUserData.whyIBlockr);

    pars += "&rand=" + getRandom();  //tack on a random number to prevent IE6 caching

    var myAjax = new Ajax.Request(
      SAVE_USER_METADATA_URL,
      {
        method: 'post',
        postBody: pars,
        onComplete: function(req) {
        },
        onSuccess: function(req) {
          var response = req.responseXML;
          if (response) {
            var responseCode = getXMLTagValue(response, 'responseCode');
            if (responseCode == "1000") {  //SUCCESS!
              var responseMessage = getXMLTagValue(response, 'responseMessage');
              openLightBox_NEW('notification', 'Account updated', responseMessage);

              parseUserMetaData(response);  // Undo changes in globaluserMetadata
              
              fireAjaxEvent('onSaveUserMetaDataSuccess');
            }
            else {
              var responseMessage = getXMLTagValue(response, 'responseMessage');
              openLightBox_NEW('error', 'Account update failed!', responseMessage);
              parseUserMetaData(response);  // Undo changes in globaluserMetadata
            }
            
            
          }
        }
      }
    );
  }

  return false;
}
  
function changeUserPassword() {

  var oldPassword = $('field_oldPassword').value;
  var newPassword = $('field_newPassword').value;
  var newPasswordConfirm = $('field_newPasswordConfirm').value;
  $('field_oldPassword').value = "";
  $('field_newPassword').value = "";
  $('field_newPasswordConfirm').value = "";
  
  $$('li.oneline.error').each(function(el){
    Element.classNames(el).remove('error');
  });

  if (newPasswordConfirm != newPassword) {
    var field_newPasswordConfirm = $('field_newPasswordConfirm');
    if (field_newPasswordConfirm) {
      var parentEl = field_newPasswordConfirm.parentNode;
      Element.classNames(parentEl).add('error');
    }
    var strMsg = 'Your passwords do not match. Please try again';
    openLightBox_NEW('error', 'Oops!', strMsg);
    return;
  }
  var pars = '';
  pars += (oldPassword ? "&oldPassword=" + oldPassword : "");
  pars += (newPassword ? "&newPassword=" + newPassword : "");
  
  var myAjax = new Ajax.Request(
    CHANGE_PASSWORD_URL,
    {
      method: 'post',
      postBody: pars,
      onComplete: function(req) {
      },
      onSuccess: function(req) {
        var response = req.responseXML;
        if (response) {
          var responseCode = getXMLTagValue(response, 'responseCode');
          switch (responseCode) {
            case '1000':
              openLightBox_NEW('notification', 'Password Changed', " ");
              
              break;
            case '9060':
              var field_oldPassword = $('field_oldPassword');
              if (field_oldPassword) {
                var parentEl = field_oldPassword.parentNode;
                Element.classNames(parentEl).add('error');
              }
              openLightBox_NEW('error', 'Oops!', USER_MESSAGES.PASSWORD_MISSMATCH);
              
              break;
            default:
              openLightBox_NEW('error', 'Oops!', "Account update failed!");
              break;
          }
        }
      }
    }
  );
}

function getUserMetaData(userId, type) {
  //load metadata about this book
  if (!userId) userId = "";
  var pars = "id=" + userId;
  pars += "&rand=" + getRandom();  //tack on a random number to prevent IE6 caching

  var myAjax = new Ajax.Request(
    GET_USER_METADATA_URL,
    {
      method: 'get',
      parameters: pars,
      onComplete: function(req) { 

      },
      onSuccess: function(req) { 
      var response = req.responseXML;
      if (response) {
        parseUserMetaData(response);
        displayUserName();
        fireAjaxEvent("onGetUserMetaDataSuccess");
      }
      }
    });
}

function parseUserMetaData(response) {
  var userData = {
    userId:   getXMLTagValue(response, 'userId'),
    email:     getXMLTagValue(response, 'email'),
    displayName:   getXMLTagValue(response, 'displayName'),
    firstName:   getXMLTagValue(response, 'firstName'),
    lastName:   getXMLTagValue(response, 'lastName'),
    userType:   getXMLTagValue(response, 'userType'),
    createDate:   getXMLTagValue(response, 'createDate'),
    lastVisitDate:   getXMLTagValue(response, 'lastVisitDate'),
    profilePhotoUri:getXMLTagValue(response, 'profilePhotoUri'),
    age:      getXMLTagValue(response, 'age'),
    location:     getXMLTagValue(response, 'location'),
    whyIBlockr:   getXMLTagValue(response, 'whyIBlockr'),
    occupation:   getXMLTagValue(response, 'occupation'),
    favoriteAuthor: getXMLTagValue(response, 'favoriteAuthor'),
    cartItems:   getXMLTagValue(response, 'cartItems')
  };

  globalUserData = userData;
  
 
  if (globalUserData.userType == "Admin")
  {  
    if($('blocks-admin'))
      $('blocks-admin').style.display="block";
  }
  
  userDataLoaded = true;

  try {
    loadUserLoginStatus('showAccountInfoBox');
  }
  catch(err) {
    console.error(err);
  }
}

function loginUser(email, pwd, redirect) {

  //update the title and description for this book
  var pars = "email=" + Url.encodeURIComponent(email);
  pars += "&password=" + Url.encodeURIComponent(pwd);
  pars += "&rand=" + getRandom();  //tack on a random number to prevent IE6 caching
  var myAjax = new Ajax.Request(
    LOGIN_USER_URL,
    {
      method: 'post',
      postBody: pars,
      onComplete: function(req) {
      },
      onSuccess: function(req) {
        var response = req.responseXML;
        
        var responseCode = response.getElementsByTagName('responseCode')[0].firstChild.nodeValue;
        var responseMessage = response.getElementsByTagName('responseMessage')[0].firstChild.nodeValue;
        if (responseCode == "1000") {  //SUCCESS!
        
          try {  //if we are on the editor page, try calling an editor function to close any lightboxes
            clearLightBox();  //clear any open lightboxes
          }
          catch(err) {          
          }
          parseUserMetaData(response);
          if (redirect == true || redirect == 'true')  {
            window.location = HOME_PAGE_URL;  //send to home page
          }          
          else if (typeof(redirect) == 'string' && redirect!='false')  {
            window.location = redirect;  
          }
          displayUserName();
        }
        else if (responseCode == "9020") {
          openLightBox_NEW('error', 'Oops!', USER_MESSAGES.EMAIL_NOT_FOUND);
        }
        else if (responseCode == "9060") {
          openLightBox_NEW('error', 'Oops!', USER_MESSAGES.EMAIL_NOT_FOUND);
        }
        else {
          openLightBox_NEW('error', 'Oops!', responseMessage);
        }
      }
  });

  return false;
}

function loginAndUpgrade(email, pwd, redirect) {

  //update the title and description for this book
  var pars = "email=" + Url.encode(email);
  pars += "&password=" + Url.encode(pwd);
  pars += "&user_type=" + Url.encode("Blockr Pro");
  pars += "&action=login";
  pars += "&rand=" + getRandom();  //tack on a random number to prevent IE6 caching

  var myAjax = new Ajax.Request(
    UPGRADE_USER_URL,
    {
      method: 'post',
      postBody: pars,
      onComplete: function(req) {
      },
      onSuccess: function(req) {
        var response = req.responseXML;
        var responseCode = response.getElementsByTagName('responseCode')[0].firstChild.nodeValue;
        if (responseCode == "1000") {  //SUCCESS!
        
          try {  //if we are on the editor page, try calling an editor function to close any lightboxes
            clearLightBox();  //clear any open lightboxes
          }
          catch(err) {          
          }
          parseUserMetaData(response);
          if (redirect) window.location = HOME_PAGE_URL;  //send to home page
          displayUserName();
          openLightBox_NEW('notification', 'Congratulations!', "You have been upgraded to "+globalUserData.userType);
        }
        else if (responseCode == "9060") {
          openLightBox_NEW('error', 'Oops!', USER_MESSAGES.PASSWORD_MISSMATCH);
        }
        else {
          openLightBox_NEW('error', 'Oops!', USER_MESSAGES.REGISTRATION_ERROR);
        }
      }
  });

  return false;
}

function logoutUser() {
  //update the title and description for this book
  var pars = ""
  pars += "&rand=" + getRandom();  //tack on a random number to prevent IE6 caching

  var myAjax = new Ajax.Request(
    LOGOUT_USER_URL,
    {
      method: 'get',
      parameters: pars,
      onComplete: function(req) {
      },
      onSuccess: function(req) {
        var response = req.responseXML;
        var responseCode = response.getElementsByTagName('responseCode')[0].firstChild.nodeValue;
        if (responseCode == "1000") {  //SUCCESS!
          //remove user account info
          globalUserData = null;
//          loadUserLoginStatus(true);  //show user login
//          parseUserMetaData(response);
          window.location = HOME_PAGE_URL;
        }
      }
  });
}

function registerUser(email, pwd, displayName, showAccountInfo, redirect) {
  //update the title and description for this book
  var pars = "email=" + Url.encode(email);
  pars += "&password=" + Url.encode(pwd);
  pars += "&display_name=" + Url.encode(displayName);
  pars += "&rand=" + getRandom();  //tack on a random number to prevent IE6 caching

  var myAjax = new Ajax.Request(
    REGISTER_USER_URL,
    {
      method: 'get',
      parameters: pars,
      onComplete: function(req) {
      },
      onSuccess: function(req) {
        var response = req.responseXML;
        var responseCode = response.getElementsByTagName('responseCode')[0].firstChild.nodeValue;
        if (responseCode == "1000") {  //SUCCESS!
          parseUserMetaData(response);

          try {  //if we are on the editor page, try calling an editor function to close any lightboxes
            loadUserLoginStatus(showAccountInfo);  //show user login
          }
          catch(err) {          
          }

          var strMsg = "Welcome to Blockr, " + displayName + "!";
          openLightBox_NEW('notification', 'Congratulations!', strMsg);

          //if a register lightbox is open, close lightboxes
          try {  //if we are on the editor page, try calling an editor function to close any lightboxes
            clearLightBox();  //clear any open lightboxes
          }
          catch(err) {          
          }

          if (redirect == true)  {
            window.location = HOME_PAGE_URL;  //send to home page
          }          
          else if (typeof(redirect) == 'string')  {
            window.location = redirect;  
          }

          return true;
        }
        else if (responseCode == "9080") {
          openLightBox_NEW('error', 'Oops!', USER_MESSAGES.EXISTING_EMAIL);
          return false;
        }
        else if (responseCode == "9090") {
          openLightBox_NEW('error', 'Oops!', USER_MESSAGES.EXISTING_DISPLAY_NAME);
          return false;
        }
        else {
          openLightBox_NEW('error', 'Oops!', USER_MESSAGES.REGISTRATION_ERROR);
          return false;
        }
      }
  });
  return false;
}

function registerAndUpgrade(email, pwd, displayName, showAccountInfo, redirect) {
  //update the title and description for this book
  var pars = "email=" + Url.encode(email);
  pars += "&password=" + Url.encode(pwd);
  pars += "&display_name=" + Url.encode(displayName);
  pars += "&user_type=" + Url.encode("Blockr Pro");
  pars += "&action=register";
  pars += "&rand=" + getRandom();  //tack on a random number to prevent IE6 caching

  var myAjax = new Ajax.Request(
    UPGRADE_USER_URL,
    {
      method: 'get',
      parameters: pars,
      onComplete: function(req) {
      },
      onSuccess: function(req) {
        var response = req.responseXML;
        var responseCode = response.getElementsByTagName('responseCode')[0].firstChild.nodeValue;
        if (responseCode == "1000") {  //SUCCESS!
          parseUserMetaData(response);

          try {  //if we are on the editor page, try calling an editor function to close any lightboxes
            loadUserLoginStatus(showAccountInfo);  //show user login
          }
          catch(err) {          
          }

          var strMsg = "Welcome to Blockr, " + displayName + "!" + "<br/>You have been upgraded to "+globalUserData.userType;
          
          displayUserName();
          openLightBox_NEW('notification', 'Congratulations!', strMsg);

          //redirect to home page if requested
          if (redirect) window.location = HOME_PAGE_URL;

          return true;
        }
        else if (responseCode == "9080") {
          openLightBox_NEW('error', 'Oops!', USER_MESSAGES.EXISTING_EMAIL);
          return false;
        }
        else if (responseCode == "9090") {
          openLightBox_NEW('error', 'Oops!', USER_MESSAGES.EXISTING_DISPLAY_NAME);
          return false;
        }
        else {
          openLightBox_NEW('error', 'Oops!', USER_MESSAGES.REGISTRATION_ERROR);
          return false;
        }
      }
  });
  return false;
}


function loadUserLoginStatus(showAccountInfo) {
  
  if (isLoggedIn()) {

    //THIS IS A REGISTERED USER
    if ($('side-signup')) {
      $('side-signup').style.display = "none";
      $('side-account').style.display = "block";
      var displayNameArea = $('side-account').getElementsByTagName('h3')[0];
      displayNameArea.innerHTML = "Welcome, " + globalUserData.displayName;
    }

    //show the login area in title bar if it's there
    if ($('login-in')) {
      $('login-in-email').innerHTML = globalUserData.email;
      if (browser.isIE6x) $('login-in').style.display = "inline";  //IE6 BUG - scriptaculous appear effect shows up strangely
      else Effect.Appear($('login-in'), {duration: 0.5});
    }
  }
  else {
    //THIS IS AN ANONYMOUS USER

    //hide the login area in title bar
    if ($('login-in')) {
      $('login-in').style.display = "none";
    }

    if ($('side-signup')) {
      $('side-signup').style.display = "block";
      $('side-account').style.display = "none";
      
      //add behaviors for the links in the signup/login area
      Event.observe($('side-signupform-link'), 'click', function(evt) {
        $('side-loginform-container').style.display = "none";
        $('side-signupform-container').style.display = "block";
        Event.stop(evt);
        return false;
      }, true);
      Event.observe($('side-loginform-link'), 'click', function(evt) {
        $('side-signupform-container').style.display = "none";
        $('side-loginform-container').style.display = "block";
        Event.stop(evt);
        return false;
      }, true);
    
      //show the login area in title bar
      $('side-signupform').reset();  //reset signup form
      $('side-loginform').reset();  //reset login form
    }
    
  }

}

function submitRegistrationAction(actionType) {
  registerUser($('quick-reg-email1').value, $('quick-reg-pw1').value, $('quick-reg-displayname1').value, false, false);
  if (actionType) {
    openLightBox(actionType);
  }
  else {
    //close registration box when done.
    clearLightBox();
  }
}

function isLoggedIn() {
  var isUser = (globalUserData && null!=globalUserData.userType && globalUserData.userType.toLowerCase() != "anonymous");
  return isUser
}


/**
 * Performs a check on whether user can edit his profile by checking if user is
 * anonymous on getUsermetadata event.
 * Example:
 *      addEditOwnProfileRightsCheck(function() {return (currentStep > 0);}) - will
 *      also check if currentPage is greater than zero
 * @param <function> check[optional] - additional function to be executed. Must
 * return false if user cannot edit his profile.
 */
function addEditOwnProfileRightsCheck(check) {
  if (typeof check != 'function') {
    check = function() {
      return true;
    }
  }
  observeEvent('onGetUserMetaDataSuccess', checkEditOwnProfileRightsAndRedirect);

  // checks if user is anonymous and redirects to login page
  function checkEditOwnProfileRightsAndRedirect() {
    if (isLoggedIn() !== true || !check()) {
      openLightBox_NEW(
        'error',
        'Oops!',
        'You must first login to view this page.',
        {
          onclose:function() {
            window.location.href = "/sign-in?redirect=" + window.location.href;
          }
        }
      );
      return;
    }
  }
}




// this function gets the cookie, if it exists
function getCookie( name ) {
  var start = document.cookie.indexOf( name + "=" );
  var len = start + name.length + 1;
  if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
    return null;
  }
  if ( start == -1 ) return null;
  var end = document.cookie.indexOf( ";", len );
  if ( end == -1 ) end = document.cookie.length;
  return unescape( document.cookie.substring( len, end ) );
}

function displayUserName() {

  var strLoginStatus1="<h3>Welcome to Blockr, ";
  var strLoginStatus2;
  var userName;
  var strHTML;
  if(isLoggedIn())
  {  
    userName=globalUserData.displayName+".";
    strLoginStatus2="<a href=\"./logout\" onclick='logoutUser(); return false;'> Logout</a></h3>";
    
    var myBlockr = $('my_blockr_menu');
    if (myBlockr) {
      myBlockr.href = "/user/dashboard";
    }
  }
  else {
    userName="You are not signed in. ";
    var url = window.location.href;
    var redirect = queryString('redirect');
    if(redirect) {
      url = url.replace("redirect=" + redirect,'');
      url = url.replace("redirect=" + Url.encodeURIComponent(redirect),'');
      url = url.replace("redirect=" + Url.encode(redirect),'');
    }
    redirect = Url.encodeURIComponent(url);
    strLoginStatus2="<a href=\"/sign-in?redirect="+redirect+"\">Login</a> or <a href=\"/sign-in?redirect="+redirect+"\">Register a Free Account</a>.  </h3>";
    
  }

  strHTML=strLoginStatus1+userName+strLoginStatus2;
  var divLoginStatus = $("loginStatus");
  if(divLoginStatus)
    divLoginStatus.innerHTML=strHTML;
  

  var cartMenu = $('cart_menu');
  if (cartMenu) {
    var cartHtml = '';
    if (globalUserData && parseInt(globalUserData.cartItems) > 0) {
      cartHtml += '<a href="/cart">My Cart <em id="cart_quantity">('+globalUserData.cartItems+')</em> ';
      cartHtml += '<img src="/images/icon_cart.gif" width="20" height="11" border="0" alt="My Cart"/></a>';
      cartMenu.innerHTML = cartHtml;
    }
    else {
      cartHtml += '<a href="#" onclick="openLightBox_NEW(\'notification\', \'\',  \'Your cart is empty.\'); return false;">'
          + 'My Cart <em id="cart_quantity">(0)</em> ';
      cartHtml += '<img src="/images/icon_cart.gif" width="20" height="11" border="0" alt="My Cart"/></a>';
      cartMenu.innerHTML = cartHtml;
    }
    
  }
} 

function getXMLTagValue(response, tagName) {
  var returnVal = null;
  if (response) {
    if (response.getElementsByTagName(tagName) && response.getElementsByTagName(tagName).length && response.getElementsByTagName(tagName)[0].firstChild) {
      returnVal = response.getElementsByTagName(tagName)[0].firstChild.nodeValue;
    }
    else {
    }
  }
  return returnVal;
}

function validateEmail(email) {
  if (/^[ ]*\w+([\.-]?\w+)*@(\w{2})+([\.-]?\w+)*(\.\w{2,6})+[ ]*$/.test(email)) {
    return true;
  }
  return false;
}


function validateMultipleEmail(email) {

  var emails = email.split(',');
  for (i=0;i<emails.length;i++) {
    if (validateEmail(emails[i]) == false) {
      return false;
    }
  }
  return true;
}



/******************************  Money formatting  ********************************/
// TODO: find a better place for this functions since block.js
// is not used on all pages an we cannot place them there

// Set floating point precision (used on money with precision 2)

if (typeof Number.prototype.toFixed != 'function') {
  Number.prototype.toFixed = function(precision) {
    var num = (Math.round(this * Math.pow(10, precision))).toString();
    if (num == "0")
      num = "000";
    else if(num.length < 3)
      num = "0" + num;
    return num.substring(0, num.length-precision) + "." + num.substring(num.length-precision, num.length);
  }
}

// Set floating point precision (used on money with precision 2)
Number.prototype.toMoneyString=function(x) {

  if (browser.isIE5up)
    return Number.prototype.toLocaleString.apply(this);

  var number = Math.floor(this);
  var cents = this - number;
  var decimalSeparator = Number("1.2").toLocaleString().substr(1,1);
  cents = cents.toFixed(2).substr(2);
  var temp = number.toLocaleString() + decimalSeparator + cents;
  return temp;
}

Number.toMoneyString = function(x) {
  if (typeof x != 'number')
    x = parseFloat(x);
  return x.toMoneyString();
}


// Set floating point precision (used on money with precision 2)
String.prototype.toFixed = function(x) {
  var temp = parseFloat(this);
  return temp.toFixed(x);
}

String.prototype.toMoneyString = function(x) {
  var temp = parseFloat(this);
  return temp.toMoneyString();
}


String.prototype.toHtmlNewLines = function() {
  if (typeof this == "object") {
    return this.replace(/\n/gi, "<br/>");
  }
  else return this;
}

String.toHtmlNewLines = function(x) {
  // convert to string if avaylable
  if (x && typeof x.toString == 'function') {
    x = x.toString();
  }
  // return object if it cannot be converted to string
  if (typeof x != 'string') return x;
  return x.toHtmlNewLines();
}

String.prototype.toPlainTextNewLines = function() {
  if (typeof this == "object") {
    return this.replace(/<br\/>/gi, "\n");
  }
  else return this;
}

String.toPlainTextNewLines = function(x) {
  // convert to string if avaylable
  if (x && typeof x.toString == 'function') {
    x = x.toString();
  }
  // return object if it cannot be converted to string
  if (typeof x != 'string') return x;
  return x.toPlainTextNewLines();
}



/*******************************************************************************/


/******************************  Search function  ********************************/
// TODO: find a better place for this functions since block.js

function search() {
  var searchValue = Url.encodeURIComponent($('searchValue').value);
  window.location='/blocks/gallery?search='+searchValue;
}

Event.observe(window, 'load',function() {
  $('searchValue').onkeydown = function(e){
    var keynum;
    if(window.event) {
      keynum = e.keyCode;
    }
    else if(e.which) {
      keynum = e.which;
    }
    if(keynum == 13) {
      search();
    }
  }
})

/*******************************************************************************/

