// general functions

Array.prototype.min = function(){
	return Math.min.apply({},this)
}

Array.prototype.max = function(){
	return Math.max.apply({},this)
}


function searchSelect(input_id, select_id) {
	//var input = $(input_id).value;
	var output = $(select_id).options;
  	
  	$(input_id).observe('keyup', function(event) {
  		
	  	for(var i=0;i<output.length;i++) {

		    if(output[i].text.toLowerCase().indexOf($(input_id).value.toLowerCase()) >= 0){
		    	output[i].selected=true;
		     	 return;
		    }
		    if($(input_id).text==''){
		      output[0].selected=true;
		    }
	  	}
  	});
}

function isHidden(item_name) {
	if ($(item_name).style.display == "none")
		return true;
	else return false;
}

function toggleBlindItem(item_name) {
	var a_item = $(item_name);
	if (a_item.style.display=="none") {
		new Effect.BlindDown(item_name, {duration:0.2});
		return false;
	} else
	new Effect.BlindUp(item_name, {duration:0.2});
}

function replaceChars(a_string, out, add)
{
	//out = "a"; // replace this
	//add = "z"; // with this
	temp = "" + a_string; // temporary holder
	
	while (temp.indexOf(out)>-1)
	{
		pos= temp.indexOf(out);
		temp = "" + (temp.substring(0, pos) + add + temp.substring((pos + out.length), temp.length));
	}
	return temp;
}


function my_encodeURI(a_string)
{
	var string = a_string;
	//string = replaceChars(string, "#", "%23");
	string = encodeURI(string);
	//var i=0;
	//for (i=0;i<string.length;i++)
	//{
	//	if (string[i] == '&') string[i] = 
	//}
	string = replaceChars(string, "&", "%26");
	string = replaceChars(string, "?", "%3F");
	//string = replaceChars(string, "#", "%23");
	
	//string = replaceChars(string, "?", "%3F");
	//string = replaceChars(string, "?", "%3F");
	//string = replaceChars(string, "?", "%3F");
	
	//, / ? : @ & = + $ #
	
	return string;
}


function encode64(input)
{
   var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   do {
      chr1 = input.charCodeAt(i++);
      chr2 = input.charCodeAt(i++);
      chr3 = input.charCodeAt(i++);

      enc1 = chr1 >> 2;
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
      enc4 = chr3 & 63;

      if (isNaN(chr2)) {
         enc3 = enc4 = 64;
      } else if (isNaN(chr3)) {
         enc4 = 64;
      }

      output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + 
         keyStr.charAt(enc3) + keyStr.charAt(enc4);
   } while (i < input.length);
   
   return output;
}

function decode64(input)
{
   var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
   input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

   do {
      enc1 = keyStr.indexOf(input.charAt(i++));
      enc2 = keyStr.indexOf(input.charAt(i++));
      enc3 = keyStr.indexOf(input.charAt(i++));
      enc4 = keyStr.indexOf(input.charAt(i++));

      chr1 = (enc1 << 2) | (enc2 >> 4);
      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
      chr3 = ((enc3 & 3) << 6) | enc4;

      output = output + String.fromCharCode(chr1);

      if (enc3 != 64) {
         output = output + String.fromCharCode(chr2);
      }
      if (enc4 != 64) {
         output = output + String.fromCharCode(chr3);
      }
   } while (i < input.length);

   return output;
}


function toggleWebDebugCCMessages(messages, url)
{
	var a_item = $('sfWebDebugCCMessages');
	if (a_item.style.display!="none")
	{
		a_item.hide();
		$('sfWebDebugCCMessages').innerHtml = '';
		return false;
	}
	
	web_debug_cc_messages_changes = $H();
	
	var parameters = messages.toQueryString();
	//alert(parameters);

	var ajax_params = new Object();
	ajax_params.parameters = parameters;
	ajax_params.evalScripts = true;
	ajax_params.onLoading = function()
		{
			$('sfWebDebugCCMessages').innerHtml = 'wait....';
		};
	
	//alert(ajax_params.inspect());
	var ajax = new Ajax.Updater('sfWebDebugCCMessages',url, ajax_params);
	
	
	sfWebDebugShowDetailsFor('sfWebDebugCCMessages');
	return false;
}





function webDebugCCMessagesOnSubmitCallback(url)
{
	//alert(1);
	var parameters = '';
	
	//alert(web_debug_cc_messages_changes.inspect());
	
	web_debug_cc_messages_changes.each(function (message_properties)
	{
		var message_id = message_properties[0];
		var message_langs = message_properties[1];
		
		var x = $H();
		
		message_langs.each(function (lang)
		{
			var lang_name = lang[0];
			var lang_changed = lang[1];
			
			if (lang_changed)
			{
				var a_val = $F('webdebug_cc_message_'+lang_name+'['+message_id+']');
				//alert(message_id+' '+a_val);
				//parameters.set('message_'+message_id+'_'+lang_name,encode64(a_val));
				if (a_val.length>0)
				{
					parameters += 'message_'+message_id+'_'+lang_name+'='+my_encodeURI(a_val)+'&';
				}
				else
				{
					parameters += 'message_'+message_id+'_'+lang_name+'&';
				}

			}
			//alert(message_id+' '+lang.inspect());
		});
	});
	
	//parameters = parameters.toQueryString();
	//alert(parameters);

	var ajax_params = new Object();
	ajax_params.parameters = parameters;
	ajax_params.evalScripts = true;
	ajax_params.onComplete = function(response)
		{
			//alert(response.responseText);
			window.location.href = window.location.href;
		};
	
	//alert(ajax_params.inspect());
	var ajax = new Ajax.Request(url, ajax_params);
	//alert(1); /misc/setWebDebugCCMessages
	
	return false;
}

function webDebugCCMessagesInputOnChangeCallback(message_id, lang)
{
	//alert('webDebugCCMessagesInputOnChangeCallback '+message_id);
	if (!web_debug_cc_messages_changes.get(message_id)) web_debug_cc_messages_changes.set(message_id, $H());
	web_debug_cc_messages_changes.get(message_id).set(lang, true);
	//alert(web_debug_cc_messages_changes.inspect());
}


function toggleWebDebugCCMessageInput(message_id, lang)
{
	var input_id = 'webdebug_cc_message_'+lang+'['+message_id+']';
	//var container = $(input_id+'_container');
	var input = $(input_id);
	
	if (input.style.height == '20px')
	{
		input.style.width = '300px';
		input.style.height = '150px';
		
		return false;
	}
		
	input.style.height = '20px';
	input.style.width = '150px';
	
	return false;
}



document.observe("dom:loaded", function() {

  $$('.confirm-box').each(function(item) {
  	
     	if(item.nodeName == "A") {
     		item.observe('click', function (event) {	  		
		  		event.stop();
		  		var blockUserConfirmation = new LITBox('Are you sure?', {type:'confirm', overlay:true, height:150, width:400, opacity:1, func: function(){
						 f = document.createElement('form'); 
						 document.body.appendChild(f); 
						 f.method = 'post'; 
						 f.action = item.href; 
						 f.submit()
				}});	
			});
     	} else if(item.nodeName == "FORM") {
     		item.observe('submit', function (event) {  		
		  		event.stop();
		  		var blockUserConfirmation = new LITBox('Are you sure?', {type:'confirm', overlay:true, height:150, width:400, opacity:1, func: function(){
						 item.submit();
				}});	
			});
     	}
	});

  if ($('quick_search_box') != null){
    quick_search_before_focus_word = '';
    quick_search_keyup = false;
    quick_search_list_filled = false;
    quick_search_rows_amount = 0;
    quick_search_active = false;
    quick_search_active_element = null;
    quick_search_displayed_elements = new Array();
    quick_search_default_values = new Array();

    $('quick_search_input').observe('focus', function(){
      quick_search_active = true;
      if (!quick_search_keyup){
        quick_search_before_focus_word = this.value;
        this.value = '';
      }

      if (!quick_search_list_filled){
        new Ajax.Updater('quick_search_result', '/user/getQuickSearchList', {
        })
        quick_search_list_filled = true;
      }

      var offsets = this.cumulativeOffset();
      $('quick_search_result').setStyle({
        top: (offsets[1]+17)+'px',
        left: (offsets[0]-90)+'px'
      });
    });

    $('quick_search_input').observe('blur', function(e){
      quick_search_active = false;
      if (!quick_search_keyup){
        this.value = quick_search_before_focus_word;
      }
      var t = setTimeout(function(){$('quick_search_result').hide()}, 500);
    });

    $('quick_search_input').observe('keyup', function(e){
      if (quick_search_active){
        quick_search_displayed_elements = new Array();
        $$('.quick_search_row').each(function(e){
          if (e.getStyle('display') == 'block'){
            quick_search_displayed_elements.push(e);
          }
        });
        switch(e.keyCode){
          case 38: //arrow up
            if (quick_search_active_element == 0){
              quick_search_active_element = null;
            }else if(quick_search_active_element != null){
              quick_search_active_element --;
            }
            break;
          case 40: //arrow down
            if (quick_search_active_element == null){
              quick_search_active_element = 0;
            }else if(quick_search_active_element < (quick_search_displayed_elements.length - 1)){
              quick_search_active_element ++;
            }
            break;
          case 13:
            if (quick_search_active_element != null){
              var w = window.location = quick_search_displayed_elements[quick_search_active_element].getAttribute('href');
              return false;
            }else{
              $('quick_search_form').submit();
            }
            return false;
            break;
          default:
            quick_search_keyup = true;
            var searchText = this.value;
            if (quick_search_rows_amount > 0){
              for(i = 0; i < quick_search_displayed_elements.length; i ++){
                children = quick_search_displayed_elements[i].childElements();
                children[1].innerHTML = quick_search_default_values[i];
              }
            }
            quick_search_rows_amount = 0;
            quick_search_default_values = new Array();
            quick_search_displayed_elements = new Array();
            $$('.quick_search_row').each(function(e){
              e.setStyle({
                display: 'none'
              })
            });
            $$('.quick_search_row').each(function(e){
              if (quick_search_rows_amount < 5){
                children = e.childElements();
                text = children[1].innerHTML;
                myRegexp = new RegExp(searchText,'i');
                if(text.search(myRegexp) >= 0){
                  e.setStyle({
                    display: 'block'
                  })
                  quick_search_default_values.push(text);

                  str2 = text;
                  match2 = searchText
                  pos = str2.toLowerCase().indexOf(match2.toLowerCase())
                  children[1].innerHTML =  str2.substr(0,pos) + '<em class="highlight">' + str2.substr(pos,match2.length) + '</em>' + str2.substr(pos+match2.length,str2.length)

                  quick_search_displayed_elements.push(e);
                  quick_search_rows_amount ++;
                }
              }
            });
            quick_search_active_element = null;
            if (quick_search_displayed_elements.length > 0){
              $('quick_search_result').setStyle({display: 'block'});
            }
            if (searchText == ''){
              $('quick_search_result').setStyle({display: 'none'});
              quick_search_keyup = false;
            }
            break;
        }
        if (quick_search_displayed_elements.length > 0){
          for(i = 0; i < quick_search_displayed_elements.length; i++){
            quick_search_displayed_elements[i].removeClassName('current');
          }
          if (quick_search_active_element != null){
            quick_search_displayed_elements[quick_search_active_element].addClassName('current');
          }
        }
      }
    });
  }
});


// This function detects the position of container for welcome page and sets
function repositionFooter()
{
	if(!$('welcome-footer'))
	{ return false; }
	
	containerDivH = $('container').getHeight();
	footerDivH = $('welcome-footer').getHeight();
	
	// AcctualH refers to footer itself while DivH to footer's div container
	footerAcctualH = footerDivH + 5;
	
	footerTop		= footerAcctualH - containerDivH;
	footerLeft	= 0;

	Element.clonePosition($('welcome-footer'),$('container'),{'setWidth': false, 'setHeight': false, 'offsetTop': -footerTop, 'offsetLeft': footerLeft});
}

function toggleBox(elementId){
  $(elementId).toggle();
  return false;
}

function addCommentForNotification(externalId, url){
  
  if ($('notification_comment_input_'+externalId).value != ''){
    var parameters = $H();
    parameters.set('notification_id', externalId);
    parameters.set('body', $('notification_comment_input_'+externalId).value);
    parameters = parameters.toQueryString();
    
    new Ajax.Updater('feed_list_comments_'+externalId, url, {
      method: 'post',
      parameters: parameters,
      onFailure: function(){
          $('statusText').innerHTML = oldText;
          alert('error_while_status_changing');
      }
    });
  }
  return false;
}

function showFeedCommentContainer(externalId){
  if (!$('feed_tab_comments_'+externalId).visible() || !$('commentsBox_'+externalId).visible()){
    $('feed_tab_comments_'+externalId).show();
    $('commentsBox_'+externalId).show();
  }
  
  new Effect.Highlight('notification_comment_input_'+externalId);
}

function switchNewsFeed(type, url){
  var parameters = $H();
  parameters.set('feedFilter', type);
  params = parameters.toQueryString();
  new Ajax.Updater('news_feed_container', url, {
    method: 'post',
    parameters: params,
    evalScripts: true
  });
}

function switchPremiumList(type, url){
  var parameters = $H();
  parameters.set('type', type);
  params = parameters.toQueryString();
  new Ajax.Updater('premium_list_container', url, {
    method: 'post',
    parameters: params,
    evalScripts: true
  });
}


function refreshCallendar(urlToGo){
  J.ajax({
    url: urlToGo,
    success: function(msg){
      J('#callendarBox').html(msg);
    }
  })
}