function getTweets(username, n, container)
{
  var twitterUrl = getUrl("default/ajax/twitter", "n="+n+"&username="+username+"&key="+getAjaxKey());
  new Ajax.Request(twitterUrl, {
    method:"get",
    asynchronous:true,
    requestHeaders: {Accept: "application/json"},
    onSuccess: function(transport){
       var json = transport.responseText.evalJSON();
       var box = container;
        box.innerHTML = "";
        if(json.length) {
          for(var i=0;i<json.length;i++) {
            var tweetText = json[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
              return "<a href='"+url+"'>"+url+"</a>";
            }).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
              return  reply.charAt(0)+'<a href="http://twitter.com/'+reply.substring(1)+'">'+reply.substring(1)+'</a>';
            })
            var tweetDate = json[i].created_at;
            var tweetHour = tweetDate.substring(11, 13);
            var tweetMinute = tweetDate.substring(14, 16);
            var tweetDay = tweetDate.substring(8, 10);
            var tweetMonth = tweetDate.substring(4, 7);
            var tweetYear = tweetDate.substring(26, 30);
            box.innerHTML += "<div class='tweet'><div class='tweetText'><div class=\'pText\'>"+tweetText+"</div></div><div class='tweetDate'>"+tweetHour+":"+tweetMinute+" "+tweetDay+" "+tweetMonth+" "+tweetYear+"</div></div>";
          }
        } else {
          box.innerHTML += "<div class='noTweets'>No Tweets Yet</div>";
        }
     }
  });
}
function toggleElement(id, callback)
{
	var element = document.getElementById(id);
	if(element) {
		if(element.style.display == 'none') {
			element.style.display = 'block';
		} else {
			element.style.display = 'none';
		}
		positionFooter();
    if(typeof(callback) == 'function') callback();
	}
}
function openLinkInParent(url, isPopup)
{
  if(isPopup) {
    window.opener.location=url; 
    window.opener.focus(); 
    return false;
  } else {
    return true;
  }
}
function showContent(divs, show)
{
  for(i=0;i<divs.length;i++) {
    var divId = divs[i];
    var box = document.getElementById(divId);
    box.style.display = show == divId ? 'block' : 'none';
  }
}
function closeMessage()
{
  document.getElementById('mainMessage').style.display = 'none';
}
function positionFooter()
{
  var footerWrapperElement = document.getElementById('footerWrapper');
  if(footerWrapperElement) {
    footerWrapperElement.style.position = 'static';
    footerWrapperElement.style.position = 'absolute';
	}
}
function popup(url, x, y)
{
	popup = window.open(url, 'popup', 'resizable=0,location=0,status=0,scrollbars=0,width='+x+',height='+y);
	popup.focus();
}
function getUrl(action, params)
{
	parts = action.split('/', 3);
	if(parts.length == 3) {
		module = parts[0];
		controller = parts[1];
		action = parts[2];
	} else {
		module = "";
		controller = parts[0];
		action = parts[1];
	}
	return '/?action=' + action + '&controller=' + controller + '&module=' + module + '&' + params;
}
var loadComplete = false;
function addLoadEvent(func) {
  var oldonload = window.onload;
  if(loadComplete) {
    func();
  } else {
    if (typeof oldonload != 'function') {
      window.onload = function() {
        setLoadComplete();
        func();
      }
    } else {
      window.onload = function() {
        oldonload();
        func();
      }
    }
  }
}
function setLoadComplete()
{
  loadComplete = true;
}
function addShadowboxParams() {
  var links = document.getElementsByTagName('A');
  for(var k=0; k<links.length; k++) {
    var link = links[k];
    if(link.rel && (link.rel.substring(0,9) == 'shadowbox' || link.rel.substring(0,8) == 'lightbox')) {
      if(link.href.substring(0,1) == '/' || link.href.substring(0,7) == 'http://') {
        if(link.href.indexOf('?') !== -1) {
          var paramText = "&";
        } else {
          var paramText = "?";
        }
        paramText += "context=popup";
        var hashPos = link.href.indexOf('#');
        if(hashPos !== -1) {
          link.href = link.href.substring(0,hashPos)+paramText+link.href.substring(hashPos);
        } else {
          link.href += paramText;
        }
      }
    }
  }
}
function listen(evnt, elem, func) {
  if (elem.addEventListener) {
    elem.addEventListener(evnt,func,false);
  } else if (elem.attachEvent) {
    var r = elem.attachEvent("on"+evnt, func);
    return r;
  }
}
function getRadioValue(form, name)
{
  var elements = form.elements[name];
  for (i=0;i<elements.length;i++) {
    if (elements[i].checked) {
      return elements[i].value;
    }
  }
  return false;
}
function displayTab(tabs, show, pref, callback)
{
	for(var i = 0; i < tabs.length; i++)
	{
		tab = tabs[i];
		document.getElementById(tab + pref + 'TabContent').style.display = (tab == show ? 'block' : 'none');
		document.getElementById(tab + pref + 'Tab').className = (tab == show ? 'current' : '');
	}
  positionFooter();
  if(typeof(callback) == 'function') callback();
}
function selectAllCheckboxes(inputName, select){
	inputs = document.getElementsByTagName('input');
	for(var i = 0; i < inputs.length; i++) {
		var input = inputs[i];
		if((input.name == inputName || input.name == inputName + "[]") && input.type == 'checkbox') {
			input.checked = select ? "checked" : "";
		}
	}
}
function formGetElement(form, name)
{
  for(var i=0; i<form.elements.length; i++) {
    if(form.elements[i].name == name) {
      return form.elements[i];
    }
  }
  return false;
}
function formElementGetValue(element)
{
  if(element.type == "checkbox") {
    return element.checked ? element.value : null;
  } else {
    return element.value;
  }
}
function randomString(string_length) {
	var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
	var randomstring = '';
	for (var i=0; i<string_length; i++) {
		var rnum = Math.floor(Math.random() * chars.length);
		randomstring += chars.substring(rnum,rnum+1);
	}
	return randomstring;
}
function getPadding(obj, side)
{
  if(BrowserDetect.browser == 'Explorer') {
    var padding = getStyle(obj, "padding" + (side == 'left' ? "Left" : "Right"));
  } else {
    var padding = getStyle(obj, "padding-" + side);
  }
  padding = parseInt(padding);
  return padding;
}
function getMargin(obj, side)
{
  if(BrowserDetect.browser == 'Explorer') {
    var margin = getStyle(obj, "margin" + (side == 'left' ? "Left" : "Right"));
  } else {
    var margin = getStyle(obj, "margin-" + side);
  }
  margin = parseInt(margin);
  return margin;
} 
function getStyle(obj, styleProp)
{
  if (obj.currentStyle)
    return obj.currentStyle[styleProp];
  else if (window.getComputedStyle)
    return document.defaultView.getComputedStyle(obj,null).getPropertyValue(styleProp);
}
function fixSelects() {
  if(BrowserDetect.browser == 'Explorer' && BrowserDetect.version > 6) {
    selects = document.getElementsByTagName('SELECT');
    for(var i=0;i<selects.length;i++) {
      var select = selects[i];
      if(select.className != 'small') {
        fixSelect(select);
      }
    }
  }
}
function fixSelect(select) {
  if(BrowserDetect.browser == 'Explorer') {
    listen('mousedown', select, function(event) {
      if(event.srcElement) element = event.srcElement; else element = event.target;
      if(element.style.width != 'auto') {
        if(BrowserDetect.version == 6) {
          if(element.className != 'date_input_day' && element.className != 'date_input_month')  {
            element.style.position = 'absolute';
          }
        }
        element.style.originalWidth = element.offsetWidth + "px";
        element.style.width = 'auto';
      }
    });
    listen('blur', select, function(event) {
      if(event.srcElement) element = event.srcElement; else element = event.target;
      element.style.width = element.style.originalWidth;
      if(BrowserDetect.version == 6) {
        element.style.position = 'static';
      }
    });
    listen('change', select, function(event) {
      if(event.srcElement) element = event.srcElement; else element = event.target;
      element.style.width = element.style.originalWidth;
      if(BrowserDetect.version == 6) {
        element.style.position = 'static';
      }
    });
  }
}
/* ------------------------- Address ---------------------------- */
function initAddressInput(postcodeInputId, formId, prefix)	{
	var input = document.getElementById(postcodeInputId);
	if(!prefix) prefix = "";
	if(input) {
    var container = document.getElementById(postcodeInputId + "_container");
    container.innerHTML += "<span id='"+postcodeInputId+"_findButton_container'><a href='javascript:showAddressInput(\""+postcodeInputId+"\",\""+formId+"\",\""+prefix+"\")' class='buttonFindAddress'>Find</a></span>";
    container.className = 'form_postcode_js';
    var loadingImage = new Image;
    loadingImage.src = '/public/images/layout/loadingTiny.gif';
	}
}
function onSelectAddress(postcodeInputId, formId, prefix, postkey)
{
	var form = document.getElementById(formId);
  new Ajax.Request('http://www.myprospot.com/default/ajax/addressLookup', {
      postBody:'postkey=' + postkey + "&key=" + getAjaxKey(),
      onSuccess:function(t) {
        var xml = t.responseXML.documentElement;

        var values = new Array;
        for(i=0;i<xml.childNodes.length;i++) {
          node = xml.childNodes[i];
          if(node.nodeType == 1) {
            if(node.firstChild) {
              var value = node.firstChild.nodeValue;
            } else {
              var value = "";
            }
            values[node.tagName] = value;
          }
        }

        form.elements[prefix ? prefix + 'Address1' : 'address1'].value 	= (values['property'] ? values['property'] + " " : "") + values['street'];
        form.elements[prefix ? prefix + 'Address2' : 'address2'].value 	= values['locality'];
        form.elements[prefix ? prefix + 'City'     : 'city'].value 		= values['town'];
        form.elements[prefix ? prefix + 'State'    : 'state'].value 		= values['county'];
        form.elements[prefix ? prefix + 'Postcode' : 'postcode'].value 	= values['postcode'];
        if(form.elements[prefix ? prefix + 'Postkey' : 'postkey']) form.elements[prefix ? prefix + 'Postkey' : 'postkey'].value = values['postkey'];
      }
    });
    Shadowbox.close();
}
function showAddressInput(postcodeInputId, formId, prefix)
{
	var input = document.getElementById(postcodeInputId);
	if(!prefix) prefix = "";
	if(input) {
    var url = 'http://www.myprospot.com/default/ajax/addressList?type=popupSelect';
    if(url.indexOf("?") !== -1) {
      url += "&postcode="+input.value;
    } else {
      url += "?postcode="+input.value;
    }
    url += "&key=" + getAjaxKey();
    document.getElementById(postcodeInputId+"_findButton_container").innerHTML = '<span class="loadingTiny">Loading...</span>'
    new Ajax.Request('http://www.myprospot.com/default/ajax/addressList', {
		  postBody:'postcode=' + input.value + "&key=" + getAjaxKey() + "&id=" + postcodeInputId,
		  onSuccess:function(t) {
        var xml = t.responseXML.documentElement;
        var addresses = xml.getElementsByTagName('address');
        var ul = document.createElement('UL');
        if(addresses.length > 0) {
          for(var i=0;i<addresses.length;i++) {
            var address = addresses[i];
            li = document.createElement('LI');
            li.id = address.getElementsByTagName('postkey')[0].childNodes[0].data;
            li.innerHTML = "<a href='javascript:onSelectAddress(\""+postcodeInputId+"\", \""+formId+"\", \""+prefix+"\", \""+li.id+"\")'>" + address.getElementsByTagName('string')[0].childNodes[0].data + "</a>";
            ul.appendChild(li);
          }
          var sbContent = "<div id='"+postcodeInputId + "_select' class='address_select'><ul>" + ul.innerHTML + "</ul></div>";
        } else {
          var sbContent = "<div id='"+postcodeInputId + "_select' class='address_select_na'><div class='na'>Postcode Not Found</div></div>";
        }
        Shadowbox.open({
          content:    sbContent,
          player:     "html",
          title:      "Find your Address",
          height:     350,
          width:      350
        });
        document.getElementById(postcodeInputId+"_findButton_container").innerHTML = "<a href='javascript:showAddressInput(\""+postcodeInputId+"\",\""+formId+"\",\""+prefix+"\")' class='buttonFindAddress'>Find</a>";
      }
    });
	}
}
/* --------------------- category select -------------------- */
function initCategoryTextInput(categoryInputId, hiddenName, hiddenValue, callback)	{
	var container = document.getElementById('autocomplete_container_'+categoryInputId);
	var input = document.getElementById(categoryInputId);
	if(container) {
		var suggestions = document.createElement('div');
		suggestions.className = 'autocomplete';
		suggestions.id = categoryInputId + '_suggestions';
		var indicator = document.createElement('div');
		indicator.id =  categoryInputId + '_suggestions_loading';
		indicator.className = 'autocomplete_loading';
		indicator.style.display = 'none';
		var image = document.createElement('img');
		image.src = '/public/images/layout/loading.gif';
		image.alt = 'Loading';
		indicator.appendChild(image);
		container.appendChild(indicator);
		container.appendChild(suggestions);
		var hiddenInput = document.createElement('input');
		hiddenInput.name = hiddenName;
		hiddenInput.type = 'hidden';
		hiddenInput.value = hiddenValue;
		hiddenInput.id = "category_hidden_"+categoryInputId;
		container.appendChild(hiddenInput);
		var ajaxKey = getAjaxKey();
		new Ajax.Autocompleter(categoryInputId, categoryInputId + '_suggestions', '/default/ajax/categorySearch?type=ajaxAutocomplete', {
      parameters:'key='+ajaxKey,
			indicator:categoryInputId + '_suggestions_loading',
			paramName:'q',
			minChars:3,
			updateElement:function(li) {
				input.value = li.firstChild.data
				hiddenInput.value = li.id;
				if(callback!==undefined && li.id) {
          var categoryid = li.id;
          eval(callback)
				}
			}
		});
	}
}
/* ----------------- category select master/slave -------------- */
function initCategoryMasterInput(id, name, value, masterValue, slaveValue, callback)
{
	var container = document.getElementById('master_container_'+id);
	var input = document.getElementById(id);
	
  var html = "";
  html += '<select id="master_'+id+'" onchange=" onChangeCategoryMaster(\''+id+'\', \'' + name + '\', this.value, null, ' + (callback ? '\''+callback+'\'' : 'null') + ')" name="'+name+'_master">';
  html += '<option value=""> - Classification - </option>';
  html += '</select>';
  html += '<input type="hidden" name="'+name+'" value="'+value+'" id="hidden_input_'+id+'">';
  container.innerHTML = html;
  
  updateSlaveSelectOptions("", id);
  
  document.getElementById('master_'+id).disabled = true;
		
  var ajaxKey = getAjaxKey();
	new Ajax.Request(getUrl('default/ajax/descendantCategories', 'category=-1&childrenOnly=1'),
	{
   postBody:'key='+ajaxKey,
	 onSuccess: function(transport){
	  var response = transport.responseXML.documentElement;
	  var cats = response.getElementsByTagName('category');
	  var selectHtml = "";
	  var n = 0;
	  var selectElement = document.getElementById('master_'+id);
	  for(i = 0; i < cats.length; i++) {
	    var currentNode = cats[i];
      if(currentNode.nodeName !== '#text') {
        var categoryId = currentNode.getAttribute('id');
        var categoryName = currentNode.firstChild.nodeValue;
        var optionElement = document.createElement('OPTION');
        optionElement.setAttribute('value', categoryId);
        optionElement.appendChild(document.createTextNode(categoryName));
        selectElement.appendChild(optionElement);
        n++;
      }
	  }
    selectElement.disabled = false;
    selectElement.value = masterValue;
    
    if(masterValue) onChangeCategoryMaster(id, name, masterValue, slaveValue);
	 }
	});
}
function onChangeCategoryMaster(id, name, value, slaveValue, callback)
{
	var ajaxKey = getAjaxKey();
	new Ajax.Request(getUrl('default/ajax/descendantCategories', 'category='+value),
	{
   postBody:'key='+ajaxKey,
	 onSuccess: function(transport){
	  var response = transport.responseXML.documentElement;
	  cats = response.getElementsByTagName('category');
	  var selectHtml = "";
	  var n = 0;
	  for(i = 0; i < cats.length; i++) {
	    node = cats[i];
		if(node.nodeName !== '#text') {
	      selectHtml += "<option value='"+node.getAttribute('id')+"'"+(slaveValue && slaveValue == node.getAttribute('id') ? " selected='selected'" : "")+">"+node.firstChild.nodeValue+"</option>";
		  n++;
		}
	  }
	  updateSlaveSelectOptions(selectHtml, id, callback);
	 }
	});
	document.getElementById('hidden_input_'+id).value = value;
	categoryid = value;
	if(callback) eval(callback);
}
function onChangeCategorySlave(id, callback)
{
	var masterInput = document.getElementById('master_' + id);
	var input = document.getElementById('slave_' + id);
	var masterValue = masterInput.value;
	var value = input.value;
	if(!value) value = masterValue;
	document.getElementById('hidden_input_' + id).value = value;
	categoryid = value;
	if(callback) eval(callback);
}
function updateSlaveSelectOptions(content, id, callback)
{
	  var html = "";
	  html += '<select id="slave_'+id+'" onchange=" onChangeCategorySlave(\''+id+'\', ' + (callback ? '\''+callback+'\'' : 'null') + ')" name="'+name+'_slave">';
	  html += '<option value=""> - Profession - </option>';
	  var disabled = true;
	  if(content) {
		  html += content;
		  disabled = false;
	  }
	  html += '</select>';
	  document.getElementById('slave_container_'+id).innerHTML = html;
	  document.getElementById('slave_'+id).disabled = disabled;
	  fixSelect(document.getElementById('slave_'+id));
}
/* -------------------- ratign fields ----------------------- */
function updateRatingFields(categoryid, values, showId) {
	var ajaxKey = getAjaxKey();
  new Ajax.Request('http://www.myprospot.com/default/ajax/categoryRatingFields', {
    postBody:'categoryid=' + categoryid + '&key=' + ajaxKey,
    onSuccess: function(t) {
      var response = t.responseXML.documentElement;
      fields = response.getElementsByTagName('ratingField');
      if(document.getElementById('ratingFields')) {
        document.getElementById('ratingFields').innerHTML = '';
        mpsSliderElements = new Array;
        for(i = 0; i < fields.length; i++) {
         var name = fields[i].firstChild.nodeValue;
         var id = fields[i].getAttribute('id');
         var value = (values instanceof Array ? values[id] : "");
         if(value === undefined || !value) value = "";
         elementId = "slider_" + randomString(8);
         document.getElementById('ratingFields').innerHTML += '<div class="form_row_rating"><div class="form_row"><div class="label"><span class="label">' + name + '</span></div><div class="input"><span class="ratingInputContainer"><input type="text" size="3" id="'+elementId+'" name="field[' + id + ']" id="rating_field_' + id + '" value="' + value + '" /> %</span></div><div class="clear"></div></div></div>';
         mpsSliderElements[i] = elementId;
        }
        fdSliderController.removeOnLoadEvent();
        for(j=0;j<mpsSliderElements.length;j++) {
         elementId = mpsSliderElements[j];
         fdSliderController.createSlider({
            inp:            document.getElementById(elementId),
            inc:            '1',
            maxInc:         '2',
            range:          [0,100],
            callbacks:      {},
            tween:          true,
            vertical:       false,
            hideInput:      false,
            clickJump:      false,
            fullARIA:       false,
            noMouseWheel:   false
         });
        }
        if(showId !== undefined) {
          var showBoxes = showId.split(",");
          var display = new Array();
          for(i = 0; i< showBoxes.length; i++) {
            show = document.getElementById(showBoxes[i]);
            display[i] = show.style.display;
            if(display[i] == 'none') {
              show.style.display = 'block';
            }  
          }
        }
        if(showId !== undefined) {
          for(i = 0; i< showBoxes.length; i++) {
            show = document.getElementById(showBoxes[i]);
            show.style.display = display[i];
          }
        }
        fdSliderController.redrawAll();
      }
    }
  });
}
