
String.prototype.trim = function()
{ return this.replace(/(^\s*)|(\s*$)/g, ""); }


String.prototype.listAppend = function(toAppend, separator)
{
	if (this == "")
		return toAppend ;
	
	return this + separator + toAppend ;
}

String.prototype.trimSpacesNum = function()
{ return this.replace(/(^[\s\,\?\.\;\:\+\=\-\%\*\$\@\#\&\"\'\!\(\)\/\\[0-9]*)|([\s\,\?\.\;\:\+\=\-\%\*\$\@\#\&\"\'\!\(\)\/\\[0-9]*$)/g, ""); }

String.prototype.unentitify = function()
{
  var eacute_re = /&eacute;/g ;
  var egrave_re = /&egrave;/g ;
  var agrave_re = /&agrave;/g ;

  return this.replace(eacute_re,"é").replace(egrave_re,"è").replace(agrave_re,"à");
}

function setInputTextError( errorMsgID, errorValue, itemID, classNoError, classError)
{
	var item = $("#" + itemID) ;
	var error = $("#" + errorMsgID) ;
	
	if (error != null)
		error.html( errorValue ) ;
	
	if (item != null) {
		if ((errorValue == null) || (errorValue == "")) {
			item.addClass(classNoError) ;
			item.removeClass(classError) ;
		}
		else {
			item.removeClass(classNoError) ;
			item.addClass(classError) ;
		}
	}
}

function clearInputTextError(errorFieldID, inputFieldID, classInput, classInputError)
{
	if (classInput == null) classInput = "TextInput" ;
	if (classInputError == null) classInputError = "TextInputError" ;
	
	var errorField = $("#" + errorFieldID) ;
	
	if (errorField != null) errorField.html( "" ) ;

	var inputField = $("#" + inputFieldID) ;
	
	if (inputField != null) {
		inputField.addClass(classInput) ;
		inputField.removeClass(classInputError) ;
	}
}

function capsLock(theEvent, theElementID)
{
	if ($.browser.safari) return ;
	
	e = (theEvent) ? theEvent : window.event;
	kc = e.keyCode? e.keyCode:e.which;
	sk = e.shiftKey?e.shiftKey:((kc == 16)?true:false);
	if ( ((kc >= 65 && kc <= 90) && !sk) || ((kc >= 97 && kc <= 122) && sk) )
		$("#"+theElementID).show() ;
	else
		$("#"+theElementID).hide();
}

function noEnter(e)
{
	var characterCode ;
	
	 if(e && e.which){
	 	characterCode = e.which ;
	 }
	 else {
	 	characterCode = e.keyCode ;
	 }	 
	 if(characterCode == 13){
 	 	return false ;
	 }
	 else {
	 	return true ;
	 }
}

function valueOfXMLElement(xmlDoc, tagName)
{
	var items = xmlDoc.getElementsByTagName(tagName) ;
	if ((items != null) && (items.length > 0)) {
		if (items[0].firstChild)
			return items[0].firstChild.nodeValue ;
	}
	return "" ;
}

function validEuropeanDate(ddmmyyStr) {
		var ok, testMo, testDay, testYr, inpMo, inpDay, inpYr;
		var testDate  ;
	   
		inpDay = parseInt(ddmmyyStr.substring(0, ddmmyyStr.indexOf("/")), 10);
		inpMo = parseInt(ddmmyyStr.substring((ddmmyyStr.indexOf("/") + 1), ddmmyyStr.lastIndexOf("/")), 10) ;
		inpYr = parseInt(ddmmyyStr.substring((ddmmyyStr.lastIndexOf("/") + 1), ddmmyyStr.length), 10);

		if ( isNaN(inpDay) || isNaN(inpMo) || isNaN(inpYr) )
			return false ;
			
		testDate = new Date(inpYr, inpMo-1, inpDay);

		// extract pieces from date object
		testMo = testDate.getMonth() + 1;
		testDay = testDate.getDate();
		testYr = testDate.getFullYear();

		return (testMo == inpMo) && (testDay == inpDay) && (testYr == inpYr)      ;
}

function validEuropeanBirthDate(ddmmyyStr) {
		var ok, testMo, testDay, testYr, inpMo, inpDay, inpYr;
		var testDate  ;
	   
		inpDay = parseInt(ddmmyyStr.substring(0, ddmmyyStr.indexOf("/")), 10);
		inpMo = parseInt(ddmmyyStr.substring((ddmmyyStr.indexOf("/") + 1), ddmmyyStr.lastIndexOf("/")), 10) ;
		inpYr = parseInt(ddmmyyStr.substring((ddmmyyStr.lastIndexOf("/") + 1), ddmmyyStr.length), 10);

		if ( isNaN(inpDay) || isNaN(inpMo) || isNaN(inpYr) )
			return false ;
		
		var now = new Date() ;
		var nowYear = now.getYear() + 1900 ;
		
		if ( (inpYr > nowYear - 14) || (inpYr < 1900) )
			return false ;
			
		testDate = new Date(inpYr, inpMo-1, inpDay);

		// extract pieces from date object
		testMo = testDate.getMonth() + 1;
		testDay = testDate.getDate();
		testYr = testDate.getFullYear();

		return (testMo == inpMo) && (testDay == inpDay) && (testYr == inpYr)      ;
}

function dateFromEuropeanToSQL( ddmmyyyyStr ) {
	var inpMo, inpDay, inpYr;

	if ((ddmmyyyyStr == "" ) || (ddmmyyyyStr == null))
		return "" ;
		
	inpDay = parseInt(ddmmyyyyStr.substring(0, ddmmyyyyStr.indexOf("/")), 10);
	inpMo = parseInt(ddmmyyyyStr.substring((ddmmyyyyStr.indexOf("/") + 1), ddmmyyyyStr.lastIndexOf("/")), 10) ;
	inpYr = parseInt(ddmmyyyyStr.substring((ddmmyyyyStr.lastIndexOf("/") + 1), ddmmyyyyStr.length), 10);

	return inpYr + "-" + inpMo + "-" + inpDay ;     
}

function dateFromSQLToEuropean( yyyymmddStr ) {
	var inpMo, inpDay, inpYr;

	if ((yyyymmddStr == "" ) || (yyyymmddStr == null))
		return "" ;
		
	inpYr = parseInt(yyyymmddStr.substring(0, yyyymmddStr.indexOf("-")), 10);
	inpMo = parseInt(yyyymmddStr.substring((yyyymmddStr.indexOf("-") + 1), yyyymmddStr.lastIndexOf("-")), 10) ;
	inpDay = parseInt(yyyymmddStr.substring((yyyymmddStr.lastIndexOf("-") + 1), yyyymmddStr.length), 10);

	return inpDay + "/" + inppMo + "/" + inpYr ;     
}

function userSelectCity()
{
	var clientPostCode = $("#clientPostCode") ;
	var clientCitySelect = $("#clientCitySelect") ;
	var clientCity = $("#clientCity") ;
	
	var zipCity = clientCitySelect.val() ;
	var oldZip = clientPostCode.val() ;
    var oldName = clientCity.val() ;

    var splitIndex = zipCity.indexOf(" : ")	;
    
	clientPostCode.val( zipCity.slice(0, splitIndex) ) ;
	clientCity.val( zipCity.slice(splitIndex+3) ) ;
    
    if ((oldZip != clientPostCode.val()) || (oldName != clientCity.val()))
        getCitiesWhileTyping(true) ;

	return true ;
}

function getCitiesWhileTyping(fromUserSelectCity) 
{
    var country = $("#clientCountry").val() ;
    var zip = $("#clientPostCode").val() ;    
  
    if (country != "----") {
		$.get("admin/zipcheck.php", { dataType: "xml", c: country, z: zip }, function(xmlReturnVal){ 
			if (xmlReturnVal != null) {            
                try {
                    var div = $("#clientCityField");
					$("#clientCitySelect").remove() ;
                        
					result = xmlReturnVal.documentElement ;
					cities = $("city", result) ;

                    if (cities.length == 0) {
						$("#clientCity").val("") ;
					}
                    else if (cities.length == 1) {
	                	$("#clientCity").val( cities[0].getAttribute('name') ) ;
	                	$("#clientPostCode").val( cities[0].getAttribute('zip') ) ;
					}
					else {
						var el = document.createElement("select");
						
						el.setAttribute("id","clientCitySelect");
						el.setAttribute("name","clientCitySelect");
                        // el.setAttribute("onchange","userSelectCity()") ;
						div.append(el) ;
						el = $("#clientCitySelect") ;
						el.change( function() { userSelectCity(); } ) ;
                        var curCityName = $("#clientCity").val() ;
						var selected = null ;
						
						for(var h = 0; h < cities.length; h++) {
							// THIS DOESN'T WORK UNDER IE !!!! WHY ????
						    // var newOption = document.createElement("option") ;
						   // newOption.text = cities[h].getAttribute('zip') + " : " + cities[h].getAttribute('name') ;
						   // newOption.setAttribute("value", newOption.text);
							// el.appendChild(newOption);
							var name = cities[h].getAttribute('name') ;
							var t = cities[h].getAttribute('zip') + " : " + name ;
							if (fromUserSelectCity == true) {
								if (curCityName == name) selected = t ;
							}
							else {
								if (h == 0) selected = t ;
							}
							
							el.addOption(t, t) ;
						}
						el.selectOptions(selected, true) ;						
						el.width(130) ;
                     }
                 }
                 catch(errv) {
                    // alert("1 " + errv);
                 }
			}
		});
    }    
}

function dump(arr,level) 
{
	var dumped_text = "";
	if(!level) level = 0;

	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "	";

	if(typeof(arr) == 'object') { //Array/Hashes/Objects
		for(var item in arr) {
			var value = arr[item];
 
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} 
			else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	}
	else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}
