var ie = navigator.userAgent.indexOf("MSIE")>-1;
var ie7 = navigator.userAgent.indexOf("MSIE 7")>-1;

/**
* form validation
*/

var kamValidationErrors = new Array();

function randomString()
{
	var chars = "abcdefghiklmnopqrstuvwxyz";
	var length = 8;
	var randomStr = '';
	for (var i=0; i<length; i++)
	{
		var rnum = Math.floor(Math.random() * chars.length);
		randomStr += chars.substring(rnum,rnum+1);
	}
	return randomStr;
}



function kamValidateFields(formId)
{
	var form = document.getElementById(formId);
	if(form!=null)
	{
		var labels = form.getElementsByTagName("label");
		for (var i = 0; i < labels.length; i++) 
		{
			if (labels[i].htmlFor != "") 
			{
				var element = document.getElementById(labels[i].htmlFor);
				if (element != null) 
				{
				    var controlType = "";
					var elementValue = "";
					
					//determine control type
					(element.tagName == "SELECT" || element.tagName == "TEXTAREA")? controlType = element.tagName.toLowerCase(): controlType = element.type.toLowerCase();
					
					// get the value
					( controlType == "select") ? elementValue=element.options[element.selectedIndex].value : elementValue=element.value;
					elementValue = elementValue.replace(/^\s+|\s+$/g, '');
										
					// check for required
					if (labels[i].className.indexOf("required")>-1) 
					{						
						var empty= false;
						if (controlType == "checkbox")
						{
							(!element.checked) ? empty = true : null;
						}
						else
						{
							(elementValue == "") ? empty = true : null;
						}
						(empty) ? kamGenerateFieldError(labels[i].htmlFor,labels[i].innerHTML,"is required") : null;
					}
					
					// check data types
					if (elementValue != "") 
					{
						// check email type
						if (labels[i].className.indexOf("email")>-1) 
						{
							(!kamIsEmailAddress(elementValue)) ? kamGenerateFieldError(labels[i].htmlFor,labels[i].innerHTML,"is not an email address") : null ;
						}
					}
                }
				else 
				{
					alert(labels[i].htmlFor + " not found in document");
				}
			}
		}
		
        // show the errors that have been generated
		if(kamValidationErrors.length)
		{
			var errorText = "There were the following errors:";
			for (var i = 0; i < kamValidationErrors.length; i++) 
			{
				errorText += "\n- "+kamValidationErrors[i].message;
			}
			alert(errorText);
			kamValidationErrors.length = 0;
			return false;
		}
	}
	else
	{
		alert("Validation of form failed, form is null");
		return false;
	}
	return true;
}
		
function kamRemoveTags(kamSourceString, kamTagName)
{
   var regexp= new RegExp ("<" + kamTagName + "[^.]*\/" + kamTagName + ">", "gi");
   return kamSourceString.replace(regexp,"").replace("  "," ");
}

function kamIsEmailAddress(text)
{
	var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
	return emailPattern.test(text);
}

function kamGenerateFieldError(fieldId,labelText,error)
{
    labelText = kamRemoveTags(labelText.replace(":", "").replace("*", ""), "span");
	error = labelText+" "+error;
	kamValidationErrors[kamValidationErrors.length] = { "id": fieldId, "message": error };
}

var propertySearchVals = {
						 "category" : [],
                         "country" :  [],
                         "location" : [],
                         "development" : []
                         };
   
function propertySearchCallBack()
{
   for( var controlId in propertySearchVals )
   {
	  populateSelect(controlId,propertySearchVals[controlId],1);
   }
}

function populateSelect(id,optionsArray,startIndex)
{
   var control = document.getElementById(id);
   if( control!=null )
   {
      if( control.tagName.toLowerCase()=="select" )
	  {
	     var selectedIndex = 0;
	     control.options.length = startIndex;
         for(var i=0; i<optionsArray.length; i++ )
         {
            var option = new Option(optionsArray[i].value,optionsArray[i].value);
            control.options[i+startIndex] = option;
		    (optionsArray[i].set) ? selectedIndex=(i+startIndex) : null ;
         }
	     control.selectedIndex = selectedIndex;
	  }
	  else
	  {
		 alert("Error: found "+control.tagName.toLowerCase()+" when expecting select on "+id);
	  }
   }
   else
   {
      alert("Error: control '"+id+"' not found");
   }	
}

function swapMainImage(element)
{
   var image  = document.getElementById("mimage");
   if( image!=null )
   {
      image.src = element.src.replace("thumb-","");
      image.alt = element.alt;
   }
}

function casecadeUp(element,state)
{
   if( state=="off" ){ element.className=element.className.replace(" hover","");}
   else{ element.className+=" hover"; }
}

var repopulatingSearch = false;
function beginSearchBoxReload()
{
	if (repopulatingSearch == false) 
	{
		repopulatingSearch = true;
		submit_form_to_ajax_query(document.getElementById("property_search_form"), "/public/command.php?module=properties&command=properties:search", reloadSearchBox, "");
	}
}

function reloadSearchBox( args, response )
{
	eval(response);
	propertySearchCallBack();
	repopulatingSearch = false;
}

function startup()
{
   if( ie && !ie7 )
   {
      var navdiv = document.getElementById("topnavigation");
      var listItems = document.getElementsByTagName("li");
      for( var i=0; i<listItems.length; i++ )
      {
	     listItems[i].onmouseover = function() { casecadeUp(this,"on"); };
         listItems[i].onmouseout = function() { casecadeUp(this,"off"); };
	  }
   }
   
   beginSearchBoxReload();
   
   var thumbnails = document.getElementById("thumbnails");
   if( thumbnails!=null )
   {
      var images =  thumbnails.getElementsByTagName('IMG');
	  for( var i=0; i<images.length; i++ )
	  {
	     images[i].onclick = function() { swapMainImage(this); };
		 images[i].style.cursor = "hand";
		 images[i].style.border = "1px";
	  }
	  
	  Shadowbox.init();
   }
}

window.onload = new Function('startup()');
