/*
**************************************************************
Oxfordshire Home Improvements - Common functionality used through the site
Created on: 12/01/2008
Development by: Gavin Davies - Bitpusher Ltd
**************************************************************
*/

// constants
var normal = '#ffffff';
var highlight = '#ffff99';
var fieldset_selected = '#E1E1E1';
var fieldset_normal = '#F1F1F1';
var border_error = 'solid 1px red';
var border_normal = 'solid 1px #7f9db9';
var lb = '\n';

// general functions
function addLoadEvent(func) {	
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

function alertmsg(msg) {
    var newmsg='';
    var tmp = msg.split(lb);
    var firstItem;
    
    // display error at top
    showMsg(msg);
          
    for (var intCounter = 0; intCounter < tmp.length -1; intCounter++) 
	{ 
	    if (intCounter == 0){ firstItem = tmp[intCounter].split('|')[1] }
	    newmsg += intCounter + 1 + '. ' + tmp[intCounter].split('|')[0] + lb;
	    
	}
	
	var elementFocus = document.getElementById(firstItem);
    if (elementFocus !=null){
        elementFocus.focus(); 
        }
        
    alert('You have missed the following form items.\n\n' + newmsg);
}	

function confirmmsg(msg){          
    if (confirm(msg + lb))
        {return true;}
    else
        {return false;} 
}	

function doLink(url) {
  if (url != null){
    document.location.href = url;
  }
}

function replaceTags(xStr){
    var regExp = /<\/?[^>]+>/gi;
    
    xStr = xStr.replace(regExp,"");
    return xStr;
}

function getElementByClass(classname){ 
     var messages=new Array();
     var inc=0; 
     var alltags=document.all? document.all : document.getElementsByTagName("*"); 
     for (i=0; i<alltags.length; i++){ 
       if (alltags[i].className==classname) 
         messages[inc++]=alltags[i]; 
     }
     if(messages != null){return messages;}
     else {return null;}
} 


function checkDateValid(inputField) {

    var blnvalidate = true;
    errorMsg = '';
    resetFormatOnForms(inputField);
   
    // check for valid dates
    if (inputField.value != ''){
        if (validateDate(inputField)){
            blnvalidate = errorHandler(inputField, 'Please enter a valid date.');
        }
    }
    
    if (blnvalidate != true){alertmsg(errorMsg);}
	return blnvalidate;	
}

function isLeapYear(yr) {
  return new Date(yr,2-1,29).getDate()==29;
}
	
// error handling
function errorHandler(formElement, errMsg){
    
    if (formElement!=null){
    
        if (formElement.type == 'checkbox') {
            formElement.style.backgroundColor = highlight;
            }
        else{
            formElement.style.backgroundColor = highlight;
            }
        
	    errorMsg += errMsg + '|' + formElement.id +lb;
        return false;
    }			    
}

function showMsg(msg) {
    var newmsg='';
    var tmp = msg.split(lb);
    var strHTML = '';
    //var elementDiv = document.getElementById("error_msg");
    var elementDivWrap = document.getElementById("nav_error");
              
    // Build error list
    strHTML = '<h2>Form information incorrect</h2>';
    strHTML += '<p id="errormessage">You have missed the following form item(s). Please enter these details and try again.</p>';
    strHTML += '<div id="error_msg">';
    strHTML += '<ul>';
    for (var intCounter = 0; intCounter < tmp.length -1; intCounter++) 
	{ 
	    strHTML += '<li><img src="/library/images/req.gif" width="6" height="12" alt="Required field" class="reqField" /> <a href="#'+ tmp[intCounter].split('|')[1] +'">' + tmp[intCounter].split('|')[0] + '</a></li>';
	}
	strHTML += '</ul>';
    strHTML += '</div>';
	
	if (elementDivWrap!=null)
	{
	    elementDivWrap.className = 'nav_error_show';
	    elementDivWrap.innerHTML = strHTML;
	}
}

function initCustomErrors(){
    var blnvalidate = true;
    var elementHiddenCustomFields = document.getElementById("custom_fields");
    var elementHiddenCustomMsgs = document.getElementById("custom_msg");
    errorMsg = '';
    
    if (elementHiddenCustomFields!=null && elementHiddenCustomMsgs!=null){
    
        if (elementHiddenCustomFields.value.length > 0){
             var tmpFields = elementHiddenCustomFields.value.split("|");
             var tmpMsgs = elementHiddenCustomMsgs.value.split("|");
             
             for (var intCounter = 0; intCounter < tmpFields.length; intCounter++) 
	            { 
	            blnvalidate = errorHandler(document.getElementById(tmpFields[intCounter]), tmpMsgs[intCounter]);            
	            }
        }
        
        if (blnvalidate != true){alertmsg(errorMsg);}
    }
}

//  format functions
function resetFormatOnForms(formElement){
    if (formElement!=null){
        if (formElement.type != 'submit' &&
            formElement.type != 'radio' &&
            formElement.type != 'button' &&
            formElement.type != 'checkbox' ){
            formElement.style.backgroundColor = normal;
        }
        else if (formElement.type == 'checkbox'){
            formElement.style.backgroundColor = 'transparent';
        }
        
    }    
}

// validation functions
function validateForms()
{
	var elementsForms;
	
	if (!document.getElementsByTagName) return false;
	elementsForms = document.getElementsByTagName("form");	
	for (var intCounter = 0; intCounter < elementsForms.length; intCounter++) 
	{ 
	    return validateForm(elementsForms[intCounter]);
	} 
}
	
function validateEmail(elementsInputs, intCounter)
{
	var emailFilter=/^.+@.+\..{2,3}$/;
	if (!emailFilter.test(elementsInputs[intCounter].value)) 
	{ 
		return true; 
	} 
}

function validateCCSecurityNumber(elementsInputs, intCounter, strDefault, strErrorMessage)
{
    var creditCCV2Filter=/^([0-9]{3,4})$/;
    if (intCounter!=null)
    {
	    if (!creditCCV2Filter.test(elementsInputs[intCounter].value) || elementsInputs[intCounter].value == '' || elementsInputs[intCounter].value == strDefault) 
	    {
		    return true;
	    }
	}
	else
	{
	    if (!creditCCV2Filter.test(elementsInputs.value) && elementsInputs.value == '' || elementsInputs.value == strDefault) 
        {
	        return true;
        }
	}
}

function validateCCExpiryDate(elementsInputs, intCounter, strDefault, strErrorMessage) 
{
    var creditCCExpiryFilter=/^((0[1-9])|(1[0-2]))\/(\d{2})$/;
    if (intCounter!=null)
    {
	    if (!creditCCExpiryFilter.test(elementsInputs[intCounter].value) || elementsInputs[intCounter].value == '' || elementsInputs[intCounter].value == strDefault) 
	    {
		    return true;
	    }
	}
	else
	{
	    if (!creditCCExpiryFilter.test(elementsInputs.value) && elementsInputs.value == '' || elementsInputs.value == strDefault) 
        {
	        return true;
        }
	}
}

function validateCCNumber(elementsInputs, intCounter, strDefault, strErrorMessage)
{
    var creditcardFilter=/^3(?:[47]\d([ -]?)\d{4}(?:\1\d{4}){2}|0[0-5]\d{11}|[68]\d{12})$|^4(?:\d\d\d)?([ -]?)\d{4}(?:\2\d{4}){2}$|^6011([ -]?)\d{4}(?:\3\d{4}){2}$|^5[1-5]\d\d([ -]?)\d{4}(?:\4\d{4}){2}$|^2014\d{11}$|^2149\d{11}$|^2131\d{11}$|^1800\d{11}$|^3\d{15}$/;
    if (intCounter!=null)
    {
	    if (!creditcardFilter.test(elementsInputs[intCounter].value) || elementsInputs[intCounter].value == '' || elementsInputs[intCounter].value == strDefault) 
	    {
		    return true;
	    }
	}
	else
	{
	    if (!creditcardFilter.test(elementsInputs.value) && elementsInputs.value == '' || elementsInputs.value == strDefault) 
        {
	        return true;
        }
	}
}

	
function validateNumber(elementsInputs, intCounter, strDefault, strErrorMessage)
{
    var numberFilter=/^\d+$/;
    
    if (intCounter!=null)
    {
	    if (!numberFilter.test(elementsInputs[intCounter].value) || elementsInputs[intCounter].value != '' || elementsInputs[intCounter].value == strDefault) 
	    {
		    return true;
	    }
	}
	else
	{
	    if (!numberFilter.test(elementsInputs.value) && elementsInputs.value != '' || elementsInputs.value == strDefault) 
        {
	        return true;
        }
	}
}

	
function validateText(elementsInputs, intCounter, strDefault, strErrorMessage)
{
	if (elementsInputs[intCounter].value == "" || elementsInputs[intCounter].value == strDefault) 
	{
		return true;
	}
}


function validatePassword(elementsInputs, intCounter, strDefault)
{
    var passwordFilter=/^([a-zA-Z0-9@*#]{8,20})$/;
    
    if (intCounter!=null)
    {
	    if (!passwordFilter.test(elementsInputs[intCounter].value) || elementsInputs[intCounter].value == '' || elementsInputs[intCounter].value == strDefault) 
	    {
		    return true;
	    }
	}
	else
	{
	    if (!passwordFilter.test(elementsInputs.value) && elementsInputs.value == '' || elementsInputs.value == strDefault) 
        {
	        return true;
        }
	}
}

function validatePostCode(elementsInputs, intCounter, strDefault)
{
    var postcodeFilter=/^[A-Za-z]{1,2}[0-9A-Za-z]{1,2}[ ]?[0-9]{0,1}[A-Za-z]{2}$/;
    
    if (intCounter!=null)
    {
	    if (!postcodeFilter.test(elementsInputs[intCounter].value) || elementsInputs[intCounter].value == '' || elementsInputs[intCounter].value == strDefault) 
	    {
		    return true;
	    }
	}
	else
	{
	    if (!postcodeFilter.test(elementsInputs.value) && elementsInputs.value == '' || elementsInputs.value == strDefault) 
        {
	        return true;
        }
	}
}

function validateTelephone(elementsInputs, intCounter, strDefault)
{
    var telephoneFilter=/^[0-9\s\(\)\+\-*]{10,40}$/;
	
	if (!telephoneFilter.test(elementsInputs[intCounter].value) ||elementsInputs[intCounter].value == "" || elementsInputs[intCounter].value == strDefault) 
	{
		return true;
	}
}

function validateMobile(elementsInputs, intCounter, strDefault)
{
	if (elementsInputs[intCounter].value == "" || elementsInputs[intCounter].value == strDefault) 
	{
		return true;
	}
}


function validateDate(elementsInputs, intCounter, strDefault) {
     
    var regEx = /(((0[1-9]|[12][0-9]|3[01])([/])(0[13578]|10|12)([/])(\d{4}))|(([0][1-9]|[12][0-9]|30)([/])(0[469]|11)([/])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([/])(02)([/])(\d{4}))|((29)(\.|-|\/)(02)([/])([02468][048]00))|((29)([/])(02)([/])([13579][26]00))|((29)([/])(02)([/])([0-9][0-9][0][48]))|((29)([/])(02)([/])([0-9][0-9][2468][048]))|((29)([/])(02)([/])([0-9][0-9][13579][26])))/;
    
    // check for array
    if (intCounter !=null){
        if ((elementsInputs[intCounter].value.match(regEx)) && (elementsInputs[intCounter].value != '')) {
            return false;            
        }
        else {
            return true;
        }
    } 
    else{
        if ((elementsInputs.value.match(regEx)) && (elementsInputs.value != '')) {
            return false;            
        }
        else {
            return true;
        }
    }
}

function validateCheckBox(elementsInputs, intCounter, strDefault)
{
	if (elementsInputs[intCounter].checked == false || elementsInputs[intCounter].value == strDefault) 
	{
		return true;
	}
}

function validateRadioBox(elementsInputs, intCounter, strDefault)
{
 	if (elementsInputs[intCounter].checked == false || elementsInputs[intCounter].value == strDefault) 
	{
		return true;
	}
}

function validateSelectBox(elementsSelect, intCounter, strDefault)
{
	// check for array
    if (intCounter !=null){
	    if (elementsSelect[intCounter].selectedIndex == 0 || elementsSelect[intCounter].value == strDefault) 
	    {
		    return true;
	    }
    }
    else{
        if (elementsSelect.selectedIndex == 0 || elementsSelect.value == strDefault) 
	    {
		    return true;
	    }
    }	    
}


function validateLogin(currentForm)
{
	var blnvalidate = true;
	var elementsInputs;
    errorMsg = '';	
    	
	elementsInputs = currentForm.getElementsByTagName("input");
 
    for (var intCounter = 0; intCounter < elementsInputs.length; intCounter++)
    {
        resetFormatOnForms(elementsInputs[intCounter]); // clears form formatting
	    
	    if (elementsInputs[intCounter].className == "reqpassword")
	    {
	        if (validateText(elementsInputs, intCounter, 'password'))
		    {
		        blnvalidate = errorHandler(elementsInputs[intCounter], "Please enter a password.");
		    }
	    }
	    else if (elementsInputs[intCounter].className == "reqemail")
	    {
		    if (validateEmail(elementsInputs, intCounter))
		    {
		        blnvalidate = errorHandler(elementsInputs[intCounter], "Please insert a valid email.");
		    }
	    }
    }
    if (blnvalidate != true){alertmsg(errorMsg);}
	return blnvalidate;		
}


// accessible functions
function presentForm()
{
	var eleDiv; 
	var eleForms;
	
	if (document.getElementById && document.getElementsByTagName)
	{
		eleDiv = document.getElementById("content");
		eleForms = eleDiv.getElementsByTagName("form");
		for (var intCounter = 0; intCounter < eleForms.length; intCounter++)
			{
				eleInputs = eleForms[intCounter].getElementsByTagName("input");
				eleTextAreas = eleForms[intCounter].getElementsByTagName("textarea");
				eleSelect = eleForms[intCounter].getElementsByTagName("select");
				
				applyFunctionToFormElements(eleInputs);
				applyFunctionToFormElements(eleTextAreas);
				applyFunctionToFormElements(eleSelect);
			}
	}
}
	
function applyFunctionToFormElements(htmlObjectCollection)
{

	for (var intCounter = 0; intCounter < htmlObjectCollection.length; intCounter++)
		{
			if (htmlObjectCollection[intCounter].type != 'submit' &&
                htmlObjectCollection[intCounter].type != 'button')
			{
				htmlObjectCollection[intCounter].onfocus = function applyFormat()
					{
						clearFieldsetsAndLabels();
						
						var fieldset =	Tools.getLastChild(this.parentNode.parentNode.parentNode.parentNode, function (node) {
                                        return (Tools.isElement(node) &&
                                        ((node.nodeName == 'FIELDSET') || (node.nodeName == 'fieldset')));
                                        });
                                        
                        var fieldset_tbl =	Tools.getLastChild(this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode, function (node) {
                                        return (Tools.isElement(node) &&
                                        ((node.nodeName == 'FIELDSET') || (node.nodeName == 'fieldset')));
                                        }); 
                                        
                        var label =	Tools.getLastChild(this.parentNode, function (node) {
                                        return (Tools.isElement(node) &&
                                        ((node.nodeName == 'LABEL') || (node.nodeName == 'label')));
                                        });
                                                          
                        if (label !=null)
					    {
					        label.style.fontWeight = "bold";
					    }   
					    
					    if (fieldset !=null)
					    {
					        fieldset.className = "fieldsetHighlight";
					    } 
					    
					    if (fieldset_tbl !=null)
					    {
					        fieldset_tbl.className = "fieldsetHighlight";
					    }                              
                        
					}
			}
		}
}	

function realPreviousSibling(node){
  var tempNode=node.previousSibling;
  if (tempNode !=null) {
    while(tempNode.nodeType!=1){
        alert(tempNode.nodeType);
        tempNode=tempNode.previousSibling;
    }  
    return tempNode;
  }
  else { 
        return null;
       }      
}

function isLabel(node) {
    return Tools.isElement(node, 'label');
}

var Tools = function () {
    return {
    createElementCallback: function (tagName) {
        return function (node) {
        return isElement(node, tagName);
    };
    },
    getFirstChild: function (parent, test) {
        var node = parent.firstChild;

        if (node) return test(node) ? node : this.getNextSibling(node, test);
        return null;
    },
    getLastChild: function (parent, test) {
        var node = parent.lastChild;

        if (node) return test(node) ? node : this.getPreviousSibling(node, test);
        return null;
    },
    getNextSibling: function (node, test) {
        while ((node = node.nextSibling))
        if (test(node)) return node;
        return null;
    },
    getPreviousSibling: function (node, test) {
        while ((node = node.previousSibling))
        if (test(node)) return node;
        return null;
    },
    isElement: isElement
};

function isElement(node, tagName) {
    return (node.nodeType == 1)
    && (tagName ? (node.nodeName == tagName) : (node.nodeName != '!'));
    }
}();

function clearFieldsetsAndLabels()
{
	var eleDiv;
 	var eleFieldsets;
 	var eleLabels;

	eleDiv = document.getElementById("content");	
	eleFieldsets = eleDiv.getElementsByTagName("fieldset");
	eleLabels = eleDiv.getElementsByTagName("label");
	//eleInput = eleDiv.getElementsByTagName("input");
	//clearEle(eleInput);	
	clearEle(eleLabels);
	clearEle(eleFieldsets);
}
	
function clearEle(elements)
{
	for (var intCounter = 0; intCounter < elements.length; intCounter++)
		{
		       	//elements[intCounter].className = "";
		       	//alert(elements[intCounter].nodeName);		       
		       	if (elements[intCounter].nodeName == "FIELDSET")
		       	{
		       	    //alert(elements[intCounter].nodeName);
		       	    elements[intCounter].className = "fieldsetNormal";
		       	    //elements[intCounter].style.backgroundColor = fieldset_normal;
		       	    
		       	}
		       	else if (elements[intCounter].nodeName == "LABEL")
		       	{	
    		       	elements[intCounter].style.fontWeight = "normal";	       			       	
    		    }
    		    
		}
}

function swapImage(img){

    elePhoto = document.getElementById("main_photo");
    if (img !=null){
    //alert(img.href);
        elePhoto.src = img.href;
    }

}
