/*	wt.js
	2007, santiago bustelo
	*/

var annoy=true; function debug(msg){if(annoy){annoy=confirm(msg);};}
function spot(obj){
AddClass(obj,"spot")
}

function cloneObj(what,pathMolde,pathDonde,mantenerValores){
	var mantenerValores = mantenerValores ? mantenerValores : false;
	var molde = resolveCSSpath( what, pathMolde )
		//spot( $(molde) ); debug( molde + " : " + molde.id )
	var donde = resolveCSSpath( what, pathDonde )

	var nuevo = DOMcloneMake(molde,donde,"after")

	if( !mantenerValores ){
		//reseteamos los valores del nuevo campo
		var newInputs = $(nuevo).getElementsByTagName( "input" );
		for( var i = 0; i<newInputs.length; i++){
			var fb = newInputs[i];
			switch(fb.type){
					case "text"||"hidden"||"password":
						fb.value="";
						break;
					case "checkbox"||"radio":
						fb.checked=false;
						break;
				}//end switch
		}//end for in newInputs

		//reseteamos los valores del nuevo campo
		var newInputs = $(nuevo).getElementsByTagName( "select" );
		for( var i = 0; i<newInputs.length; i++){
			var fb = newInputs[i];
			if(fb.options[0].value==""){
				fb.selectedIndex = 0;
			}else{
				fb.selectedIndex = -1;
			}
		}//end for in newInputs
	}//end mantenerValores

	KillClass(nuevo,"first")

	return false;
}

function cloneObj2(what,pathMolde,pathDonde,mantenerValores){
	var mantenerValores = mantenerValores ? mantenerValores : false;
	var molde = resolveCSSpath( what, pathMolde )
		//spot( $(molde) ); debug( molde + " : " + molde.id )
	var donde = resolveCSSpath( what, pathDonde )

	var nuevo = DOMcloneMake2(molde,donde,"after")

	if( !mantenerValores ){
		//reseteamos los valores del nuevo campo
		var newInputs = $(nuevo).getElementsByTagName( "input" );
		for( var i = 0; i<newInputs.length; i++){
			var fb = newInputs[i];
			switch(fb.type){
					case "text"||"hidden"||"password":
						fb.value="";
						break;
					case "checkbox"||"radio":
						fb.checked=false;
						break;
				}//end switch
		}//end for in newInputs

		//reseteamos los valores del nuevo campo
		var newInputs = $(nuevo).getElementsByTagName( "select" );
		for( var i = 0; i<newInputs.length; i++){
			var fb = newInputs[i];
			if(fb.options[0].value==""){
				fb.selectedIndex = 0;
			}else{
				fb.selectedIndex = -1;
			}
		}//end for in newInputs
	}//end mantenerValores

	KillClass(nuevo,"first")

	return false;
}


function killObj(what,pathMolde){ //eliminar un campo
	var molde = resolveCSSpath( what, pathMolde );
	rmDOM(molde)
	return false;
}



function processHomeQuote(setStatus){ //setStatus = 0 (reset), 1 (process:busy), 2(done)

	KillClass('mainNeck','isQuestion');
	KillClass('mainNeck','isBusy');
	KillClass('mainNeck','isAnswer');

	switch(setStatus){
		case 0:
			AddClass('mainNeck','isQuestion');
			break;
		case 1:
			AddClass('mainNeck','isBusy');

			/* Proceso ajax */

			myUpdater = new Ajax.Updater('homeIQuoteAnswer', '../ajax/ajax_quotation.php', {
                method: 'post',
                parameters: $('homeQuotation').serialize(true),
                onComplete: function() {
                                if (myUpdater.getHeader('Content-Type') == 'text/html; charset=UTF-8'){
                                    processHomeQuote(2);
                                }
                              }
            });

			break;
		case 2:
			AddClass('mainNeck','isAnswer');
			break;
	};//end switch(setStatus)

return false;

}








/* FORM input/select value fns */

function getValue(fvinput){
var fvinput=$(fvinput);
var fviValue;
	switch(fvinput.type){
	case "text"||"hidden"||"textarea":
		fviValue=fvinput.value
		break;
	case "checkbox":
		fviValue=fvinput.checked?1:0
		break;
	case "radio":
		break;
	case "select-one":
		var sx = fvinput.selectedIndex;
		if(sx<0)return false;
		fviValue=fvinput[sx].value
		break;
	}
return fviValue;
}


function setValue(s,v){
	switch(s.type){
	case "text"||"hidden"||"textarea":
		s.value=v
		break;
	case "checkbox":
		s.checked=v
		break;
	case "radio":
		break;
	case "select-one":
		setSelect(s,v)
		break;
	}
}

function getText(fvinput){
var fviValue="";
	switch(fvinput.type){
	case "select-one":
		if( fvinput[fvinput.selectedIndex] )
		fviValue=fvinput[fvinput.selectedIndex].text
		break;
	default:
		fviValue=fvinput.value
	}
return fviValue;
}

function getTextFromValue(s,v){
var so=s.options
for(var i=0;i<so.length;i++){
	if(so[i].value==v){return so[i].text;}
	}//end for
}

function setSelect(s,v){//set selectedIndex on s to the one holding value
var so=s.options
for(var i=0;i<so.length;i++){
	if(so[i].value==v){
		s.selectedIndex=i;return;
		}//end if so
	}//end for
//value was not found
if(v==""){	//try again recursively using "0"
	setSelect(s,"0")
	}else{
	s.selectedIndex=-1;
	}
}


/* DOM fns */

function rmDOM(elm){return elm.parentNode.removeChild(elm);}

//event handlers
//from http://www.scottandrew.com/weblog/articles/cbs-events
function addEvent(obj,evType,fn,useCapture){if(obj.addEventListener){obj.addEventListener(evType,fn,useCapture);return true;}else if(obj.attachEvent){var r=obj.attachEvent("on"+evType,fn);return r;}else{window.status="Handler could not be attached";};}
function removeEvent(obj,evType,fn,useCapture){if(obj.removeEventListener){obj.removeEventListener(evType,fn,useCapture);return true;}else if(obj.detachEvent){var r=obj.detachEvent("on"+evType,fn);return r;}else{window.status="Handler could not be removed";};}


function setvis(l,v){$(l).style.display = v?"":"none";}
function getvis(l){return !($(l).style.display=="none");}


function resolveCSSpath(e,c){
var e=$(e);
c=c.split(" ");

for(var i=0;i<c.length;i++){
	var cis = c[i].split(":")
	var num = cis[1]?cis[1]:"0"
	var ci=cis[0]

	if(ci=="<"){
		e=e.parentNode;
	}else if(ci.charAt(0)=="#"){
		e=document.getElementById( ci.substring(1) );
		if(!e){return false;};
	}else if(ci.charAt(0)=="."){
	var a=e.childNodes;var t=ci.substring(1);var d=false;
		for(var b=0;b<a.length;b++){
		if(HasClass(a[b],t)){d=a[b];break;};
		};
		if(d){e=d;}else{return false;};
	}else if(ci.charAt(0)=="<"){
		e=FindTagClassUp(e.parentNode,ci.substring(1),"BODY");
		if(!e){return false;};
	}else{
	var a = e.getElementsByTagName( ci.toLowerCase() );
		if(a.length>0){
			if(num=="0"){e=a[0];
			}else if(num=="last"||num>a.length){
			e=a[a.length-1]
			}else{
			e=a[num]
			}
		}else{
			var a = document.getElementsByName(ci);
			if( a[0] ){ e=a[0]; }else{return false;};
		};
	};
	};
	return e;
};

function FindTagClassUp(elm,tcsearch,tclimit){

var tc=(tcsearch+".").split(".");tc[0]=tc[0].toUpperCase();
if(!tclimit){tclimit="BODY";};
var tz=(tclimit+".").split(".");tz[0]=tz[0].toUpperCase();
	while(n=elm.nodeName){
		if(tc[0]==""||n==tc[0]){
			if(tc[1]==""||HasClass(elm,tc[1])){return elm;};};
		if(tz[0]==""||n==tz[0]){
			if(tz[1]==""||HasClass(elm,tz[1])){return false;};};
		elm=elm.parentNode;
	};
	//dump("CANNOT GET NODENAME: ",elm);
	return false;
};


function checkForm2(f){
if(!document.getElementById){return;}
var oktosend=true;var fs=f.elements

for(var i=0;i<fs.length;i++){
	if(fs[i].type&&fs[i].name&&!fs[i].disabled){

	//get field value
	var ftype=fs[i].type;var efilter=false
	if(ftype=="text"||ftype=="textarea"||ftype=="password"){
		v=fs[i].value
		}else if(ftype=="select-one"||ftype=="select-multiple"){
		v=fs[i][fs[i].selectedIndex].value
		}else if(ftype=="checkbox"){
		v=fs[i].checked
		}else if(ftype=="radio"){
			v= getRadioValue( f[ fs[i].name ] )
		}else{
			v="!"//other types, don't check
		}
		var isfilled=isvalid=(v!="");

	//special fields:
		if(fs[i].name&&fs[i].name.indexOf("mail")>-1 ||
		fs[i].name&&fs[i].name=="address" ){ftype="email";efilter=true;}
		if(efilter){isvalid=isValidField(v,ftype);}

	//is required, or need to check if filled?
	var reqelm=FindTagClassUp(fs[i],".required","form")//FindClassUp(fs[i],"required","form")
	if(!reqelm&&efilter&&isfilled){
		reqelm=FindTagClassUp(fs[i],".field","form");//FindClassUp(fs[i],"field","form");
		if(!reqelm){reqelm=fs[i];}
		}

	if(!isvalid&&reqelm){
		/*
		if(oktosend&&(ftype.indexOf("text")>-1||ftype.indexOf("select")>-1) ){
			fs[i].select();
			}
			//error in ie6
			*/
		oktosend=false
		fs[i].onclick=rmErrorClass;fs[i].onfocus=rmErrorClass;fs[i].onkeydown=rmErrorClass;
		AddClass(reqelm,"error");
	}
	}//end filter fs
}//end for i in fs

return oktosend;
}



function checkForm(f){
if(!document.getElementById){return true;}//can't check form

var oktosend=true;
var fs=f.elements
for(var i=0;i<fs.length;i++){
	if(fs[i].type&&fs[i].name){
	//get field value

	var ftype=fs[i].type;var efilter=false
	if(ftype=="text"||ftype=="textarea"){
		v=fs[i].value
		}else if(ftype=="select-one"||ftype=="select-multiple"){
			v=fs[i][fs[i].selectedIndex].value
		}else if(ftype=="checkbox"){
			//check at least one checkbox checked in each checkbos group (sharing "name")
			v=typeof ( getRadioValue( f[fs[i].name] ) )!="undefined" && getRadioValue( f[fs[i].name] )
		}else if(ftype=="radio"){
			v=typeof ( getRadioValue( f[fs[i].name] ) )!="undefined" && getRadioValue( f[fs[i].name] )
		}else{
			v="!"//other types, don't check
		}
		var isfilled=isvalid=(v!="");

//		if( /other|optional/gi.test( fs[i].name ) ){ isvalid=true; }

	//special fields:
		if(fs[i].name&&fs[i].name.indexOf("mail")>-1){ftype="email";efilter=true;}
		if(efilter){isvalid=isValidField(v,ftype);}

	//is required, or need to check if filled?
	var reqelm=FindTagClassUp(fs[i],".required","form")
	if(!reqelm&&efilter&&isfilled){
		reqelm=FindTagClassUp(fs[i],".field","form");
		if(!reqelm){reqelm=fs[i];}
		}

	if(!isvalid&&reqelm){
		//if(oktosend&&(ftype.indexOf("mail")>-1||ftype.indexOf("text")>-1||ftype.indexOf("select")>-1) ){fs[i].select();}
		oktosend=false
		fs[i].onclick=rmErrorClass;fs[i].onkeydown=rmErrorClass;
		AddClass(reqelm,"error");
	}

	}//end filter fs
}//end for i in fs
return oktosend;
}


function enviarFormulario(f){
    if (checkForm(f)){
        f.submit();
    }
}



function getRadioValue(r){
if(!r.length){//only one element
	return(r.checked)
}else{//multiple grouped elements
	for(var i=0;i<r.length;i++){
	if(r[i].checked){return r[i].value;}
	}
}
}


function rmErrorClass(event){
var elm=this;var etag=FindTagClassUp(elm,".error","form");if(!etag){etag=FindTagClassUp(elm,"field","form");};if(!etag){etag=elm}
if(etag){KillClass(etag,"error");elm.onclick=null;elm.onfocus=null;elm.onkeyup=null}
}

function isValidField(t,k){
if(k=="email"){
	if( t.indexOf("@example.com")>-1){return false;};
	var emailFilter=/^.+@.+\..{2,}$/;
	var illegalChars= /[\(\)\<\>\,\;\:\\\/\"\[\]]/
	if(!(emailFilter.test(t))||t.match(illegalChars)){return(false);}else{return (true);}
	return false
	}//end email
}







function DOMcloneMake2(molde,donde,posicion){
	var parentobj = molde.parentNode;
	var copia=molde.cloneNode(true);
	var mid=molde.id
	var mida = mid.replace(/(\d+)/gi, "|$1|").split("|")

	//loop until we find an unused ID
	var midaz= Number(mida[mida.length-2]);var newid;
	while(true){
		mida[mida.length-2] = midaz++;
		newid = mida.join("")
		if(!document.getElementById(newid)){
			break;
		}
	}



var donde=donde?donde:parentobj
var posicion=posicion?posicion:'after'
if(posicion=='after'){
donde.appendChild(copia)
}else if(posicion=='before'){
donde.parentNode.insertBefore(copia,donde)
}
//parentobj.insertBefore(copia,molde.nextSibling);
	/*Element.hide(copia)
	new Effect.Appear(copia);*/
/*if( $(newid) ){
	Element.hide($(newid))
	new Effect.Appear($(newid));
}*/

return newid;
}

function DOMcloneMake(molde,donde,posicion){
	var parentobj = molde.parentNode;
	var copia=molde.cloneNode(true);
	var mid=molde.id
	var mida = mid.replace(/(\d+)/gi, "|$1|").split("|")

	//loop until we find an unused ID
	var midaz= Number(mida[mida.length-2]);var newid;
	while(true){
		mida[mida.length-2] = midaz++;
		newid = mida.join("")
		if(!document.getElementById(newid)){
			break;
		}
	}

//assign new IDs to clone's ID & children elements
//copia.id=newid
grepIDs(copia,new RegExp(mid, "gi"),newid)

		function grepIDs(e,oldid,newid){
		if(e.id){
			e.oldid = e.id;
			e.id = e.id.replace(oldid,newid); }
		if(e.name){ e.name = e.name.replace(oldid,newid); }
		if(e.type&&e.id!=""){//set VALUEs of form items with ID
			setValue( e, getValue(e.oldid) )
			}
		//gonna find childnodes
		var kids=e.childNodes
		if(kids){//recursion for child nodes
				for(var i=0;i<kids.length;i++){
				grepIDs(kids[i],oldid,newid)
				}//end for
			}//end if kids
		}//end grepIDs
//add element to document

//KillClass(copia,"first")

var donde=donde?donde:parentobj
var posicion=posicion?posicion:'after'
if(posicion=='after'){
donde.appendChild(copia)
}else if(posicion=='before'){
donde.parentNode.insertBefore(copia,donde)
}
//parentobj.insertBefore(copia,molde.nextSibling);
	/*Element.hide(copia)
	new Effect.Appear(copia);*/
/*if( $(newid) ){
	Element.hide($(newid))
	new Effect.Appear($(newid));
}*/

return newid;
}


function setvis(l,v){$(l).style.display = v?"":"none";}
function getvis(l){return !($(l).style.display=="none");}
function togglevis(){
	for(var i=0;i<arguments.length;i++){
		var l = arguments[i];
		setvis( l,!getvis(l) );
	};
}


//prototype $ function
/*
function $(){var elements = new Array();for(var i=0;i<arguments.length;i++){var element=arguments[i];if(typeof element=='string'){element = document.getElementById(element);};if(arguments.length==1){return element;};elements.push(element);};return elements;}
*/
//*** This code is copyright 2002-2003 by Gavin Kistner and Refinery; www.refinery.com
//*** It is covered under the license viewable at http://phrogz.net/JS/_ReuseLicense.txt
//*** change by Santiago Bustelo, apr2007: pre-process obj as $(obj)
function AddClass(obj,cName){var obj=$(obj);KillClass(obj,cName);return obj&&(obj.className+=(obj.className.length>0?' ':'')+cName);}
function KillClass(obj,cName){var obj=$(obj);return obj&&(obj.className=obj.className.replace(new RegExp("^"+cName+"\\b\\s*|\\s*\\b"+cName+"\\b",'g'),''));}
function HasClass(obj,cName){var obj=$(obj);return(!obj||!obj.className)?false:(new RegExp("\\b"+cName+"\\b")).test(obj.className);}





//yellow fade links
//full original source: http://www.yourtotalsite.com/archives/javascript/yellowfade_technique_for/Default.aspx
//fixes by Santiago Bustelo, apr2007: don't process links with empty hashes, use addEvent to assign A.onclick

var FadeInterval = 600; var StartFadeAt = 7;
var FadeSteps = new Array("ff","ff","ee","dd","cc","bb","aa","99");

var W3CDOM = (document.createElement && document.getElementsByTagName);
addEvent(window, 'load', initFades);

function initFades(){
	if (!W3CDOM) return;
    var currentURL = unescape(window.location);
    if (currentURL.indexOf('#')>-1){
        DoFade(StartFadeAt, currentURL.substring(currentURL.indexOf('#')+1,currentURL.length));
        }
    var anchors = document.body.getElementsByTagName('a');
    for (var i=0;i<anchors.length;i++){
        if ( anchors[i].href.indexOf('#')>-1 && anchors[i].href!="#"){//fixed by Santiago Bustelo, apr2007: dont process empty hashes
	        addEvent( anchors[i], 'click', function(){Highlight(this.href);return true} ) //fixed by Santiago Bustelo, apr2007: use addEvent function for onclick handler
            //anchors[i].onclick = function(){Highlight(this.href);return true}; //original onclick assignment
            }
	}
}

function Highlight(target) {
    var targetId = target.substring(target.indexOf('#')+1,target.length);
    DoFade(StartFadeAt, targetId);

}

function DoFade(colorId, targetId) {
    if(targetId!="mainBody" && $(targetId)){ //fixed by Santiago Bustelo, apr2007: don't hightlight "back to top" links, don't try to highlight non-existent IDs
		if (colorId >= 1) {
			document.getElementById(targetId).style.backgroundColor = "#ffff" + FadeSteps[colorId];
			if (colorId==1) {
				document.getElementById(targetId).style.backgroundColor = "transparent";
			}
			colorId--;
			setTimeout("DoFade("+colorId+",'"+targetId+"')", FadeInterval);
		}//endif colorId >= 1
	};//end if targetId!="mainBody
}

